]> git.llucax.com Git - mecon/ai.git/blobdiff - sistema/www/index.php
Se pasa HTML_Error a MECONlib.
[mecon/ai.git] / sistema / www / index.php
index b49b766165a8799c5e77eed5c7d968d713902218..cfab50e5fa6b60deae385b91dcde512990c68c57 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
+// vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker:
 // +--------------------------------------------------------------------+
 // |                      Ministerio de Economía                        |
 // |                  AI (Administrador de Intranet)                    |
 // $Id$
 //
 
-require_once 'HTML/Image.php';
+require_once 'MECON/HTML/Error.php';
 
-$MARCO->setEspacios(false);
-$MARCO->addBody(new HTML_Image('images/home', 'Adminitrador de Intranet'));
-$MARCO->display();
+// Debug. {{{
+require_once 'PEAR.php';
+#PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
+PEAR::setErrorHandling(PEAR_ERROR_RETURN);
+// }}}
+
+// Creo el Marco. {{{
+require_once 'MECON/Marco.php';
+$marco = new Marco('../conf/Marco.php');
+// }}}
+
+// Averiguo si estoy administrando algún tipo de objeto. XXX - desafear {{{
+$tipo = null;
+if (@$_SERVER['PATH_INFO']) {
+    $tmp = ltrim($_SERVER['PATH_INFO'], '/');
+    if ($tmp == 'grupo') {
+        $tipo    = $tmp;
+        $clase   = "AI_GrupoSecciones";
+        $require = 'AI/GrupoSecciones.php';
+        $tabla   = 'grupo_secciones';
+        $nombre  = "grupo de secciones";
+        $arbol   = 'NOTICIAS';
+    } elseif ($tmp == 'servicio') {
+        $tipo    = $tmp;
+        $clase   = 'AI_Servicio';
+        $require = 'AI/Servicio.php';
+        $tabla   = $tipo;
+        $nombre  = $tipo;
+        $arbol   = 'SERVICIOS';
+    } elseif ($tmp == 'sistema') {
+        $tipo    = $tmp;
+        $clase   = 'AI_Sistema';
+        $require = 'AI/Sistema.php';
+        $tabla   = $tipo;
+        $nombre  = $tipo;
+        $arbol   = 'SISTEMAS';
+    } else { // No hay un objeto válido para administrar.
+        header('Location: '.$_SERVER['SCRIPT_NAME']);
+    }
+}
+// }}}
+
+// Si tiene un tipo, estamos administrando algun objeto. {{{
+if ($tipo) {
+
+    // Creo formulario. {{{
+    require_once 'AI/Form.php';
+    $form =& new AI_Form;
+    // }}}
+
+    // Creo un objeto y seteo su id. {{{
+    require_once $require;
+    $obj = new $clase;
+    $obj->$tipo = @$_REQUEST['id'];
+    // }}}
+
+    // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
+    switch(@$_REQUEST['accion']) {
+        case AI_BAJA:
+        case AI_MODIF:
+            $accion = $_REQUEST['accion'];
+            break;
+        default:
+            $accion = AI_ALTA;
+    }
+    // }}}
+
+    // Modifico la acción si ya se envió el formulario. {{{
+    $botones = $form->getSubmitValue('botones');
+    if ($boton = @join('', array_keys($botones))) {
+        $boton = $boton . '_' . strtolower($botones[$boton]);
+    }
+    switch ($boton) {
+        case 'aceptar_agregar':
+            $accion = AI_ALTA;
+            break;
+        case 'modificar_borrar':
+            // Viene de modificar,  hay que confirmar primero.
+            $a_confirmar = true;
+        case 'aceptar_borrar':
+            $accion = AI_BAJA;
+            $obj->$tipo = $form->getSubmitValue($tipo);
+            break;
+        case 'borrar_cancelar':
+            // Indico que viene de un formulario cancelado.
+            $cancelado = true;
+        case 'aceptar_modificar':
+            $accion = AI_MODIF;
+            $obj->$tipo = $form->getSubmitValue($tipo);
+            break;
+    }
+    // }}}
+
+    // Creo la base de datos. {{{
+    require_once 'AI/DB.php';
+    $db =& AI_DB::connect('../conf/DB.ini');
+    if (DB::isError($db)) {
+        die($db->getMessage());
+    }
+    // }}}
+
+    // Inicio el formulario, cargando datos de ser necesario. {{{
+    if ($accion & (AI_BAJA | AI_MODIF)) {
+        $err =& $obj->cargar($db);
+        if (PEAR::isError($err)) {
+            die($err->getMessage());
+        }
+        $form->iniciar($obj, $accion);
+    } else {
+        $accion = AI_ALTA;
+        $form->iniciar($obj);
+    }
+    // }}}
+
+    // Freezo el formulario si se está confirmando. {{{
+    if (@$a_confirmar) {
+        $form->freeze();
+    }
+    // }}}
+
+    // Si los datos del formulario son válidos, hago el ABM. {{{
+    if ($form->validate()) {
+        switch ($accion) {
+            case AI_ALTA: // {{{
+                $form->llenarObjeto($obj);
+                $err =& $obj->guardar($db, true);
+                if (PEAR::isError($err)) {
+                    if (DB::isError($err) and $err->getCode() == DB_ERROR_ALREADY_EXISTS) {
+                        $error = new MECON_HTML_Error("Ya existe un $nombre con el identificador "
+                            . $obj->$tipo);
+                    } else {
+                        $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage());
+                    }
+                    $marco->addBody($error);
+                } else {
+                    header(sprintf('Location: %s?accion=%d&id=%d',
+                        $tipo, AI_MODIF, $obj->$tipo));
+                    exit;
+                }
+                break;
+            // }}}
+            case AI_BAJA: // {{{
+                if (!@$a_confirmar) {
+                    $form->llenarObjeto($obj);
+                    $err =& $obj->borrar($db);
+                    if (PEAR::isError($err)) {
+                        $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage());
+                        $marco->addBody($error);
+                    } else {
+                        header("Location: $tipo");
+                        exit;
+                    }
+                }
+                break;
+            // }}}
+            case AI_MODIF: // {{{
+                if (!@$cancelado) {
+                    $form->llenarObjeto($obj);
+                    $err =& $obj->guardar($db);
+                    if (PEAR::isError($err)) {
+                        $error = new MECON_HTML_Error('Error no esperado: ' . $err->getMessage());
+                        $marco->addBody($error);
+                    } else {
+                        header(sprintf('Location: %s?accion=%d&id=%d',
+                            $tipo, AI_MODIF, $obj->$tipo));
+                        exit;
+                    }
+                }
+                break;
+            // }}}
+        }
+    }
+    // }}}
+
+    // Agrego el menu y el formulario a la página. {{{
+
+    // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{
+    require_once 'MECON/HTML/Arbol/ArbolDB.php';
+    $dbdata = array(
+        'db'            => &$db,
+        'tabla'         => $tabla,
+        'id'            => $tipo,
+        'nombre'        => $tipo,
+        'prepend_link'  => $tipo.'?accion='.AI_MODIF.'&id='
+    );
+    if ($tipo == 'grupo' or $tipo == 'servicio') {
+        $dbdata['nombre']   = 'nombre';
+        $dbdata['id_padre'] = $tipo . '_padre';
+    } elseif ($tipo == 'sistema') { // FIXME - horrible!!!
+        $dbdata = array(
+            'db'            => &$db,
+            'tabla'         => "intranet.$tabla as A, samurai.sistema as S",
+            'id'            => "A.$tipo",
+            'nombre'        => 'S.nombre_sistema',
+            'prepend_link'  => $tipo.'?accion='.AI_MODIF.'&id=',
+            'where'         => 'S.id_sistema = A.sistema',
+            'order'         => 'asc',
+        );
+    }
+    $arbol = new HTML_ArbolDB($dbdata, $arbol);
+    $marco->addMenuVertical($arbol);
+    // }}}
+
+    // Agrego el formulario a la página. {{{
+    $marco->addBody($form);
+    // }}}
+
+    // }}}
+
+// }}}
+
+// No se está editando nada, agrego la imágen de bienvenida a la página. {{{
+} else {
+    require_once 'HTML/Image.php';
+    $marco->setEspacios(false);
+    $marco->addBody(new HTML_Image('images/home', 'Adminitrador de Intranet'));
+}
+// }}}
+
+// Muestro la página. {{{
+$marco->display();
+// }}}
 
 ?>