--- /dev/null
+<?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
+-------------------------------------------------------------------------------
+ Ministerio de Economía
+ YATTA!
+-------------------------------------------------------------------------------
+This file is part of YATTA!.
+
+YATTA! is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+YATTA! is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License; if not,
+write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+Boston, MA 02111-1307 USA
+-------------------------------------------------------------------------------
+Creado: mié dic 3 13:11:15 ART 2003
+Autor: Martin Marrese <mmarre@mecon.gov.ar>
+-------------------------------------------------------------------------------
+$Id$
+-----------------------------------------------------------------------------*/
+
+require_once 'MECON/DBO.php';
+require_once 'PEAR.php';
+
+
+define ('PATH', '/var/www/sistemas/yatta/test/');
+
+/**
+ * Clase para el manejo de los archivos.
+ *
+ * @access public
+ */
+class YATTA_Archivo extends MECON_DBO {
+
+ /**
+ * Identificador del proceso.
+ *
+ * @var int $id
+ * @access public
+ */
+ var $id = null;
+
+ /**
+ * Identificador del sistema en el cual se lanzo el proceso.
+ *
+ * @var int $id_sistema
+ * @access public
+ */
+ var $id_sistema = null;
+
+ /**
+ * Nombre del sistema al que pertenece.
+ *
+ * @var string $nombre_sistema
+ * @access public
+ */
+ var $nombre_sistema = null;
+
+ /**
+ * Descripcion del proceso.
+ *
+ * @var string $descripcion
+ * @access public
+ */
+ var $descripcion = null;
+
+ /**
+ * Identificador del usuario con el que se esta trabajando.
+ *
+ * @var string $usuario
+ * @access public
+ */
+ var $usuario = null;
+
+ /**
+ * Nombre del archivo para el download
+ *
+ * @var string $resultado
+ * @access public
+ */
+ var $resultado = null;
+
+ /**
+ * Nombre del archivo en el tacho
+ *
+ * @var string $archivo
+ * @access public
+ */
+ var $archivo = null;
+
+ /**
+ * Path del archivo
+ *
+ * @var string $path
+ * @access public
+ */
+ var $path = 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->nombre_sistema = $res['nombre_sistema'];
+ $this->descripcion = $res['descripcion'];
+ $this->path = PATH;
+ $this->resultado = $res['resultado'];
+ $this->archivo = $res['archivo'];
+
+ 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)
+ {
+ trigger_error('Not implemented!', E_USER_WARNING);
+ //@TODO Solo permitir que el owner borre sus archivos.
+ //@TODO Borra el registro de la base.
+ //@TODO Borrar el archivo del tacho.
+ }
+
+ /**
+ * 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.
+ $where = array();
+ if (!is_null($this->id)) {
+ $where[] = 'p.id = '.$this->id;
+ }
+ 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->resultado)) {
+ $where[] = 'p.resultado LIKE '. $db->quote("%$this->resultado%");
+ }
+ if (!is_null($this->usuario)) {
+ $where[] = '(p.owner LIKE '. $db->quote("$this->usuario") .' OR '.
+ 'p.destinos LIKE '. $db->quote("%$this->usuario%") .')';
+ }
+ if ($where) {
+ $where = 'WHERE p.status = 2 AND p.resultado is not null '.
+ '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, p.id_sistema AS id_sistema, s.nombre_sistema ".
+ "AS nombre_sistema, p.descripcion AS descripcion, p.resultado ".
+ "AS resultado, p.archivo AS archivo ".
+ "FROM yatta.procesos AS p, samurai.sistema AS s ".
+ "$where ".
+ "$orden");
+ }
+
+ /**
+ * @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 = false)
+ {
+ trigger_error('Not implemented!', E_USER_WARNING);
+ }
+
+ /**
+ * Hace un reset de los atributos.
+ *
+ * @return void
+ * @access public
+ */
+ function predefinirAtributos() {
+ $this->id = null;
+ $this->id_sistema = null;
+ $this->nombre_sistema = null;
+ $this->descripcion = null;
+ $this->resultado = null;
+ $this->archivo = null;
+ $this->path = null;
+ $this->usuario = null;
+ }
+}
+?>
\ No newline at end of file
* Estado del proceso.
* 0 = En Espera
* 1 = Procesando
- * 2 = Finalizado sin copiar el resultado al tacho
- * 3 = Finalizado
- * 4 = Error
- * 5 = Abortado
+ * 2 = Finalizado
+ * 3 = Error
+ * 4 = Abortado
*
* @var int $status
* @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.
$this->scheduling = $res['scheduling'];
$this->notificar = $res['notificar'];
$this->resultado = $res['resultado'];
+ $this->archivo = $res['archivo'];
$this->nota = $res['nota'];
$this->icono = $res['icono'];
return true;
$orden = '';
}
- return $db->query("SELECT p.id AS id, p.fecha AS fecha, p.script AS
+ 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,".
+ resultado, p.nota AS nota, p.archivo AS archivo, ".
"IF (p.status = 0, 'El proceso esta en cola. Aun no se ejecuto.".
"', ".
"IF(p.status = 1, 'El proceso se esta ejecutando en este momento.".
'scheduling' => $this->scheduling,
'notificar' => $this->notificar,
'resultado' => $this->resultado,
+ 'archivo' => $this->archivo,
'nota' => $this->nota
);
'scheduling' => $this->scheduling,
'notificar' => $this->notificar,
'resultado' => $this->resultado,
+ 'archivo' => $this->archivo,
'nota' => $this->nota
);
$this->scheduling = null;
$this->notificar = null;
$this->resultado = null;
+ $this->archivo = null;
$this->nota = null;
$this->icono = null;
}
scheduling varchar(50) default NULL,
notificar tinyint(1) default 1,
resultado varchar(255) default NULL,
+ archivo varchar(255) default NULL,
nota text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
//Require Once {{{
require_once 'HTML/Table.php';
-require_once 'MECON/HTML/Tabla.php';
+require_once 'MECON/HTML/TablaDB.php';
require_once 'MECON/HTML/Image.php';
require_once 'MECON/HTML/Link.php';
+require_once 'YATTA/Archivo.php';
//}}}
-//TODO Este path es el del tacho segun el usuario, etc.
-$path = '/var/www/sistemas/yatta/test/'. $_SESSION['usuario'];
-
//TODO Definir la cuota en algun lado (Kb)
$cuota = 2048;
-//TODO Agregar class para manejar los colores y fuentes
-
//Actuar segun la accion, etc {{{
$accion = @$_REQUEST['accion'];
-$archivo = @$_REQUEST['archivo'];
-if (@$accion && @$archivo) {
- $archivo2 = $path.'/'.$archivo;
+$id = @$_REQUEST['_id'];
+if (@$id && @$accion) {
+ $ARCHIVO =& new YATTA_Archivo;
+ $ARCHIVO->id = $id;
+ $res = $ARCHIVO->buscar($DB);
+ if (PEAR::isError($res)) {
+ die('Error: ' . $res->getMessage() . "\n");
+ }
+ $ARCHIVO->cargar($res);
switch ($accion) {
case 'download':
- header("Content-Disposition: attachment; filename=".$archivo);
+ header("Content-Disposition: attachment;
+ filename=".$ARCHIVO->resultado);
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Type: application");
- header("Content-Length: ".filesize($archivo2));
- readfile ($archivo2);
+ header("Content-Length: ".filesize($ARCHIVO->path.$ARCHIVO->archivo));
+ readfile ($ARCHIVO->path.$ARCHIVO->archivo);
exit;
break;
case 'borrar':
- system ('rm '.$archivo2);
+ system ('rm '.$ARCHIVO->path.$ARCHIVO->archivo);
header ('Location:archivos');
break;
}
}
//}}}
-//Obtengo la Lista de Archivos del Directorio en Cuestion {{{
-if ($dh = @opendir($path)) {
- $ocupado =0;
- while (($file = readdir($dh)) !== false) {
- //FIXME Sacar el .svn cuando se pase a produccion
- if ($file != '.' && $file != '..' && $file != '.svn') {
- $archivos[$file]['ext'] = strtoupper(substr($file, strrpos($file, '.') + 1));
- $archivos[$file]['nombre'] = $file;
- $archivos[$file]['tam'] = round((filesize($path.'/'.$file) / 1024),2);
- $archivos[$file]['porc'] = round((filesize($path.'/'.$file) / 1024) * 100 /
- $cuota, 2);
-
- $ocupado += $archivos[$file]['porc'];
- }
- }
- closedir($dh);
+//Obtengo la lista de archivos y lo agrego a la tabla {{{
+$ARCHIVO =& new YATTA_Archivo;
+$ARCHIVO->usuario = $_SESSION['usuario'];
+
+$res = $ARCHIVO->buscar($DB);
+if (PEAR::isError($res)) {
+ die('Error: ' . $res->getMessage() . "\n");
}
-//}}}
-//Tabla de Archivos {{{
-$TABLA_2 =& new MECON_HTML_Tabla ();
-$TABLA_2->addRow(array(
+
+$TABLADB = new MECON_HTML_TablaDB ('Archivos');
+$TABLADB->addRow(array(
'Lista de Archivos Disponibles'
- ), 'cabecera colspan="6" align="left"');
-$TABLA_2->addRow(array(
- 'Ext', 'Nombre', 'Tam. Kb', 'Tam. %', 'Bajar', 'Borrar'
+ ), 'cabecera colspan="5" align="left"');
+$TABLADB->addRow(array(
+ 'Ext', 'Sistema', 'Descripcion', 'Bajar', 'Borrar'
), 'Titulo');
-if (@$archivos) {
- asort($archivos);
- foreach ($archivos as $arch) {
- $TABLA_2->addRow(array(
- new MECON_HTML_Image ('/MECON/images/EXTENSION_'.$arch['ext'].'.gif', $arch['ext']),
- $arch['nombre'],
- $arch['tam'].' Kb',
- $arch['porc'].' %',
- new MECON_HTML_Link ('archivos', new
- MECON_HTML_Image('/MECON/images/general_download.gif', 'Bajar'),
- array (
- 'accion'=>'download',
- 'archivo'=>$arch['nombre'],
- )),
- new MECON_HTML_Link ('archivos', new MECON_HTML_Image
- ('/MECON/images/general_eliminar.gif', 'Eliminar'),
- array (
- 'accion'=>'borrar',
- 'archivo'=>$arch['nombre'])
- , 'OnClick="return confirm(\'Esta Seguro Bestia?\')"'))
- );
- }
- $TABLA_2->addRow(array(
- '*Recuerde que los archivos se borran a los 7 dias
- de antiguedad'
- ), 'colspan="6" align="center" class="msg_rojo"');
-}
-else {
- $TABLA_2->addRow(array('No se encontraron archivos'), 'colspan="6"
- class="msg_rojo"');
-}
-$TABLA_2->updateColAttributes(0,'width="5%"');
-$TABLA_2->updateColAttributes(2,'width="10%"');
-$TABLA_2->updateColAttributes(3,'width="10%"');
-$TABLA_2->updateColAttributes(4,'width="8%"');
-$TABLA_2->updateColAttributes(5,'width="8%"');
-//}}}
-//Tabla de Espacio Disponible {{{
-$TABLA_1 =& new HTML_Table ('width="100%"');
-$TABLA_1->addRow(array(
- '<b>Espacio Utilizado: </b>',
- (@$ocupado) ? $ocupado.' %' : '0'.' %'
- ));
-$TABLA_1->updateColAttributes(0,'width="95%" align="right"');
-$TABLA_1->updateColAttributes(1,'align="center"');
-if (@$ocupado > 80) {
- $TABLA_1->updateCellAttributes(0,1,'class="msg_rojo"');
-}
-else {
- $TABLA_1->updateCellAttributes(0,1,'class="msg_negro"');
+
+$TABLADB->addRowsData(
+ '<img src="/MECON/images/EXTENSION_%s" alt="Ext">',
+ array (array ('resultado', 'extension_callback')),
+ 'prepend'
+ );
+
+function extension_callback($resultado) {
+ return strtoupper(substr($resultado, strrpos($resultado, '.') + 1));
}
-$TABLA_1->updateCellAttributes(0,0,'class="msg_negro"');
+
+//@TODO Hacer un addRowsData que agregue el tamanio del archivo (posiblemente
+//con una funcion callback)
+
+$TABLADB->addRowsData(
+ new MECON_HTML_Link('archivos',
+ new MECON_HTML_Image('/MECON/images/general_download.gif',
+ 'Bajar'),
+ array ($TABLADB->getGetVarPrefix().'id' => "%s",
+ 'accion' => 'download')
+ )
+ );
+
+$TABLADB->addRowsIcon('borrar', array ('id'), new MECON_HTML_Link ('archivos', '', array
+ ('accion' => 'borrar')));
+
+$pager = $TABLADB->addPager($res, null,
+ new MECON_HTML_Link
+ ('archivos', null
+ )
+ );
+
+$TABLADB->addRows($pager, array ('nombre_sistema', 'descripcion'));
+$TABLADB->addRow(array('*Recuerde que los archivos se borran a los 7 dias
+ de antiguedad'),
+ 'colspan="5" align="center" class="msg_rojo"');
+
+$TABLADB->updateColAttributes(0,'width="4%"');
+$TABLADB->updateColAttributes(1,'width="30%"');
+$TABLADB->updateColAttributes(2,'width="50%"');
+$TABLADB->updateColAttributes(3,'width="8%"');
+$TABLADB->updateColAttributes(4,'width="8%"');
//}}}
//Agrego la info al marco y la muestro {{{
-$MARCO->addBody($TABLA_1);
-$MARCO->addBody('<BR>');
-$MARCO->addBody($TABLA_2);
$MARCO->addStyleSheet('css/yatta.css');
+$MARCO->addBody($TABLADB);
$MARCO->display();
//}}}
-
?>
die('Error: ' . $res->getMessage() . "\n");
}
-//@FIXME La fecha esta quedando en formato americano, arreglar eso.
-
$pager = $TABLADB->addPager($res, null,
new MECON_HTML_Link
('procesos', null