ref #22 Terminada la gestión de imágenes en elementos.

- Añadido un campo imagen a Artículos
- Añadido un control javascript para que no se puedan introducir caracteres en los campos numéricos
- Añadido el directorio donde guardar las imágenes en configuracion.inc (no se puede editar)
- Cambiado setup.sql para que se añadan los campos de imagen en ambas tablas en una instalación inicial
- Versión 1.05 en fichero de configuración.
This commit is contained in:
2014-03-23 03:47:09 +01:00
parent db43f56c03
commit 58703f0d90
5 changed files with 56 additions and 76 deletions

View File

@@ -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();

View File

@@ -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 "<h1><a href=\"".$this->montaURL()."\">Se ha insertado el registro con la clave " . $this->bdd->ultimoId() . "</a></h1>";
}
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 .= '</div></div>';
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.='<input class="form-control" type="' . $tipo_campo . '" name="' . $campo . '" value="' . $valorDato .
'" maxlength="' . $tamano . '" size="' . (string) (intval($tamano) + 5) . '" ' . $modoEfectivo . " ><br><br>\n";

View File

@@ -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
?>

View File

@@ -23,5 +23,5 @@
*/
define('AUTOR', 'Ricardo Montañana Gómez');
define('VERSION', '1.04');
define('VERSION', '1.05');
?>

View File

@@ -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`),