]> git.llucax.com Git - mecon/ai.git/blobdiff - sistema/www/index.php
Se agrega script de permisos de MySQL.
[mecon/ai.git] / sistema / www / index.php
index fd28d80ea2b6b455cfab4b4763d7a00158742755..d547a0ccc50e543890a1d11e957bcc733ad8c40b 100644 (file)
 // $Id$
 //
 
-// Requires generales. {{{
-require_once 'MECON/HTML/Arbol/ArbolDB.php';
-require_once 'AIForm.php';
+require_once 'MECON/general.php';
+prepend_include_path('/var/www/sistemas/ai/sistema/local_lib');
+require_once 'MECON/HTML/Error.php';
+require_once 'permisos.php';
+
+// Si no está logueado, se redirige a la Intranet. {{{
+if (!@$_SESSION['usuario']) {
+    header('Location: /sistemas/intranet/login?redirect='
+        . urlencode($_SERVER['REQUEST_URI']));
+}
+// }}}
+
+// Debug. {{{
+require_once 'PEAR.php';
+#PEAR::setErrorHandling(PEAR_ERROR_TRIGGER);
+PEAR::setErrorHandling(PEAR_ERROR_RETURN);
+// }}}
+
+// Creo la base de datos. {{{
+require_once 'AI/DB.php';
+$db =& AI_DB::connect('../conf/DB.ini');
+if (DB::isError($db)) {
+    trigger_error($db->getMessage(), E_USER_ERROR);
+}
+// }}}
+
+// Creo el objeto de permisos y chequeo que tenga al menos un permiso para seguir. {{{
+require_once 'SAMURAI/Perm.php';
+$perm = new SAMURAI_Perm($_SESSION['usuario'], AI_PERM, $db);
+$perm->chequear();
+// }}}
+
+// Creo el Marco. {{{
+require_once 'MECON/Marco.php';
+$marco = new MECON_Marco('../conf/Marco.php', $perm);
 // }}}
 
 // Averiguo si estoy administrando algún tipo de objeto. {{{
@@ -37,166 +69,191 @@ $tipo = null;
 if (@$_SERVER['PATH_INFO']) {
     $tmp = ltrim($_SERVER['PATH_INFO'], '/');
     if ($tmp == 'grupo') {
-        $tipo  = $tmp;
-        $clase = 'GrupoSecciones';
-        $tabla = 'grupo_secciones';
+        $tipo    = $tmp;
+        $clase   = 'AI_GrupoSecciones';
+        $require = 'AI/GrupoSecciones.php';
+        $tabla   = 'grupo_secciones';
+        $nombre  = 'grupo de secciones';
+        $perm->chequear(AI_PERM_NOTICIAS);
     } elseif ($tmp == 'servicio') {
-        $tipo  = $tmp;
-        $clase = 'Servicio';
-        $tabla = $tipo;
+        $tipo    = $tmp;
+        $clase   = 'AI_Servicio';
+        $require = 'AI/Servicio.php';
+        $tabla   = $tipo;
+        $nombre  = $tipo;
+        $perm->chequear(AI_PERM_SERVICIOS);
     } elseif ($tmp == 'sistema') {
-        $tipo  = $tmp;
-        $clase = 'Sistema';
-        $tabla = $tipo;
+        $tipo    = $tmp;
+        $clase   = 'AI_Sistema';
+        $require = 'AI/Sistema.php';
+        $tabla   = $tipo;
+        $nombre  = $tipo;
+        $perm->chequear(AI_PERM_SISTEMAS);
     } else { // No hay un objeto válido para administrar.
         header('Location: '.$_SERVER['SCRIPT_NAME']);
     }
 }
 // }}}
 
-// Si tiene una clase, estamos editando algo. {{{
+// Si tiene un tipo, estamos administrando algun objeto. {{{
 if ($tipo) {
-    // Creo el árbol con los servicios. {{{
-    $dbdata = array(
-        'db'            => &$DB,
-        'tabla'         => $tabla,
-        'id'            => $tipo,
-        'nombre'        => $tipo,
-        'prepend_link'  => $tipo . '?accion='.MODIFICACION.'&id='
-    );
-    if ($tipo == 'grupo' or $tipo == 'servicio') {
-        $dbdata['nombre']   = 'nombre';
-        $dbdata['id_padre'] = $tipo . '_padre';
-    }
-    $arbol = new HTML_ArbolDB($dbdata, '/MECON/images/arbol_noticias.gif');
+
+    // Creo formulario. {{{
+    require_once 'AI/Form.php';
+    $form =& new AI_Form;
     // }}}
 
     // Creo un objeto y seteo su id. {{{
-    require_once "$clase.php";
+    require_once $require;
     $obj = new $clase;
     $obj->$tipo = @$_REQUEST['id'];
     // }}}
 
-    // Creo formulario. {{{
-    $form =& new AIForm;
-    // }}}
-
-    // Verifico que la acción sea válida. {{{
+    // Verifico que la acción sea válida y si no lo es hago que sea un alta. {{{
     switch(@$_REQUEST['accion']) {
-        case BAJA:
-        case MODIFICACION:
+        case AI_BAJA:
+        case AI_MODIF:
             $accion = $_REQUEST['accion'];
             break;
         default:
-            $accion = ALTA;
+            $accion = AI_ALTA;
     }
     // }}}
 
-    // Verifico si ya se envio el formulario. {{{
+    // 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 = ALTA;
+            $accion = AI_ALTA;
             break;
         case 'modificar_borrar':
             // Viene de modificar,  hay que confirmar primero.
             $a_confirmar = true;
         case 'aceptar_borrar':
-            $accion = BAJA;
+            $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 = MODIFICACION;
+            $accion = AI_MODIF;
             $obj->$tipo = $form->getSubmitValue($tipo);
             break;
     }
     // }}}
 
     // Inicio el formulario, cargando datos de ser necesario. {{{
