]> git.llucax.com Git - mecon/ai.git/blobdiff - lib/AI/Form.php
- Se filtran los sistemas ya agregados a la hora de agregar uno nuevo.
[mecon/ai.git] / lib / AI / Form.php
index 5cc482e6f7b6cac818c9375289415c2d88a183bc..dc81494ec869448ddea72bf28bd4583785083c21 100644 (file)
@@ -1,5 +1,5 @@
 <?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)                    |
@@ -50,13 +50,15 @@ class AI_Form extends MECON_HTML_QuickForm {
      * 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') {
@@ -81,8 +83,16 @@ class AI_Form extends MECON_HTML_QuickForm {
         // 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') {
@@ -94,7 +104,14 @@ class AI_Form extends MECON_HTML_QuickForm {
             $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');
@@ -103,22 +120,23 @@ class AI_Form extends MECON_HTML_QuickForm {
                 '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);
             }
@@ -137,7 +155,9 @@ class AI_Form extends MECON_HTML_QuickForm {
         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);
@@ -215,4 +235,45 @@ class AI_Form extends MECON_HTML_QuickForm {
 
 } // -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 = '&nbsp;&nbsp;&nbsp;')
+{
+    // 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