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. |
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. |
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. |
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 // +--------------------------------------------------------------------+
30 require_once 'MECON/HTML/Error.php';
31 require_once 'MECON/general.php';
32 prepend_include_path('/var/www/sistemas/ai/sistema/local_lib');
35 require_once 'PEAR.php';
36 #PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
37 PEAR::setErrorHandling(PEAR_ERROR_RETURN);
41 require_once 'MECON/Marco.php';
42 $marco = new Marco('../conf/Marco.php');
45 // Averiguo si estoy administrando algún tipo de objeto. {{{
47 if (@$_SERVER['PATH_INFO']) {
48 $tmp = ltrim($_SERVER['PATH_INFO'], '/');
49 if ($tmp == 'grupo') {
51 $clase = "AI_GrupoSecciones";
52 $require = 'AI/GrupoSecciones.php';
53 $tabla = 'grupo_secciones';
54 $nombre = "grupo de secciones";
56 } elseif ($tmp == 'servicio') {
58 $clase = 'AI_Servicio';
59 $require = 'AI/Servicio.php';
63 } elseif ($tmp == 'sistema') {
65 $clase = 'AI_Sistema';
66 $require = 'AI/Sistema.php';
70 } else { // No hay un objeto válido para administrar.
71 header('Location: '.$_SERVER['SCRIPT_NAME']);
76 // Si tiene un tipo, estamos administrando algun objeto. {{{
79 // Creo formulario. {{{
80 require_once 'AI/Form.php';
84 // Creo un objeto y seteo su id. {{{
85 require_once $require;
87 $obj->$tipo = @$_REQUEST['id'];
90 // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
91 switch(@$_REQUEST['accion']) {
94 $accion = $_REQUEST['accion'];
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]);
107 case 'aceptar_agregar':
110 case 'modificar_borrar':
111 // Viene de modificar, hay que confirmar primero.
113 case 'aceptar_borrar':
115 $obj->$tipo = $form->getSubmitValue($tipo);
117 case 'borrar_cancelar':
118 // Indico que viene de un formulario cancelado.
120 case 'aceptar_modificar':
122 $obj->$tipo = $form->getSubmitValue($tipo);
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());
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';
141 'nombre' => 'nombre',
144 // Activo el id del objeto que estamos modificando.
145 if ($accion & (AI_BAJA | AI_MODIF)) {
146 $dbdata['id_activo'] = $obj->$tipo;
148 if ($tipo == 'grupo' or $tipo == 'servicio') {
149 $dbdata['id_padre'] = $tipo . '_padre';
150 } elseif ($tipo == 'sistema') { // FIXME - horrible!!!
153 'tabla' => "intranet.$tabla as A, samurai.sistema as S",
155 'nombre' => 'S.nombre_sistema',
156 'where' => 'S.id_sistema = A.sistema AND S.estado = 1',
160 $arbol = new HTML_ArbolDB($dbdata, $arbol, $tipo.'?accion='.AI_MODIF.'&id=');
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());
169 $form->iniciar($obj, $accion, $arbol, $db);
172 $form->iniciar($obj, $accion, $arbol, $db);
176 // Freezo el formulario si se está confirmando. {{{
182 // Si los datos del formulario son válidos, hago el ABM. {{{
183 if ($form->validate()) {
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 "
195 $error = new MECON_HTML_Error('Error no esperado: '
196 . $err->getMessage());
198 $marco->addBody($error);
200 header(sprintf('Location: %s?accion=%d&id=%d',
201 $tipo, AI_MODIF, $obj->$tipo));
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);
221 header("Location: $tipo");
227 case AI_MODIF: // {{{
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);
235 header(sprintf('Location: %s?accion=%d&id=%d',
236 $tipo, AI_MODIF, $obj->$tipo));
246 // Agrego el menu y formulario a la página. {{{
247 $marco->addMenuVertical($arbol);
248 $marco->addBody($form);
253 // No se está editando nada, agrego la imágen de bienvenida a la página. {{{
255 require_once 'HTML/Image.php';
256 $marco->setEspacios(false);
257 $marco->addBody(new HTML_Image('images/home', 'Adminitrador de Intranet'));
261 // Muestro la página. {{{