mirror of
https://github.com/rmontanana/inventario2.git
synced 2025-08-16 07:56:00 +00:00
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:
41
Imagen.php
41
Imagen.php
@@ -30,9 +30,9 @@ class Imagen {
|
|||||||
private $extension;
|
private $extension;
|
||||||
private $dirData;
|
private $dirData;
|
||||||
|
|
||||||
public function __construct($directorio = "img.data")
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->dirData = $directorio;
|
$this->dirData = IMAGEDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function determinaAccion($campo)
|
public function determinaAccion($campo)
|
||||||
@@ -40,7 +40,7 @@ class Imagen {
|
|||||||
if (isset($_POST[$campo]) && $_POST[$campo] == "") {
|
if (isset($_POST[$campo]) && $_POST[$campo] == "") {
|
||||||
return HAYQUEBORRAR; //Hay que borrar el archivo de imagen
|
return HAYQUEBORRAR; //Hay que borrar el archivo de imagen
|
||||||
} elseif ($_FILES[$campo]['error'] == 0) {
|
} 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 {
|
} else {
|
||||||
return NOHACERNADA; //No hay que hacer nada
|
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;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
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)
|
private function comprimeArchivo($id, &$mensaje)
|
||||||
{
|
{
|
||||||
$zebra = new Zebra_Image();
|
$zebra = new Zebra_Image();
|
||||||
|
@@ -303,13 +303,7 @@ class Mantenimiento {
|
|||||||
$this->datosURL['opc'] = 'inicial';
|
$this->datosURL['opc'] = 'inicial';
|
||||||
$this->datosURL['id'] = null;
|
$this->datosURL['id'] = null;
|
||||||
//Comprueba si existe la imagen en datos para borrarla.
|
//Comprueba si existe la imagen en datos para borrarla.
|
||||||
$extensiones = array ("png", "gif", "jpg");
|
Imagen::borraImagenId($this->tabla, $id);
|
||||||
foreach ($extensiones as $extension) {
|
|
||||||
$archivo = "img.data/" . $id . "." . $extension;
|
|
||||||
if (file_exists($archivo)) {
|
|
||||||
unlink ($archivo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$url = $this->montaURL();
|
$url = $this->montaURL();
|
||||||
header('Location: ' . $url);
|
header('Location: ' . $url);
|
||||||
return;
|
return;
|
||||||
@@ -353,20 +347,18 @@ class Mantenimiento {
|
|||||||
}
|
}
|
||||||
$valor = $_POST[$campo] == "on" ? '1' : $valor;
|
$valor = $_POST[$campo] == "on" ? '1' : $valor;
|
||||||
} else {
|
} else {
|
||||||
if (stristr($this->campos[$campo]['Type'], "imagen")) {
|
if (stristr($this->campos[$campo]['Comment'], "imagen")) {
|
||||||
//procesa el envío de la imagen
|
//procesa el envío de la imagen
|
||||||
$imagen = new Imagen();
|
$imagen = new Imagen();
|
||||||
$accion = $imagen->determinaAccion($campo);
|
$accion = $imagen->determinaAccion($campo);
|
||||||
if ($accion != NOHACERNADA) {
|
if ($accion != NOHACERNADA) {
|
||||||
// El código 3 es no hacer nada.
|
|
||||||
$mensaje = "";
|
$mensaje = "";
|
||||||
if (!$imagen->procesaEnvio($campo, $mensaje)) {
|
if (!$imagen->procesaEnvio($campo, $mensaje)) {
|
||||||
return $this->panelMensaje($mensaje, "danger", "ERROR PROCESANDO IMAGEN");
|
return $this->panelMensaje($mensaje, "danger", "ERROR PROCESANDO IMAGEN");
|
||||||
}
|
}
|
||||||
$hayImagen = true;
|
$hayImagen = true;
|
||||||
$campoImagen = $campo;
|
$campoImagen = $campo;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$valor = $_POST[$campo] == "" ? "null" : '"' . $_POST[$campo] . '"';
|
$valor = $_POST[$campo] == "" ? "null" : '"' . $_POST[$campo] . '"';
|
||||||
}
|
}
|
||||||
@@ -380,7 +372,7 @@ class Mantenimiento {
|
|||||||
$id = $this->bdd->ultimoId();
|
$id = $this->bdd->ultimoId();
|
||||||
if ($hayImagen) {
|
if ($hayImagen) {
|
||||||
//Tiene que recuperar el id del registro insertado y actualizar el archivo de imagen
|
//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");
|
return $this->panelMensaje($mensaje, "danger", "ERROR COMPRIMIENDO IMAGEN");
|
||||||
}
|
}
|
||||||
$comando = "update " . $this->tabla . " set " . $campoImagen . "='" . $imagen->archivoComprimido . "' where id='" . $id ."';";
|
$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>";
|
//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()
|
protected function modificar()
|
||||||
{
|
{
|
||||||
//Los datos a utilizar para actualizar la tupla vienen en $_POST.
|
//Los datos a utilizar para actualizar la tupla vienen en $_POST.
|
||||||
@@ -457,10 +415,34 @@ class Mantenimiento {
|
|||||||
$valor = $_POST[$campo] == "on" ? '1' : $valor;
|
$valor = $_POST[$campo] == "on" ? '1' : $valor;
|
||||||
$comando.=$coma . ' ' . $campo . '="' . $valor . '"';
|
$comando.=$coma . ' ' . $campo . '="' . $valor . '"';
|
||||||
} else {
|
} else {
|
||||||
if (strlen(trim($_POST[$campo])) == 0) {
|
if (stristr($this->campos[$campo]['Comment'], "imagen")) {
|
||||||
$comando.="$coma $campo=null";
|
$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 {
|
} 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>';
|
$salida .= '</div></div>';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($tipoCampo == "imagen(".$tamano.")") {
|
if (stristr($this->campos[$campo]['Comment'], "imagen")) {
|
||||||
$salida .= $this->creaCampoImagen($campo, $valorDato, $tipo);
|
$salida .= $this->creaCampoImagen($campo, $valorDato, $tipo);
|
||||||
continue;
|
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
|
//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 .
|
$salida.='<input class="form-control" type="' . $tipo_campo . '" name="' . $campo . '" value="' . $valorDato .
|
||||||
'" maxlength="' . $tamano . '" size="' . (string) (intval($tamano) + 5) . '" ' . $modoEfectivo . " ><br><br>\n";
|
'" maxlength="' . $tamano . '" size="' . (string) (intval($tamano) + 5) . '" ' . $modoEfectivo . " ><br><br>\n";
|
||||||
|
@@ -39,4 +39,5 @@ define('COLORLAT', '#46d6db'); //Color de la barra de menú lateral
|
|||||||
define('COLORFON', '#a4bdfc'); //Color del fondo de la pantalla
|
define('COLORFON', '#a4bdfc'); //Color del fondo de la pantalla
|
||||||
define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump
|
define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump
|
||||||
define('GZIP', '/usr/bin/gzip'); //Camino a gzip
|
define('GZIP', '/usr/bin/gzip'); //Camino a gzip
|
||||||
|
define('IMAGEDATA', 'img.data'); //Directorio donde se almacenarán las imágenes
|
||||||
?>
|
?>
|
||||||
|
@@ -23,5 +23,5 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
define('AUTOR', 'Ricardo Montañana Gómez');
|
define('AUTOR', 'Ricardo Montañana Gómez');
|
||||||
define('VERSION', '1.04');
|
define('VERSION', '1.05');
|
||||||
?>
|
?>
|
||||||
|
@@ -27,6 +27,7 @@ CREATE TABLE `Articulos` (
|
|||||||
`marca` varchar(20) default NULL COMMENT 'ordenable',
|
`marca` varchar(20) default NULL COMMENT 'ordenable',
|
||||||
`modelo` varchar(20) default NULL COMMENT 'ordenable',
|
`modelo` varchar(20) default NULL COMMENT 'ordenable',
|
||||||
`cantidad` int(11) default NULL COMMENT 'ordenable',
|
`cantidad` int(11) default NULL COMMENT 'ordenable',
|
||||||
|
`imagen` varchar(45) default NULL COMMENT 'imagen',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=785 DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB AUTO_INCREMENT=785 DEFAULT CHARSET=utf8;
|
||||||
SET character_set_client = @saved_cs_client;
|
SET character_set_client = @saved_cs_client;
|
||||||
@@ -46,6 +47,7 @@ CREATE TABLE `Elementos` (
|
|||||||
`numserie` varchar(30) default NULL COMMENT 'ordenable',
|
`numserie` varchar(30) default NULL COMMENT 'ordenable',
|
||||||
`cantidad` int(10) unsigned default NULL COMMENT 'ordenable',
|
`cantidad` int(10) unsigned default NULL COMMENT 'ordenable',
|
||||||
`fechaCompra` date NOT NULL COMMENT 'ordenable',
|
`fechaCompra` date NOT NULL COMMENT 'ordenable',
|
||||||
|
`imagen` varchar(45) default NULL COMMENT 'imagen',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `id` (`id`),
|
KEY `id` (`id`),
|
||||||
KEY `id_Articulo` (`id_Articulo`),
|
KEY `id_Articulo` (`id_Articulo`),
|
||||||
|
Reference in New Issue
Block a user