------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ require_once 'MECON/DBO.php'; require_once 'PEAR.php'; require_once 'Date.php'; /** * Clase para el manejo de los procesos. * * @access public */ class YATTA_ProcesoDB extends MECON_DBO { /** * Identificador del proceso. * * @var int $id * @access public */ var $id = null; /** * Fecha cuando se agrego el proceso. * Formato = DD/MM/YYYY * Puede ser un objeto Date. * * @var string $fecha * @access public */ var $fecha = null; /** * Proceso a ejecutar. * * @var string $script * @access public */ var $script = null; /** * Identificador del sistema en el cual se lanzo el proceso. * * @var int $id_sistema * @access public */ var $id_sistema = null; /** * Nombre del sistema en el cual se lanzo el proceso. * * @var string $nombre_sistema * @access public */ var $nombre_sistema = null; /** * Descripcion del proceso. * * @var string $descripcion * @access public */ var $descripcion = null; /** * PID del proceso en el servidor de proceso. * * @var int $pid * @access public */ var $pid = null; /** * Servidor en donde se ejecuto/a/ara el proceso. * * @var int $server * @access public */ var $server = null; /** * Estado del proceso. * 0 = En Espera * 1 = Procesando * 2 = Finalizado * 3 = Error * 4 = Abortado * 5 = Abortar * * @var int $status * @access public */ var $status = null; /** * Identificador del usuario responsable por el proceso. * * @var string $owner * @access public */ var $owner = null; /** * Destinos para el resultado. * array ('mmarre@mecon', 'gmeray@mecon') * * @var array $destinos * @access public */ var $destinos = null; /** * Prioridad el proceso. * * @var int $prioridad * @access public */ var $prioridad = null; /** * Fecha de ejecucion fijada. * * @var string $scheduling * @access public */ var $scheduling = null; /** * Indica si se debe notificar o no al owner sobre el resultado. * * @var int $notificar * @access public */ var $notificar = null; /** * Nombre del archivo resultado * * @var string $resultado * @access public */ var $resultado = null; /** * Nombre del archivo en el tacho * * @var string $archivo * @access public */ var $archivo = null; /** * Nota explicativa sobre el error producido o el motivo por el cual se * aborto el proceso. * * @var string $nota * @access public */ var $nota = null; /** * Descripcion del estado. * * @var string $icono * @access public */ var $icono = null; /** * Indica si el proceso esta activo (No fue borrado por el usuario). * * @var int $activo * @access public */ var $activo = null; /** * Carga el objeto con los datos que se pasan por parametro. * * @param DB $db DB o DB_Result a usar para la carga. * * @return mixed * @access public */ function cargar($db = null) { // Si es un resultado, obtengo los elemento. if (is_a($db, 'db_result')) { $this->predefinirAtributos(); $res = $db->fetchRow(DB_FETCHMODE_ASSOC); // Si hay error lo devuelve. if (DB::isError($res)) { return $res; } elseif (!$res) { return false; } $this->id = $res['id']; $this->fecha = $res['fecha']; $this->script = $res['script']; $this->id_sistema = $res['id_sistema']; $this->nombre_sistema = $res['nombre_sistema']; $this->descripcion = $res['descripcion']; $this->pid = $res['pid']; $this->server = $res['server']; $this->status = $res['status']; $this->owner = $res['owner']; $this->destinos = split(',', $res['destinos']); $this->prioridad = $res['prioridad']; $this->scheduling = $res['scheduling']; $this->notificar = $res['notificar']; $this->resultado = $res['resultado']; $this->archivo = $res['archivo']; $this->nota = $res['nota']; $this->icono = $res['icono']; $this->activo = $res['activo']; return true; } return false; } /** * Borra el objeto de una base de datos. * * @param DB $db Base de datos de donde borrar el objeto. * * @return mixed * @access public */ function borrar($db = null) { if (!is_null($this->id)) { $res = $this->buscar($db); if (DB::isError($res)) { return $res; } $this->cargar($res); if (is_null($this->archivo) || is_null($this->resultado)) { return $db->query('DELETE FROM yatta.procesos WHERE id = '. $this->id); } else { return $db->query ('UPDATE yatta.procesos SET activo = 0'. ' WHERE id = '. $this->id); } } else { return new PEAR_Error('Debe definirse el id del proceso a borrar.'); } } /** * Busca los datos en la base. * * @param DB $db Conexion a la base de datos. * @param string $operador Indica como deben concatenarse las condiciones de busqueda * @param string $orden Indica de que manera deben ordenarse los resultados de la busqueda * * @return mixed * @access public */ function buscar($db = null, $operador = MECON_DBO_OR, $orden = null) { // Armo el WHERE. if (is_null($this->owner)) { return new PEAR_Error ('Debe definirse el Owner del proceso.'); } $where = array(); if (!is_null($this->id)) { $where[] = 'p.id = '.$this->id; } if (!is_null($this->fecha)) { if (is_object($this->fecha) ) { $fecha = $this->fecha->format("%Y-%m-%d"); } else { list ($dia, $mes, $anio) = split ('[/.-]', $this->fecha); $fecha = $anio.'-'.$mes.'-'.$dia; } $where[] = 'p.fecha = '. $db->quote("$fecha"); } if (!is_null($this->script)) { $where[] = 'p.script LIKE '. $db->quote("%$this->script%"); } if (!is_null($this->id_sistema)) { $where[] = 'p.id_sistema = '. $this->id_sistema; } if (!is_null($this->nombre_sistema)) { $where[] = 's.nombre_sistema LIKE '. $db->quote("%$this->nombre_sistema%"); } if (!is_null($this->descripcion)) { $where[] = 'p.descripcion LIKE '. $db->quote("%$this->descripcion%"); } if (!is_null($this->pid)) { $where[] = 'p.pid = '.$this->pid; } if (!is_null($this->server)) { $where[] = 'p.server = '.$this->server; } if (!is_null($this->status)) { $where[] = 'p.status = '.$this->status; } if (!is_null($this->destinos)) { if (is_array($this->destinos)) { foreach ($this->destinos as $destino) { $where[] = 'p.destinos LIKE '. $db->quote("%$destino"); } } else { $where[] = 'p.destinos LIKE '. $db->quote("%$this->destinos%"); } } if (!is_null($this->prioridad)) { $where[] = 'p.prioridad = '.$this->prioridad; } if (!is_null($this->scheduling)) { $where[] = 'p.scheduling LIKE '. $db->quote("%$this->scheduling%"); } if (!is_null($this->notificar)) { $where[] = 'p.notificar ='. $this->notificar; } if (!is_null($this->resultado)) { $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%"); } if (!is_null($this->nota)) { $where[] = 'p.nota LIKE '. $db->quote("%$this->nota%"); } if (!is_null($this->activo)) { $where[] = 'p.activo = '. $this->activo; } if ($where) { $where = 'WHERE p.owner = '. $db->quote("$this->owner"). 'AND p.id_sistema = s.id_sistema AND ('. join ("$operador ", $where).')'; } else { $where = 'WHERE p.owner = '. $db->quote("$this->owner"). 'AND p.id_sistema = s.id_sistema'; } // Armo el ORDER BY. if (is_string($orden)) { $orden = array($orden); } if ($orden) { $orden = 'ORDER BY '.join(',',$orden); } else { $orden = ''; } return $db->query("SELECT p.id AS id, DATE_FORMAT(p.fecha, '%d-%m-%Y') AS fecha, p.script AS script, p.id_sistema AS id_sistema, s.nombre_sistema AS nombre_sistema, p.descripcion AS descripcion, p.pid AS pid, p.server AS server, p.status AS status, p.owner AS owner, p.destinos AS destinos, p.prioridad AS prioridad, p.scheduling AS scheduling, p.notificar AS notificar, p.resultado AS resultado, p.nota AS nota, p.archivo AS archivo, ". "IF (p.status = 0, 'El proceso está en cola. Aún no se ejecutó.". "', ". "IF(p.status = 1, 'El proceso se está ejecutando en este momento.". "',". "IF(p.status = 2, 'El proceso ha finalizado. ". "',". "IF(p.status = 3, 'Se produjo un error durante la ejecución". " del proceso.". "',". "'El proceso fue detenido por alguna persona (el responsable o". " el administrador).". "'". ")". ")". ")". ") AS icono, p.activo AS activo FROM yatta.procesos AS p, samurai.sistema AS s $where $orden"); } /** * Guarda los datos en la base. * * @param DB $db Conexion a la base de datos. * @param bool $nuevo Indica si se trata de un nuevo registro en la base. * * @return mixed * @access public */ function guardar($db = null, $nuevo = true) { return $db->query ('UPDATE yatta.procesos SET nota = \''.$this->nota. '\', status = '.$this->status. ' WHERE id = '. $this->id); } /** * Hace un reset de los atributos. * * @return void * @access public */ function predefinirAtributos() { $this->id = null; $this->fecha = null; $this->script = null; $this->id_sistema = null; $this->nombre_sistema = null; $this->descripcion = null; $this->pid = null; $this->server = null; $this->status = null; $this->owner = null; $this->destinos = null; $this->prioridad = null; $this->scheduling = null; $this->notificar = null; $this->resultado = null; $this->archivo = null; $this->nota = null; $this->icono = null; $this->activo = null; } /** * Devuelve un array asociativo con los valores del proceso. * * @return array * @access public */ function obtenerDatos() { return array ( 'script' => $this->script, 'id_sistema' => $this->id_sistema, 'descripcion' => $this->descripcion, 'owner' => $this->owner, 'destinos' => $this->destinos, 'prioridad' => $this->prioridad, 'scheduling' => $this->scheduling, 'notificar' => $this->notificar, 'resultado' => $this->resultado, 'activo' => $this->activo, ); } } ?>