+// 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 = 'GrupoSecciones';
+ $tabla = 'grupo_secciones';
+ } elseif ($tmp == 'servicio') {
+ $tipo = $tmp;
+ $clase = 'Servicio';
+ $tabla = $tipo;
+ } elseif ($tmp == 'sistema') {
+ $tipo = $tmp;
+ $clase = 'Sistema';
+ $tabla = $tipo;
+ } else { // No hay un objeto válido para administrar.
+ header('Location: '.$_SERVER['SCRIPT_NAME']);
+ }
+}
+// }}}
+
+// Si tiene una clase, estamos editando algo. {{{
+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 un objeto y seteo su id. {{{
+ require_once "$clase.php";
+ $obj = new $clase;
+ $obj->$tipo = @$_REQUEST['id'];
+ // }}}
+
+ // Creo formulario. {{{
+ $form =& new AIForm;
+ // }}}
+
+ // Verifico que la acción sea válida. {{{
+ switch(@$_REQUEST['accion']) {
+ case BAJA:
+ case MODIFICACION:
+ $accion = $_REQUEST['accion'];
+ break;
+ default:
+ $accion = ALTA;
+ }
+ // }}}
+
+ // Verifico si ya se envio el formulario. {{{
+ $botones = $form->getSubmitValue('botones');
+ if ($boton = @join('', array_keys($botones))) {
+ $boton = $boton . '_' . strtolower($botones[$boton]);
+ }
+ switch ($boton) {
+ case 'aceptar_agregar':
+ $accion = ALTA;
+ break;
+ case 'modificar_borrar':
+ // Viene de modificar, hay que confirmar primero.
+ $a_confirmar = true;
+ case 'aceptar_borrar':
+ $accion = BAJA;
+ $obj->$tipo = $form->getSubmitValue($tipo);
+ break;
+ case 'borrar_cancelar':
+ // Indico que viene de un formulario cancelado.
+ $cancelado = true;
+ case 'aceptar_modificar':
+ $accion = MODIFICACION;
+ $obj->$tipo = $form->getSubmitValue($tipo);
+ break;
+ }
+ // }}}
+
+ // Inicio el formulario, cargando datos de ser necesario. {{{
+ if ($accion & (BAJA | MODIFICACION)) {
+ $err =& $obj->cargar($DB);
+ if (PEAR::isError($err)) {
+ die($err->getMessage());
+ }
+ $form->iniciar($obj, $accion);
+ } else {
+ $accion = ALTA;
+ $form->iniciar($obj);
+ }
+ // }}}
+
+ // Freezo de ser necesario. {{{
+ if (@$a_confirmar) {
+ $form->freeze();
+ }
+ // }}}
+
+ // Me fijo si se cargo un formulalrio y si es válido. {{{
+ if ($form->validate()) {
+ switch ($accion) {
+ case ALTA: // {{{
+ $form->llenarObjeto($obj);
+ $err =& $obj->guardar($DB);
+ if (PEAR::isError($err)) {
+ die($err->getMessage());
+ }
+ header(sprintf('Location: %s?accion=%d&id=%d',
+ $tipo, MODIFICACION, $obj->$tipo));
+ exit;
+ break;
+ // }}}
+ case BAJA: // {{{
+ if (!@$a_confirmar) {
+ $form->llenarObjeto($obj);
+ $err =& $obj->borrar($DB);
+ if (PEAR::isError($err)) {
+ die($err->getMessage());
+ }
+ header("Location: $tipo");
+ exit;
+ }
+ break;
+ // }}}
+ case MODIFICACION: // {{{
+ if (!@$cancelado) {
+ $form->llenarObjeto($obj);
+ $err =& $obj->guardar($DB);
+ if (PEAR::isError($err)) {
+ die($err->getMessage());
+ }
+ 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);
+ // }}}
+// }}}
+
+// No se está editando nada, agrego al cuerpo de la página la pantalla de entrada {{{
+} else {
+ require_once 'HTML/Image.php';
+ $MARCO->setEspacios(false);
+ $MARCO->addBody(new HTML_Image('images/home', 'Adminitrador de Intranet'));
+}
+// }}}
+
+// Dibujo. {{{