]> git.llucax.com Git - mecon/yatta.git/blob - lib/YATTA/ProcesoDB.php
Agrego la clase YATTA_DB para el manejo interno de las bases de datos.
[mecon/yatta.git] / lib / YATTA / ProcesoDB.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     YATTA!
5 -------------------------------------------------------------------------------
6 This file is part of YATTA!.
7
8 YATTA! is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 YATTA! is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: lun dic  1 16:59:29 ART 2003
22 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/DBO.php';
28 require_once 'PEAR.php';
29 require_once 'Date.php';
30
31 /**
32  * Clase para el manejo de los procesos.
33  *
34  * @access public
35  */
36 class YATTA_ProcesoDB extends MECON_DBO {
37
38     /**
39      * Identificador del proceso.
40      *
41      * @var    int $id
42      * @access public
43      */
44     var $id = null;
45      
46     /**
47      * Fecha cuando se agrego el proceso.
48      * Formato = DD/MM/YYYY
49      * Puede ser un objeto Date.
50      *
51      * @var    string $fecha
52      * @access public
53      */
54     var $fecha = null;
55      
56     /**
57      * Proceso a ejecutar.
58      *
59      * @var    string $script
60      * @access public
61      */
62     var $script = null;
63      
64     /**
65      * Identificador del sistema en el cual se lanzo el proceso.
66      *
67      * @var    int $id_sistema
68      * @access public
69      */
70     var $id_sistema = null;
71
72     /**
73      * Nombre del sistema en el cual se lanzo el proceso.
74      *
75      * @var    string $nombre_sistema
76      * @access public
77      */
78     var $nombre_sistema = null;
79      
80     /**
81      * Descripcion del proceso.
82      *
83      * @var    string $descripcion
84      * @access public
85      */
86     var $descripcion = null;
87     
88     /**
89      * PID del proceso en el servidor de proceso.
90      *
91      * @var    int $pid
92      * @access public
93      */
94     var $pid = null;
95     
96     /**
97      * Servidor en donde se ejecuto/a/ara el proceso.
98      *
99      * @var    int $server  
100      * @access public
101      */
102     var $server = null;
103     
104     /**
105      * Estado del proceso.       
106      * 0 = En Espera
107      * 1 = Procesando
108      * 2 = Finalizado
109      * 3 = Error
110      * 4 = Abortado
111      * 5 = Abortar
112      *
113      * @var    int $status
114      * @access public
115      */
116     var $status = null;
117     
118     /**
119      * Identificador del usuario responsable por el proceso.
120      *
121      * @var    string $owner
122      * @access public
123      */
124     var $owner = null;
125     
126     /**
127      * Destinos para el resultado.
128      * array ('mmarre@mecon', 'gmeray@mecon')
129      *
130      * @var    array $destinos
131      * @access public
132      */
133     var $destinos = null;
134     
135     /**
136      * Prioridad el proceso.
137      *
138      * @var    int $prioridad
139      * @access public
140      */
141     var $prioridad = null;
142     
143     /**
144      * Fecha de ejecucion fijada.
145      *
146      * @var    string $scheduling
147      * @access public
148      */
149     var $scheduling = null;
150     
151     /**
152      * Indica si se debe notificar o no al owner sobre el resultado.
153      *
154      * @var    int $notificar
155      * @access public
156      */
157     var $notificar = null;
158     
159     /**
160      * Nombre del archivo resultado
161      *
162      * @var    string $resultado
163      * @access public
164      */
165     var $resultado = null;
166     
167     /**
168      * Nombre del archivo en el tacho
169      *
170      * @var    string $archivo
171      * @access public
172      */
173     var $archivo = null;
174     
175     /**
176      * Nota explicativa sobre el error producido o el motivo por el cual se
177      * aborto el proceso.
178      *
179      * @var    string $nota
180      * @access public
181      */
182     var $nota = null;
183
184     /**
185      * Descripcion del estado.
186      *
187      * @var    string $icono
188      * @access public
189      */
190     var $icono = null;
191     
192     /**
193      * Carga el objeto con los datos que se pasan por parametro.
194      * 
195      * @param  DB $db DB o DB_Result a usar para la carga.
196      *
197      * @return mixed
198      * @access public
199      */
200     function cargar($db = null)
201     {
202         // Si es un resultado, obtengo los elemento.
203         if (is_a($db, 'db_result')) {
204             $this->predefinirAtributos();
205             $res = $db->fetchRow(DB_FETCHMODE_ASSOC);
206             // Si hay error lo devuelve.
207             if (DB::isError($res)) {
208                 return $res;
209             }
210             elseif (!$res) {
211                 return false;
212             }
213             $this->id               = $res['id'];
214             $this->fecha            = $res['fecha']; 
215             $this->script           = $res['script'];
216             $this->id_sistema       = $res['id_sistema'];
217             $this->nombre_sistema   = $res['nombre_sistema'];
218             $this->descripcion      = $res['descripcion'];
219             $this->pid              = $res['pid'];
220             $this->server           = $res['server'];
221             $this->status           = $res['status'];
222             $this->owner            = $res['owner'];
223             $this->destinos         = split(',', $res['destinos']);
224             $this->prioridad        = $res['prioridad'];
225             $this->scheduling       = $res['scheduling'];
226             $this->notificar        = $res['notificar'];
227             $this->resultado        = $res['resultado'];
228             $this->archivo          = $res['archivo'];
229             $this->nota             = $res['nota'];
230             $this->icono            = $res['icono'];
231             return true;
232         }
233         return false; 
234     }
235
236     /**
237      * Borra el objeto de una base de datos.
238      *
239      * @param  DB $db Base de datos de donde borrar el objeto.
240      *
241      * @return mixed
242      * @access public
243      */
244     function borrar($db = null)
245     {
246         trigger_error('Not implemented!', E_USER_WARNING); 
247     }
248
249     /**
250      * Busca los datos en la base.
251      *
252      * @param  DB $db Conexion a la base de datos.
253      * @param  string $operador Indica como deben concatenarse las condiciones de busqueda
254      * @param  string $orden Indica de que manera deben ordenarse los resultados de la busqueda
255      *
256      * @return mixed
257      * @access public
258      */
259     function buscar($db = null, $operador = MECON_DBO_OR, $orden = null) 
260     {
261         // Armo el WHERE.
262         if (is_null($this->owner)) {
263             return new PEAR_Error ('Debe definirse el Owner del proceso.');
264         }
265         $where = array();
266         if (!is_null($this->id)) {
267             $where[] = 'p.id = '.$this->id;
268         }
269         if (!is_null($this->fecha)) {
270             if (is_object($this->fecha) ) {
271                 $fecha = $this->fecha->format("%Y-%m-%d");
272             }
273             else {
274                 list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha);
275                 $fecha = $anio.'-'.$mes.'-'.$dia;
276             }
277             $where[] = 'p.fecha = '. $db->quote("$fecha");
278         }
279         if (!is_null($this->script)) {
280             $where[] = 'p.script LIKE '. $db->quote("%$this->script%");
281         }
282         if (!is_null($this->id_sistema)) {
283             $where[] = 'p.id_sistema = '. $this->id_sistema; 
284         }
285         if (!is_null($this->nombre_sistema)) {
286             $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%");
287         }
288         if (!is_null($this->descripcion)) {
289             $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%");
290         }
291         if (!is_null($this->pid)) {
292             $where[] = 'p.pid = '.$this->pid;
293         }
294         if (!is_null($this->server)) {
295             $where[] = 'p.server = '.$this->server;
296         }
297         if (!is_null($this->status)) {
298             $where[] = 'p.status = '.$this->status;
299         }
300         if (!is_null($this->destinos)) {
301             if (is_array($this->destinos)) {
302                 foreach ($this->destinos as $destino) {
303                     $where[] = 'p.destinos LIKE '. $db->quote("%$destino");
304                 }
305             }
306             else {
307                 $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%");
308             }
309         }
310         if (!is_null($this->prioridad)) {
311             $where[] = 'p.prioridad = '.$this->prioridad;
312         }
313         if (!is_null($this->scheduling)) {
314             $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%");
315         } 
316         if (!is_null($this->notificar)) {
317             $where[] = 'p.notificar ='. $this->notificar;
318         } 
319         if (!is_null($this->resultado)) {
320             $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%");
321         } 
322         if (!is_null($this->nota)) {
323             $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%");
324         } 
325         if ($where) {
326             $where = 'WHERE p.owner = '. $db->quote("$this->owner").
327                 'AND p.id_sistema = s.id_sistema AND ('. join ("$operador
328                         ", $where).')';
329         } 
330         else {
331             $where = 'WHERE p.owner = '. $db->quote("$this->owner").
332                 'AND p.id_sistema = s.id_sistema';
333         }
334         // Armo el ORDER BY.
335         if (is_string($orden))
336         {
337             $orden = array($orden);
338         }
339         if ($orden) 
340         {
341             $orden = 'ORDER BY '.join(',',$orden);
342         }
343         else {
344             $orden = '';
345         }
346         
347         return $db->query("SELECT p.id AS id, 
348                 DATE_FORMAT(p.fecha, '%d-%m-%Y') AS fecha, 
349                 p.script AS
350                 script, p.id_sistema AS id_sistema, s.nombre_sistema AS
351                 nombre_sistema, p.descripcion AS descripcion, p.pid AS pid, 
352                 p.server AS server, p.status AS status, p.owner AS owner, 
353                 p.destinos AS destinos, p.prioridad AS prioridad, p.scheduling 
354                 AS scheduling, p.notificar AS notificar, p.resultado AS 
355                 resultado, p.nota AS nota, p.archivo AS archivo, ".
356                 "IF (p.status = 0, 'El proceso esta en cola. Aun no se ejecuto.".
357                 "', ".
358                 "IF(p.status = 1, 'El proceso se esta ejecutando en este momento.".
359                 "',".
360                 "IF(p.status = 2, 'El proceso ha finalizado. ".
361                 "',".
362                 "IF(p.status = 3, 'Se produjo un error durante la ejecucion".
363                 " del proceso.".
364                 "',".
365                 "'El proceso fue detenido por alguna persona (el responsable o".
366                 " el administrador).".
367                 "'".
368                 ")".
369                 ")".
370                 ")".
371                 ") AS icono               
372                 FROM yatta.procesos AS p, samurai.sistema AS s
373                 $where
374                 $orden");
375     }
376
377     /**
378      * Guarda los datos en la base.
379      *
380      * @param  DB $db Conexion a la base de datos.
381      * @param  bool $nuevo Indica si se trata de un nuevo registro en la base.
382      *
383      * @return mixed
384      * @access public
385      */
386     function guardar($db = null, $nuevo = true)
387     {
388         return $db->query ('UPDATE yatta.procesos SET nota = \''.$this->nota.
389                 '\', status = '.$this->status.
390                 ' WHERE id = '. $this->id);
391     }
392
393     /**
394      * Hace un reset de los atributos.
395      * 
396      * @return void
397      * @access public
398      */
399     function predefinirAtributos() {
400         $this->id = null;
401         $this->fecha = null;
402         $this->script = null;
403         $this->id_sistema = null;
404         $this->nombre_sistema = null;
405         $this->descripcion = null;
406         $this->pid = null;
407         $this->server = null;
408         $this->status = null;
409         $this->owner = null;
410         $this->destinos = null;
411         $this->prioridad = null;
412         $this->scheduling = null;
413         $this->notificar = null;
414         $this->resultado = null;
415         $this->archivo = null;
416         $this->nota = null;
417         $this->icono = null;
418     }
419     
420     /**
421      * Devuelve un array asociativo con los valores del proceso.
422      *
423      * @return array
424      * @access public
425      */
426     function obtenerDatos() {
427         return array (
428                         'script'        => $this->script,
429                         'id_sistema'    => $this->id_sistema,
430                         'descripcion'   => $this->descripcion,
431                         'owner'         => $this->owner,
432                         'destinos'      => $this->destinos,
433                         'prioridad'     => $this->prioridad,
434                         'scheduling'    => $this->scheduling,
435                         'notificar'     => $this->notificar,
436                         'resultado'     => $this->resultado,
437                 );
438     }
439 }
440 ?>