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