From 070c0d123ed6ff5c4ba3bf03057a0408f2f9eb75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Ca=C3=B1izares?= Date: Mon, 26 Jan 2015 23:23:05 +0100 Subject: [PATCH 1/4] Implementada subida de varias fotos al editar una cita --- app/Controller/CitaController.php | 15 +- app/Model/AsoCitaClaseEdadSexo.php | 281 +++++++---------- app/Model/Fichero.php | 486 +++++++++++++++-------------- app/Utility/FicheroUtility.php | 226 +++++++------- app/View/Cita/edit.ctp | 101 +++--- 5 files changed, 560 insertions(+), 549 deletions(-) diff --git a/app/Controller/CitaController.php b/app/Controller/CitaController.php index e3f44479..e6efdff5 100644 --- a/app/Controller/CitaController.php +++ b/app/Controller/CitaController.php @@ -551,16 +551,23 @@ public function edit() $privacidad = $this->calcularPrivacidadCita($this->Cita->id, $this->Cita->field('fechaAlta'), $especieId, $this->Cita->field('clase_reproduccion_id')); $this->Cita->saveField('indPrivacidad', $privacidad); + /* Fichero */ + if (isset($_FILES["fotos"])) { + + $fotos = $this->Fichero->reArrayFiles($_FILES['fotos']); + + foreach ($fotos as $foto) { + $this->Fichero->subirImagenCita($foto, $cita, $current_user['id'], 1); + } + } + if (empty($errorsMessagesList)) { $dataSource->commit(); $this->Session->setFlash(__('La cita se ha guardado correctamente.'), 'success'); - return $this->redirect(array( - "action" => "edit", - "id" => $this->Cita->id - )); + $this->redirect(array("action" => "edit", "id" => $this->Cita->id)); } else { $dataSource->rollback(); diff --git a/app/Model/AsoCitaClaseEdadSexo.php b/app/Model/AsoCitaClaseEdadSexo.php index 9dd14b9d..21afd749 100644 --- a/app/Model/AsoCitaClaseEdadSexo.php +++ b/app/Model/AsoCitaClaseEdadSexo.php @@ -157,200 +157,161 @@ public function existeAsoCitaClaseEdadSexo($claseEdadSexoId, $citaId) { public function crearAsoCitaClaseEdadSexo($claseEdadSexoId, $citaId, $cantidad) { - try { - $asoCitaClaseEdadSexo = array(); - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['clase_edad_sexo_id'] = $claseEdadSexoId; - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cita_id'] = $citaId; - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cantidad'] = $cantidad; + $asoCitaClaseEdadSexo = array(); + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['clase_edad_sexo_id'] = $claseEdadSexoId; + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cita_id'] = $citaId; + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cantidad'] = $cantidad; - CakeLog::debug('$asoCitaClaseEdadSexo -> ' . print_r($asoCitaClaseEdadSexo, true)); + $this->create(); - $this->create(); - - $this->set($asoCitaClaseEdadSexo); - - if ($this->validates()) { - $this->save($asoCitaClaseEdadSexo); - } - else { - $errors = $this->validationErrors; - - $errorsMessages = ""; - foreach ($errors as $validationError) { - $errorsMessages .= $validationError[0]."\n"; - } - - return $errorsMessages; - } + $this->set($asoCitaClaseEdadSexo); + + if ($this->validates()) { + $this->save($asoCitaClaseEdadSexo); } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); - throw new Exception('Se ha producido un error al asociar clase edad sexo y cita'); + else { + $errors = $this->validationErrors; + + $errorsMessages = ""; + foreach ($errors as $validationError) { + $errorsMessages .= $validationError[0]."\n"; + } + + return $errorsMessages; } } public function modificarCantidadAsoCitaClaseEdadSexo($claseEdadSexoId, $citaId, $cantidad) { - try { - - $asoCitaClaseEdadSexo = array(); - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['clase_edad_sexo_id'] = $claseEdadSexoId; - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cita_id'] = $citaId; - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cantidad'] = $cantidad; - - $this->create(); - - $this->set($asoCitaClaseEdadSexo); - - if ($this->validates()) { - - $this->updateAll( - array('AsoCitaClaseEdadSexo.cantidad' => $cantidad), - array('AsoCitaClaseEdadSexo.clase_edad_sexo_id' => $claseEdadSexoId, 'AsoCitaClaseEdadSexo.cita_id' => $citaId) - ); - } - else { - $errors = $this->validationErrors; - - $errorsMessages = ""; - foreach ($errors as $validationError) { - $errorsMessages .= $validationError[0]."\n"; - } - - return $errorsMessages; - } + $asoCitaClaseEdadSexo = array(); + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['clase_edad_sexo_id'] = $claseEdadSexoId; + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cita_id'] = $citaId; + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cantidad'] = $cantidad; + + $this->create(); + + $this->set($asoCitaClaseEdadSexo); + + if ($this->validates()) { + + $this->updateAll( + array('AsoCitaClaseEdadSexo.cantidad' => $cantidad), + array('AsoCitaClaseEdadSexo.clase_edad_sexo_id' => $claseEdadSexoId, 'AsoCitaClaseEdadSexo.cita_id' => $citaId) + ); } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); - throw new Exception('Se ha producido un error al asociar clase edad sexo y cita'); + else { + $errors = $this->validationErrors; + + $errorsMessages = ""; + foreach ($errors as $validationError) { + $errorsMessages .= $validationError[0]."\n"; + } + + return $errorsMessages; } } public function eliminarAsoCitaClaseEdadSexo($claseEdadSexoId, $citaId) { - try { - $asoCitaClaseEdadSexo = array(); - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['clase_edad_sexo_id'] = $claseEdadSexoId; - $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cita_id'] = $citaId; - - $this->create(); - - $this->set($asoCitaClaseEdadSexo); - - if ($this->validates()) { - $this->deleteAll(array('AsoCitaClaseEdadSexo.clase_edad_sexo_id'=>$claseEdadSexoId, 'AsoCitaClaseEdadSexo.cita_id'=>$citaId), false); - } - else { - $errors = $this->validationErrors; - - $errorsMessages = ""; - foreach ($errors as $validationError) { - $errorsMessages .= $validationError[0]."\n"; - } - - return $errorsMessages; - } + $asoCitaClaseEdadSexo = array(); + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['clase_edad_sexo_id'] = $claseEdadSexoId; + $asoCitaClaseEdadSexo['AsoCitaClaseEdadSexo']['cita_id'] = $citaId; + + $this->create(); + + $this->set($asoCitaClaseEdadSexo); + + if ($this->validates()) { + $this->deleteAll(array('AsoCitaClaseEdadSexo.clase_edad_sexo_id'=>$claseEdadSexoId, 'AsoCitaClaseEdadSexo.cita_id'=>$citaId), false); } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); - throw new Exception('Se ha producido un error al eliminar la asociacion clase edad sexo y cita'); + else { + $errors = $this->validationErrors; + + $errorsMessages = ""; + foreach ($errors as $validationError) { + $errorsMessages .= $validationError[0]."\n"; + } + + return $errorsMessages; } } public function existenCitasHembras($citaId) { - try { - - $count = $this -> find( - 'count', - array( - 'fields' => array('AsoCitaClaseEdadSexo.id'), - 'conditions'=>array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'RIGHT(ClaseEdadSexo.codigo, 1)' => 2) - ) - ); - - if($count > 0) { - return true; - } - } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); + $count = $this -> find( + 'count', + array( + 'fields' => array('AsoCitaClaseEdadSexo.id'), + 'conditions'=>array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'RIGHT(ClaseEdadSexo.codigo, 1)' => 2) + ) + ); + + if($count > 0) { + return true; } - + return false; } public function existenCitasMachos($citaId) { - try { - - $count = $this -> find( - 'count', - array( - 'fields' => array('AsoCitaClaseEdadSexo.id'), - 'conditions'=>array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'RIGHT(ClaseEdadSexo.codigo, 1)' => 1) - ) - ); - - if($count > 0) { - return true; - } - } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); + $count = $this -> find( + 'count', + array( + 'fields' => array('AsoCitaClaseEdadSexo.id'), + 'conditions'=>array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'RIGHT(ClaseEdadSexo.codigo, 1)' => 1) + ) + ); + + if($count > 0) { + return true; } - + return false; } public function existenCitasAdultos($citaId, $especieId = null) { - try { - - $count = 0; - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 9); - - // Neophron percnopterus - if($especieId == 67) { - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 5); - } - // Aquila adalberti - elseif ($especieId == 588) { - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 7); - } - // Falco peregrinus - elseif ($especieId == 159 || $especieId == 160 || $especieId == 605) { - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 5); - } - // Aquila fasciata - elseif ($especieId == 593) { - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 5); - } - // Childonias niger - elseif ($especieId == 499) { - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 3); - } - // Aquila chrysaetos - elseif ($especieId == 591) { - $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 7); - } - - $count = $this -> find( - 'count', - array( - 'fields' => array('AsoCitaClaseEdadSexo.id'), - 'conditions'=>$conditions - ) - ); - - if($count > 0) { - return true; - } + $count = 0; + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 9); + + // Neophron percnopterus + if($especieId == 67) { + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 5); } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); + // Aquila adalberti + elseif ($especieId == 588) { + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 7); } - + // Falco peregrinus + elseif ($especieId == 159 || $especieId == 160 || $especieId == 605) { + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 5); + } + // Aquila fasciata + elseif ($especieId == 593) { + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 5); + } + // Childonias niger + elseif ($especieId == 499) { + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 3); + } + // Aquila chrysaetos + elseif ($especieId == 591) { + $conditions = array('AsoCitaClaseEdadSexo.cita_id' => $citaId,'LEFT(ClaseEdadSexo.codigo, 1)' => 7); + } + + $count = $this -> find( + 'count', + array( + 'fields' => array('AsoCitaClaseEdadSexo.id'), + 'conditions'=>$conditions + ) + ); + + if($count > 0) { + return true; + } + return false; } } diff --git a/app/Model/Fichero.php b/app/Model/Fichero.php index f3b6d28a..d6c44a93 100644 --- a/app/Model/Fichero.php +++ b/app/Model/Fichero.php @@ -10,59 +10,59 @@ */ class Fichero extends AppModel { - /** - * Use database config - * - * @var string - */ - public $useDbConfig = 'default'; + /** + * Use database config + * + * @var string + */ + public $useDbConfig = 'default'; - /** - * Use table - * - * @var mixed False or table name - */ - public $useTable = 'fichero'; - - /** - * Display field - * - * @var string - */ - public $displayField = 'nombre'; + /** + * Use table + * + * @var mixed False or table name + */ + public $useTable = 'fichero'; + + /** + * Display field + * + * @var string + */ + public $displayField = 'nombre'; - //The Associations below have been created with all possible keys, those that are not needed can be removed + //The Associations below have been created with all possible keys, those that are not needed can be removed - /** - * belongsTo associations - * - * @var array - */ - public $belongsTo = array( - 'Cita' => array( - 'className' => 'Cita', - 'foreignKey' => 'cita_id', - 'conditions' => '', - 'fields' => '', - 'order' => '' - ) - ); - - /** - * Validaciones - */ - public $validate = array( - 'nombre' => array( + /** + * belongsTo associations + * + * @var array + */ + public $belongsTo = array( + 'Cita' => array( + 'className' => 'Cita', + 'foreignKey' => 'cita_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ) + ); + + /** + * Validaciones + */ + public $validate = array( + 'nombre' => array( 'required' => array( 'rule' => array('notEmpty'), - 'required' => true, + 'required' => true, 'message' => 'El nombre es obligatorio.' ), - 'maxLength' => array( - 'rule' => array('maxLength', 100), - 'message' => 'El tamaño máximo del nombre son 100 caracteres.' - ) + 'maxLength' => array( + 'rule' => array('maxLength', 100), + 'message' => 'El tamaño máximo del nombre son 100 caracteres.' + ) ), 'descripcion' => array( 'maxLength' => array( @@ -70,195 +70,209 @@ class Fichero extends AppModel { 'message' => 'El tamaño máximo de la descripción son 500 caracteres.' ) ), - 'ruta' => array( - 'required' => array( - 'rule' => array('notEmpty'), - 'required' => true, - 'message' => 'La ruta es obligatoria.' - ), - 'maxLength' => array( - 'rule' => array('maxLength', 250), - 'message' => 'El tamaño máximo de la ruta son 250 caracteres.' - ) - ), - 'tipoMime' => array( - 'required' => array( - 'rule' => array('notEmpty'), - 'required' => true, - 'message' => 'El tipo MIME es obligatorio.' - ), - 'maxLength' => array( - 'rule' => array('maxLength', 100), - 'message' => 'El tamaño máximo del tipo MIME son 100 caracteres.' - ) - ), - 'nombreFisico' => array( - 'required' => array( - 'rule' => array('notEmpty'), - 'required' => true, - 'message' => 'El nombre físico es obligatorio.' - ), - 'maxLength' => array( - 'rule' => array('maxLength', 50), - 'message' => 'El tamaño máximo del nombre físico son 50 caracteres.' - ) - ), - 'fechaAlta' => array( - 'required' => array( - 'rule' => array('notEmpty'), - 'required' => true, - 'message' => 'La fecha es obligatoria.' - ), - 'date' => array( - 'rule' => array('date', 'ymd'), - 'required' => true, - 'message' => 'Debe introducir una fecha de alta con formato correcto (dd/mm/aaaa).' - ) - ) - ); - - public function obtenerFotosPortada($orden, $limite) { - - $fotos = $this -> find( - 'all', - array( - 'conditions'=>array('Fichero.indImagenPortada'=>1), - 'order'=>$orden, - 'limit'=>$limite - ) - ); - - return $fotos; - } - - public function subirImagenCita($fichero, $cita, $usuarioId, $esImagenPortada=0) { - - try { - - // Comprobamos si la imagen se ha enviado correctamente por POST - if ($fichero["error"] > 0) { - $this->Session->setFlash("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"], "failure"); - return false; - } - else { - - // Extension de la imagen subida - $imageExtension = explode(".", $fichero["name"]); - $imageExtension = end($imageExtension); - $imageExtension = strtolower($imageExtension); - - // Nombre de la imagen - $nombre_fisico = time()."_".$cita["Cita"]["id"].".".$imageExtension; - - // Ruta donde se ubicará la imagen - $imageAbsolutePath = IMAGES.'users/'.$usuarioId."/"; - $imageRelativePath = '/'.IMAGES_URL.'users/'.$usuarioId."/"; - - // Validamos la imagen - if(FicheroUtility::validar_imagen($nombre_fisico, $imageExtension, $imageAbsolutePath, $fichero["type"], $fichero["tmp_name"])) { - - // Seteamos los datos recibidos - $imagen['Fichero']['nombreFisico']=$nombre_fisico; - $imagen['Fichero']['nombre']=$fichero["name"]; - $imagen['Fichero']['fechaAlta']=$cita["Cita"]["fechaAlta"]; - $imagen['Fichero']['cita_id']=$cita["Cita"]["id"]; - $imagen['Fichero']['tipoMime']=$fichero["type"]; - $imagen['Fichero']['ruta']=$imageRelativePath; - $imagen['Fichero']['indImagenPortada']=$esImagenPortada; - - $this->create(); - $this->set($imagen); - - if($this->validates()) { - $this->save($imagen); - } - else { - CakeLog::write('error', $this->invalidFields()); - throw new exception; - } - } - else { - CakeLog::write('error', "Error procesando la imagen."); - } - } - } - catch (Exception $e) { - // Eliminamos el fichero generado - if(file_exists($imageAbsolutePath.$nombre_fisico)) { - unlink($imageAbsolutePath.$nombre_fisico); - } - - CakeLog::write('error', $e->getTrace()); - } - } - - public function subirAvatar($fichero, $usuarioId, $avatarId) { - - try { - - // Comprobamos si la imagen se ha enviado correctamente por POST - if ($fichero["error"] > 0) { - $this->Session->setFlash("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"], "failure"); - return false; - } - else { - - // Extension de la imagen subida - $imageExtension = explode(".", $fichero["name"]); - $imageExtension = end($imageExtension); - $imageExtension = strtolower($imageExtension); - - // Nombre de la imagen - $nombre_fisico = "avatar.".$imageExtension; - - // Ruta donde se ubicará la imagen - $imageAbsolutePath = IMAGES.'users/'.$usuarioId."/"; - $imageRelativePath = '/'.IMAGES_URL.'users/'.$usuarioId."/"; - - // Validamos la imagen - if(FicheroUtility::validar_imagen($nombre_fisico, $imageExtension, $imageAbsolutePath, $fichero["type"], $fichero["tmp_name"], 200)) { - - if($avatarId == null || !$this->exists($avatarId)) { - - // Seteamos los datos recibidos - $imagen['Fichero']['nombreFisico']=$nombre_fisico; - $imagen['Fichero']['nombre']=$fichero["name"]; - $imagen['Fichero']['fechaAlta']=date('y-m-d'); - $imagen['Fichero']['tipoMime']=$fichero["type"]; - $imagen['Fichero']['ruta']=$imageRelativePath; - - $this->create(); - $this->set($imagen); - } - else { - $this->read(null, $avatarId); - $this->set('nombreFisico', $nombre_fisico); - $this->set('nombre', $fichero["name"]); - $this->set('fechaAlta', date('y-m-d')); - $this->set('tipoMime', $fichero["type"]); - } - - if($this->validates()) { - $this->save($imagen); - - return $this->id; - } - else { - CakeLog::write('error', print_r($this->invalidFields(), true)); - } - } - else { - CakeLog::write('error', "Error procesando la imagen."); - } - } - } - catch (Exception $e) { - // Eliminamos el fichero generado - if(file_exists($imageAbsolutePath.$nombre_fisico)) { - unlink($imageAbsolutePath.$nombre_fisico); - } - - CakeLog::write('error', $e->getTrace()); - } - } + 'ruta' => array( + 'required' => array( + 'rule' => array('notEmpty'), + 'required' => true, + 'message' => 'La ruta es obligatoria.' + ), + 'maxLength' => array( + 'rule' => array('maxLength', 250), + 'message' => 'El tamaño máximo de la ruta son 250 caracteres.' + ) + ), + 'tipoMime' => array( + 'required' => array( + 'rule' => array('notEmpty'), + 'required' => true, + 'message' => 'El tipo MIME es obligatorio.' + ), + 'maxLength' => array( + 'rule' => array('maxLength', 100), + 'message' => 'El tamaño máximo del tipo MIME son 100 caracteres.' + ) + ), + 'nombreFisico' => array( + 'required' => array( + 'rule' => array('notEmpty'), + 'required' => true, + 'message' => 'El nombre físico es obligatorio.' + ), + 'maxLength' => array( + 'rule' => array('maxLength', 50), + 'message' => 'El tamaño máximo del nombre físico son 50 caracteres.' + ) + ), + 'fechaAlta' => array( + 'required' => array( + 'rule' => array('notEmpty'), + 'required' => true, + 'message' => 'La fecha es obligatoria.' + ), + 'date' => array( + 'rule' => array('date', 'ymd'), + 'required' => true, + 'message' => 'Debe introducir una fecha de alta con formato correcto (dd/mm/aaaa).' + ) + ) + ); + + public function obtenerFotosPortada($orden, $limite) { + + $fotos = $this -> find( + 'all', + array( + 'conditions'=>array('Fichero.indImagenPortada'=>1), + 'order'=>$orden, + 'limit'=>$limite + ) + ); + + return $fotos; + } + + public function subirImagenCita($fichero, $cita, $usuarioId, $esImagenPortada=0) { + + try { + + // Comprobamos si la imagen se ha enviado correctamente por POST + if ($fichero["error"] > 0) { + $this->Session->setFlash("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"], "failure"); + return false; + } + else { + // Extension de la imagen subida + $imageExtension = explode(".", $fichero["name"]); + $imageExtension = end($imageExtension); + $imageExtension = strtolower($imageExtension); + + // Nombre de la imagen + $nombre_fisico = uniqid() . "_" . $cita["Cita"]["id"] . "." . $imageExtension; + + // Ruta donde se ubicará la imagen + $imageAbsolutePath = IMAGES.'users/'.$usuarioId."/"; + $imageRelativePath = '/'.IMAGES_URL.'users/'.$usuarioId."/"; + + // Validamos la imagen + if(FicheroUtility::validar_imagen($nombre_fisico, $imageExtension, $imageAbsolutePath, $fichero["type"], $fichero["tmp_name"])) { + + // Seteamos los datos recibidos + $imagen['Fichero']['nombreFisico']=$nombre_fisico; + $imagen['Fichero']['nombre']=$fichero["name"]; + $imagen['Fichero']['fechaAlta']=$cita["Cita"]["fechaAlta"]; + $imagen['Fichero']['cita_id']=$cita["Cita"]["id"]; + $imagen['Fichero']['tipoMime']=$fichero["type"]; + $imagen['Fichero']['ruta']=$imageRelativePath; + $imagen['Fichero']['indImagenPortada']=$esImagenPortada; + + $this->create(); + $this->set($imagen); + + if($this->validates()) { + $this->save($imagen); + } + else { + CakeLog::write('error', $this->invalidFields()); + throw new exception; + } + } + else { + CakeLog::write('error', "Error procesando la imagen."); + } + } + } + catch (Exception $e) { + // Eliminamos el fichero generado + if(file_exists($imageAbsolutePath.$nombre_fisico)) { + unlink($imageAbsolutePath.$nombre_fisico); + } + + CakeLog::write('error', $e->getTraceAsString()); + } + } + + public function subirAvatar($fichero, $usuarioId, $avatarId) { + + try { + + // Comprobamos si la imagen se ha enviado correctamente por POST + if ($fichero["error"] > 0) { + $this->Session->setFlash("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"], "failure"); + return false; + } + else { + + // Extension de la imagen subida + $imageExtension = explode(".", $fichero["name"]); + $imageExtension = end($imageExtension); + $imageExtension = strtolower($imageExtension); + + // Nombre de la imagen + $nombre_fisico = "avatar.".$imageExtension; + + // Ruta donde se ubicará la imagen + $imageAbsolutePath = IMAGES.'users/'.$usuarioId."/"; + $imageRelativePath = '/'.IMAGES_URL.'users/'.$usuarioId."/"; + + // Validamos la imagen + if(FicheroUtility::validar_imagen($nombre_fisico, $imageExtension, $imageAbsolutePath, $fichero["type"], $fichero["tmp_name"], 200)) { + + if($avatarId == null || !$this->exists($avatarId)) { + + // Seteamos los datos recibidos + $imagen['Fichero']['nombreFisico']=$nombre_fisico; + $imagen['Fichero']['nombre']=$fichero["name"]; + $imagen['Fichero']['fechaAlta']=date('y-m-d'); + $imagen['Fichero']['tipoMime']=$fichero["type"]; + $imagen['Fichero']['ruta']=$imageRelativePath; + + $this->create(); + $this->set($imagen); + } + else { + $this->read(null, $avatarId); + $this->set('nombreFisico', $nombre_fisico); + $this->set('nombre', $fichero["name"]); + $this->set('fechaAlta', date('y-m-d')); + $this->set('tipoMime', $fichero["type"]); + } + + if($this->validates()) { + $this->save($imagen); + + return $this->id; + } + else { + CakeLog::write('error', print_r($this->invalidFields(), true)); + } + } + else { + CakeLog::write('error', "Error procesando la imagen."); + } + } + } + catch (Exception $e) { + // Eliminamos el fichero generado + if(file_exists($imageAbsolutePath.$nombre_fisico)) { + unlink($imageAbsolutePath.$nombre_fisico); + } + + CakeLog::write('error', $e->getTraceAsString()); + } + } + + public function reArrayFiles(&$file_post) { + + $file_ary = array(); + $file_count = count($file_post['name']); + $file_keys = array_keys($file_post); + + for ($i=0; $i<$file_count; $i++) { + foreach ($file_keys as $key) { + $file_ary[$i][$key] = $file_post[$key][$i]; + } + } + + return $file_ary; + } } diff --git a/app/Utility/FicheroUtility.php b/app/Utility/FicheroUtility.php index 6fd1f6e3..a896bccf 100644 --- a/app/Utility/FicheroUtility.php +++ b/app/Utility/FicheroUtility.php @@ -7,119 +7,119 @@ */ class FicheroUtility { - /** - * Constantes - */ - const ANCHO_IMAGEN_PREDETERMINADO = 1024; - - /** - * Valida que la imagen tenga un formato y extension permitidos y redimensaiona la imagen si es necesario - * - * @param string $imageName - * @param string $imageExtension - * @param string $imageAbsolutePath - * @return boolean - */ - public static function validar_imagen($imageName, $imageExtension, $imageAbsolutePath, $imageType, $imageTmpName, $width=FicheroUtility::ANCHO_IMAGEN_PREDETERMINADO) { - - // Comprobamos si el tipo mime y la extensión están dentro de los permitidos - if (in_array($imageType, FicheroUtility::obtener_tipos_mime_imagen_permitidos()) - && in_array($imageExtension, FicheroUtility::obtener_extensiones_imagen_permitidas())) - { - // Movemos la imagen a la ruta indicada por parametro - if(move_uploaded_file($imageTmpName, $imageAbsolutePath.$imageName)) { - - // Redimensionamos la imagen al tamaño predeterminado - if(!FicheroUtility::redimensionar_imagen($imageAbsolutePath.$imageName, $imageType, $width)) { - return false; - } - } - else { - CakeLog::write('error', "Error moviendo la imagen."); - return false; - } - } - else - { - CakeLog::write('error', "Formato o extensión de imagen no válido."); - return false; - } - - return true; - } - - /** - * Redimensiona una imagen según el ancho indicado por parametro - * - * @param string $nombre, nombre y ruta completos de la imagen - */ - public static function redimensionar_imagen($nombre, $imageType, $width=FicheroUtility::ANCHO_IMAGEN_PREDETERMINADO){ - - $img_origen; - - // JPG - if ($imageType == "image/jpeg" || $imageType == "image/jpg" || $imageType == "image/pjpeg") { - $img_origen = imagecreatefromjpeg( $nombre ); - } - // PNG - else if($imageType == "image/x-png" || $imageType == "image/png") { - $img_origen = imagecreatefrompng( $nombre ); - } - - // Obtenemos el ancho y alto de la imagen - $ancho_origen = imagesx( $img_origen ); - $alto_origen = imagesy( $img_origen ); - - /* - * Seteamos las proporciones - */ - { - // Imagen horizontal - if($ancho_origen > $alto_origen && $ancho_origen > $width){ - $ancho_origen = $width; - $alto_origen = $width * imagesy( $img_origen ) / imagesx( $img_origen ); - } - // Imagen vertical - elseif($alto_origen > $ancho_origen && $alto_origen > $width) { - $alto_origen = $width; - $ancho_origen = $width * imagesx( $img_origen ) / imagesy( $img_origen ); - } - // No es necesaria la redimension - else { - return true; - } - } - - // Creamos el marco donde irá contenida la nueva imagen segun las dimensiones calculadas - $img_destino = imagecreatetruecolor($ancho_origen ,$alto_origen ); - - // Redimensionamos la imagen - imagecopyresized( $img_destino, $img_origen, 0, 0, 0, 0, $ancho_origen, $alto_origen, imagesx( $img_origen ), imagesy( $img_origen ) ); - - // Generamos la nueva imagen redimensionada - if ($imageType == "image/jpeg" || $imageType == "image/jpg" || $imageType == "image/pjpeg") { - imagejpeg( $img_destino, $nombre ); - } - else if($imageType == "image/x-png" || $imageType == "image/png") { - imagepng( $img_destino, $nombre ); - } - - return true; - } - - /** - * Devuelve las extensiones permitidas para imágenes - */ - public static function obtener_extensiones_imagen_permitidas() { - return array("jpeg", "jpg", "png"); - } - - /** - * Devuelve los tipos MIME permitidos para imagenes - */ - public static function obtener_tipos_mime_imagen_permitidos() { - return array("image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png"); - } + /** + * Constantes + */ + const ANCHO_IMAGEN_PREDETERMINADO = 1024; + + /** + * Valida que la imagen tenga un formato y extension permitidos y redimensaiona la imagen si es necesario + * + * @param string $imageName + * @param string $imageExtension + * @param string $imageAbsolutePath + * @return boolean + */ + public static function validar_imagen($imageName, $imageExtension, $imageAbsolutePath, $imageType, $imageTmpName, $width=FicheroUtility::ANCHO_IMAGEN_PREDETERMINADO) { + + // Comprobamos si el tipo mime y la extensión están dentro de los permitidos + if (in_array($imageType, FicheroUtility::obtener_tipos_mime_imagen_permitidos()) + && in_array($imageExtension, FicheroUtility::obtener_extensiones_imagen_permitidas())) + { + // Movemos la imagen a la ruta indicada por parametro + if(move_uploaded_file($imageTmpName, $imageAbsolutePath.$imageName)) { + + // Redimensionamos la imagen al tamaño predeterminado + if(!FicheroUtility::redimensionar_imagen($imageAbsolutePath.$imageName, $imageType, $width)) { + return false; + } + } + else { + CakeLog::write('error', "Error moviendo la imagen."); + return false; + } + } + else + { + CakeLog::write('error', "Formato o extensión de imagen no válido."); + return false; + } + + return true; + } + + /** + * Redimensiona una imagen según el ancho indicado por parametro + * + * @param string $nombre, nombre y ruta completos de la imagen + */ + public static function redimensionar_imagen($nombre, $imageType, $width=FicheroUtility::ANCHO_IMAGEN_PREDETERMINADO){ + + $img_origen; + + // JPG + if ($imageType == "image/jpeg" || $imageType == "image/jpg" || $imageType == "image/pjpeg") { + $img_origen = imagecreatefromjpeg( $nombre ); + } + // PNG + else if($imageType == "image/x-png" || $imageType == "image/png") { + $img_origen = imagecreatefrompng( $nombre ); + } + + // Obtenemos el ancho y alto de la imagen + $ancho_origen = imagesx( $img_origen ); + $alto_origen = imagesy( $img_origen ); + + /* + * Seteamos las proporciones + */ + { + // Imagen horizontal + if($ancho_origen > $alto_origen && $ancho_origen > $width){ + $ancho_origen = $width; + $alto_origen = $width * imagesy( $img_origen ) / imagesx( $img_origen ); + } + // Imagen vertical + elseif($alto_origen > $ancho_origen && $alto_origen > $width) { + $alto_origen = $width; + $ancho_origen = $width * imagesx( $img_origen ) / imagesy( $img_origen ); + } + // No es necesaria la redimension + else { + return true; + } + } + + // Creamos el marco donde irá contenida la nueva imagen segun las dimensiones calculadas + $img_destino = imagecreatetruecolor($ancho_origen ,$alto_origen ); + + // Redimensionamos la imagen + imagecopyresized( $img_destino, $img_origen, 0, 0, 0, 0, $ancho_origen, $alto_origen, imagesx( $img_origen ), imagesy( $img_origen ) ); + + // Generamos la nueva imagen redimensionada + if ($imageType == "image/jpeg" || $imageType == "image/jpg" || $imageType == "image/pjpeg") { + imagejpeg( $img_destino, $nombre ); + } + else if($imageType == "image/x-png" || $imageType == "image/png") { + imagepng( $img_destino, $nombre ); + } + + return true; + } + + /** + * Devuelve las extensiones permitidas para imágenes + */ + public static function obtener_extensiones_imagen_permitidas() { + return array("jpeg", "jpg", "png"); + } + + /** + * Devuelve los tipos MIME permitidos para imagenes + */ + public static function obtener_tipos_mime_imagen_permitidos() { + return array("image/jpeg", "image/jpg", "image/pjpeg", "image/x-png", "image/png"); + } } ?> \ No newline at end of file diff --git a/app/View/Cita/edit.ctp b/app/View/Cita/edit.ctp index 8a205401..7e80ae34 100644 --- a/app/View/Cita/edit.ctp +++ b/app/View/Cita/edit.ctp @@ -496,50 +496,79 @@ google.maps.event.addDomListener(window, 'load', initialize); - + + +
+ Fotos +
+
+
+
+
+
+ + + + + + +
+
+
+
+
+ + + + + + +
+
+
+
+
+ + + + + + +
+
+
+
    + 0) { + + foreach ($cita['Fichero'] as $foto) { + echo '
  • '; + echo ''; + echo ''.$foto['descripcion'].''; + echo ''; + echo '
  • '; + } + } + else { + echo '
    '; + echo ''; + echo '
    '; + } + ?> +
+
+
+
+
- +
-
- - - - -
-
- -
-
    - 0) { - - foreach ($cita['Fichero'] as $foto) { - echo '
  • '; - echo ''; - echo ''.$foto['descripcion'].''; - echo ''; - echo '
  • '; - } - - } - else { - echo '
    '; - echo ''; - echo '
    '; - } - ?> -
-
-
-
From 903f991246a70a4323d5bc27ae1d388d87da8715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Ca=C3=B1izares?= Date: Wed, 28 Jan 2015 21:07:44 +0100 Subject: [PATCH 2/4] Implementado borrado de fotos al editar una cita --- app/Controller/CitaController.php | 31 ++++-- app/Model/Fichero.php | 4 +- app/View/Cita/edit.ctp | 170 ++++++++++++++++-------------- app/webroot/css/Cita/edit.css | 5 + app/webroot/css/aoa-main.css | 2 +- app/webroot/js/Cita/edit.js | 17 ++- 6 files changed, 133 insertions(+), 96 deletions(-) diff --git a/app/Controller/CitaController.php b/app/Controller/CitaController.php index e6efdff5..2e21c13b 100644 --- a/app/Controller/CitaController.php +++ b/app/Controller/CitaController.php @@ -404,6 +404,8 @@ public function edit() try { + CakeLog::debug(print_r($_POST, true)); + $dataSource = $this->Cita->getDataSource(); $dataSource->begin(); $errorsMessagesList = array(); @@ -530,9 +532,7 @@ public function edit() } } - /* - * Cita-clase_edad_sexo - */ + // Cita-clase_edad_sexo { // Eliminamos todas las existentes $this->AsoCitaClaseEdadSexo->deleteAll(['AsoCitaClaseEdadSexo.cita_id' => $citaId], false); @@ -545,19 +545,28 @@ public function edit() } } - /* - * Privacidad - */ + // Privacidad $privacidad = $this->calcularPrivacidadCita($this->Cita->id, $this->Cita->field('fechaAlta'), $especieId, $this->Cita->field('clase_reproduccion_id')); $this->Cita->saveField('indPrivacidad', $privacidad); - /* Fichero */ - if (isset($_FILES["fotos"])) { + // Fotos + { + // Subir + if (isset($_FILES["fotos"])) { - $fotos = $this->Fichero->reArrayFiles($_FILES['fotos']); + $fotos = $this->Fichero->reArrayFiles($_FILES['fotos']); - foreach ($fotos as $foto) { - $this->Fichero->subirImagenCita($foto, $cita, $current_user['id'], 1); + foreach ($fotos as $foto) { + if (UPLOAD_ERR_NO_FILE !== $foto['error']) { + $this->Fichero->subirImagenCita($foto, $cita, $current_user['id'], 1); + } + } + } + // Eliminar + if (isset($_POST['fotosEliminar'])) { + foreach ($_POST['fotosEliminar'] as $fotoId) { + $this->Fichero->delete($fotoId); + } } } diff --git a/app/Model/Fichero.php b/app/Model/Fichero.php index d6c44a93..531012a6 100644 --- a/app/Model/Fichero.php +++ b/app/Model/Fichero.php @@ -137,7 +137,7 @@ public function subirImagenCita($fichero, $cita, $usuarioId, $esImagenPortada=0) // Comprobamos si la imagen se ha enviado correctamente por POST if ($fichero["error"] > 0) { - $this->Session->setFlash("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"], "failure"); + CakeLog::error("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"]); return false; } else { @@ -197,7 +197,7 @@ public function subirAvatar($fichero, $usuarioId, $avatarId) { // Comprobamos si la imagen se ha enviado correctamente por POST if ($fichero["error"] > 0) { - $this->Session->setFlash("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"], "failure"); + CakeLog::error("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"]); return false; } else { diff --git a/app/View/Cita/edit.ctp b/app/View/Cita/edit.ctp index 7e80ae34..6ef0c20d 100644 --- a/app/View/Cita/edit.ctp +++ b/app/View/Cita/edit.ctp @@ -105,7 +105,7 @@ function initialize() { placemark.polygon.normalStyle = normalStyle; - if(placemark.name == '') { + if(placemark.name == '') { placemark.polygon.setOptions(highlightOptions); } } @@ -121,7 +121,7 @@ google.maps.event.addDomListener(window, 'load', initialize);
- +    Importancia->getIconoImportancia($cita['ImportanciaCita']['id'], $cita['ImportanciaCita']['descripcion']); @@ -149,7 +149,7 @@ google.maps.event.addDomListener(window, 'load', initialize);
- +
@@ -157,54 +157,54 @@ google.maps.event.addDomListener(window, 'load', initialize);
-
-