]> git.llucax.com Git - mecon/ai.git/blob - sistema/www/index.php
a497965c5fe490f6d4761fe7fbc4632a70b332f1
[mecon/ai.git] / sistema / www / index.php
1 <?php
2 // vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker:
3 // +--------------------------------------------------------------------+
4 // |                      Ministerio de Economía                        |
5 // |                  AI (Administrador de Intranet)                    |
6 // +--------------------------------------------------------------------+
7 // | This file is part of AI.                                           |
8 // |                                                                    |
9 // | AI is free software; you can redistribute it and/or modify         |
10 // | it under the terms of the GNU General Public License as published  |
11 // | by the Free Software Foundation; either version 2 of the License,  |
12 // | or (at your option) any later version.                             |
13 // |                                                                    |
14 // | AI is distributed in the hope that it will be useful, but          |
15 // | WITHOUT ANY WARRANTY; without even the implied warranty of         |
16 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
17 // | General Public License for more details.                           |
18 // |                                                                    |
19 // | You should have received a copy of the GNU General Public License  |
20 // | along with Hooks; if not, write to the Free Software Foundation,   |
21 // | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
22 // +--------------------------------------------------------------------+
23 // | Creado: vie jun 27 17:08:18 ART 2003                               |
24 // | Autor:  Leandro Lucarella <llucar@mecon.gov.ar>                    |
25 // +--------------------------------------------------------------------+
26 //
27 // $Id$
28 //
29
30 require_once 'MECON/HTML/Error.php';
31
32 // Debug. {{{
33 require_once 'PEAR.php';
34 #PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
35 PEAR::setErrorHandling(PEAR_ERROR_RETURN);
36 // }}}
37
38 // Creo el Marco. {{{
39 require_once 'MECON/Marco.php';
40 $marco = new Marco('../conf/Marco.php');
41 // }}}
42
43 // Averiguo si estoy administrando algún tipo de objeto. XXX - desafear {{{
44 $tipo = null;
45 if (@$_SERVER['PATH_INFO']) {
46     $tmp = ltrim($_SERVER['PATH_INFO'], '/');
47     if ($tmp == 'grupo') {
48         $tipo    = $tmp;
49         $clase   = "AI_GrupoSecciones";
50         $require = 'AI/GrupoSecciones.php';
51         $tabla   = 'grupo_secciones';
52         $nombre  = "grupo de secciones";
53         $arbol   = 'NOTICIAS';
54     } elseif ($tmp == 'servicio') {
55         $tipo    = $tmp;
56         $clase   = 'AI_Servicio';
57         $require = 'AI/Servicio.php';
58         $tabla   = $tipo;
59         $nombre  = $tipo;
60         $arbol   = 'SERVICIOS';
61     } elseif ($tmp == 'sistema') {
62         $tipo    = $tmp;
63         $clase   = 'AI_Sistema';
64         $require = 'AI/Sistema.php';
65         $tabla   = $tipo;
66         $nombre  = $tipo;
67         $arbol   = 'SISTEMAS';
68     } else { // No hay un objeto válido para administrar.
69         header('Location: '.$_SERVER['SCRIPT_NAME']);
70     }
71 }
72 // }}}
73
74 // Si tiene un tipo, estamos administrando algun objeto. {{{
75 if ($tipo) {
76
77     // Creo formulario. {{{
78     require_once 'AI/Form.php';
79     $form =& new AI_Form;
80     // }}}
81
82     // Creo un objeto y seteo su id. {{{
83     require_once $require;
84     $obj = new $clase;
85     $obj->$tipo = @$_REQUEST['id'];
86     // }}}
87
88     // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
89     switch(@$_REQUEST['accion']) {
90         case AI_BAJA:
91         case AI_MODIF:
92             $accion = $_REQUEST['accion'];
93             break;
94         default:
95             $accion = AI_ALTA;
96     }
97     // }}}
98
99     // Modifico la acción si ya se envió el formulario. {{{
100     $botones = $form->getSubmitValue('botones');
101     if ($boton = @join('', array_keys($botones))) {
102         $boton = $boton . '_' . strtolower($botones[$boton]);
103     }
104     switch ($boton) {
105         case 'aceptar_agregar':
106             $accion = AI_ALTA;
107             break;
108         case 'modificar_borrar':
109             // Viene de modificar,  hay que confirmar primero.
110             $a_confirmar = true;
111         case 'aceptar_borrar':
112             $accion = AI_BAJA;
113             $obj->$tipo = $form->getSubmitValue($tipo);
114             break;
115         case 'borrar_cancelar':
116             // Indico que viene de un formulario cancelado.
117             $cancelado = true;
118         case 'aceptar_modificar':
119             $accion = AI_MODIF;
120             $obj->$tipo = $form->getSubmitValue($tipo);
121             break;
122     }
123     // }}}
124
125     // Creo la base de datos. {{{
126     require_once 'AI/DB.php';
127     $db =& AI_DB::connect('../conf/DB.ini');
128     if (DB::isError($db)) {
129         die($db->getMessage());
130     }
131     // }}}
132
133     // Inicio el formulario, cargando datos de ser necesario. {{{
134     if ($accion & (AI_BAJA | AI_MODIF)) {
135         $err =& $obj->cargar($db);
136         if (PEAR::isError($err)) {
137             die($err->getMessage());
138         }
139         $form->iniciar($obj, $accion);
140     } else {
141         $accion = AI_ALTA;
142         $form->iniciar($obj);
143     }
144     // }}}
145
146     // Freezo el formulario si se está confirmando. {{{
147     if (@$a_confirmar) {
148         $form->freeze();
149     }
150     // }}}
151
152     // Si los datos del formulario son válidos, hago el ABM. {{{
153     if ($form->validate()) {
154         switch ($accion) {
155             case AI_ALTA: // {{{
156                 $form->llenarObjeto($obj);
157                 $err =& $obj->guardar($db, true);
158                 if (PEAR::isError($err)) {
159                     if (DB::isError($err)
160                             and $err->getCode() == DB_ERROR_ALREADY_EXISTS) {
161                         $error = new MECON_HTML_Error(
162                             "Ya existe un $nombre con el identificador "
163                             . $obj->$tipo);
164                     } else {
165                         $error = new MECON_HTML_Error('Error no esperado: '
166                             . $err->getMessage());
167                     }
168                     $marco->addBody($error);
169                 } else {
170                     header(sprintf('Location: %s?accion=%d&id=%d',
171                         $tipo, AI_MODIF, $obj->$tipo));
172                     exit;
173                 }
174                 break;
175             // }}}
176             case AI_BAJA: // {{{
177                 if (!@$a_confirmar) {
178                     $form->llenarObjeto($obj);
179                     $err =& $obj->borrar($db);
180                     if (AI_Error::isError($err)
181                             and $err->getCode() == AI_ERROR_TIENE_HIJOS) {
182                         $error = new MECON_HTML_Error('No se puede borrar el '
183                             . $nombre . 'porque todavía tiene "hijos".'
184                             . ' Elimine todos los "hijos" y pruebe otra vez.');
185                         $marco->addBody($error);
186                     } elseif (PEAR::isError($err)) {
187                         $error = new MECON_HTML_Error('Error no esperado: '
188                             . $err->getMessage());
189                         $marco->addBody($error);
190                     } else {
191                         header("Location: $tipo");
192                         exit;
193                     }
194                 }
195                 break;
196             // }}}
197             case AI_MODIF: // {{{
198                 if (!@$cancelado) {
199                     $form->llenarObjeto($obj);
200                     $err =& $obj->guardar($db);
201                     if (PEAR::isError($err)) {
202                         $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage());
203                         $marco->addBody($error);
204                     } else {
205                         header(sprintf('Location: %s?accion=%d&id=%d',
206                             $tipo, AI_MODIF, $obj->$tipo));
207                         exit;
208                     }
209                 }
210                 break;
211             // }}}
212         }
213     }
214     // }}}
215
216     // Agrego el menu y el formulario a la página. {{{
217
218     // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{
219     require_once 'MECON/HTML/Arbol/ArbolDB.php';
220     $dbdata = array(
221         'db'            => &$db,
222         'tabla'         => $tabla,
223         'id'            => $tipo,
224         'nombre'        => 'nombre',
225         'prepend_link'  => $tipo.'?accion='.AI_MODIF.'&id=',
226         'order'         => 'asc',
227     );
228     if ($tipo == 'grupo' or $tipo == 'servicio') {
229         $dbdata['id_padre'] = $tipo . '_padre';
230     } elseif ($tipo == 'sistema') { // FIXME - horrible!!!
231         $dbdata =
232             array(
233                 'tabla'         => "intranet.$tabla as A, samurai.sistema as S",
234                 'id'            => "A.$tipo",
235                 'nombre'        => 'S.nombre_sistema',
236                 'where'         => 'S.id_sistema = A.sistema AND S.estado = 1',
237             )
238             + $dbdata;
239     }
240     $arbol = new HTML_ArbolDB($dbdata, $arbol);
241     $marco->addMenuVertical($arbol);
242     // }}}
243
244     // Agrego el formulario a la página. {{{
245     $marco->addBody($form);
246     // }}}
247
248     // }}}
249
250 // }}}
251
252 // No se está editando nada, agrego la imágen de bienvenida a la página. {{{
253 } else {
254     require_once 'HTML/Image.php';
255     $marco->setEspacios(false);
256     $marco->addBody(new HTML_Image('images/home', 'Adminitrador de Intranet'));
257 }
258 // }}}
259
260 // Muestro la página. {{{
261 $marco->display();
262 // }}}
263
264 ?>