diff --git a/Imagen.php b/Imagen.php index 2df80ab..fa268b9 100644 --- a/Imagen.php +++ b/Imagen.php @@ -30,9 +30,9 @@ class Imagen { private $extension; private $dirData; - public function __construct($directorio = "img.data") + public function __construct() { - $this->dirData = $directorio; + $this->dirData = IMAGEDATA; } public function determinaAccion($campo) @@ -40,7 +40,7 @@ class Imagen { if (isset($_POST[$campo]) && $_POST[$campo] == "") { return HAYQUEBORRAR; //Hay que borrar el archivo de imagen } elseif ($_FILES[$campo]['error'] == 0) { - return HAYQUEGUARDAR; //Hay que guardar el archivo de imagen enviado + return HAYQUEGRABAR; //Hay que guardar el archivo de imagen enviado } else { return NOHACERNADA; //No hay que hacer nada } @@ -101,35 +101,26 @@ class Imagen { } } - public function mueveImagenId($id, &$mensaje) + public static function borraImagenId($tabla, $id) { - if (!$this->comprimeArchivo($id, $mensaje)) { + $extensiones = array ("png", "gif", "jpg"); + foreach ($extensiones as $extension) { + $archivo = IMAGEDATA . "/" . $tabla . "_" . $id . "." . $extension; + if (file_exists($archivo)) { + unlink ($archivo); + } + } + } + + public function mueveImagenId($tabla, $id, &$mensaje) + { + if (!$this->comprimeArchivo($tabla . "_" . $id, $mensaje)) { return false; } else { return true; } } - private function generaNombre() - { - //De momento no se utiliza - $i = 0; - $salir = false; - $nombre = strftime("%Y%m%d%H%M%S"); - //limita a 1000 intentos el buscar un archivo inexistente - while ($i++<1000 and !$salir) { - $test = $nombre . $i; - $fichero = $this->dirData . "/" . $test . "." . $this->extension; - if (!file_exists($fichero)) { - $salir = true; - } - } - if (!salir) { - throw new Exception("No se ha podido encontrar un nombre de archivo único en ".$this->dirData, 1); - } - return $fichero; - } - private function comprimeArchivo($id, &$mensaje) { $zebra = new Zebra_Image(); diff --git a/Mantenimiento.php b/Mantenimiento.php index 9f5d833..d24792f 100644 --- a/Mantenimiento.php +++ b/Mantenimiento.php @@ -303,13 +303,7 @@ class Mantenimiento { $this->datosURL['opc'] = 'inicial'; $this->datosURL['id'] = null; //Comprueba si existe la imagen en datos para borrarla. - $extensiones = array ("png", "gif", "jpg"); - foreach ($extensiones as $extension) { - $archivo = "img.data/" . $id . "." . $extension; - if (file_exists($archivo)) { - unlink ($archivo); - } - } + Imagen::borraImagenId($this->tabla, $id); $url = $this->montaURL(); header('Location: ' . $url); return; @@ -353,20 +347,18 @@ class Mantenimiento { } $valor = $_POST[$campo] == "on" ? '1' : $valor; } else { - if (stristr($this->campos[$campo]['Type'], "imagen")) { + if (stristr($this->campos[$campo]['Comment'], "imagen")) { //procesa el envío de la imagen $imagen = new Imagen(); $accion = $imagen->determinaAccion($campo); if ($accion != NOHACERNADA) { - // El código 3 es no hacer nada. $mensaje = ""; if (!$imagen->procesaEnvio($campo, $mensaje)) { return $this->panelMensaje($mensaje, "danger", "ERROR PROCESANDO IMAGEN"); } $hayImagen = true; $campoImagen = $campo; - } - + } } else { $valor = $_POST[$campo] == "" ? "null" : '"' . $_POST[$campo] . '"'; } @@ -380,7 +372,7 @@ class Mantenimiento { $id = $this->bdd->ultimoId(); if ($hayImagen) { //Tiene que recuperar el id del registro insertado y actualizar el archivo de imagen - if (!$imagen->mueveImagenId($id, $mensaje)) { + if (!$imagen->mueveImagenId($this->tabla, $id, $mensaje)) { return $this->panelMensaje($mensaje, "danger", "ERROR COMPRIMIENDO IMAGEN"); } $comando = "update " . $this->tabla . " set " . $campoImagen . "='" . $imagen->archivoComprimido . "' where id='" . $id ."';"; @@ -396,40 +388,6 @@ class Mantenimiento { //return "

montaURL()."\">Se ha insertado el registro con la clave " . $this->bdd->ultimoId() . "

"; } - private function procesaEnvioImagen($operacion, $campo) - { - - switch ($operacion) { - /* - * Insertar: - * Ha incluido archivo? sino fin - * Si se ha incluido ¿se ha subido correctamente? sino error - * mover archivo a tmp con un nombre - * comprimir con un nombre genérico y único en la carpeta de datos - * devolver el nombre del archivo creado como valor a guardar en el campo imagen - * (se podría activar una vez insertado el registro que se renombrara el archivo con el id del elemento y se cambiara el campo) - */ - - - /* - * Borrar: - * Hay imagen asociada? sino fin - * Se borra el archivo de imagen del directorio de datos - */ - - /* - * Modificar: - * Casuística: - * 1: No existe imagen ni antes ni ahora. - * 2: No existía imagen y ahora sí - * 3: Existía imagen y ahora no - * 4: Existía imagen antes y ahora y es la misma - * 5: Existía imagen antes y ahora y es distinta - */ - - } - } - protected function modificar() { //Los datos a utilizar para actualizar la tupla vienen en $_POST. @@ -457,10 +415,34 @@ class Mantenimiento { $valor = $_POST[$campo] == "on" ? '1' : $valor; $comando.=$coma . ' ' . $campo . '="' . $valor . '"'; } else { - if (strlen(trim($_POST[$campo])) == 0) { - $comando.="$coma $campo=null"; + if (stristr($this->campos[$campo]['Comment'], "imagen")) { + $valor = $_POST[$campo]; + $imagen = new Imagen(); + $accion = $imagen->determinaAccion($campo); + if ($accion != NOHACERNADA) { + if ($accion == HAYQUEGRABAR) { + $mensaje = ""; + if (!$imagen->procesaEnvio($campo, $mensaje)) { + return $this->panelMensaje($mensaje, "danger", "ERROR PROCESANDO IMAGEN"); + } + $mensaje = ""; + if (!$imagen->mueveImagenId($this->tabla, $this->datosURL['id'], $mensaje)) { + return $this->panelMensaje($mensaje, "danger", "ERROR COMPRIMIENDO IMAGEN"); + } + $comando .= "$coma $campo='" . $imagen->archivoComprimido . "'"; + } else { + //Hay que borrar + Imagen::borraImagenId($this->tabla, $this->datosURL['id']); + $extensiones = array("png", "jpg", "gif"); + $comando .= "$coma $campo=null"; + } + } } else { - $comando.=$coma . ' ' . $campo . '="' . $_POST[$campo] . '"'; + if (strlen(trim($_POST[$campo])) == 0) { + $comando.="$coma $campo=null"; + } else { + $comando.=$coma . ' ' . $campo . '="' . $_POST[$campo] . '"'; + } } } } @@ -669,10 +651,14 @@ class Mantenimiento { $salida .= ''; continue; } - if ($tipoCampo == "imagen(".$tamano.")") { + if (stristr($this->campos[$campo]['Comment'], "imagen")) { $salida .= $this->creaCampoImagen($campo, $valorDato, $tipo); continue; } + if (stristr($this->campos[$campo]['Type'], "int")) { + $tipo_campo = "number"; + $modoEfectivo .= ' onkeypress = "if ( isNaN(this.value + String.fromCharCode(event.keyCode) )) return false;" '; + } //Si no es una clave foránea añade un campo de texto normal $salida.='

\n"; diff --git a/inc/configuracion.inc b/inc/configuracion.inc index ee26619..767abfc 100644 --- a/inc/configuracion.inc +++ b/inc/configuracion.inc @@ -39,4 +39,5 @@ define('COLORLAT', '#46d6db'); //Color de la barra de menú lateral define('COLORFON', '#a4bdfc'); //Color del fondo de la pantalla define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump define('GZIP', '/usr/bin/gzip'); //Camino a gzip +define('IMAGEDATA', 'img.data'); //Directorio donde se almacenarán las imágenes ?> diff --git a/inc/version.inc b/inc/version.inc index 43eba1c..c6d632c 100644 --- a/inc/version.inc +++ b/inc/version.inc @@ -23,5 +23,5 @@ */ define('AUTOR', 'Ricardo Montañana Gómez'); -define('VERSION', '1.04'); +define('VERSION', '1.05'); ?> diff --git a/sql/setup.sql b/sql/setup.sql index 4e412ec..e3bd21a 100644 --- a/sql/setup.sql +++ b/sql/setup.sql @@ -27,6 +27,7 @@ CREATE TABLE `Articulos` ( `marca` varchar(20) default NULL COMMENT 'ordenable', `modelo` varchar(20) default NULL COMMENT 'ordenable', `cantidad` int(11) default NULL COMMENT 'ordenable', + `imagen` varchar(45) default NULL COMMENT 'imagen', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=785 DEFAULT CHARSET=utf8; SET character_set_client = @saved_cs_client; @@ -46,6 +47,7 @@ CREATE TABLE `Elementos` ( `numserie` varchar(30) default NULL COMMENT 'ordenable', `cantidad` int(10) unsigned default NULL COMMENT 'ordenable', `fechaCompra` date NOT NULL COMMENT 'ordenable', + `imagen` varchar(45) default NULL COMMENT 'imagen', PRIMARY KEY (`id`), KEY `id` (`id`), KEY `id_Articulo` (`id_Articulo`),