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