| // +--------------------------------------------------------------------+ // // $Id$ // 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)) { die($db->getMessage()); } // }}} // 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. {{{ $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'; $perm->chequear(AI_PERM_NOTICIAS); } elseif ($tmp == 'servicio') { $tipo = $tmp; $clase = 'AI_Servicio'; $require = 'AI/Servicio.php'; $tabla = $tipo; $nombre = $tipo; $perm->chequear(AI_PERM_SERVICIOS); } elseif ($tmp == 'sistema') { $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 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; } // }}} // 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, $db); } else { $accion = AI_ALTA; $form->iniciar($obj, $accion, $db); } // }}} // 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 (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; } } 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; // }}} } } // }}} // 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 la imágen de bienvenida a la página. {{{ } else { require_once 'MECON/HTML/Image.php'; $marco->setEspacios(false); $marco->addBody(new MECON_HTML_Image('images/home', 'Adminitrador de Intranet')); } // }}} // Muestro la página. {{{ $marco->display(); // }}} ?>