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. |
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. |
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. |
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 // +--------------------------------------------------------------------+
31 require_once 'MECON/HTML/QuickForm.php';
34 // Definicion de acciones.
37 define('AI_MODIF', 4);
39 // +X2C Class 507 :AI_Form
41 * Formularios para el Administrador de Intranet.
45 class AI_Form extends MECON_HTML_QuickForm {
50 * Construye un formulario para el objecto especificado.
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.
58 function iniciar(&$obj, $accion = AI_ALTA) // ~X2C
60 # FIXME - Tomar la db desde afuera.
61 $db = AI_DB::connect('../conf/DB.ini');
62 $tipo = substr(get_class($obj), 3);
63 $s_tipo = ucfirst($tipo);
64 if ($tipo == 'gruposecciones') {
66 $s_tipo = 'Grupo de Secciones';
68 $padre = $tipo.'_padre';
74 $s_accion = 'Modificar';
78 $s_accion = 'Agregar';
80 // Construyo con el padre y seteos generales.
81 $this->setRendererOpts(array('width' => '400'));
82 $this->addElement('header','cabecera', $s_accion . ' ' . $s_tipo);
84 if ($tipo == 'sistema') {
85 require_once 'SAMURAI/Sistema.php';
86 $sistemas = array('' => '--');
87 $cargados = AI_Sistema::getSistemasArray($db);
88 foreach (SAMURAI_Sistema::getArraySistemas($db) as $id => $nom) {
89 if (!in_array($id, $cargados)
90 or ($accion & (AI_BAJA | AI_MODIF) and $id == $obj->$tipo)) {
91 $sistemas[$id] = $nom;
94 $fId =& $this->addElement('select', $tipo, 'Sistema', $sistemas);
95 $this->addRule($tipo, 'Debe ingresar un sistema.', 'required');
97 if ($accion & (AI_BAJA | AI_MODIF)) {
98 if ($tipo == 'sistema') {
99 $fId->setSelected($obj->$tipo);
101 $fId =& $this->addElement('text', $tipo, 'Identificador');
102 $fId->setValue($obj->$tipo);
106 if ($tipo == 'grupo' or $tipo == 'servicio') {
107 $tipos = array('' => '--', '0' => 'Página Principal')
108 + arbol2array($db, ($tipo == 'grupo') ? 'grupo_secciones' : $tipo,
109 0, $tipo, 'nombre', $tipo . '_padre', 'ASC');
110 // Saco el elemento actual si hay uno cargado (no puede ser padre de si mismo).
111 if ($accion & (AI_BAJA | AI_MODIF)) {
112 unset($tipos[$obj->$tipo]);
114 $fPadre =& $this->addElement('select', $padre, 'Padre', $tipos);
115 $fNombre =& $this->addElement('text', 'nombre', 'Nombre');
117 $this->addRule('nombre', 'Debe ingresar un nombre.', 'required');
118 $this->addRule($padre, 'Debe ingresar un padre.', 'required');
119 $this->addRule($padre, 'El padre debe ser un número natural.',
122 if ($accion & (AI_BAJA | AI_MODIF)) {
123 $fPadre->setSelected($obj->$padre);
124 $fNombre->setValue($obj->nombre);
127 if ($tipo == 'grupo') {
128 $fAntiguedad =& $this->addElement('select', 'antiguedad', 'Antigüedad',
129 array(3 => '3 días', 1 => '1 día', 7 => '1 semana'));
130 $fSecciones =& $this->addElement('select', 'secciones', 'Secciones',
131 AI_GrupoSecciones::getSeccionesArray($db),
132 array('multiple' => 'multiple', 'size' => 8));
133 $fMostrarHijos =& $this->addElement('checkbox', 'mostrar_hijos', 'Mostrar hijos');
135 $this->addRule('antiguedad', 'La antigüedad debe ser un número natural.',
138 if ($accion & (AI_BAJA | AI_MODIF)) {
139 $fAntiguedad->setSelected($obj->antiguedad);
140 $fSecciones->setSelected($obj->secciones);
141 $fMostrarHijos->setChecked($obj->mostrar_hijos);
144 if ($tipo == 'servicio') {
145 $fDescripcion =& $this->addElement('text', 'descripcion', 'Descripción');
146 $fLogueo =& $this->addElement('checkbox','logueo', 'Necesita login');
148 $this->addRule('descripcion', 'Debe ingresar una descripción.', 'required');
150 if ($accion & (AI_BAJA | AI_MODIF)) {
151 $fDescripcion->setValue($obj->descripcion);
152 $fLogueo->setChecked($obj->necesita_logueo);
155 if ($tipo == 'servicio' or $tipo == 'sistema') {
156 $fLink =& $this->addElement('text', 'link', 'Enlace');
157 $fLinkAyuda =& $this->addElement('text', 'link_ayuda', 'Enlace de la ayuda');
158 //$fIcono =& $this->addElement('text', 'icono', 'Ícono');
159 $fIcono =& $this->addElement('select', 'icono', 'Ícono',
160 listaImagenes('/var/www/sistemas/intranet/www/images', $tipo . '_', '\.gif'));
162 if ($accion & (AI_BAJA | AI_MODIF)) {
163 $fLink->setValue($obj->link);
164 $fLinkAyuda->setValue($obj->link_ayuda);
165 $fIcono->setValue($obj->icono);
168 if ($tipo == 'sistema') {
169 $this->addRule('link', 'Debe ingresar un nombre.', 'required');
170 $this->addRule('icono', 'Debe ingresar un ícono.', 'required');
173 $fHabilitado =& $this->addElement('checkbox','habilitado', 'Está habilitado',
174 '', array('checked' => 'checked'));
176 if ($accion & (AI_BAJA | AI_MODIF)) {
177 $fHabilitado->setChecked($obj->habilitado);
180 $fBtnAccion =& parent::createElement('submit', 'aceptar' , $s_accion);
181 if ($accion & AI_MODIF) {
182 $fBtnCancelar =& parent::createElement('submit', 'modificar' , 'Borrar');
183 } elseif ($accion & AI_ALTA) {
184 $fBtnCancelar =& parent::createElement('reset', 'agregar', 'Limpiar');
185 } elseif ($accion & AI_BAJA) {
186 $fBtnCancelar =& parent::createElement('submit', 'borrar', 'Cancelar');
192 $this->addGroup($grupo, 'botones');
196 // +X2C Operation 510
198 * Llena un objeto con los datos del formulario.
200 * @param mixed &$obj Objeto a llenar con los datos del formulario. Puede ser GrupoSecciones, Servicio o Sistema.
205 function llenarObjeto(&$obj) // ~X2C
207 $tipo = substr(get_class($obj), 3);
208 if ($tipo == 'gruposecciones') {
211 $padre = $tipo.'_padre';
213 $obj->$tipo = $this->getSubmitValue($tipo);
214 $obj->habilitado = $this->getSubmitValue('habilitado');
215 if ($tipo == 'grupo' or $tipo == 'servicio') {
216 $obj->$padre = $this->getSubmitValue($padre);
217 $obj->nombre = $this->getSubmitValue('nombre');
219 if ($tipo == 'grupo') {
220 $obj->antiguedad = $this->getSubmitValue('antiguedad');
221 $obj->secciones = $this->getSubmitValue('secciones');
222 $obj->mostrar_hijos = $this->getSubmitValue('mostrar_hijos');
224 if ($tipo == 'servicio') {
225 $obj->descripcion = $this->getSubmitValue('descripcion');
226 $obj->necesita_logueo = $this->getSubmitValue('logueo');
228 if ($tipo == 'servicio' or $tipo == 'sistema') {
229 $obj->link = $this->getSubmitValue('link');
230 $obj->link_ayuda = $this->getSubmitValue('link_ayuda');
231 $obj->icono = $this->getSubmitValue('icono');
236 } // -X2C Class :AI_Form
238 // FIXME - Poner esto en algun lugar mejor.
239 function listaImagenes($dir = '.', $prepend = '', $append = '')
241 $lista = array('' => '--');
243 while (($file = $d->read()) !== false) {
244 if (preg_match("/$prepend(.*)$append/", $file, $m)) {
245 $nombre = ucwords(join(' ', preg_split('/_/', $m[1])));
246 $lista[$file] = $nombre;
252 // FIXME - Poner esto en algun lugar mejor.
253 function arbol2array(&$db, $tabla, $actual, $id, $nombre, $padre, $order = '', $indent = ' ')
255 // Para llevar el nivel de indentación
258 $sql = "SELECT $id, $nombre
260 if (!is_null($padre)) {
261 $sql .= " WHERE $padre = ".$db->quote($actual);
264 $sql .= " ORDER BY $nombre $order";
266 $array = $db->getAssoc($sql);
267 if (DB::isError($array)) {
271 foreach ($array as $key => $val) {
272 $ret[$key] = str_repeat($indent, $nivel) . $val;
273 $ret += arbol2array($db, $tabla, $key, $id, $nombre, $padre, $order, $indent);