]> git.llucax.com Git - mecon/ai.git/blob - sistema/local_lib/AI/Form.php
Se usa MECON_HTML_Tabla::addLink() para poner el link a un item nuevo.
[mecon/ai.git] / sistema / local_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 require_once 'general.php';
35
36 // Definicion de acciones.
37 define('AI_ALTA',   1);
38 define('AI_BAJA',   2);
39 define('AI_MODIF',  4);
40
41 // +X2C Class 507 :AI_Form
42 /**
43  * Formularios para el Administrador de Intranet.
44  *
45  * @package AI_Local
46  * @access public
47  */
48 class AI_Form extends MECON_HTML_QuickForm {
49     // ~X2C
50
51     // +X2C Operation 509
52     /**
53      * Construye un formulario para el objecto especificado.
54      *
55      * @param  object &$obj Objeto con el cual rellenar el formulario. Puede ser GrupoSecciones, Servicio o Sistema.
56      * @param  int $accion Accion que realizará el formulario a crear. Puede ser AI_ALTA, AI_BAJA o AI_MODIFICACION.
57      * @param  DB $db Base de datos a usar.
58      *
59      * @return void
60      * @access public
61      */
62     function iniciar(&$obj, $accion, $db) // ~X2C
63     {
64         $tipo   = substr(get_class($obj), 3);
65         $s_tipo = ucfirst($tipo);
66         if ($tipo == 'gruposecciones') {
67             $tipo   = 'grupo';
68             $s_tipo = 'Grupo de Secciones';
69         }
70         $padre = $tipo.'_padre';
71         switch ($accion) {
72             case AI_BAJA:
73                 $s_accion = 'Borrar';
74                 break;
75             case AI_MODIF:
76                 $s_accion = 'Modificar';
77                 break;
78             default:
79                 $accion   = AI_ALTA;
80                 $s_accion = 'Agregar';
81         }
82         // Construyo con el padre y seteos generales.
83         $this->renderer->updateAttributes(array('width' => '400'));
84         $this->addElement('header','cabecera', $s_accion . ' ' . $s_tipo);
85         // Elementos:
86         // ID.
87         if ($tipo == 'sistema') {
88             require_once 'SAMURAI/Sistema.php';
89             $sistemas = array('' => '--');
90             if ($accion & AI_ALTA) {
91                 // Si es un alta, tomo una lista de sistemas aún no agregados.
92                 $sistemas += AI_Sistema::getSistemasArray($db);
93             } else {
94                 // Si no, tomo una lista completa de sistemas.
95                 $sistemas += SAMURAI_Sistema::getArraySistemas($db);
96             }
97             $fId =& $this->addElement('select', $tipo, 'Sistema', $sistemas);
98             $this->addRule($tipo, 'Debe ingresar un sistema.', 'required');
99         }
100         if ($accion & (AI_BAJA | AI_MODIF)) {
101             if ($tipo == 'sistema') {
102                 $fId->setSelected($obj->$tipo);
103             } else {
104                 $fId =& $this->addElement('text', $tipo, 'Identificador');
105                 $fId->setValue($obj->$tipo);
106             }
107             $fId->freeze();
108         }
109         // Padre / Nombre.
110         if ($tipo == 'grupo' or $tipo == 'servicio') {
111             require_once 'AI/Arbol.php';
112             $arbol = new AI_Arbol($obj, $db, true);
113             $tipos = array('' => '--', '0' => 'Página Principal')
114                 + $arbol->toArray();
115             // Saco el elemento actual si hay uno cargado (no puede ser padre de si mismo).
116             if ($accion & (AI_BAJA | AI_MODIF)) {
117                 unset($tipos[$obj->$tipo]);
118             }
119             $fPadre  =& $this->addElement('select', $padre, 'Padre', $tipos);
120             $fNombre =& $this->addElement('text', 'nombre', 'Nombre');
121             // Validación.
122             $this->addRule('nombre', 'Debe ingresar un nombre.', 'required');
123             $this->addRule($padre, 'Debe ingresar un padre.', 'required');
124             $this->addRule($padre, 'El padre debe ser un número natural.',
125                 'regex', '/^\d*$/');
126             // Carga datos.
127             if ($accion & (AI_BAJA | AI_MODIF)) {
128                 $fPadre->setSelected($obj->$padre);
129                 $fNombre->setValue($obj->nombre);
130             }
131         }
132         // Antigüedad / Secciones / Mostrar Hijos.
133         if ($tipo == 'grupo') {
134             $fAntiguedad   =& $this->addElement('select', 'antiguedad', 'Antigüedad',
135                 array(3 => '3 días', 1 => '1 día', 7 => '1 semana'));
136             $fSecciones    =& $this->addElement('select', 'secciones', 'Secciones',
137                 AI_GrupoSecciones::getSeccionesArray($db, (int)$obj->$tipo),
138                 array('multiple' => 'multiple', 'size' => 8));
139             $fMostrarHijos =& $this->addElement('checkbox', 'mostrar_hijos', 'Mostrar hijos');
140             // Validación.
141             $this->addRule('antiguedad', 'La antigüedad debe ser un número natural.',
142                 'regex', '/^\d*$/');
143             // Carga datos.
144             if ($accion & (AI_BAJA | AI_MODIF)) {
145                 $fAntiguedad->setSelected($obj->antiguedad);
146                 $fSecciones->setSelected($obj->secciones);
147                 $fMostrarHijos->setChecked($obj->mostrar_hijos);
148             }
149         }
150         // Descripción / Necesita Logueo.
151         if ($tipo == 'servicio') {
152             $fDescripcion =& $this->addElement('text', 'descripcion', 'Descripción');
153             $fLogueo      =& $this->addElement('checkbox','logueo', 'Necesita login');
154             // Validación
155             $this->addRule('descripcion',   'Debe ingresar una descripción.',   'required');
156             // Carga datos.
157             if ($accion & (AI_BAJA | AI_MODIF)) {
158                 $fDescripcion->setValue($obj->descripcion);
159                 $fLogueo->setChecked($obj->necesita_logueo);
160             }
161         }
162         // Link / Link Ayuda.
163         if ($tipo == 'servicio' or $tipo == 'sistema') {
164             $fLink      =& $this->addElement('text', 'link', 'Enlace');
165             $fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda');
166             //$fIcono     =& $this->addElement('text', 'icono', 'Ícono');
167             $fIcono     =& $this->addElement('select', 'icono', 'Ícono',
168                 listarArchivos('/var/www/sistemas/intranet/sistema/www/images', $tipo . '_', '\.gif'));
169             // Carga datos.
170             if ($accion & (AI_BAJA | AI_MODIF)) {
171                 $fLink->setValue($obj->link);
172                 $fLinkAyuda->setValue($obj->link_ayuda);
173                 $fIcono->setValue($obj->icono);
174             }
175             // Validación.
176             if ($tipo == 'sistema') {
177                 $this->addRule('link',  'Debe ingresar un nombre.', 'required');
178                 $this->addRule('icono', 'Debe ingresar un ícono.',  'required');
179             }
180         }
181         // Tipo de sistema.
182         if ($tipo == 'sistema') {
183             $fTipo =& $this->addElement('checkbox', 'tipo', 'Usa EmbPerl');
184             // Carga datos.
185             if ($accion & (AI_BAJA | AI_MODIF)) {
186                 $fTipo->setChecked($obj->tipo == 'embperl');
187             }
188         }
189         // Habilitado.
190         $fHabilitado =& $this->addElement('checkbox','habilitado', 'Está habilitado',
191             '', array('checked' => 'checked'));
192         if ($accion & (AI_BAJA | AI_MODIF)) { // Carga datos.
193             $fHabilitado->setChecked($obj->habilitado);
194         }
195         // Botones.
196         $fBtnAccion =& parent::createElement('submit', 'aceptar' , $s_accion);
197         if ($accion & AI_MODIF) {
198             $fBtnCancelar =& parent::createElement('submit', 'modificar' , 'Borrar');
199         } elseif ($accion & AI_ALTA) {
200             $fBtnCancelar =& parent::createElement('reset', 'agregar', 'Limpiar');
201         } elseif ($accion & AI_BAJA) {
202             $fBtnCancelar =& parent::createElement('submit', 'borrar', 'Cancelar');
203         }
204         $grupo = array(
205             &$fBtnAccion,
206             &$fBtnCancelar,
207         );
208         $this->addGroup($grupo, 'botones');
209     }
210     // -X2C
211
212     // +X2C Operation 510
213     /**
214      * Llena un objeto con los datos del formulario.
215      *
216      * @param  mixed &$obj Objeto a llenar con los datos del formulario. Puede ser GrupoSecciones, Servicio o Sistema.
217      *
218      * @return void
219      * @access public
220      */
221     function llenarObjeto(&$obj) // ~X2C
222     {
223         $tipo  = substr(get_class($obj), 3);
224         if ($tipo == 'gruposecciones') {
225             $tipo = 'grupo';
226         }
227         $padre = $tipo.'_padre';
228         // Elementos.
229         $obj->$tipo = $this->getSubmitValue($tipo);
230         $obj->habilitado = $this->getSubmitValue('habilitado');
231         if ($tipo == 'grupo' or $tipo == 'servicio') {
232             $obj->$padre = $this->getSubmitValue($padre);
233             $obj->nombre = $this->getSubmitValue('nombre');
234         }
235         if ($tipo == 'grupo') {
236             $obj->antiguedad    = $this->getSubmitValue('antiguedad');
237             $obj->secciones     = $this->getSubmitValue('secciones');
238             $obj->mostrar_hijos = $this->getSubmitValue('mostrar_hijos');
239         }
240         if ($tipo == 'servicio') {
241             $obj->descripcion     = $this->getSubmitValue('descripcion');
242             $obj->necesita_logueo = $this->getSubmitValue('logueo');
243         }
244         if ($tipo == 'sistema') {
245             $obj->tipo = $this->getSubmitValue('tipo') ? 'embperl' : 'php';
246         }
247         if ($tipo == 'servicio' or $tipo == 'sistema') {
248             $obj->link       = $this->getSubmitValue('link');
249             $obj->link_ayuda = $this->getSubmitValue('link_ayuda');
250             $obj->icono      = $this->getSubmitValue('icono');
251         }
252     }
253     // -X2C
254
255 } // -X2C Class :AI_Form
256
257 ?>