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