2 // vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
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: Tue Jun 24 16:22:07 2003 |
24 // | Autor: Leandro Lucarella <llucar@mecon.gov.ar> |
25 // +--------------------------------------------------------------------+
31 require_once 'AI/DBTreeObject.php';
34 require_once 'AI/Error.php';
37 * Archivo de configuración.
39 define('AI_SERVICIO_CONFFILE', dirname(__FILE__).'/Servicio.ini');
42 * Trae los servicios en un orden según la <em>longitud</em> de los hijos.
43 * La <em>longitud<em> de los hijos se calcula prediciendo la cantidad de
44 * renglones que va a ocupar cada hijo y sumándolos para un mismo padre.
46 define('AI_SERVICIO_ORDEN_LONG_HIJOS', 1);
49 * Trae los servicios en un orden según la longitud del nombre.
51 define('AI_SERVICIO_ORDEN_LONG_NOMBRE', 2);
53 // +X2C Class 413 :AI_Servicio
59 class AI_Servicio extends AI_DBTreeObject {
69 * @var int $servicio_padre
72 var $servicio_padre = 0;
75 * Nombre del servicio.
83 * Descripción del servicio.
85 * @var string $descripcion
88 var $descripcion = '';
99 * Enlace a donde el este servicio.
107 * Enlace a donde se encuentra la ayuda del servicio.
109 * @var string $link_ayuda
112 var $link_ayuda = '';
115 * True si es necesario que el usuario se loguee para usar el servicio.
117 * @var bool $necesita_logueo
120 var $necesita_logueo = false;
123 * Indica si esta habilitado.
125 * @var bool $habilitado
128 var $habilitado = true;
131 * Indica si debe abrirse en una ventana nueva.
133 * @var bool $ventana_nueva
136 var $ventana_nueva = false;
140 // +X2C Operation 465
142 * @param int $servicio ID del servicio.
147 function AI_Servicio($servicio = 0) // ~X2C
149 parent::AI_DBTreeObject($servicio, AI_SERVICIO_CONFFILE);
153 // +X2C Operation 458
155 * @param DB $db DB donde guardar.
156 * @param bool $nuevo Si es true, se fuerza a guardar el Servicio como nuevo.
161 function guardar($db, $nuevo = false) // ~X2C
164 'servicio_padre' => intval($this->servicio_padre),
165 'nombre' => $this->nombre,
166 'descripcion' => $this->descripcion,
167 'icono' => $this->icono,
168 'link' => $this->link,
169 'link_ayuda' => $this->link_ayuda,
170 'necesita_logueo' => $this->necesita_logueo ? 1 : 0,
171 'habilitado' => $this->habilitado ? 1 : 0,
173 $err = parent::guardar($db, $datos, $nuevo);
174 if (PEAR::isError($err)) {
180 // +X2C Operation 539
182 * Carga hijos de un servicio. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos).
184 * @param mixed $db Base de datos o resultado a usar.
185 * @param bool $soloHabilitados Si es true, sólo trae los servicios habilitados.
186 * @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.
191 function cargarHijos($db, $soloHabilitados = true, $orden = false) // ~X2C
193 if (!is_a($db, 'db_result')) {
194 if (is_int($orden)) {
195 $id_field = $this->conf['id'];
196 $id_padre = $this->conf['padre'];
197 $id = intval($this->$id_field);
198 if ($orden === AI_SERVICIO_ORDEN_LONG_HIJOS) {
203 SUM(CEIL(LENGTH(B.nombre) / 22)) as RENGLONES
204 FROM {$this->conf['base']}.{$this->conf['tabla']} AS A,
205 {$this->conf['base']}.{$this->conf['tabla']} AS B
206 WHERE A.$id_field = B.$id_padre
207 AND A.$id_padre = $id";
208 if ($soloHabilitados) {
209 $query .= " AND A.{$this->conf['habilitado']} = 1";
213 ORDER BY RENGLONES DESC, COUNT DESC, A.nombre";
214 } elseif ($orden === AI_SERVICIO_ORDEN_LONG_NOMBRE) {
217 FROM {$this->conf['base']}.{$this->conf['tabla']}
218 WHERE $id_padre = $id";
219 if ($soloHabilitados) {
220 $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
222 $query .= ' ORDER BY LENGTH(nombre)';
224 return new AI_Error(AI_ERROR_ORDEN_INVALIDO,
225 "Tipo de órden incorrecto [orden=$orden]");
227 $result = $db->query($query);
228 if (DB::isError($result)) {
231 return parent::cargarHijos($result, $soloHabilitados, $orden);
234 return parent::cargarHijos($db, $soloHabilitados, $orden);
238 } // -X2C Class :AI_Servicio