]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/Servicio.php
Se mejora un poco el orden por longitud de hijos.
[mecon/ai.git] / lib / AI / Servicio.php
1 <?php
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.                                           |
8 // |                                                                    |
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.                             |
13 // |                                                                    |
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.                           |
18 // |                                                                    |
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 // +--------------------------------------------------------------------+
26 //
27 // $Id$
28 //
29
30 // +X2C includes
31 require_once 'AI/DBTreeObject.php';
32 // ~X2C
33
34 require_once 'AI/Error.php';
35
36 /**
37  * Archivo de configuración.
38  */
39 define('AI_SERVICIO_CONFFILE', dirname(__FILE__).'/Servicio.ini');
40
41 /**
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.
45  */
46 define('AI_SERVICIO_ORDEN_LONG_HIJOS', 1);
47
48 /**
49  * Trae los servicios en un orden según la longitud del nombre.
50  */
51 define('AI_SERVICIO_ORDEN_LONG_NOMBRE', 2);
52
53 // +X2C Class 413 :AI_Servicio
54 /**
55  * Servicio.
56  *
57  * @package AI
58  * @access public
59  */
60 class AI_Servicio extends AI_DBTreeObject {
61     /**
62      * ID del servicio.
63      *
64      * @var    int $servicio
65      * @access public
66      */
67     var $servicio = 0;
68
69     /**
70      * @var    int $servicio_padre
71      * @access public
72      */
73     var $servicio_padre = 0;
74
75     /**
76      * Nombre del servicio.
77      *
78      * @var    string $nombre
79      * @access public
80      */
81     var $nombre = '';
82
83     /**
84      * Descripción del servicio.
85      *
86      * @var    string $descripcion
87      * @access public
88      */
89     var $descripcion = '';
90
91     /**
92      * Ícono del servicio.
93      *
94      * @var    string $icono
95      * @access public
96      */
97     var $icono = '';
98
99     /**
100      * Enlace a donde el este servicio.
101      *
102      * @var    string $link
103      * @access public
104      */
105     var $link = '';
106
107     /**
108      * Enlace a donde se encuentra la ayuda del servicio.
109      *
110      * @var    string $link_ayuda
111      * @access public
112      */
113     var $link_ayuda = '';
114
115     /**
116      * True si es necesario que el usuario se loguee para usar el servicio.
117      *
118      * @var    bool $necesita_logueo
119      * @access public
120      */
121     var $necesita_logueo = false;
122
123     /**
124      * Indica si esta habilitado.
125      *
126      * @var    bool $habilitado
127      * @access public
128      */
129     var $habilitado = true;
130
131     // ~X2C
132
133     // +X2C Operation 465
134     /**
135      * @param  int $servicio ID del servicio.
136      *
137      * @return void
138      * @access public
139      */
140     function AI_Servicio($servicio = 0) // ~X2C
141     {
142         parent::AI_DBTreeObject($servicio, AI_SERVICIO_CONFFILE);
143     }
144     // -X2C
145
146     // +X2C Operation 458
147     /**
148      * @param  DB $db DB donde guardar.
149      * @param  bool $nuevo Si es true, se fuerza a guardar el Servicio como nuevo.
150      *
151      * @return PEAR_Error
152      * @access public
153      */
154     function guardar($db, $nuevo = false) // ~X2C
155     {
156         $datos = array(
157             'servicio_padre'    => intval($this->servicio_padre),
158             'nombre'            => $this->nombre,
159             'descripcion'       => $this->descripcion,
160             'icono'             => $this->icono,
161             'link'              => $this->link,
162             'link_ayuda'        => $this->link_ayuda,
163             'necesita_logueo'   => $this->necesita_logueo ? 1 : 0,
164             'habilitado'        => $this->habilitado ? 1 : 0,
165         );
166         $err = parent::guardar($db, $datos, $nuevo);
167         if (PEAR::isError($err)) {
168             return $err;
169         }
170     }
171     // -X2C
172
173     // +X2C Operation 539
174     /**
175      * Carga hijos de un servicio. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos).
176      *
177      * @param  mixed $db Base de datos o resultado a usar.
178      * @param  bool $soloHabilitados Si es true, sólo trae los servicios habilitados.
179      * @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.
180      *
181      * @return mixed
182      * @access public
183      */
184     function cargarHijos($db, $soloHabilitados = true, $orden = false) // ~X2C
185     {
186         if (!is_a($db, 'db_result')) {
187             if (is_int($orden)) {
188                 $id_field = $this->conf['id'];
189                 $id_padre = $this->conf['padre'];
190                 $id = intval($this->$id_field);
191                 if ($orden === AI_SERVICIO_ORDEN_LONG_HIJOS) {
192                     $query = "
193                         SELECT
194                             A.*,
195                             count(1) as COUNT,
196                             SUM(CEIL(LENGTH(B.nombre) / 22)) as RENGLONES
197                         FROM {$this->conf['base']}.{$this->conf['tabla']} AS A,
198                              {$this->conf['base']}.{$this->conf['tabla']} AS B
199                         WHERE A.$id_field = B.$id_padre
200                             AND A.$id_padre = $id";
201                     if ($soloHabilitados) {
202                         $query .= " AND A.{$this->conf['habilitado']} = 1";
203                     }
204                     $query .= "
205                         GROUP BY A.$id_field
206                         ORDER BY RENGLONES DESC, COUNT DESC";
207                 } elseif ($orden === AI_SERVICIO_ORDEN_LONG_NOMBRE) {
208                     $query = "
209                         SELECT *
210                         FROM {$this->conf['base']}.{$this->conf['tabla']}
211                         WHERE $id_padre = $id";
212                     if ($soloHabilitados) {
213                         $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
214                     }
215                     $query .= ' ORDER BY LENGTH(nombre)';
216                 } else {
217                     return new AI_Error(AI_ERROR_ORDEN_INVALIDO,
218                         "Tipo de órden incorrecto [orden=$orden]");
219                 }
220                 $result = $db->query($query);
221                 if (DB::isError($result)) {
222                     return $result;
223                 }
224                 return parent::cargarHijos($result, $soloHabilitados, $orden);
225             }
226         }
227         return parent::cargarHijos($db, $soloHabilitados, $orden);
228     }
229     // -X2C
230
231 } // -X2C Class :AI_Servicio
232
233 ?>