* @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 ce_observation, id_image '. 'FROM cel_images '. "WHERE ce_observation 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() { $ids = array(); if (!empty($_GET['ids'])) { $ids = explode(',', $_GET['ids']); } //var_dump($ids); $lib = new ImageRecreation($this->config); foreach ($ids as $id) { if (! is_numeric($id)) { continue; } $id = intval($id); $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é."); } } 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; } }