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