|
// +--------------------------------------------------------------------+
//
// $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,
'ventana_nueva' => $this->ventana_nueva ? 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);
}
}
?>