| // +--------------------------------------------------------------------+ // // $Id$ // require_once 'AI/DBTreeObject.php'; require_once 'AI/Error.php'; /** * Archivo de configuración. */ define('AI_SERVICIO_CONFFILE', dirname(__FILE__).'/Servicio.ini'); /** * Trae los servicios en un orden según la longitud de los hijos. * La longitud de los hijos se calcula prediciendo la cantidad de * renglones que va a ocupar cada hijo y sumándolos para un mismo padre. */ define('AI_SERVICIO_ORDEN_LONG_HIJOS', 1); /** * Trae los servicios en un orden según la longitud del nombre. */ define('AI_SERVICIO_ORDEN_LONG_NOMBRE', 2); /** * Servicio. * * @package AI * @access public */ class AI_Servicio extends AI_DBTreeObject { /** * ID del servicio. * * @var int $servicio * @access public */ var $servicio = 0; /** * @var int $servicio_padre * @access public */ var $servicio_padre = 0; /** * Nombre del servicio. * * @var string $nombre * @access public */ var $nombre = ''; /** * Descripción del servicio. * * @var string $descripcion * @access public */ var $descripcion = ''; /** * Ícono del servicio. * * @var string $icono * @access public */ var $icono = ''; /** * Enlace a donde el este servicio. * * @var string $link * @access public */ var $link = ''; /** * Enlace a donde se encuentra la ayuda del servicio. * * @var string $link_ayuda * @access public */ var $link_ayuda = ''; /** * True si es necesario que el usuario se loguee para usar el servicio. * * @var bool $necesita_logueo * @access public */ var $necesita_logueo = false; /** * Indica si esta habilitado. * * @var bool $habilitado * @access public */ var $habilitado = true; /** * Indica si debe abrirse en una ventana nueva. * * @var bool $ventana_nueva * @access public */ var $ventana_nueva = false; /** * @param int $servicio ID del servicio. * * @return void * @access public */ function AI_Servicio($servicio = 0) { parent::AI_DBTreeObject($servicio, AI_SERVICIO_CONFFILE); } /** * @param DB $db DB donde guardar. * @param bool $nuevo Si es true, se fuerza a guardar el Servicio como * nuevo. * * @return PEAR_Error * @access public */ function guardar($db, $nuevo = false) { $datos = array( 'servicio_padre' => intval($this->servicio_padre), 'nombre' => $this->nombre, 'descripcion' => $this->descripcion, 'icono' => $this->icono, 'link' => $this->link, 'link_ayuda' => $this->link_ayuda, 'necesita_logueo' => $this->necesita_logueo ? 1 : 0, 'habilitado' => $this->habilitado ? 1 : 0, ); $err = parent::guardar($db, $datos, $nuevo); if (PEAR::isError($err)) { return $err; } } /** * Carga hijos de un servicio. * Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un * array de objetos (los hijos). * * @param mixed $db Base de datos o resultado a usar. * @param bool $soloHabilitados Si es true, sólo trae los servicios * habilitados. * @param mixed $orden Indica el orden en que se deben traer los hijos. * Puede ser AI_SERVICIO_ORDEN_CANT_HIJOS, * AI_SERVICIO_ORDEN_LONG_NOMBRE o un campo * arbitrario. * * @return mixed * @access public */ function cargarHijos($db, $soloHabilitados = true, $orden = false) { if (!is_a($db, 'db_result')) { if (is_int($orden)) { $id_field = $this->conf['id']; $id_padre = $this->conf['padre']; $id = intval($this->$id_field); if ($orden === AI_SERVICIO_ORDEN_LONG_HIJOS) { $query = " SELECT A.*, count(1) as COUNT, SUM(CEIL(LENGTH(B.nombre) / 22)) as RENGLONES FROM {$this->conf['base']}.{$this->conf['tabla']} AS A, {$this->conf['base']}.{$this->conf['tabla']} AS B WHERE A.$id_field = B.$id_padre AND A.$id_padre = $id"; if ($soloHabilitados) { $query .= " AND A.{$this->conf['habilitado']} = 1"; } $query .= " GROUP BY A.$id_field ORDER BY RENGLONES DESC, COUNT DESC, A.nombre"; } elseif ($orden === AI_SERVICIO_ORDEN_LONG_NOMBRE) { $query = " SELECT * FROM {$this->conf['base']}.{$this->conf['tabla']} WHERE $id_padre = $id"; if ($soloHabilitados) { $query .= ' AND ' . $this->conf['habilitado'] . ' = 1'; } $query .= ' ORDER BY LENGTH(nombre)'; } else { return new AI_Error(AI_ERROR_ORDEN_INVALIDO, "Tipo de órden incorrecto [orden=$orden]"); } $result = $db->query($query); if (DB::isError($result)) { return $result; } return parent::cargarHijos($result, $soloHabilitados, $orden); } } return parent::cargarHijos($db, $soloHabilitados, $orden); } } ?>