]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/Servicio.php
Se agrega nuevo campo para indicar si se debe abrir en ventana nueva.
[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  * @access public
58  */
59 class AI_Servicio extends AI_DBTreeObject {
60     /**
61      * ID del servicio.
62      *
63      * @var    int $servicio
64      * @access public
65      */
66     var $servicio = 0;
67
68     /**
69      * @var    int $servicio_padre
70      * @access public
71      */
72     var $servicio_padre = 0;
73
74     /**
75      * Nombre del servicio.
76      *
77      * @var    string $nombre
78      * @access public
79      */
80     var $nombre = '';
81
82     /**
83      * Descripción del servicio.
84      *
85      * @var    string $descripcion
86      * @access public
87      */
88     var $descripcion = '';
89
90     /**
91      * Ícono del servicio.
92      *
93      * @var    string $icono
94      * @access public
95      */
96     var $icono = '';
97
98     /**
99      * Enlace a donde el este servicio.
100      *
101      * @var    string $link
102      * @access public
103      */
104     var $link = '';
105
106     /**
107      * Enlace a donde se encuentra la ayuda del servicio.
108      *
109      * @var    string $link_ayuda
110      * @access public
111      */
112     var $link_ayuda = '';
113
114     /**
115      * True si es necesario que el usuario se loguee para usar el servicio.
116      *
117      * @var    bool $necesita_logueo
118      * @access public
119      */
120     var $necesita_logueo = false;
121
122     /**
123      * Indica si esta habilitado.
124      *
125      * @var    bool $habilitado
126      * @access public
127      */
128     var $habilitado = true;
129
130     /**
131      * Indica si debe abrirse en una ventana nueva.
132      *
133      * @var    bool $ventana_nueva
134      * @access public
135      */
136     var $ventana_nueva = false;
137
138     // ~X2C
139
140     // +X2C Operation 465
141     /**
142      * @param  int $servicio ID del servicio.
143      *
144      * @return void
145      * @access public
146      */
147     function AI_Servicio($servicio = 0) // ~X2C
148     {
149         parent::AI_DBTreeObject($servicio, AI_SERVICIO_CONFFILE);
150     }
151     // -X2C
152
153     // +X2C Operation 458
154     /**
155      * @param  DB $db DB donde guardar.
156      * @param  bool $nuevo Si es true, se fuerza a guardar el Servicio como nuevo.
157      *
158      * @return PEAR_Error
159      * @access public
160      */
161     function guardar($db, $nuevo = false) // ~X2C
162     {
163         $datos = array(
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,
172         );
173         $err = parent::guardar($db, $datos, $nuevo);
174         if (PEAR::isError($err)) {
175             return $err;
176         }
177     }
178     // -X2C
179
180     // +X2C Operation 539
181     /**
182      * Carga hijos de un servicio. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos).
183      *
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.
187      *
188      * @return mixed
189      * @access public
190      */
191     function cargarHijos($db, $soloHabilitados = true, $orden = false) // ~X2C
192     {
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) {
199                     $query = "
200                         SELECT
201                             A.*,
202                             count(1) as COUNT,
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";
210                     }
211                     $query .= "
212                         GROUP BY A.$id_field
213                         ORDER BY RENGLONES DESC, COUNT DESC, A.nombre";
214                 } elseif ($orden === AI_SERVICIO_ORDEN_LONG_NOMBRE) {
215                     $query = "
216                         SELECT *
217                         FROM {$this->conf['base']}.{$this->conf['tabla']}
218                         WHERE $id_padre = $id";
219                     if ($soloHabilitados) {
220                         $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
221                     }
222                     $query .= ' ORDER BY LENGTH(nombre)';
223                 } else {
224                     return new AI_Error(AI_ERROR_ORDEN_INVALIDO,
225                         "Tipo de órden incorrecto [orden=$orden]");
226                 }
227                 $result = $db->query($query);
228                 if (DB::isError($result)) {
229                     return $result;
230                 }
231                 return parent::cargarHijos($result, $soloHabilitados, $orden);
232             }
233         }
234         return parent::cargarHijos($db, $soloHabilitados, $orden);
235     }
236     // -X2C
237
238 } // -X2C Class :AI_Servicio
239
240 ?>