diff --git a/app/Controller/CitaController.php b/app/Controller/CitaController.php index e3f44479..075113b5 100644 --- a/app/Controller/CitaController.php +++ b/app/Controller/CitaController.php @@ -363,11 +363,11 @@ public function index() } /** - * Función que se ejecuta al carga la página inicial + * Guarda los cambios realizados en una cita */ public function edit() { - // Opcion seleccionada del menu + // Marca la opcion seleccionada del menu $this->set('id_opcion_seleccionada', $this::ID_OPCION_MENU); // Recogemos los parámetros de la request @@ -377,53 +377,65 @@ public function edit() $current_user = $this->Auth->user(); // Datos del detalle de la cita - $cita = $this->obtenerDetalleCita($citaId, $current_user); + $cita = $this->obtenerDetalleCita($citaId); //Comprobamos si el usuario que ejecuta la acción tiene permisos para editar la cita if (! $this->esCitaEditable($cita, $current_user)) { throw new ForbiddenException(sprintf('El usuario con email %s no tiene permisos editar la cita con id %s',$current_user['email'], $citaId)); } + // Pasamos los datos de la cita y el usuario registrado a la vista $this->set('cita', $cita); $this->set('usuario', $current_user); - // Carga los combos necesarios para la pantalla de alta + // Carga los datos de los combos a mostrar en la vista $this->cargarCombosCita(); - /* - * Clase edad sexo - */ + // Clase edad sexo $clasesEdadSexo = $this->ClaseEdadSexo->obtenerActivos(); $cantidades = []; for ($i = 0; $i < count($clasesEdadSexo); $i ++) { - $cantidades[$clasesEdadSexo[$i]['ClaseEdadSexo']['codigo']] = $this->AsoCitaClaseEdadSexo->obtenerCantidadPorClaseEdadSexoYCita($citaId, $clasesEdadSexo[$i]['ClaseEdadSexo']['id']); + $cantidades[$clasesEdadSexo[$i]['ClaseEdadSexo']['codigo']] + = $this->AsoCitaClaseEdadSexo->obtenerCantidadPorClaseEdadSexoYCita( + $citaId, + $clasesEdadSexo[$i]['ClaseEdadSexo']['id'] + ); } $this->set('cantidades', $cantidades); if ($this->request->is('post')) { + if (empty($_POST)) { + $this->Session->setFlash(__('Alguno de los datos de la cita no son correctos, por favor corríjalos y vuelva a intentarlo'), 'failure'); + return; + } + try { + // Comanzamos la transaccion $dataSource = $this->Cita->getDataSource(); $dataSource->begin(); - $errorsMessagesList = array(); - // Obtenemos la cita de BD - $cita = $this->Cita->obtenerTodoPorId($citaId); + $errorsMessagesList = []; + $warningMessagesList = []; + // Obtenemos la cita de BD y la rellenamos a partir de los datos editables + // TODO validar y sanear + $cita = $this->Cita->obtenerTodoPorId($citaId); $cita["Cita"]["lugar_id"] = $this->request->data["Cita"]["lugar_id"]; $cita["Cita"]["observador_principal_id"] = $this->request->data["Cita"]["observador_principal_id"]; $cita["Cita"]["fuente_id"] = $this->request->data["Cita"]["fuente_id"]; $cita["Cita"]["estudio_id"] = $this->request->data["Cita"]["estudio_id"]; - $cita["Cita"]["observaciones"] = $this->request->data["Cita"]["observaciones"]; + $observaciones = $this->request->data["Cita"]["observaciones"]; + $cita["Cita"]["observaciones"] = trim(strip_tags($observaciones)); $cita["Cita"]["cantidad"] = $this->request->data["Cita"]["cantidad"]; $cita["Cita"]["clase_reproduccion_id"] = $this->request->data["Cita"]["clase_reproduccion_id"]; - /* Fecha de alta */ + // Fecha de alta { $fechaAlta = $this->request->data["Cita"]["fechaAlta"]; $fechaAltaFormateada = DateUtil::europeanFormatToAmericanFormat($fechaAlta); - if ($fechaAltaFormateada != false) { + if ($fechaAltaFormateada !== false) { $cita["Cita"]["fechaAlta"] = $fechaAltaFormateada; } else { $this->Session->setFlash('El formato de la fecha de alta no es correcto, debe indicar una fecha con formato dd/mm/aaaa', 'failure'); @@ -431,7 +443,7 @@ public function edit() } } - /* Especie */ + // Especie $especieId = $this->request->data["Cita"]["especie_id"]; $cita["Cita"]["especie_id"] = $especieId; $especie = $this->Especie->obtenerTodoPorId($especieId, array( @@ -452,17 +464,17 @@ public function edit() } } - /* Importancia */ + // Importancia $cita["Cita"]["importancia_cita_id"] = CitaUtil::calcularImportanciaCita($especie['Especie']['indRareza'], $especie['Especie']['clasificacion_criterio_esp_id'], $cita["Cita"]["clase_reproduccion_id"]); - /* Criterio seleccion */ + // Criterio seleccion $numeroCitasPorLugar = $this->Cita->obtenerTotalCitasPorLugar($cita["Cita"]["lugar_id"]); $cita["Cita"]["criterio_seleccion_cita_id"] = CitaUtil::calcularCriterioSeleccion($cita["Cita"], $especie, $numeroCitasPorLugar); if ($cita["Cita"]["criterio_seleccion_cita_id"] != 21) { $cita["Cita"]["indSeleccionada"] = 1; } - /* Indicadores */ + // Indicadores { if (isset($this->request->data["Cita"]["indHabitatRaro"])) { $cita["Cita"]["indHabitatRaro"] = $this->request->data["Cita"]["indHabitatRaro"]; @@ -486,53 +498,46 @@ public function edit() } } - /* - * Rareza - */ + // Indicador de Rareza if ($especie['Especie']['indRareza'] == 1) { $this->request->data["Cita"]["indRarezaHomologada"] = 2; } + // Inicializamos la cita y la rellenamos antes de validar $this->Cita->create(); - $this->Cita->set($cita); if ($this->Cita->validates()) { + // Guardamos la cita if ($this->Cita->save()) { - /* - * Cita historico - */ + // Cita historico $errorsMessagesHist = $citaHistorico = $this->CitaHistorico->guardarHistorico($this->Cita->obtenerDatosBasicosPorId($this->Cita->id), $current_user['id']); - if (! empty($errorsMessagesHist)) { array_push($errorsMessagesList, $errorsMessagesHist); } - /* - * Cita-observador_secundario - */ - $this->AsoCitaObservador->deleteAll(['AsoCitaObservador.cita_id' => $citaId], false); - - if (! empty($this->request->data["colaboradoresSeleccionados"])) { - - $observadores = explode(",", $this->request->data["colaboradoresSeleccionados"]); + // Cita-observador_secundario + { + // Borramos las relaciones existentes + $this->AsoCitaObservador->deleteAll(['AsoCitaObservador.cita_id' => $citaId], false); - /* Insertamos si es nuevo */ - foreach ($observadores as $observador) { + // Insertamos los observadores recibidos + if (! empty($this->request->data["colaboradoresSeleccionados"])) { - $errorsMessagesObs = $this->AsoCitaObservador->crearAsoCitaObservador($observador, $this->Cita->id); + $observadores = explode(",", $this->request->data["colaboradoresSeleccionados"]); + foreach ($observadores as $observador) { - if (! empty($errorsMessagesObs)) { - array_push($errorsMessagesList, $errorsMessagesObs); + $errorsMessagesObs = $this->AsoCitaObservador->crearAsoCitaObservador($observador, $this->Cita->id); + if (! empty($errorsMessagesObs)) { + array_push($errorsMessagesList, $errorsMessagesObs); + } } } } - /* - * Cita-clase_edad_sexo - */ + // Cita-clase_edad_sexo { // Eliminamos todas las existentes $this->AsoCitaClaseEdadSexo->deleteAll(['AsoCitaClaseEdadSexo.cita_id' => $citaId], false); @@ -545,30 +550,55 @@ 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); + // Fotos + { + // Subir + if (isset($_FILES["fotos"])) { + + $fotos = $this->Fichero->reArrayFiles($_FILES['fotos']); + $falloSubidaImagen = false; + + foreach ($fotos as $foto) { + if (UPLOAD_ERR_NO_FILE !== $foto['error']) { + if(! $this->Fichero->subirImagenCita($foto, $cita, $current_user['id'], 1)) { + $falloSubidaImagen = true; + } + } + } + if ($falloSubidaImagen) { + $warningMessagesList[] = 'Hubo problemas al subir alguna de las imágenes. Compruebe que el formato es correcto (jpg, jpeg, png o gif) y que no ocupan más de 2 megas.'; + } + } + // Eliminar + if (isset($_POST['fotosEliminar'])) { + foreach ($_POST['fotosEliminar'] as $fotoId) { + $this->Fichero->delete($fotoId); + } + } + } + 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 - )); + // Si hay warnings los pasamos a la vista + if (empty($warningMessagesList)) { + $this->Session->setFlash(__('La cita se ha guardado correctamente.'), 'success'); + } else { + $this->set('warnings', $warningMessagesList); + } + + $this->redirect(array("action" => "edit", "id" => $this->Cita->id)); } else { $dataSource->rollback(); - $errorsMessages = ""; - foreach ($errorsMessagesList as $errorMessage) { - $errorsMessages .= $errorMessage . "\n"; - } - + $errorsMessages = implode("\n", $errorsMessagesList); $this->Session->setFlash($errorsMessages, "failure"); } } @@ -1006,7 +1036,7 @@ public function view() $current_user = $this->Auth->user(); // Obtenemos los datos de la cita - $cita = $this->obtenerDetalleCita($citaId, $current_user); + $cita = $this->obtenerDetalleCita($citaId); if (! $this->esCitaVisible($cita)) { throw new ForbiddenException(sprintf('El usuario con email %s no tiene permisos ver la cita con id %s',$current_user['email'], $citaId)); @@ -1118,11 +1148,9 @@ public function existenCitas() * @param $citaId * @return array */ - private function obtenerDetalleCita($citaId, $usuario) + private function obtenerDetalleCita($citaId) { - /* - * Datos generales cita - */ + // Datos generales cita $cita = $this->Cita->obtenerTodoPorId($citaId); // Comprobamos si la cita existe @@ -1130,30 +1158,20 @@ private function obtenerDetalleCita($citaId, $usuario) throw new NotFoundException(sprintf('La cita con id %s no existe', $citaId)); } - /* - * Observadores - */ + // Observadores $cita['observadores'] = $this->AsoCitaObservador->obtenerObservadoresPorCita($citaId); - /* - * Especie - */ + // Especie $cita['Especie'] = $this->Especie->obtenerTodoPorId($cita['Especie']['id']); - /* - * Orden taxonomico - */ + // Orden taxonomico $this->OrdenTaxonomico->id = $cita['Especie']['Familia']['orden_taxonomico_id']; $cita['Especie']['OrdenTaxonomico']['nombre'] = $this->OrdenTaxonomico->field("nombre"); - /* - * Ubicacion - */ + // Ubicacion $cita['Lugar'] = $this->Lugar->obtenerTodoPorId($cita['Lugar']['id']); - /* - * Clase edad sexo - */ + // Clase edad sexo $i = 0; foreach ($cita['AsoCitaClaseEdadSexo'] as $claseEdadSexo) { $this->ClaseEdadSexo->id = $claseEdadSexo['clase_edad_sexo_id']; 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/Cita.php b/app/Model/Cita.php index 4a4bda2f..469a654d 100644 --- a/app/Model/Cita.php +++ b/app/Model/Cita.php @@ -719,7 +719,13 @@ public function obtenerTotalCitasPorLugar($lugar_id) { return $totalCitas; } - + + /** + * Obtiene el tipo de cria por municipio + * + * @param $especie_id + * @return array + */ public function obtenerTipoCriaPorMunicipio($especie_id) { $citas = $this -> find( @@ -733,7 +739,13 @@ public function obtenerTipoCriaPorMunicipio($especie_id) { return $citas; } - + + /** + * Obtiene el tipo de cría por cuadrícula UTM + * + * @param $especie_id + * @return array + */ public function obtenerTipoCriaPorCuadriculaUtm($especie_id) { $citas = $this -> find( @@ -747,37 +759,38 @@ public function obtenerTipoCriaPorCuadriculaUtm($especie_id) { return $citas; } - - public function existeCita($especieId, $lugarId, $observadorId, $fechaAlta, $citaId=null) { - - try { - - $citas = 0; - - if($citaId != null) { - $citas = $this -> find( - 'count', - array( - 'conditions'=>array('Cita.id <> '=>$citaId,'Cita.especie_id'=>$especieId, 'Cita.lugar_id'=>$lugarId, 'Cita.observador_principal_id'=>$observadorId, "Cita.fechaAlta = STR_TO_DATE('$fechaAlta','%d/%m/%Y')"), - 'fields'=>array('Cita.id') - ) - ); - } - else { - $citas = $this -> find( - 'count', - array( - 'conditions'=>array('Cita.especie_id'=>$especieId, 'Cita.lugar_id'=>$lugarId, 'Cita.observador_principal_id'=>$observadorId, "Cita.fechaAlta = STR_TO_DATE('$fechaAlta','%d/%m/%Y')"), - 'fields'=>array('Cita.id') - ) - ); - } - - return $citas; + + /** + * Comprueba si existe una cita por especie, lugar, observador y fecha de alta + * + * @param $especieId + * @param $lugarId + * @param $observadorId + * @param $fechaAlta + * @param null $citaId + * @return int + */ + public function existeCita($especieId, $lugarId, $observadorId, $fechaAlta, $citaId = null) { + + if($citaId != null) { + $citas = $this -> find( + 'count', + array( + 'conditions'=>array('Cita.id <> '=>$citaId,'Cita.especie_id'=>$especieId, 'Cita.lugar_id'=>$lugarId, 'Cita.observador_principal_id'=>$observadorId, "Cita.fechaAlta = STR_TO_DATE('$fechaAlta','%d/%m/%Y')"), + 'fields'=>array('Cita.id') + ) + ); } - catch(Exception $e) { - $this->Session->setFlash(__('Ha ocurrido el siguiente error en la aplicación: '.$e->getMessage()), "failure"); - CakeLog::write('error', $e->getTrace()); + else { + $citas = $this -> find( + 'count', + array( + 'conditions'=>array('Cita.especie_id'=>$especieId, 'Cita.lugar_id'=>$lugarId, 'Cita.observador_principal_id'=>$observadorId, "Cita.fechaAlta = STR_TO_DATE('$fechaAlta','%d/%m/%Y')"), + 'fields'=>array('Cita.id') + ) + ); } + + return $citas; } } diff --git a/app/Model/Fichero.php b/app/Model/Fichero.php index f3b6d28a..b18828e3 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,212 @@ 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) { + CakeLog::error("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"]); + 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()); + return false; + } + } + else { + CakeLog::write('error', "Error procesando la imagen."); + return false; + } + } + } + catch (Exception $e) { + // Eliminamos el fichero generado + if(file_exists($imageAbsolutePath.$nombre_fisico)) { + unlink($imageAbsolutePath.$nombre_fisico); + } + + CakeLog::error(sprintf('[%s] Hubo un error inesperado al intentar subir una imagen', __METHOD__), $e); + } + + return true; + } + + public function subirAvatar($fichero, $usuarioId, $avatarId) { + + try { + + // Comprobamos si la imagen se ha enviado correctamente por POST + if ($fichero["error"] > 0) { + CakeLog::error("Se ha producido un error al subir la imagen. Código de error: " . $fichero["error"]); + 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/DateUtil.php b/app/Utility/DateUtil.php index 84a0eb42..f276db26 100644 --- a/app/Utility/DateUtil.php +++ b/app/Utility/DateUtil.php @@ -1,96 +1,45 @@ getMessage().$e->getTraceAsString()); - } - } - - /** - * Transforma una fecha en formato dd/mm/yyyy al foramto yyyy-mm-dd - * - * @param String $fecha - */ - public static function europeanFormatToAmericanFormat($fecha) { - - try { - - $fechaArray = explode("/", $fecha); - $dia = $fechaArray[0]; - $mes = $fechaArray[1]; - $anio = $fechaArray[2]; - - if(checkdate($mes, $dia, $anio)) { - return $anio."-".$mes."-".$dia; - } - else { - return false; - } - } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); - } - } - - /** - * Transforma una fecha en formato yyyy-mm-dd al foramto dd/mm/yyyy - * - * @param String $fecha - */ - public static function americanFormatToEuropeanFormat($fecha) { - - try { - - $fechaArray = explode("-", $fecha); - $dia = $fechaArray[2]; - $mes = $fechaArray[1]; - $anio = $fechaArray[0]; - - if(checkdate($mes, $dia, $anio)) { - return $dia."/".$mes."/".$anio; - } - else { - return false; - } - } - catch(Exception $e) { - CakeLog::error($e->getMessage().$e->getTraceAsString()); - } - } + /** + * Transforma una fecha en formato dd/mm/yyyy al foramto yyyy-mm-dd + * + * @param String $fecha + * @return bool|string + */ + public static function europeanFormatToAmericanFormat($fecha) { + + $fechaArray = explode("/", $fecha); + $dia = $fechaArray[0]; + $mes = $fechaArray[1]; + $anio = $fechaArray[2]; + + if(checkdate($mes, $dia, $anio)) { + return $anio."-".$mes."-".$dia; + } + else { + return false; + } + } + + /** + * Transforma una fecha en formato yyyy-mm-dd al foramto dd/mm/yyyy + * + * @param String $fecha + * @return bool|string + */ + public static function americanFormatToEuropeanFormat($fecha) { + + $fechaArray = explode("-", $fecha); + $dia = $fechaArray[2]; + $mes = $fechaArray[1]; + $anio = $fechaArray[0]; + + if(checkdate($mes, $dia, $anio)) { + return $dia."/".$mes."/".$anio; + } + else { + return false; + } + } } \ No newline at end of file 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 df96d81a..84ae950a 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); } } @@ -116,12 +116,24 @@ function initialize() { google.maps.event.addDomListener(window, 'load', initialize); + +
+ +

+ +
+ +
- +    Importancia->getIconoImportancia($cita['ImportanciaCita']['id'], $cita['ImportanciaCita']['descripcion']); @@ -149,7 +161,7 @@ google.maps.event.addDomListener(window, 'load', initialize);
- +
@@ -157,54 +169,54 @@ google.maps.event.addDomListener(window, 'load', initialize);
-
-
-element('Lugar/seleccionarLugar'); ?> +element('Lugar/seleccionarLugar'); ?> -element('Lugar/nuevoLugar'); ?> +element('Lugar/nuevoLugar'); ?> -element('ObservadorSecundario/nuevoObservadorSecundario'); ?> +element('ObservadorSecundario/nuevoObservadorSecundario'); ?> - Html->charset(); ?> + Html->charset(); ?> - <?php echo $title_for_layout; ?>: - <?php echo $anuarioDescription; ?> + <?=$title_for_layout; ?>: + <?=$anuarioDescription; ?>
- Html->image('/img/logos/logo_sao_43x43.png', array('alt' => 'Logotipo de la Sociedad Albacetense de Ornitología')); ?> + Html->image('/img/logos/logo_sao_43x43.png', array('alt' => 'Logotipo de la Sociedad Albacetense de Ornitología')); ?> - + - Html->link('Entrar', array('controller'=>'user', 'action'=>'login'), array('class'=>'btn btn-primary pull-right', 'id'=>'btn_entrar')); ?> + Html->link('Entrar', array('controller'=>'user', 'action'=>'login'), array('class'=>'btn btn-primary pull-right', 'id'=>'btn_entrar')); ?>
- +
@@ -84,11 +84,11 @@ $anuarioDescription = __('Anuario Ornitológico de Albacete Online');
- fetch('menu'); ?> + fetch('menu'); ?> - fetch('cabecera'); ?> + fetch('cabecera'); ?> @@ -96,18 +96,19 @@ $anuarioDescription = __('Anuario Ornitológico de Albacete Online');
- Session->flash(); ?> - Session->flash('auth', array('element' => 'failure')); ?> - Session->flash('auth', array('element' => 'success')); ?> + Session->flash(); ?> + Session->flash('auth', array('element' => 'failure')); ?> + Session->flash('auth', array('element' => 'success')); ?> + Session->flash('auth', array('element' => 'warning')); ?> - fetch('content'); ?> + fetch('content'); ?>
- fetch('pie'); ?> + fetch('pie'); ?> diff --git a/app/webroot/css/Cita/edit.css b/app/webroot/css/Cita/edit.css index 3a35de9d..a2413fb3 100644 --- a/app/webroot/css/Cita/edit.css +++ b/app/webroot/css/Cita/edit.css @@ -59,4 +59,9 @@ #map_canvas { margin: 0; +} + +.thumbnails .thumbnail.error { + border-color: #b94a48; + background-color: #FFAAAA; } \ No newline at end of file diff --git a/app/webroot/css/aoa-main.css b/app/webroot/css/aoa-main.css index cfe54b77..40f63067 100755 --- a/app/webroot/css/aoa-main.css +++ b/app/webroot/css/aoa-main.css @@ -164,7 +164,7 @@ legend { text-align: center; } -.table caption, .caption { +.table caption, td.caption { color: #ffffff; background-color: #0B6138 !important; font-weight: bold; diff --git a/app/webroot/js/Cita/edit.js b/app/webroot/js/Cita/edit.js index 1c8ace2b..9f9204c6 100644 --- a/app/webroot/js/Cita/edit.js +++ b/app/webroot/js/Cita/edit.js @@ -65,6 +65,21 @@ $(document).ready(function() { // Resaltar checks seleccioandos marcarChecksSeleccioandos($divEditarCita); + // Eliminar fotos + $divEditarCita.find('.quitar-foto').each(function() { + $(this).click(function() { + if ($(this).hasClass('active')) { + $(this).removeClass('active'); + $(this).parent().parent().removeClass('error'); + $divEditarCita.find('.foto-eliminar-' + $(this).attr('data-id')).prop('disabled', true); + } else { + $(this).addClass('active'); + $(this).parent().parent().addClass('error'); + $divEditarCita.find('.foto-eliminar-' + $(this).attr('data-id')).prop('disabled', false); + } + }); + }); + /** INICIO Validación de formulario * */ jQuery.validator.addMethod("isdate", function (value, element) { @@ -225,4 +240,4 @@ $(document).ready(function() { } }); /* FIN guardar */ -}); \ No newline at end of file +});