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