]> git.llucax.com Git - mecon/ai.git/blob - lib/AI/Sistema.php
Se agrega el checkbox para abrir en ventana nueva.
[mecon/ai.git] / lib / AI / Sistema.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
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/DBObject.php';
31 require_once 'AI/Error.php';
32
33 /**
34  * Archivo de configuración.
35  */
36 define('AI_SISTEMA_CONFFILE', dirname(__FILE__).'/Sistema.ini');
37
38 /**
39  * Sistema.
40  *
41  * @package AI
42  * @access public
43  */
44 class AI_Sistema extends AI_DBObject {
45     /**
46      * ID del sistema (ID en SAMURAI).
47      *
48      * @var    int $sistema
49      * @access public
50      */
51     var $sistema = 0;
52
53     /**
54      * Nombre del sistema (sólo de lectura, extraído de SAMURAI).
55      *
56      * @var    string $nombre
57      * @access public
58      */
59     var $nombre = '';
60
61     /**
62      * Descripción del sistema (sólo de lectura, extraído de SAMURAI).
63      *
64      * @var    string $descripcion
65      * @access public
66      */
67     var $descripcion = '';
68
69     /**
70      * Ícono del sistema.
71      *
72      * @var    string $icono
73      * @access public
74      */
75     var $icono = '';
76
77     /**
78      * Enlace a donde se encuentra el sistema.
79      *
80      * @var    string $link
81      * @access public
82      */
83     var $link = '';
84
85     /**
86      * Enlace a la ayuda del sistema.
87      *
88      * @var    string $link_ayuda
89      * @access public
90      */
91     var $link_ayuda = '';
92
93     /**
94      * Indica si esta habilitado.
95      *
96      * @var    bool $habilitado
97      * @access public
98      */
99     var $habilitado = true;
100
101     /**
102      * @var    string $tipo
103      * @access public
104      */
105     var $tipo = 'php';
106
107     /**
108      * @param  int $sistema ID del sistema.
109      *
110      * @return void
111      * @access public
112      */
113     function AI_Sistema($sistema = 0)
114     {
115         parent::AI_DBObject($sistema, AI_SISTEMA_CONFFILE);
116     }
117
118     /**
119      * @param  mixed $db Base de datos o resultado de donde cargar el sistema.
120      *
121      * @return PEAR_Error
122      * @access public
123      */
124     function cargar($db)
125     {
126         $id_field = $this->conf['id'];
127         $id = intval($this->$id_field);
128         if (is_a($db, 'db_result')) {
129             $result = $db;
130             $db     = $result->dbh;
131         // Si no es un resultado, hago el query.
132         } else {
133             $result = $db->query(
134                 "SELECT AI.*, SA.nombre_sistema as nombre, SA.desc_sistema as descripcion
135                     FROM {$this->conf['base']}.{$this->conf['tabla']} as AI, samurai.sistema as SA
136                     WHERE AI.$id_field = $id AND AI.$id_field = SA.id_sistema"
137             );
138             if (DB::isError($result)) {
139                 return $result;
140             }
141         }
142         // Obtengo la fila.
143         $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
144         if (!$row) {
145             return new AI_Error(AI_ERROR_NO_RESULTADOS,
146                 "No hay más resultados en la DB [id=$id]");
147         }
148         // Asigno valores al objeto.
149         foreach ($row as $key => $val) {
150             $this->$key = $val;
151         }
152         return true;
153     }
154
155     /**
156      * @param  DB $db DB donde guardar.
157      * @param  bool $nuevo Si es true, se fuerza a guardar el servicio como
158      *                     nuevo.
159      *
160      * @return PEAR_Error
161      * @access public
162      */
163     function guardar($db, $nuevo = false)
164     {
165         $datos = array(
166             'icono'      => $this->icono,
167             'link'       => $this->link,
168             'link_ayuda' => $this->link_ayuda,
169             'habilitado' => $this->habilitado ? 1 : 0,
170             'tipo'       => $this->tipo,
171         );
172         $err = parent::guardar($db, $datos, $nuevo);
173         if (PEAR::isError($err)) {
174             return $err;
175         }
176     }
177
178     /**
179      * Obtiene un array con los identificadores de los sistemas cargados.
180      *
181      * @param  DB $db Base de datos de la cual obtener los sistemas.
182      * @param  string $where Clausula WHERE para filtrar la búsqueda.
183      *
184      * @return array
185      * @access public
186      * @static
187      */
188     function getSistemasArray($db, $where = '')
189     {
190         static $conf;
191         if (!$conf) {
192             $conf = parse_ini_file(AI_SISTEMA_CONFFILE, true);
193         }
194         extract($conf);
195         $query = "
196             SELECT    SA.id_sistema, SA.nombre_sistema
197             FROM      samurai.sistema as SA
198             LEFT JOIN $base.$tabla as AI
199             ON        AI.sistema = SA.id_sistema
200             WHERE     AI.sistema IS NULL AND SA.estado = 1";
201         if ($where) {
202             $query .= " AND $where";
203         }
204         $query .= " ORDER BY SA.nombre_sistema ASC";
205         return $db->getAssoc($query);
206     }
207
208     /**
209      * @param  DB $db Base de datos de donde obtener los sistemas.
210      * @param  bool $soloHabilitados Clausula WHERE para filtrar la búsqueda.
211      * @param  string $where Clausula WHERE para filtrar la búsqueda.
212      *
213      * @return array
214      * @access public
215      * @static
216      */
217     function getSistemas($db, $soloHabilitados = true, $where = '')
218     {
219         static $conf;
220         if (!$conf) {
221             $conf = parse_ini_file(AI_SISTEMA_CONFFILE, true);
222         }
223         $id_field = $conf['id'];
224         $tabla    = $conf['base'].'.'.$conf['tabla'];
225         $query = "
226             SELECT AI.*, SA.nombre_sistema as nombre, SA.desc_sistema as descripcion
227             FROM   $tabla as AI, samurai.sistema as SA
228             WHERE  SA.id_sistema = AI.sistema AND SA.estado = 1";
229         if ($soloHabilitados) {
230             $query .= ' AND AI.habilitado = 1';
231         }
232         if ($where) {
233             $query .= " AND $where";
234         }
235         $query  .= ' ORDER BY nombre ASC';
236         $result  = $db->query($query);
237         if (DB::isError($result)) {
238             return $result;
239         }
240         $sistemas = array();
241         $sistema  = new AI_Sistema;
242         $err      = $sistema->cargar($result);
243         while (!PEAR::isError($err)) {
244             $sistemas[] = $sistema->__clone();
245             $err = $sistema->cargar($result);
246         }
247         // Si no hay mas resultados (terminó bien) devuelve el array de
248         // sistemas.
249         if (AI_Error::isError($err)
250                 and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
251             return $sistemas;
252         }
253         // Si no, se devuelve el error.
254         return $err;
255     }
256
257 }
258
259 ?>