]> git.llucax.com Git - mecon/ai.git/blob - sistema/www/index.php
Se usa el nuevo nombre del 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 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 MECON_Marco('../conf/Marco.php');
43 // }}}
44
45 // Averiguo si estoy administrando algún tipo de objeto. {{{
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     } elseif ($tmp == 'servicio') {
56         $tipo    = $tmp;
57         $clase   = 'AI_Servicio';
58         $require = 'AI/Servicio.php';
59         $tabla   = $tipo;
60         $nombre  = $tipo;
61     } elseif ($tmp == 'sistema') {
62         $tipo    = $tmp;
63         $clase   = 'AI_Sistema';
64         $require = 'AI/Sistema.php';
65         $tabla   = $tipo;
66         $nombre  = $tipo;
67     } else { // No hay un objeto válido para administrar.
68         header('Location: '.$_SERVER['SCRIPT_NAME']);
69     }
70 }
71 // }}}
72
73 // Si tiene un tipo, estamos administrando algun objeto. {{{
74 if ($tipo) {
75
76     // Creo formulario. {{{
77     require_once 'AI/Form.php';
78     $form =& new AI_Form;
79     // }}}
80
81     // Creo un objeto y seteo su id. {{{
82     require_once $require;
83     $obj = new $clase;
84     $obj->$tipo = @$_REQUEST['id'];
85     // }}}
86
87     // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
88     switch(@$_REQUEST['accion']) {
89         case AI_BAJA:
90         case AI_MODIF:
91             $accion = $_REQUEST['accion'];
92             break;
93         default:
94             $accion = AI_ALTA;
95     }
96     // }}}
97
98     // Modifico la acción si ya se envió el formulario. {{{
99     $botones = $form->getSubmitValue('botones');
100     if ($boton = @join('', array_keys($botones))) {
101         $boton = $boton . '_' . strtolower($botones[$boton]);
102     }
103     switch ($boton) {
104         case 'aceptar_agregar':
105             $accion = AI_ALTA;
106             break;
107         case 'modificar_borrar':
108             // Viene de modificar,  hay que confirmar primero.
109             $a_confirmar = true;
110         case 'aceptar_borrar':
111             $accion = AI_BAJA;
112             $obj->$tipo = $form->getSubmitValue($tipo);
113             break;
114         case 'borrar_cancelar':
115             // Indico que viene de un formulario cancelado.
116             $cancelado = true;
117         case 'aceptar_modificar':
118             $accion = AI_MODIF;
119             $obj->$tipo = $form->getSubmitValue($tipo);
120             break;
121     }
122     // }}}
123
124     // Creo la base de datos. {{{
125     require_once 'AI/DB.php';
126     $db =& AI_DB::connect('../conf/DB.ini');
127     if (DB::isError($db)) {
128         die($db->getMessage());
129     }
130     // }}}
131
132     // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{
133     require_once 'AI/Arbol.php';
134     $arbol = new AI_Arbol($obj, $db);
135     // }}}
136
137     // Inicio el formulario, cargando datos de ser necesario. {{{
138     if ($accion & (AI_BAJA | AI_MODIF)) {
139         $err =& $obj->cargar($db);
140         if (PEAR::isError($err)) {
141             die($err->getMessage());
142         }
143         $form->iniciar($obj, $accion, $arbol, $db);
144     } else {
145         $accion = AI_ALTA;
146         $form->iniciar($obj, $accion, $arbol, $db);
147     }
148     // }}}
149
150     // Freezo el formulario si se está confirmando. {{{
151     if (@$a_confirmar) {
152         $form->freeze();
153     }
154     // }}}
155
156     // Si los datos del formulario son válidos, hago el ABM. {{{
157     if ($form->validate()) {
158         switch ($accion) {
159             case AI_ALTA: // {{{
160                 $form->llenarObjeto($obj);
161                 $err =& $obj->guardar($db, true);
162                 if (PEAR::isError($err)) {
163                     if (DB::isError($err)
164                             and $err->getCode() == DB_ERROR_ALREADY_EXISTS) {
165                         $error = new MECON_HTML_Error(
166                             "Ya existe un $nombre con el identificador "
167                             . $obj->$tipo);
168                     } else {
169                         $error = new MECON_HTML_Error('Error no esperado: '
170                             . $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 (AI_Error::isError($err)
185                             and $err->getCode() == AI_ERROR_TIENE_HIJOS) {
186                         $error = new MECON_HTML_Error('No se puede borrar el '
187                             . $nombre . ' porque todavía tiene "hijos".'
188                             . ' Elimine todos los "hijos" y pruebe otra vez.');
189                         $marco->addBody($error);
190                     } elseif (PEAR::isError($err)) {
191                         $error = new MECON_HTML_Error('Error no esperado: '
192                             . $err->getMessage());
193                         $marco->addBody($error);
194                     } else {
195                         header("Location: $tipo");
196                         exit;
197                     }
198                 }
199                 break;
200             // }}}
201             case AI_MODIF: // {{{
202                 if (!@$cancelado) {
203                     $form->llenarObjeto($obj);
204                     $err =& $obj->guardar($db);
205                     if (PEAR::isError($err)) {
206                         $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage());
207                         $marco->addBody($error);
208                     } else {
209                         header(sprintf('Location: %s?accion=%d&id=%d',
210                             $tipo, AI_MODIF, $obj->$tipo));
211                         exit;
212                     }
213                 }
214                 break;
215             // }}}
216         }
217     }
218     // }}}
219
220     // Agrego el menu, link para nuevo y formulario a la página. {{{
221     $marco->addMenuVertical($arbol);
222     if ($accion & ~AI_ALTA) {
223         require_once 'HTML/Image.php';
224         require_once 'HTML/Link.php';
225         $img = new HTML_Image('/MECON/images/general_nuevo', 'Agregar nuevo',
226             array('border' => 0, 'align'  => 'middle',));
227         $link = new HTML_Link($tipo);
228         $marco->addBody('<DIV class="texto11_negro" valign="middle" align="center">');
229         $link->addContents($img);
230         $link_text = ' Agregar un nuevo ' . $nombre;
231         $link->addContents($link_text);
232         $marco->addBody($link);
233         $marco->addBody('</DIV>');
234     }
235     $marco->addBody($form);
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 ?>