X-Git-Url: https://git.llucax.com/mecon/ai.git/blobdiff_plain/62beba00b0f7e8dd796cf09a353bf3e01792866e..ef1da2e8ecfb3480a55cd70cb42ab9acb36fd1cc:/sistema/www/index.php?ds=sidebyside diff --git a/sistema/www/index.php b/sistema/www/index.php index b49b766..4983778 100644 --- a/sistema/www/index.php +++ b/sistema/www/index.php @@ -1,5 +1,5 @@ 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 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 - FIXME - esto debería venir de intranet. {{{ +require_once 'SAMURAI/Perm.php'; +$perm = new SAMURAI_Perm(@$_GET['login'] ? $_GET['login'] : 'llucar@mecon', AI_PERM, $db); +// }}} + +// 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'; + if (!$perm->tiene(AI_PERM_NOTICIAS)) { + die('Acceso no autorizado!!!'); // FIXME - se va a poner más lindo? + } + } elseif ($tmp == 'servicio') { + $tipo = $tmp; + $clase = 'AI_Servicio'; + $require = 'AI/Servicio.php'; + $tabla = $tipo; + $nombre = $tipo; + if (!$perm->tiene(AI_PERM_SERVICIOS)) { + die('Acceso no autorizado!!!'); // FIXME - se va a poner más lindo? + } + } elseif ($tmp == 'sistema') { + $tipo = $tmp; + $clase = 'AI_Sistema'; + $require = 'AI/Sistema.php'; + $tabla = $tipo; + $nombre = $tipo; + if (!$perm->tiene(AI_PERM_SISTEMAS)) { + die('Acceso no autorizado!!!'); // FIXME - se va a poner más lindo? + } + } 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 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); + // }}} + + // 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, $arbol, $db); + } else { + $accion = AI_ALTA; + $form->iniciar($obj, $accion, $arbol, $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; + // }}} + } + } + // }}} + + // Agrego el menu, link para nuevo y formulario a la página. {{{ + $marco->addMenuVertical($arbol); + if ($accion & ~AI_ALTA) { + require_once 'HTML/Image.php'; + require_once 'HTML/Link.php'; + $img = new HTML_Image('/MECON/images/general_nuevo', 'Agregar nuevo', + array('border' => 0, 'align' => 'middle',)); + $link = new HTML_Link($tipo); + $marco->addBody('
'); + $link->addContents($img); + $link_text = ' Agregar un nuevo ' . $nombre; + $link->addContents($link_text); + $marco->addBody($link); + $marco->addBody('
'); + } + $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(); +// }}} ?>