]> git.llucax.com Git - mecon/ai.git/blob - sistema/www/index.php
438f132adc73c0dc88e1b1fc5f41b498c08a1f30
[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 require_once 'MECON/general.php';
32 prepend_include_path('/var/www/sistemas/ai/sistema/local_lib');
33
34 // Debug. {{{
35 require_once 'PEAR.php';
36 #PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
37 PEAR::setErrorHandling(PEAR_ERROR_RETURN);
38 // }}}
39
40 // Creo el Marco. {{{
41 require_once 'MECON/Marco.php';
42 $marco = new Marco('../conf/Marco.php');
43 // }}}
44
45 // Averiguo si estoy administrando algún tipo de objeto. XXX - desafear {{{
46 $tipo = null;
47 if (@$_SERVER['PATH_INFO']) {
48     $tmp = ltrim($_SERVER['PATH_INFO'], '/');
49     if ($tmp == 'grupo') {
50         $tipo    = $tmp;
51         $clase   = "AI_GrupoSecciones";
52         $require = 'AI/GrupoSecciones.php';
53         $tabla   = 'grupo_secciones';
54         $nombre  = "grupo de secciones";
55         $arbol   = 'NOTICIAS';
56     } elseif ($tmp == 'servicio') {
57         $tipo    = $tmp;
58         $clase   = 'AI_Servicio';
59         $require = 'AI/Servicio.php';
60         $tabla   = $tipo;
61         $nombre  = $tipo;
62         $arbol   = 'SERVICIOS';
63     } elseif ($tmp == 'sistema') {
64         $tipo    = $tmp;
65         $clase   = 'AI_Sistema';
66         $require = 'AI/Sistema.php';
67         $tabla   = $tipo;
68         $nombre  = $tipo;
69         $arbol   = 'SISTEMAS';
70     } else { // No hay un objeto válido para administrar.
71         header('Location: '.$_SERVER['SCRIPT_NAME']);
72     }
73 }
74 // }}}
75
76 // Si tiene un tipo, estamos administrando algun objeto. {{{
77 if ($tipo) {
78
79     // Creo formulario. {{{
80     require_once 'AI/Form.php';
81     $form =& new AI_Form;
82     // }}}
83
84     // Creo un objeto y seteo su id. {{{
85     require_once $require;
86     $obj = new $clase;
87     $obj->$tipo = @$_REQUEST['id'];
88     // }}}
89
90     // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
91     switch(@$_REQUEST['accion']) {
92         case AI_BAJA:
93         case AI_MODIF:
94             $accion = $_REQUEST['accion'];
95             break;
96         default:
97             $accion = AI_ALTA;
98     }
99     // }}}
100
101     // Modifico la acción si ya se envió el formulario. {{{
102     $botones = $form->getSubmitValue('botones');
103     if ($boton = @join('', array_keys($botones))) {
104         $boton = $boton . '_' . strtolower($botones[$boton]);
105     }
106     switch ($boton) {
107         case 'aceptar_agregar':
108             $accion = AI_ALTA;
109             break;
110         case 'modificar_borrar':
111             // Viene de modificar,  hay que confirmar primero.
112             $a_confirmar = true;
113         case 'aceptar_borrar':
114             $accion = AI_BAJA;
115             $obj->$tipo = $form->getSubmitValue($tipo);
116             break;
117         case 'borrar_cancelar':
118             // Indico que viene de un formulario cancelado.
119             $cancelado = true;
120         case 'aceptar_modificar':
121             $accion = AI_MODIF;
122             $obj->$tipo = $form->getSubmitValue($tipo);
123             break;
124     }
125     // }}}
126
127     // Creo la base de datos. {{{
128     require_once 'AI/DB.php';
129     $db =& AI_DB::connect('../conf/DB.ini');
130     if (DB::isError($db)) {
131         die($db->getMessage());
132     }
133     // }}}
134
135     // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{
136     require_once 'MECON/HTML/Arbol/ArbolDB.php';
137     $dbdata = array(
138         'db'            => &$db,
139         'tabla'         => $tabla,
140         'id'            => $tipo,
141         'nombre'        => 'nombre',
142         'order'         => 'asc',
143     );
144     // Activo el id del objeto que estamos modificando.
145     if ($accion & (AI_BAJA | AI_MODIF)) {
146         $dbdata['id_activo'] = $obj->$tipo;
147     }
148     if ($tipo == 'grupo' or $tipo == 'servicio') {
149         $dbdata['id_padre'] = $tipo . '_padre';
150     } elseif ($tipo == 'sistema') { // FIXME - horrible!!!
151         $dbdata =
152             array(
153                 'tabla'         => "intranet.$tabla as A, samurai.sistema as S",
154                 'id'            => "A.$tipo",
155                 'nombre'        => 'S.nombre_sistema',
156                 'where'         => 'S.id_sistema = A.sistema AND S.estado = 1',
157             )
158             + $dbdata;
159     }
160     $arbol = new HTML_ArbolDB($dbdata, $arbol, $tipo.'?accion='.AI_MODIF.'&id=');
161     // }}}
162
163     // Inicio el formulario, cargando datos de ser necesario. {{{
164     if ($accion & (AI_BAJA | AI_MODIF)) {
165         $err =& $obj->cargar($db);
166         if (PEAR::isError($err)) {
167             die($err->getMessage());
168         }
169         $form->iniciar($obj, $accion, $arbol, $db);
170     } else {
171         $accion = AI_ALTA;
172         $form->iniciar($obj, $accion, $arbol, $db);
173     }
174     // }}}
175
176     // Freezo el formulario si se está confirmando. {{{
177     if (@$a_confirmar) {
178         $form->freeze();
179     }
180     // }}}
181
182     // Si los datos del formulario son válidos, hago el ABM. {{{
183     if ($form->validate()) {
184         switch ($accion) {
185             case AI_ALTA: // {{{
186                 $form->llenarObjeto($obj);
187                 $err =& $obj->guardar($db, true);
188                 if (PEAR::isError($err)) {
189                     if (DB::isError($err)
190                             and $err->getCode() == DB_ERROR_ALREADY_EXISTS) {
191                         $error = new MECON_HTML_Error(
192                             "Ya existe un $nombre con el identificador "
193                             . $obj->$tipo);
194                     } else {
195                         $error = new MECON_HTML_Error('Error no esperado: '
196                             . $err->getMessage());
197                     }
198                     $marco->addBody($error);
199                 } else {
200                     header(sprintf('Location: %s?accion=%d&id=%d',
201                         $tipo, AI_MODIF, $obj->$tipo));
202                     exit;
203                 }
204                 break;
205             // }}}
206             case AI_BAJA: // {{{
207                 if (!@$a_confirmar) {
208                     $form->llenarObjeto($obj);
209                     $err =& $obj->borrar($db);
210                     if (AI_Error::isError($err)
211                             and $err->getCode() == AI_ERROR_TIENE_HIJOS) {
212                         $error = new MECON_HTML_Error('No se puede borrar el '
213                             . $nombre . ' porque todavía tiene "hijos".'
214                             . ' Elimine todos los "hijos" y pruebe otra vez.');
215                         $marco->addBody($error);
216                     } elseif (PEAR::isError($err)) {
217                         $error = new MECON_HTML_Error('Error no esperado: '
218                             . $err->getMessage());
219                         $marco->addBody($error);
220                     } else {
221                         header("Location: $tipo");
222                         exit;
223                     }
224                 }
225                 break;
226             // }}}
227             case AI_MODIF: // {{{
228                 if (!@$cancelado) {
229                     $form->llenarObjeto($obj);
230                     $err =& $obj->guardar($db);
231                     if (PEAR::isError($err)) {
232                         $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage());
233                         $marco->addBody($error);
234                     } else {
235                         header(sprintf('Location: %s?accion=%d&id=%d',
236                             $tipo, AI_MODIF, $obj->$tipo));
237                         exit;
238                     }
239                 }
240                 break;
241             // }}}
242         }
243     }
244     // }}}
245
246     // Agrego el menu y formulario a la página. {{{
247     $marco->addMenuVertical($arbol);
248     $marco->addBody($form);
249     // }}}
250
251 // }}}
252
253 // No se está editando nada, agrego la imágen de bienvenida a la página. {{{
254 } else {
255     require_once 'HTML/Image.php';
256     $marco->setEspacios(false);
257     $marco->addBody(new HTML_Image('images/home', 'Adminitrador de Intranet'));
258 }
259 // }}}
260
261 // Muestro la página. {{{
262 $marco->display();
263 // }}}
264
265 ?>