* @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ class CelImage extends Cel { /** * Méthode appelée avec une requête de type GET. */ public function getElement($params) { $parametres = $this->traiterParametres(array('mode'), $params, false); extract($parametres); $contenu = ''; $retour = null; if (isset($mode)) { $methode = $this->traiterNomMethodeGet($mode); if (method_exists($this, $methode)) { $this->parametres = array_shift($params); $retour = $this->$methode(); } else { $service = get_class($this); $this->messages[] = "Ce type de mode '$mode' pour le service '$service' n'est pas disponible."; } } else { $this->messages[] = "Vous devez indiquer un type de mode d'interrogation."; } if (is_null($retour)) { $this->messages[] = "Un problème est survenu lors de l'appel au service CelImage"; } $this->envoyerJson($retour); } private function getImage() { $image = null; if (isset($_GET['imgId'])) { $recherche = new RechercheImage($this->config); $params = array('id_image' => $_GET['imgId'], 'transmission' => "1"); $image = $recherche->rechercherImages(null, $params, 0, 1); if(!empty($image)) { $image = $image[0]; } } return $image; } /** * Service fournissant la liste des ids des images liées à une observation. * Format de l'url du WS : * /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'. */ private function getListeIds() { $ids = array(); if (isset($_GET['obsId'])) { $observations = $this->traiterValeursMultiples($_GET['obsId']); if (! is_null($observations)) { $requete = 'SELECT occurrence_id as ce_observation, id as id_image '. 'FROM photo '. "WHERE occurrence_id IN ($observations) "; $resultats = Cel::db()->requeter($requete); $infos = array(); if (is_array($resultats)) { $infos = $resultats; } foreach ($infos as $info) { if (is_numeric($info['id_image'])) { $ids[$info['ce_observation']][] = (int) $info['id_image']; } } } } return $ids; } /** * Service permettant de recréer les miniatures pour des ids d'images * fournis en entrée - @NOTE devrait peut-être être fait avec DELETE ? */ protected function getRegenererMiniatures() { $idsImages = array(); $idsObs = array(); // par image if (!empty($_GET['ids-img'])) { $idsImages = explode(',', $_GET['ids-img']); $idsImages = array_unique($idsImages); } elseif (!empty($_GET['ids-obs'])) { // par obs $idsObs = explode(',', $_GET['ids-obs']); $idsObs = array_unique($idsObs); // get id images selon id obs $req = "SELECT DISTINCT id as id_image FROM photo WHERE occurrence_id IN ("; $req .= implode(',', $idsObs); $req .= ");"; //var_dump($req); $resultats = Cel::db()->requeter($req); //var_dump($resultats); $idsImages = array(); if ($resultats) { foreach ($resultats as $res) { $idsImages[] = $res["id_image"]; } } } // a-t-on trouvé au moins une image ? if (empty($idsImages)) { $this->envoyerMessageErreur(500, "Erreur: aucune image trouvée - avez-vous bien fourni des valeurs corrected pour un des paramètres \"ids-img\" ou \"ids-obs\" ?"); return false; // aucun id fourni } //var_dump($idsImages); $lib = new ImageRecreation($this->config); foreach ($idsImages as $id) { if (! is_numeric($id)) { continue; // @TODO faire plutot un array_filter avant } $id = intval($id); //echo "Regen [$id]\n"; $lib->regenererMiniaturesPourId(array($id)); } return "ok"; // aucune garantie, c'est juste pour faire style } /** * Méthode appelée avec une requête de type DELETE. * Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre * Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules * * @param int uid[0] id utilisateur * @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules * */ public function deleteElement($uid){ $this->controlerAccessibiliteWs(); $this->controleAppelIpAutorisee(); $idImage = isset($uid[0]) ? $uid[0] : ''; $this->verifierIdentifiantImage($idImage); $idsImages = explode(',', $idImage); $gestionnaireImage = new GestionImage($this->config); $suppressionImage = $gestionnaireImage->supprimerImage($idsImages); if ($suppressionImage) { $this->envoyer('OK'); } else { $this->envoyer("Au moins une image « $idImage » n'a pu être supprimée"); } } private function verifierIdentifiantImage($chaine) { $ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine); if ($ok == false) { $msg = "Indiquer un ou plusieurs identifiants d'image séparés par des virgules."; $this->envoyerMessageErreur(412, $msg);// Precondition Failed } return $ok; } }