<?php
-// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
+// vim: set binary expandtab tabstop=4 softtabstop=4 shiftwidth=4:
// +--------------------------------------------------------------------+
// | Ministerio de Economía |
// | AI (Administrador de Intranet) |
* Construye un formulario para el objecto especificado.
*
* @param object &$obj Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema.
- * @param int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIF.
+ * @param int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIFICACION.
*
* @return void
* @access public
*/
function iniciar(&$obj, $accion = AI_ALTA) // ~X2C
{
+ # FIXME - Tomar la db desde afuera.
+ $db = AI_DB::connect('../conf/DB.ini');
$tipo = substr(get_class($obj), 3);
$s_tipo = ucfirst($tipo);
if ($tipo == 'gruposecciones') {
// Elementos.
if ($tipo == 'sistema') {
require_once 'SAMURAI/Sistema.php';
- $sistemas = SAMURAI_Sistema::getArraySistemas(AI_DB::connect('../conf/DB.ini'));
+ $sistemas = array('' => '--');
+ $cargados = AI_Sistema::getSistemasArray($db);
+ foreach (SAMURAI_Sistema::getArraySistemas($db) as $id => $nom) {
+ if (!in_array($id, $cargados)
+ or ($accion & (AI_BAJA | AI_MODIF) and $id == $obj->$tipo)) {
+ $sistemas[$id] = $nom;
+ }
+ }
$fId =& $this->addElement('select', $tipo, 'Sistema', $sistemas);
+ $this->addRule($tipo, 'Debe ingresar un sistema.', 'required');
}
if ($accion & (AI_BAJA | AI_MODIF)) {
if ($tipo == 'sistema') {
$fId->freeze();
}
if ($tipo == 'grupo' or $tipo == 'servicio') {
- $fPadre =& $this->addElement('text', $padre, 'Padre');
+ $tipos = array('' => '--', '0' => 'Página Principal')
+ + arbol2array($db, ($tipo == 'grupo') ? 'grupo_secciones' : $tipo,
+ 0, $tipo, 'nombre', $tipo . '_padre', 'ASC');
+ // Saco el elemento actual si hay uno cargado (no puede ser padre de si mismo).
+ if ($accion & (AI_BAJA | AI_MODIF)) {
+ unset($tipos[$obj->$tipo]);
+ }
+ $fPadre =& $this->addElement('select', $padre, 'Padre', $tipos);
$fNombre =& $this->addElement('text', 'nombre', 'Nombre');
// Validación.
$this->addRule('nombre', 'Debe ingresar un nombre.', 'required');
'regex', '/^\d*$/');
// Carga datos.
if ($accion & (AI_BAJA | AI_MODIF)) {
- $fPadre->setValue($obj->$padre);
+ $fPadre->setSelected($obj->$padre);
$fNombre->setValue($obj->nombre);
}
}
if ($tipo == 'grupo') {
- $fAntiguedad =& $this->addElement('text', 'antiguedad', 'Antigüedad');
+ $fAntiguedad =& $this->addElement('select', 'antiguedad', 'Antigüedad',
+ array(3 => '3 días', 1 => '1 día', 7 => '1 semana'));
$fSecciones =& $this->addElement('select', 'secciones', 'Secciones',
- array(1=>'test1', 'test2', 'test3', 'test4', 'test5', 'test6', 'test7', 'test8'),
- array('multiple' => 'multiple', 'size' => 5));
+ AI_GrupoSecciones::getSeccionesArray($db),
+ array('multiple' => 'multiple', 'size' => 8));
$fMostrarHijos =& $this->addElement('checkbox', 'mostrar_hijos', 'Mostrar hijos');
// Validación.
$this->addRule('antiguedad', 'La antigüedad debe ser un número natural.',
'regex', '/^\d*$/');
// Carga datos.
if ($accion & (AI_BAJA | AI_MODIF)) {
- $fAntiguedad->setValue($obj->antiguedad);
+ $fAntiguedad->setSelected($obj->antiguedad);
$fSecciones->setSelected($obj->secciones);
$fMostrarHijos->setChecked($obj->mostrar_hijos);
}
if ($tipo == 'servicio' or $tipo == 'sistema') {
$fLink =& $this->addElement('text', 'link', 'Enlace');
$fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda');
- $fIcono =& $this->addElement('text', 'icono', 'Ícono');
+ //$fIcono =& $this->addElement('text', 'icono', 'Ícono');
+ $fIcono =& $this->addElement('select', 'icono', 'Ícono',
+ listaImagenes('/var/www/sistemas/intranet/www/images', $tipo . '_', '\.gif'));
// Carga datos.
if ($accion & (AI_BAJA | AI_MODIF)) {
$fLink->setValue($obj->link);
} // -X2C Class :AI_Form
-?>
+// FIXME - Poner esto en algun lugar mejor.
+function listaImagenes($dir = '.', $prepend = '', $append = '')
+{
+ $lista = array('' => '--');
+ $d = dir($dir);
+ while (($file = $d->read()) !== false) {
+ if (preg_match("/$prepend(.*)$append/", $file, $m)) {
+ $nombre = ucwords(join(' ', preg_split('/_/', $m[1])));
+ $lista[$file] = $nombre;
+ }
+ }
+ return $lista;
+}
+
+// FIXME - Poner esto en algun lugar mejor.
+function arbol2array(&$db, $tabla, $actual, $id, $nombre, $padre, $order = '', $indent = ' ')
+{
+ // Para llevar el nivel de indentación
+ static $nivel = 0;
+ $nivel++;
+ $sql = "SELECT $id, $nombre
+ FROM $tabla";
+ if (!is_null($padre)) {
+ $sql .= " WHERE $padre = ".$db->quote($actual);
+ }
+ if ($order) {
+ $sql .= " ORDER BY $nombre $order";
+ }
+ $array = $db->getAssoc($sql);
+ if (DB::isError($array)) {
+ return $array;
+ }
+ $ret = array();
+ foreach ($array as $key => $val) {
+ $ret[$key] = str_repeat($indent, $nivel) . $val;
+ $ret += arbol2array($db, $tabla, $key, $id, $nombre, $padre, $order, $indent);
+ }
+ $nivel--;
+ return $ret;
+}
+
+?>
\ No newline at end of file