]> git.llucax.com Git - mecon/yatta.git/blob - lib/YATTA/Proceso.php
87dd3a03f8b4ded4ecaf774550358f9427e4af00
[mecon/yatta.git] / lib / YATTA / Proceso.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_Proceso 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 sin copiar el resultado al tacho
109      * 3 = Finalizado
110      * 4 = Error
111      * 5 = Abortado
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      * Nota explicativa sobre el error producido o el motivo por el cual se
169      * aborto el proceso.
170      *
171      * @var    string $nota
172      * @access public
173      */
174     var $nota = null;
175     
176     /**
177      * Carga el objeto con los datos que se pasan por parametro.
178      * 
179      * @param  DB $db DB o DB_Result a usar para la carga.
180      *
181      * @return mixed
182      * @access public
183      */
184     function cargar($db = null)
185     {
186         // Si es un resultado, obtengo los elemento.
187         if (is_a($db, 'db_result')) {
188             $this->predefinirAtributos();
189             $res = $db->fetchRow(DB_FETCHMODE_ASSOC);
190             // Si hay error lo devuelve.
191             if (DB::isError($res)) {
192                 return $res;
193             }
194             elseif (!$res) {
195                 return false;
196             }
197
198             $this->id               = $res['id'];
199             $fecha                  =& new Date ($res['fecha'].' 00:00:00');
200             $this->fecha            = $fecha; 
201             $this->script           = $res['script'];
202             $this->id_sistema       = $res['id_sistema'];
203             $this->nombre_sistema   = $res['nombre_sistema'];
204             $this->descripcion      = $res['descripcion'];
205             $this->pid              = $res['pid'];
206             $this->server           = $res['server'];
207             $this->status           = $res['status'];
208             $this->owner            = $res['owner'];
209             $this->destinos         = split(',', $res['destinos']);
210             $this->prioridad        = $res['prioridad'];
211             $this->scheduling       = $res['scheduling'];
212             $this->notificar        = $res['notificar'];
213             $this->resultado        = $res['resultado'];
214             $this->nota             = $res['nota'];
215             return true;
216         }
217         return false; 
218     }
219
220     /**
221      * Borra el objeto de una base de datos.
222      *
223      * @param  DB $db Base de datos de donde borrar el objeto.
224      *
225      * @return mixed
226      * @access public
227      */
228     function borrar($db = null)
229     {
230         trigger_error('Not implemented!', E_USER_WARNING); 
231     }
232
233     /**
234      * Busca los datos en la base.
235      *
236      * @param  DB $db Conexion a la base de datos.
237      * @param  string $operador Indica como deben concatenarse las condiciones de busqueda
238      * @param  string $orden Indica de que manera deben ordenarse los resultados de la busqueda
239      *
240      * @return mixed
241      * @access public
242      */
243     function buscar($db = null, $operador = MECON_DBO_OR, $orden = null) 
244     {
245         // Armo el WHERE.
246         $where = array();
247         if (!is_null($this->id)) {
248             $where[] = 'p.id = '.$this->id;
249         }
250         if (!is_null($this->fecha)) {
251             if (is_object($this->fecha) ) {
252                 $fecha = $this->fecha->format("%Y-%m-%d");
253             }
254             else {
255                 list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha);
256                 $fecha = $anio.'-'.$mes.'-'.$dia;
257             }
258             $where[] = 'p.fecha = '. $db->quote("$fecha");
259         }
260         if (!is_null($this->script)) {
261             $where[] = 'p.script LIKE '. $db->quote("%$this->script%");
262         }
263         if (!is_null($this->id_sistema)) {
264             $where[] = 'p.id_sistema = '. $this->id_sistema; 
265         }
266         if (!is_null($this->nombre_sistema)) {
267             $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%");
268         }
269         if (!is_null($this->descripcion)) {
270             $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%");
271         }
272         if (!is_null($this->pid)) {
273             $where[] = 'p.pid = '.$this->pid;
274         }
275         if (!is_null($this->server)) {
276             $where[] = 'p.server = '.$this->server;
277         }
278         if (!is_null($this->status)) {
279             $where[] = 'p.status = '.$this->status;
280         }
281         if (!is_null($this->owner)) {
282             $where[] = 'p.owner LIKE '. $db->quote("%$this->owner%");
283         }
284         if (!is_null($this->destinos)) {
285             if (is_array($this->destinos)) {
286                 foreach ($this->destinos as $destino) {
287                     $where[] = 'p.destinos LIKE '. $db->quote("%$destino");
288                 }
289             }
290             else {
291                 $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%");
292             }
293         }
294         if (!is_null($this->prioridad)) {
295             $where[] = 'p.prioridad = '.$this->prioridad;
296         }
297         if (!is_null($this->scheduling)) {
298             $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%");
299         } 
300         if (!is_null($this->notificar)) {
301             $where[] = 'p.notificar ='. $this->notificar;
302         } 
303         if (!is_null($this->resultado)) {
304             $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%");
305         } 
306         if (!is_null($this->nota)) {
307             $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%");
308         } 
309         if ($where) {
310             $where = 'WHERE p.id_sistema = s.id_sistema AND ('. join ("$operador
311                         ", $where).')';
312         } 
313         else {
314             $where = 'WHERE p.id_sistema = s.id_sistema';
315         }
316         // Armo el ORDER BY.
317         if (is_string($orden))
318         {
319             $orden = array($orden);
320         }
321         if ($orden) 
322         {
323             $orden = 'ORDER BY '.join(',',$orden);
324         }
325         else {
326             $orden = '';
327         }
328         
329         return $db->query("SELECT p.id AS id, p.fecha AS fecha, p.script AS
330                 script, p.id_sistema AS id_sistema, s.nombre_sistema AS
331                 nombre_sistema, p.descripcion AS descripcion, p.pid AS pid, 
332                 p.server AS server, p.status AS status, p.owner AS owner, 
333                 p.destinos AS destinos, p.prioridad AS prioridad, p.scheduling 
334                 AS scheduling, p.notificar AS notificar, p.resultado AS 
335                 resultado, p.nota AS nota,".
336                 "IF (p.status = 0, 'El proceso esta en cola. Aun no se ejecuto.".
337                 " Puede abortar su ejecucion presionando en el icono.', ".
338                 "IF(p.status = 1, 'El proceso se esta ejecutando en este momento.".
339                 " Puede abortar su ejecucion presionando en el icono.',".
340                 "IF(p.status = 2, 'El proceso ha finalizado. ".
341                 "Puede buscar el resultado en la seccion archivos.',".
342                 "IF(p.status = 3, 'Se produjo un error durante la ejecucion".
343                 " del proceso. Presionando sobre el icono puede ver una".
344                 " explicacion del mismo.',".
345                 "'El proceso fue detenido por alguna persona (el responsable o".
346                 " el administrador). Presionando sobre el icono puede ver una ".
347                 "explicacion.'".
348                 ")".
349                 ")".
350                 ")".
351                 ") AS icono               
352                 FROM yatta.procesos AS p, samurai.sistema AS s
353                 $where
354                 $orden");
355     }
356
357     /**
358      * @param  DB $db Conexion a la base de datos.
359      * @param  bool $nuevo Indica si se trata de un nuevo registro en la base.
360      *
361      * @return mixed
362      * @access public
363      */
364     function guardar($db = null, $nuevo = false)
365     {
366         if ($nuevo) {
367             $datos = array (
368                         'fecha'         => $this->fecha,
369                         'script'        => $this->script,
370                         'id_sistema'    => $this->id_sistema,
371                         'descripcion'   => $this->descripcion,
372                         'pid'           => $this->pid,
373                         'server'        => $this->server,
374                         'status'        => $this->status,
375                         'owner'         => $this->owner,
376                         'destinos'      => $this->destinos,
377                         'prioridad'     => $this->prioridad,
378                         'scheduling'    => $this->scheduling,
379                         'notificar'     => $this->notificar,
380                         'resultado'     => $this->resultado,
381                         'nota'          => $this->nota
382                     );
383
384             $res = $db->autoExecute('yatta.procesos', $datos,
385                     DB_AUTOQUERY_INSERT);
386         }
387         else {
388             $datos = array (
389                         'fecha'         => $this->fecha,
390                         'script'        => $this->script,
391                         'id_sistema'    => $this->id_sistema,
392                         'descripcion'   => $this->descripcion,
393                         'pid'           => $this->pid,
394                         'server'        => $this->server,
395                         'status'        => $this->status,
396                         'owner'         => $this->owner,
397                         'destinos'      => $this->destinos,
398                         'prioridad'     => $this->prioridad,
399                         'scheduling'    => $this->scheduling,
400                         'notificar'     => $this->notificar,
401                         'resultado'     => $this->resultado,
402                         'nota'          => $this->nota
403                     );
404
405             $res = $db->autoExecute('yatta.procesos', $datos,
406                     DB_AUTOQUERY_UPDATE, 'id = '.$this->id);
407             
408         }
409         return $res;
410     }
411
412     /**
413      * Hace un reset de los atributos.
414      * 
415      * @return void
416      * @access public
417      */
418     function predefinirAtributos() {
419         $this->id = null;
420         $this->fecha = null;
421         $this->script = null;
422         $this->id_sistema = null;
423         $this->nombre_sistema = null;
424         $this->descripcion = null;
425         $this->pid = null;
426         $this->server = null;
427         $this->status = null;
428         $this->owner = null;
429         $this->destinos = null;
430         $this->prioridad = null;
431         $this->scheduling = null;
432         $this->notificar = null;
433         $this->resultado = null;
434         $this->nota = null;
435     }
436 }
437 ?>