| // +--------------------------------------------------------------------+ // // $Id$ // // +X2C includes require_once 'MECON/HTML/QuickForm.php'; // ~X2C // Definicion de acciones. define('AI_ALTA', 1); define('AI_BAJA', 2); define('AI_MODIF', 4); // +X2C Class 507 :AI_Form /** * Formularios para el Administrador de Intranet. * * @access public */ class AI_Form extends MECON_HTML_QuickForm { // ~X2C // +X2C Operation 509 /** * 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_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') { $tipo = 'grupo'; $s_tipo = 'Grupo de Secciones'; } $padre = $tipo.'_padre'; switch ($accion) { case AI_BAJA: $s_accion = 'Borrar'; break; case AI_MODIF: $s_accion = 'Modificar'; break; default: $accion = AI_ALTA; $s_accion = 'Agregar'; } // Construyo con el padre y seteos generales. $this->setRendererOpts(array('width' => '400')); $this->addElement('header','cabecera', $s_accion . ' ' . $s_tipo); // Elementos. if ($tipo == 'sistema') { require_once 'SAMURAI/Sistema.php'; $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') { $fId->setSelected($obj->$tipo); } else { $fId =& $this->addElement('text', $tipo, 'Identificador'); $fId->setValue($obj->$tipo); } $fId->freeze(); } if ($tipo == 'grupo' or $tipo == 'servicio') { $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'); $this->addRule($padre, 'Debe ingresar un padre.', 'required'); $this->addRule($padre, 'El padre debe ser un número natural.', 'regex', '/^\d*$/'); // Carga datos. if ($accion & (AI_BAJA | AI_MODIF)) { $fPadre->setSelected($obj->$padre); $fNombre->setValue($obj->nombre); } } if ($tipo == 'grupo') { $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', 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->setSelected($obj->antiguedad); $fSecciones->setSelected($obj->secciones); $fMostrarHijos->setChecked($obj->mostrar_hijos); } } if ($tipo == 'servicio') { $fDescripcion =& $this->addElement('text', 'descripcion', 'Descripción'); $fLogueo =& $this->addElement('checkbox','logueo', 'Necesita login'); // Validación $this->addRule('descripcion', 'Debe ingresar una descripción.', 'required'); // Carga datos. if ($accion & (AI_BAJA | AI_MODIF)) { $fDescripcion->setValue($obj->descripcion); $fLogueo->setChecked($obj->necesita_logueo); } } 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('select', 'icono', 'Ícono', listaImagenes('/var/www/sistemas/intranet/www/images', $tipo . '_', '\.gif')); // Carga datos. if ($accion & (AI_BAJA | AI_MODIF)) { $fLink->setValue($obj->link); $fLinkAyuda->setValue($obj->link_ayuda); $fIcono->setValue($obj->icono); } // Validación. if ($tipo == 'sistema') { $this->addRule('link', 'Debe ingresar un nombre.', 'required'); $this->addRule('icono', 'Debe ingresar un ícono.', 'required'); } } $fHabilitado =& $this->addElement('checkbox','habilitado', 'Está habilitado', '', array('checked' => 'checked')); // Carga datos. if ($accion & (AI_BAJA | AI_MODIF)) { $fHabilitado->setChecked($obj->habilitado); } // Botones. $fBtnAccion =& parent::createElement('submit', 'aceptar' , $s_accion); if ($accion & AI_MODIF) { $fBtnCancelar =& parent::createElement('submit', 'modificar' , 'Borrar'); } elseif ($accion & AI_ALTA) { $fBtnCancelar =& parent::createElement('reset', 'agregar', 'Limpiar'); } elseif ($accion & AI_BAJA) { $fBtnCancelar =& parent::createElement('submit', 'borrar', 'Cancelar'); } $grupo = array( &$fBtnAccion, &$fBtnCancelar, ); $this->addGroup($grupo, 'botones'); } // -X2C // +X2C Operation 510 /** * Llena un objeto con los datos del formulario. * * @param mixed &$obj Objeto a llenar con los datos del formulario. Puede ser GrupoSecciones, Servicio o Sistema. * * @return void * @access public */ function llenarObjeto(&$obj) // ~X2C { $tipo = substr(get_class($obj), 3); if ($tipo == 'gruposecciones') { $tipo = 'grupo'; } $padre = $tipo.'_padre'; // Elementos. $obj->$tipo = $this->getSubmitValue($tipo); $obj->habilitado = $this->getSubmitValue('habilitado'); if ($tipo == 'grupo' or $tipo == 'servicio') { $obj->$padre = $this->getSubmitValue($padre); $obj->nombre = $this->getSubmitValue('nombre'); } if ($tipo == 'grupo') { $obj->antiguedad = $this->getSubmitValue('antiguedad'); $obj->secciones = $this->getSubmitValue('secciones'); $obj->mostrar_hijos = $this->getSubmitValue('mostrar_hijos'); } if ($tipo == 'servicio') { $obj->descripcion = $this->getSubmitValue('descripcion'); $obj->necesita_logueo = $this->getSubmitValue('logueo'); } if ($tipo == 'servicio' or $tipo == 'sistema') { $obj->link = $this->getSubmitValue('link'); $obj->link_ayuda = $this->getSubmitValue('link_ayuda'); $obj->icono = $this->getSubmitValue('icono'); } } // -X2C } // -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 = '   ') { // 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; } ?>