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