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