]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/Form.php
Se hace required el sistema.
[mecon/ai.git] / lib / AI / Form.php
1 <?php
2 // vim: set binary expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // |                      Ministerio de Economía                        |
5 // |                  AI (Administrador de Intranet)                    |
6 // +--------------------------------------------------------------------+
7 // | This file is part of AI.                                           |
8 // |                                                                    |
9 // | AI is free software; you can redistribute it and/or modify         |
10 // | it under the terms of the GNU General Public License as published  |
11 // | by the Free Software Foundation; either version 2 of the License,  |
12 // | or (at your option) any later version.                             |
13 // |                                                                    |
14 // | AI is distributed in the hope that it will be useful, but          |
15 // | WITHOUT ANY WARRANTY; without even the implied warranty of         |
16 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
17 // | General Public License for more details.                           |
18 // |                                                                    |
19 // | You should have received a copy of the GNU General Public License  |
20 // | along with Hooks; if not, write to the Free Software Foundation,   |
21 // | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
22 // +--------------------------------------------------------------------+
23 // | Creado: Thu Jul 3 17:39:15 2003                                    |
24 // | Autor:  Leandro Lucarella <llucar@mecon.gov.ar>                    |
25 // +--------------------------------------------------------------------+
26 //
27 // $Id$
28 //
29
30 // +X2C includes
31 require_once 'MECON/HTML/QuickForm.php';
32 // ~X2C
33
34 // Definicion de acciones.
35 define('AI_ALTA',   1);
36 define('AI_BAJA',   2);
37 define('AI_MODIF',  4);
38
39 // +X2C Class 507 :AI_Form
40 /**
41  * Formularios para el Administrador de Intranet.
42  *
43  * @access public
44  */
45 class AI_Form extends MECON_HTML_QuickForm {
46     // ~X2C
47
48     // +X2C Operation 509
49     /**
50      * Construye un formulario para el objecto especificado.
51      *
52      * @param  object &$obj Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema.
53      * @param  int $accion Accion que realizar?el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIFICACION.
54      *
55      * @return void
56      * @access public
57      */
58     function iniciar(&$obj, $accion = AI_ALTA) // ~X2C
59     {
60         $tipo   = substr(get_class($obj), 3);
61         $s_tipo = ucfirst($tipo);
62         if ($tipo == 'gruposecciones') {
63             $tipo   = 'grupo';
64             $s_tipo = 'Grupo de Secciones';
65         }
66         $padre = $tipo.'_padre';
67         switch ($accion) {
68             case AI_BAJA:
69                 $s_accion = 'Borrar';
70                 break;
71             case AI_MODIF:
72                 $s_accion = 'Modificar';
73                 break;
74             default:
75                 $accion   = AI_ALTA;
76                 $s_accion = 'Agregar';
77         }
78         // Construyo con el padre y seteos generales.
79         $this->setRendererOpts(array('width' => '400'));
80         $this->addElement('header','cabecera', $s_accion . ' ' . $s_tipo);
81         // Elementos.
82         if ($tipo == 'sistema') {
83             require_once 'SAMURAI/Sistema.php';
84             $sistemas = array('' => '--') +
85                 SAMURAI_Sistema::getArraySistemas(AI_DB::connect('../conf/DB.ini'));
86             $fId        =& $this->addElement('select', $tipo, 'Sistema', $sistemas);
87             $this->addRule($tipo, 'Debe ingresar un sistema.', 'required');
88         }
89         if ($accion & (AI_BAJA | AI_MODIF)) {
90             if ($tipo == 'sistema') {
91                 $fId->setSelected($obj->$tipo);
92             } else {
93                 $fId =& $this->addElement('text', $tipo, 'Identificador');
94                 $fId->setValue($obj->$tipo);
95             }
96             $fId->freeze();
97         }
98         if ($tipo == 'grupo' or $tipo == 'servicio') {
99             $tipos = array('' => '--', '0' => 'Página Principal') +
100                 arbol2array(AI_DB::connect('../conf/DB.ini'),
101                 ($tipo == 'grupo') ? 'grupo_secciones' : $tipo, 0, $tipo, 'nombre',
102                 $tipo . '_padre');
103             $fPadre  =& $this->addElement('select', $padre, 'Padre', $tipos);
104             $fNombre =& $this->addElement('text', 'nombre', 'Nombre');
105             // Validación.
106             $this->addRule('nombre', 'Debe ingresar un nombre.', 'required');
107             $this->addRule($padre, 'Debe ingresar un padre.', 'required');
108             $this->addRule($padre, 'El padre debe ser un número natural.',
109                 'regex', '/^\d*$/');
110             // Carga datos.
111             if ($accion & (AI_BAJA | AI_MODIF)) {
112                 $fPadre->setSelected($obj->$padre);
113                 $fNombre->setValue($obj->nombre);
114             }
115         }
116         if ($tipo == 'grupo') {
117             $fAntiguedad   =& $this->addElement('select', 'antiguedad', 'Antigüedad',
118                 array(3 => '3 días', 1 => '1 día', 7 => '1 semana'));
119             $fSecciones    =& $this->addElement('select', 'secciones', 'Secciones',
120                 AI_GrupoSecciones::getSeccionesArray(),
121                 array('multiple' => 'multiple', 'size' => 5));
122             $fMostrarHijos =& $this->addElement('checkbox', 'mostrar_hijos', 'Mostrar hijos');
123             // Validación.
124             $this->addRule('antiguedad', 'La antigüedad debe ser un número natural.',
125                 'regex', '/^\d*$/');
126             // Carga datos.
127             if ($accion & (AI_BAJA | AI_MODIF)) {
128                 $fAntiguedad->setSelected($obj->antiguedad);
129                 $fSecciones->setSelected($obj->secciones);
130                 $fMostrarHijos->setChecked($obj->mostrar_hijos);
131             }
132         }
133         if ($tipo == 'servicio') {
134             $fDescripcion =& $this->addElement('text', 'descripcion', 'Descripción');
135             $fLogueo      =& $this->addElement('checkbox','logueo', 'Necesita login');
136             // Validación
137             $this->addRule('descripcion',   'Debe ingresar una descripción.',   'required');
138             // Carga datos.
139             if ($accion & (AI_BAJA | AI_MODIF)) {
140                 $fDescripcion->setValue($obj->descripcion);
141                 $fLogueo->setChecked($obj->necesita_logueo);
142             }
143         }
144         if ($tipo == 'servicio' or $tipo == 'sistema') {
145             $fLink      =& $this->addElement('text', 'link', 'Enlace');
146             $fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda');
147             //$fIcono     =& $this->addElement('text', 'icono', 'Ícono');
148             $fIcono     =& $this->addElement('select', 'icono', 'Ícono',
149             listaImagenes('/var/www/sistemas/intranet/www/images', $tipo . '_', '\.gif'));
150             // Carga datos.
151             if ($accion & (AI_BAJA | AI_MODIF)) {
152                 $fLink->setValue($obj->link);
153                 $fLinkAyuda->setValue($obj->link_ayuda);
154                 $fIcono->setValue($obj->icono);
155             }
156             // Validación.
157             if ($tipo == 'sistema') {
158                 $this->addRule('link',  'Debe ingresar un nombre.', 'required');
159                 $this->addRule('icono', 'Debe ingresar un ícono.',  'required');
160             }
161         }
162         $fHabilitado =& $this->addElement('checkbox','habilitado', 'Está habilitado',
163             '', array('checked' => 'checked'));
164         // Carga datos.
165         if ($accion & (AI_BAJA | AI_MODIF)) {
166             $fHabilitado->setChecked($obj->habilitado);
167         }
168         // Botones.
169         $fBtnAccion =& parent::createElement('submit', 'aceptar' , $s_accion);
170         if ($accion & AI_MODIF) {
171             $fBtnCancelar =& parent::createElement('submit', 'modificar' , 'Borrar');
172         } elseif ($accion & AI_ALTA) {
173             $fBtnCancelar =& parent::createElement('reset', 'agregar', 'Limpiar');
174         } elseif ($accion & AI_BAJA) {
175             $fBtnCancelar =& parent::createElement('submit', 'borrar', 'Cancelar');
176         }
177         $grupo = array(
178             &$fBtnAccion,
179             &$fBtnCancelar,
180         );
181         $this->addGroup($grupo, 'botones');
182     }
183     // -X2C
184
185     // +X2C Operation 510
186     /**
187      * Llena un objeto con los datos del formulario.
188      *
189      * @param  mixed &$obj Objeto a llenar con los datos del formulario. Puede ser GrupoSecciones, Servicio o Sistema.
190      *
191      * @return void
192      * @access public
193      */
194     function llenarObjeto(&$obj) // ~X2C
195     {
196         $tipo  = substr(get_class($obj), 3);
197         if ($tipo == 'gruposecciones') {
198             $tipo = 'grupo';
199         }
200         $padre = $tipo.'_padre';
201         // Elementos.
202         $obj->$tipo = $this->getSubmitValue($tipo);
203         $obj->habilitado = $this->getSubmitValue('habilitado');
204         if ($tipo == 'grupo' or $tipo == 'servicio') {
205             $obj->$padre = $this->getSubmitValue($padre);
206             $obj->nombre = $this->getSubmitValue('nombre');
207         }
208         if ($tipo == 'grupo') {
209             $obj->antiguedad    = $this->getSubmitValue('antiguedad');
210             $obj->secciones     = $this->getSubmitValue('secciones');
211             $obj->mostrar_hijos = $this->getSubmitValue('mostrar_hijos');
212         }
213         if ($tipo == 'servicio') {
214             $obj->descripcion     = $this->getSubmitValue('descripcion');
215             $obj->necesita_logueo = $this->getSubmitValue('logueo');
216         }
217         if ($tipo == 'servicio' or $tipo == 'sistema') {
218             $obj->link       = $this->getSubmitValue('link');
219             $obj->link_ayuda = $this->getSubmitValue('link_ayuda');
220             $obj->icono      = $this->getSubmitValue('icono');
221         }
222     }
223     // -X2C
224
225 } // -X2C Class :AI_Form
226
227 // FIXME - Poner esto en algun lugar mejor.
228 function listaImagenes($dir = '.', $prepend = '', $append = '')
229 {
230     $lista = array('' => '--');
231     $d = dir($dir);
232     while (($file = $d->read()) !== false) {
233         if (preg_match("/$prepend(.*)$append/", $file, $m)) {
234             $nombre = ucwords(join(' ', preg_split('/_/', $m[1])));
235             $lista[$file] = $nombre;
236         }
237     }
238     return $lista;
239 }
240
241 // FIXME - Poner esto en algun lugar mejor.
242 function arbol2array(&$db, $tabla, $actual, $id, $nombre, $padre, $order = '', $indent = '&nbsp;&nbsp;&nbsp;')
243 {
244     // Para llevar el nivel de indentación
245     static $nivel = 0;
246     $nivel++;
247     $sql = "SELECT $id, $nombre
248             FROM $tabla";
249     if (!is_null($padre)) {
250         $sql .= " WHERE $padre = ".$db->quote($actual);
251     }
252     if ($order) {
253         $sql .= " ORDER BY $nombre $order";
254     }
255     $array = $db->getAssoc($sql);
256     if (DB::isError($array)) {
257         return $array;
258     }
259     $ret = array();
260     foreach ($array as $key => $val) {
261         $ret[$key] = str_repeat($indent, $nivel) . $val;
262         $ret += arbol2array($db, $tabla, $key, $id, $nombre, $padre, $order, $indent);
263     }
264     $nivel--;
265     return $ret;
266 }
267
268 ?>