// $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)) {
+ 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. {{{
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());
}
- $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();
// }}}
?>