-    if ($accion & (BAJA | MODIFICACION)) {
-        $err =& $obj->cargar($DB);
+    if ($accion & (AI_BAJA | AI_MODIF)) {
+        $err =& $obj->cargar($db);
         if (PEAR::isError($err)) {
-            die($err->getMessage());
+            trigger_error($err->getMessage(), E_USER_ERROR);
         }
-        $form->iniciar($obj, $accion);
+        $form->iniciar($obj, $accion, $db);
     } else {
-        $accion = ALTA;
-        $form->iniciar($obj);
+        $accion = AI_ALTA;
+        $form->iniciar($obj, $accion, $db);
     }
     // }}}
 
-    // Freezo de ser necesario. {{{
+    // Freezo el formulario si se está confirmando. {{{
     if (@$a_confirmar) {
         $form->freeze();
     }
     // }}}
 
-    // Me fijo si se cargo un formulalrio y si es válido. {{{
+    // Si los datos del formulario son válidos, hago el ABM. {{{
     if ($form->validate()) {
         switch ($accion) {
-            case ALTA: // {{{
+            case AI_ALTA: // {{{
                 $form->llenarObjeto($obj);
-                $err =& $obj->guardar($DB);
+                $err =& $obj->guardar($db, true);
                 if (PEAR::isError($err)) {
-                    die($err->getMessage());
+                    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;
                 }
-                header(sprintf('Location: %s?accion=%d&id=%d',
-                    $tipo, MODIFICACION, $obj->$tipo));
-                exit;
                 break;
-                // }}}
-            case BAJA: // {{{
+            // }}}
+            case AI_BAJA: // {{{
                 if (!@$a_confirmar) {
                     $form->llenarObjeto($obj);
-                    $err =& $obj->borrar($DB);
-                    if (PEAR::isError($err)) {
-                        die($err->getMessage());
+                    $err =& $obj->borrar($db);
+                    if (AI_Error::isError($err)
+                            and $err->getCode() == AI_ERROR_TIENE_HIJOS) {
+                        $error = new MECON_HTML_Error('No se puede borrar el '
+                            . $nombre . ' porque todavía tiene "hijos".'
+                            . ' Elimine todos los "hijos" y pruebe otra vez.');
+                        $marco->addBody($error);
+                    } elseif (PEAR::isError($err)) {
+                        $error = new MECON_HTML_Error('Error no esperado: '
+                            . $err->getMessage());
+                        $marco->addBody($error);
+                    } else {
+                        header("Location: $tipo");
+                        exit;
                     }
-                    header("Location: $tipo");
-                    exit;
                 }
                 break;
-                // }}}
-            case MODIFICACION: // {{{
+            // }}}
+            case AI_MODIF: // {{{
                 if (!@$cancelado) {
                     $form->llenarObjeto($obj);
-                    $err =& $obj->guardar($DB);
+                    $err =& $obj->guardar($db);
                     if (PEAR::isError($err)) {
-                        die($err->getMessage());
+                        $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;
                     }
-                    header(sprintf('Location: %s?accion=%d&id=%d',
-                        $tipo, MODIFICACION, $obj->$tipo));
-                    exit;
                 }
                 break;
-                // }}}
+            // }}}
         }
     }
     // }}}
 
-    // Agrego al cuerpo de la página las cosas que voy a dibujar. {{{
-    $LAYOUT->setCellContents(0, 0, $arbol);
-    $LAYOUT->setCellContents(0, 2, $form);
-    $MARCO->addBody($LAYOUT);
+    // Creo el árbol con el tipo de objeto que manejo y lo agrego a la página. {{{
+    require_once 'AI/Arbol.php';
+    $arbol = new AI_Arbol($obj, $db, false);
     // }}}
+
+    // Agrego el menu, link para nuevo y formulario a la página. {{{
+    $marco->addMenuVertical($arbol);
+    if ($accion & ~AI_ALTA) {
+        $form->renderer->tabla->addLink('nuevo', $tipo);
+    }
+    $marco->addBody($form);
+    // }}}
+
 // }}}
 
-// No se está editando nada, agrego al cuerpo de la página la pantalla de entrada {{{
+// 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'));
+    require_once 'MECON/HTML/Image.php';
+    $marco->setEspacios(false);
+    $marco->addBody(new MECON_HTML_Image('images/home', 'Adminitrador de Intranet'));
 }
 // }}}
 
-// Dibujo. {{{
-$MARCO->display();
+// Muestro la página. {{{
+$marco->display();
 // }}}
 
 ?>