1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
5 -------------------------------------------------------------------------------
6 This file is part of YATTA!.
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)
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.
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 -------------------------------------------------------------------------------
25 -----------------------------------------------------------------------------*/
27 require_once 'MECON/DBO.php';
28 require_once 'PEAR.php';
29 require_once 'Date.php';
32 * Clase para el manejo de los procesos.
36 class YATTA_ProcesoDB extends MECON_DBO {
39 * Identificador del proceso.
47 * Fecha cuando se agrego el proceso.
48 * Formato = DD/MM/YYYY
49 * Puede ser un objeto Date.
65 * Identificador del sistema en el cual se lanzo el proceso.
67 * @var int $id_sistema
70 var $id_sistema = null;
73 * Nombre del sistema en el cual se lanzo el proceso.
75 * @var string $nombre_sistema
78 var $nombre_sistema = null;
81 * Descripcion del proceso.
83 * @var string $descripcion
86 var $descripcion = null;
89 * PID del proceso en el servidor de proceso.
97 * Servidor en donde se ejecuto/a/ara el proceso.
105 * Estado del proceso.
119 * Identificador del usuario responsable por el proceso.
127 * Destinos para el resultado.
128 * array ('mmarre@mecon', 'gmeray@mecon')
130 * @var array $destinos
133 var $destinos = null;
136 * Prioridad el proceso.
138 * @var int $prioridad
141 var $prioridad = null;
144 * Fecha de ejecucion fijada.
146 * @var string $scheduling
149 var $scheduling = null;
152 * Indica si se debe notificar o no al owner sobre el resultado.
154 * @var int $notificar
157 var $notificar = null;
160 * Nombre del archivo resultado
162 * @var string $resultado
165 var $resultado = null;
168 * Nombre del archivo en el tacho
170 * @var string $archivo
176 * Nota explicativa sobre el error producido o el motivo por el cual se
185 * Descripcion del estado.
193 * Indica si el proceso esta activo (No fue borrado por el usuario).
201 * Parametros del proceso. Serializado.
203 * @var string $parametros
206 var $parametros = null;
209 * Carga el objeto con los datos que se pasan por parametro.
211 * @param DB $db DB o DB_Result a usar para la carga.
216 function cargar($db = null)
218 // Si es un resultado, obtengo los elemento.
219 if (is_a($db, 'db_result')) {
220 $this->predefinirAtributos();
221 $res = $db->fetchRow(DB_FETCHMODE_ASSOC);
222 // Si hay error lo devuelve.
223 if (DB::isError($res)) {
229 $this->id = $res['id'];
230 $this->fecha = $res['fecha'];
231 $this->script = $res['script'];
232 $this->id_sistema = $res['id_sistema'];
233 $this->nombre_sistema = $res['nombre_sistema'];
234 $this->descripcion = $res['descripcion'];
235 $this->pid = $res['pid'];
236 $this->server = $res['server'];
237 $this->status = $res['status'];
238 $this->owner = $res['owner'];
239 $this->destinos = split(',', $res['destinos']);
240 $this->prioridad = $res['prioridad'];
241 $this->scheduling = $res['scheduling'];
242 $this->notificar = $res['notificar'];
243 $this->resultado = $res['resultado'];
244 $this->archivo = $res['archivo'];
245 $this->nota = $res['nota'];
246 $this->icono = $res['icono'];
247 $this->activo = $res['activo'];
248 $this->parametros = $res['parametros'];
255 * Borra el objeto de una base de datos.
257 * @param DB $db Base de datos de donde borrar el objeto.
262 function borrar($db = null)
264 if (!is_null($this->id)) {
265 $res = $this->buscar($db);
266 if (DB::isError($res)) {
271 if (is_null($this->archivo) || is_null($this->resultado)) {
272 return $db->query('DELETE FROM yatta.procesos WHERE id = '.
276 return $db->query ('UPDATE yatta.procesos SET activo = 0'.
277 ' WHERE id = '. $this->id);
281 return new PEAR_Error('Debe definirse el id del proceso a borrar.');
286 * Busca los datos en la base.
288 * @param DB $db Conexion a la base de datos.
289 * @param string $operador Indica como deben concatenarse las condiciones de busqueda
290 * @param string $orden Indica de que manera deben ordenarse los resultados de la busqueda
295 function buscar($db = null, $operador = MECON_DBO_OR, $orden = null)
298 if (is_null($this->owner)) {
299 return new PEAR_Error ('Debe definirse el Owner del proceso.');
302 if (!is_null($this->id)) {
303 $where[] = 'p.id = '.$this->id;
305 if (!is_null($this->fecha)) {
306 if (is_object($this->fecha) ) {
307 $fecha = $this->fecha->format("%Y-%m-%d");
310 list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha);
311 $fecha = $anio.'-'.$mes.'-'.$dia;
313 $where[] = 'p.fecha = '. $db->quote("$fecha");
315 if (!is_null($this->script)) {
316 $where[] = 'p.script LIKE '. $db->quote("%$this->script%");
318 if (!is_null($this->id_sistema)) {
319 $where[] = 'p.id_sistema = '. $this->id_sistema;
321 if (!is_null($this->nombre_sistema)) {
322 $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%");
324 if (!is_null($this->descripcion)) {
325 $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%");
327 if (!is_null($this->pid)) {
328 $where[] = 'p.pid = '.$this->pid;
330 if (!is_null($this->server)) {
331 $where[] = 'p.server = '.$this->server;
333 if (!is_null($this->status)) {
334 $where[] = 'p.status = '.$this->status;
336 if (!is_null($this->destinos)) {
337 if (is_array($this->destinos)) {
338 foreach ($this->destinos as $destino) {
339 $where[] = 'p.destinos LIKE '. $db->quote("%$destino");
343 $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%");
346 if (!is_null($this->prioridad)) {
347 $where[] = 'p.prioridad = '.$this->prioridad;
349 if (!is_null($this->scheduling)) {
350 $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%");
352 if (!is_null($this->notificar)) {
353 $where[] = 'p.notificar ='. $this->notificar;
355 if (!is_null($this->resultado)) {
356 $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%");
358 if (!is_null($this->nota)) {
359 $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%");
361 if (!is_null($this->activo)) {
362 $where[] = 'p.activo = '. $this->activo;
364 if (!is_null($this->parametros)) {
365 $where[] = 'p.parametros LIKE '. $db->quote("%$this->parametros%");
368 $where = 'WHERE p.owner = '. $db->quote("$this->owner").
369 'AND p.id_sistema = s.id_sistema AND ('. join ("$operador
373 $where = 'WHERE p.owner = '. $db->quote("$this->owner").
374 'AND p.id_sistema = s.id_sistema';
377 if (is_string($orden))
379 $orden = array($orden);
383 $orden = 'ORDER BY '.join(',',$orden);
389 return $db->query("SELECT p.id AS id,
390 DATE_FORMAT(p.fecha, '%d-%m-%Y') AS fecha,
392 script, p.id_sistema AS id_sistema, s.nombre_sistema AS
393 nombre_sistema, p.descripcion AS descripcion, p.pid AS pid,
394 p.server AS server, p.status AS status, p.owner AS owner,
395 p.destinos AS destinos, p.prioridad AS prioridad, p.scheduling
396 AS scheduling, p.notificar AS notificar, p.resultado AS
397 resultado, p.nota AS nota, p.archivo AS archivo, ".
398 "p.parametros AS parametros, ".
399 "IF (p.status = 0, 'El proceso está en cola. Aún no se ejecutó.".
401 "IF(p.status = 1, 'El proceso se está ejecutando en este momento.".
403 "IF(p.status = 2, 'El proceso ha finalizado. ".
405 "IF(p.status = 3, 'Se produjo un error durante la ejecución".
408 "'El proceso fue detenido por alguna persona (el responsable o".
409 " el administrador).".
414 ") AS icono, p.activo AS activo
415 FROM yatta.procesos AS p, samurai.sistema AS s
421 * Guarda los datos en la base.
423 * @param DB $db Conexion a la base de datos.
424 * @param bool $nuevo Indica si se trata de un nuevo registro en la base.
429 function guardar($db = null, $nuevo = true)
431 return $db->query ('UPDATE yatta.procesos SET nota = \''.$this->nota.
432 '\', status = '.$this->status.
433 ' WHERE id = '. $this->id);
437 * Hace un reset de los atributos.
442 function predefinirAtributos() {
445 $this->script = null;
446 $this->id_sistema = null;
447 $this->nombre_sistema = null;
448 $this->descripcion = null;
450 $this->server = null;
451 $this->status = null;
453 $this->destinos = null;
454 $this->prioridad = null;
455 $this->scheduling = null;
456 $this->notificar = null;
457 $this->resultado = null;
458 $this->archivo = null;
461 $this->activo = null;
465 * Devuelve un array asociativo con los valores del proceso.
470 function obtenerDatos() {
472 'script' => $this->script,
473 'id_sistema' => $this->id_sistema,
474 'descripcion' => $this->descripcion,
475 'owner' => $this->owner,
476 'destinos' => $this->destinos,
477 'prioridad' => $this->prioridad,
478 'scheduling' => $this->scheduling,
479 'notificar' => $this->notificar,
480 'resultado' => $this->resultado,
481 'activo' => $this->activo,
482 'parametros' => $this->parametros,