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_Proceso 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.
118 * Identificador del usuario responsable por el proceso.
126 * Destinos para el resultado.
127 * array ('mmarre@mecon', 'gmeray@mecon')
129 * @var array $destinos
132 var $destinos = null;
135 * Prioridad el proceso.
137 * @var int $prioridad
140 var $prioridad = null;
143 * Fecha de ejecucion fijada.
145 * @var string $scheduling
148 var $scheduling = null;
151 * Indica si se debe notificar o no al owner sobre el resultado.
153 * @var int $notificar
156 var $notificar = null;
159 * Nombre del archivo resultado
161 * @var string $resultado
164 var $resultado = null;
167 * Nombre del archivo en el tacho
169 * @var string $archivo
175 * Nota explicativa sobre el error producido o el motivo por el cual se
184 * Descripcion del estado.
192 * Carga el objeto con los datos que se pasan por parametro.
194 * @param DB $db DB o DB_Result a usar para la carga.
199 function cargar($db = null)
201 // Si es un resultado, obtengo los elemento.
202 if (is_a($db, 'db_result')) {
203 $this->predefinirAtributos();
204 $res = $db->fetchRow(DB_FETCHMODE_ASSOC);
205 // Si hay error lo devuelve.
206 if (DB::isError($res)) {
212 $this->id = $res['id'];
213 $this->fecha = $res['fecha'];
214 $this->script = $res['script'];
215 $this->id_sistema = $res['id_sistema'];
216 $this->nombre_sistema = $res['nombre_sistema'];
217 $this->descripcion = $res['descripcion'];
218 $this->pid = $res['pid'];
219 $this->server = $res['server'];
220 $this->status = $res['status'];
221 $this->owner = $res['owner'];
222 $this->destinos = split(',', $res['destinos']);
223 $this->prioridad = $res['prioridad'];
224 $this->scheduling = $res['scheduling'];
225 $this->notificar = $res['notificar'];
226 $this->resultado = $res['resultado'];
227 $this->archivo = $res['archivo'];
228 $this->nota = $res['nota'];
229 $this->icono = $res['icono'];
236 * Borra el objeto de una base de datos.
238 * @param DB $db Base de datos de donde borrar el objeto.
243 function borrar($db = null)
245 trigger_error('Not implemented!', E_USER_WARNING);
249 * Busca los datos en la base.
251 * @param DB $db Conexion a la base de datos.
252 * @param string $operador Indica como deben concatenarse las condiciones de busqueda
253 * @param string $orden Indica de que manera deben ordenarse los resultados de la busqueda
258 function buscar($db = null, $operador = MECON_DBO_OR, $orden = null)
261 if (is_null($this->owner)) {
262 return new PEAR_Error ('Debe definirse el Owner del proceso.');
265 if (!is_null($this->id)) {
266 $where[] = 'p.id = '.$this->id;
268 if (!is_null($this->fecha)) {
269 if (is_object($this->fecha) ) {
270 $fecha = $this->fecha->format("%Y-%m-%d");
273 list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha);
274 $fecha = $anio.'-'.$mes.'-'.$dia;
276 $where[] = 'p.fecha = '. $db->quote("$fecha");
278 if (!is_null($this->script)) {
279 $where[] = 'p.script LIKE '. $db->quote("%$this->script%");
281 if (!is_null($this->id_sistema)) {
282 $where[] = 'p.id_sistema = '. $this->id_sistema;
284 if (!is_null($this->nombre_sistema)) {
285 $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%");
287 if (!is_null($this->descripcion)) {
288 $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%");
290 if (!is_null($this->pid)) {
291 $where[] = 'p.pid = '.$this->pid;
293 if (!is_null($this->server)) {
294 $where[] = 'p.server = '.$this->server;
296 if (!is_null($this->status)) {
297 $where[] = 'p.status = '.$this->status;
299 if (!is_null($this->destinos)) {
300 if (is_array($this->destinos)) {
301 foreach ($this->destinos as $destino) {
302 $where[] = 'p.destinos LIKE '. $db->quote("%$destino");
306 $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%");
309 if (!is_null($this->prioridad)) {
310 $where[] = 'p.prioridad = '.$this->prioridad;
312 if (!is_null($this->scheduling)) {
313 $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%");
315 if (!is_null($this->notificar)) {
316 $where[] = 'p.notificar ='. $this->notificar;
318 if (!is_null($this->resultado)) {
319 $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%");
321 if (!is_null($this->nota)) {
322 $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%");
325 $where = 'WHERE p.owner = '. $db->quote("$this->owner").
326 'AND p.id_sistema = s.id_sistema AND ('. join ("$operador
330 $where = 'WHERE p.owner = '. $db->quote("$this->owner").
331 'AND p.id_sistema = s.id_sistema';
334 if (is_string($orden))
336 $orden = array($orden);
340 $orden = 'ORDER BY '.join(',',$orden);
346 return $db->query("SELECT p.id AS id,
347 DATE_FORMAT(p.fecha, '%d-%m-%Y') AS fecha,
349 script, p.id_sistema AS id_sistema, s.nombre_sistema AS
350 nombre_sistema, p.descripcion AS descripcion, p.pid AS pid,
351 p.server AS server, p.status AS status, p.owner AS owner,
352 p.destinos AS destinos, p.prioridad AS prioridad, p.scheduling
353 AS scheduling, p.notificar AS notificar, p.resultado AS
354 resultado, p.nota AS nota, p.archivo AS archivo, ".
355 "IF (p.status = 0, 'El proceso esta en cola. Aun no se ejecuto.".
357 "IF(p.status = 1, 'El proceso se esta ejecutando en este momento.".
359 "IF(p.status = 2, 'El proceso ha finalizado. ".
361 "IF(p.status = 3, 'Se produjo un error durante la ejecucion".
364 "'El proceso fue detenido por alguna persona (el responsable o".
365 " el administrador).".
371 FROM yatta.procesos AS p, samurai.sistema AS s
377 * Guarda los datos en la base.
379 * @param DB $db Conexion a la base de datos.
380 * @param bool $nuevo Indica si se trata de un nuevo registro en la base.
385 function guardar($db = null, $nuevo = true)
388 //@TODO PASAR ESTO A UNA CLASE SERVIDOR
390 $res = $db->query('SELECT id, escala * procesos AS ponderacion
391 FROM yatta.servidores
392 ORDER BY ponderacion, escala');
393 $res = $res->fetchRow(DB_FETCHMODE_ASSOC);
394 // Si hay error lo devuelve.
395 if (DB::isError($res)) {
398 $this->server = $res['id'];
400 if (@is_null($this->fecha)) {
401 $this->fecha = date ('Y-m-d');
406 'fecha' => $this->fecha,
407 'script' => $this->script,
408 'id_sistema' => $this->id_sistema,
409 'descripcion' => $this->descripcion,
411 'server' => $this->server,
412 'status' => $this->status,
413 'owner' => $this->owner,
414 'destinos' => $this->destinos,
415 'prioridad' => $this->prioridad,
416 'scheduling' => $this->scheduling,
417 'notificar' => $this->notificar,
418 'resultado' => $this->resultado,
419 'archivo' => $this->archivo,
420 'nota' => $this->nota
423 $res = $db->autoExecute('yatta.procesos', $datos,
424 DB_AUTOQUERY_INSERT);
428 'fecha' => $this->fecha,
429 'script' => $this->script,
430 'id_sistema' => $this->id_sistema,
431 'descripcion' => $this->descripcion,
433 'server' => $this->server,
434 'status' => $this->status,
435 'owner' => $this->owner,
436 'destinos' => $this->destinos,
437 'prioridad' => $this->prioridad,
438 'scheduling' => $this->scheduling,
439 'notificar' => $this->notificar,
440 'resultado' => $this->resultado,
441 'archivo' => $this->archivo,
442 'nota' => $this->nota
445 $res = $db->autoExecute('yatta.procesos', $datos,
446 DB_AUTOQUERY_UPDATE, 'id = '.$this->id);
450 if (DB::isError($res)) {
455 UPDATE yatta.servidores
456 SET procesos = procesos + 1
457 WHERE id = '. $this->server);
462 * Hace un reset de los atributos.
467 function predefinirAtributos() {
470 $this->script = null;
471 $this->id_sistema = null;
472 $this->nombre_sistema = null;
473 $this->descripcion = null;
475 $this->server = null;
476 $this->status = null;
478 $this->destinos = null;
479 $this->prioridad = null;
480 $this->scheduling = null;
481 $this->notificar = null;
482 $this->resultado = null;
483 $this->archivo = null;
489 * Devuelve un array asociativo con los valores del proceso.
494 function obtenerDatos() {
496 'script' => $this->script,
497 'id_sistema' => $this->id_sistema,
498 'descripcion' => $this->descripcion,
499 'owner' => $this->owner,
500 'destinos' => $this->destinos,
501 'prioridad' => $this->prioridad,
502 'scheduling' => $this->scheduling,
503 'notificar' => $this->notificar,