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.
108 * 2 = Finalizado sin copiar el resultado al tacho
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 * Nota explicativa sobre el error producido o el motivo por el cual se
177 * Carga el objeto con los datos que se pasan por parametro.
179 * @param DB $db DB o DB_Result a usar para la carga.
184 function cargar($db = null)
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)) {
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'];
221 * Borra el objeto de una base de datos.
223 * @param DB $db Base de datos de donde borrar el objeto.
228 function borrar($db = null)
230 trigger_error('Not implemented!', E_USER_WARNING);
234 * Busca los datos en la base.
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
243 function buscar($db = null, $operador = MECON_DBO_OR, $orden = null)
247 if (!is_null($this->id)) {
248 $where[] = 'p.id = '.$this->id;
250 if (!is_null($this->fecha)) {
251 if (is_object($this->fecha) ) {
252 $fecha = $this->fecha->format("%Y-%m-%d");
255 list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha);
256 $fecha = $anio.'-'.$mes.'-'.$dia;
258 $where[] = 'p.fecha = '. $db->quote("$fecha");
260 if (!is_null($this->script)) {
261 $where[] = 'p.script LIKE '. $db->quote("%$this->script%");
263 if (!is_null($this->id_sistema)) {
264 $where[] = 'p.id_sistema = '. $this->id_sistema;
266 if (!is_null($this->nombre_sistema)) {
267 $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%");
269 if (!is_null($this->descripcion)) {
270 $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%");
272 if (!is_null($this->pid)) {
273 $where[] = 'p.pid = '.$this->pid;
275 if (!is_null($this->server)) {
276 $where[] = 'p.server = '.$this->server;
278 if (!is_null($this->status)) {
279 $where[] = 'p.status = '.$this->status;
281 if (!is_null($this->owner)) {
282 $where[] = 'p.owner LIKE '. $db->quote("%$this->owner%");
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");
291 $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%");
294 if (!is_null($this->prioridad)) {
295 $where[] = 'p.prioridad = '.$this->prioridad;
297 if (!is_null($this->scheduling)) {
298 $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%");
300 if (!is_null($this->notificar)) {
301 $where[] = 'p.notificar ='. $this->notificar;
303 if (!is_null($this->resultado)) {
304 $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%");
306 if (!is_null($this->nota)) {
307 $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%");
310 $where = 'WHERE p.id_sistema = s.id_sistema AND ('. join ("$operador
314 $where = 'WHERE p.id_sistema = s.id_sistema';
317 if (is_string($orden))
319 $orden = array($orden);
323 $orden = 'ORDER BY '.join(',',$orden);
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 ".
352 FROM yatta.procesos AS p, samurai.sistema AS s
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.
364 function guardar($db = null, $nuevo = false)
368 'fecha' => $this->fecha,
369 'script' => $this->script,
370 'id_sistema' => $this->id_sistema,
371 'descripcion' => $this->descripcion,
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
384 $res = $db->autoExecute('yatta.procesos', $datos,
385 DB_AUTOQUERY_INSERT);
389 'fecha' => $this->fecha,
390 'script' => $this->script,
391 'id_sistema' => $this->id_sistema,
392 'descripcion' => $this->descripcion,
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
405 $res = $db->autoExecute('yatta.procesos', $datos,
406 DB_AUTOQUERY_UPDATE, 'id = '.$this->id);
413 * Hace un reset de los atributos.
418 function predefinirAtributos() {
421 $this->script = null;
422 $this->id_sistema = null;
423 $this->nombre_sistema = null;
424 $this->descripcion = null;
426 $this->server = null;
427 $this->status = null;
429 $this->destinos = null;
430 $this->prioridad = null;
431 $this->scheduling = null;
432 $this->notificar = null;
433 $this->resultado = null;