Subversion Repositories eFlore/Applications.cel

Rev

Rev 2939 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
549 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
2461 jpm 4
 * Service générique permettant de manipuler les Images.
549 jpm 5
 *
2143 jpm 6
 * Cas d'utilisation GET :
549 jpm 7
 * /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'.
8
 *
2143 jpm 9
 * Cas d'utilisation DELETE :
10
 *
549 jpm 11
 * Sortie :
12
 * Type de sortie : json (par défaut), HTML en cas d'erreur.
13
 *
2461 jpm 14
 * @internal   Mininum PHP version : 5.2
15
 * @category   CEL
16
 * @package    Services
17
 * @subpackage Images
18
 * @version    0.1
19
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
20
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
21
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
22
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
23
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
24
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
549 jpm 25
 */
26
class CelImage extends Cel {
27
 
28
	/**
29
	 * Méthode appelée avec une requête de type GET.
30
	 */
31
	public function getElement($params) {
32
		$parametres = $this->traiterParametres(array('mode'), $params, false);
33
		extract($parametres);
34
		$contenu = '';
2143 jpm 35
 
549 jpm 36
		$retour = null;
37
		if (isset($mode)) {
38
			$methode = $this->traiterNomMethodeGet($mode);
39
			if (method_exists($this, $methode)) {
40
				$this->parametres = array_shift($params);
41
				$retour = $this->$methode();
42
			} else {
43
				$service = get_class($this);
44
				$this->messages[] = "Ce type de mode '$mode' pour le service '$service' n'est pas disponible.";
45
			}
46
		} else {
755 aurelien 47
			$this->messages[] = "Vous devez indiquer un type de mode d'interrogation.";
549 jpm 48
		}
49
 
50
		if (is_null($retour)) {
838 jpm 51
			$this->messages[] = "Un problème est survenu lors de l'appel au service CelImage";
549 jpm 52
		}
838 jpm 53
		$this->envoyerJson($retour);
549 jpm 54
	}
2446 jpm 55
 
2209 aurelien 56
	private function getImage() {
57
		$image = null;
58
		if (isset($_GET['imgId'])) {
59
			$recherche = new RechercheImage($this->config);
60
			$params = array('id_image' => $_GET['imgId'], 'transmission' => "1");
61
			$image = $recherche->rechercherImages(null, $params, 0, 1);
62
			if(!empty($image)) {
63
				$image = $image[0];
64
			}
65
		}
66
		return $image;
67
	}
549 jpm 68
 
69
	/**
2143 jpm 70
	 * Service fournissant la liste des ids des images liées à une observation.
71
	 * Format de l'url du WS :
72
	 * /CelImage/liste-ids?obsId=[0-9]+ : ids des images liées à l'observation possédant l'identifiant 'obsId'.
549 jpm 73
	 */
74
	private function getListeIds() {
75
		$ids = array();
2143 jpm 76
 
549 jpm 77
		if (isset($_GET['obsId'])) {
838 jpm 78
			$observations = $this->traiterValeursMultiples($_GET['obsId']);
2143 jpm 79
 
838 jpm 80
			if (! is_null($observations)) {
3509 delphine 81
				$requete = 	'SELECT occurrence_id as ce_observation, id as id_image '.
82
							'FROM photo '.
83
							"WHERE occurrence_id IN ($observations) ";
2143 jpm 84
 
2446 jpm 85
				$resultats = Cel::db()->requeter($requete);
2143 jpm 86
 
873 aurelien 87
				$infos = array();
2446 jpm 88
				if (is_array($resultats)) {
89
					$infos = $resultats;
873 aurelien 90
				}
2143 jpm 91
 
549 jpm 92
				foreach ($infos as $info) {
2446 jpm 93
					if (is_numeric($info['id_image'])) {
94
						$ids[$info['ce_observation']][] = (int) $info['id_image'];
838 jpm 95
					}
549 jpm 96
				}
97
			}
98
		}
99
		return $ids;
100
	}
2143 jpm 101
 
102
	/**
2879 mathias 103
	 * Service permettant de recréer les miniatures pour des ids d'images
104
	 * fournis en entrée - @NOTE devrait peut-être être fait avec DELETE ?
105
	 */
106
	protected function getRegenererMiniatures() {
2939 mathias 107
		$idsImages = array();
108
		$idsObs = array();
109
		// par image
110
		if (!empty($_GET['ids-img'])) {
111
			$idsImages = explode(',', $_GET['ids-img']);
112
			$idsImages = array_unique($idsImages);
113
		} elseif (!empty($_GET['ids-obs'])) { // par obs
114
			$idsObs = explode(',', $_GET['ids-obs']);
115
			$idsObs = array_unique($idsObs);
116
			// get id images selon id obs
3509 delphine 117
			$req = "SELECT DISTINCT id as id_image FROM photo WHERE occurrence_id IN (";
2939 mathias 118
			$req .= implode(',', $idsObs);
119
			$req .= ");";
120
			//var_dump($req);
121
			$resultats = Cel::db()->requeter($req);
122
			//var_dump($resultats);
123
			$idsImages = array();
124
			if ($resultats) {
125
				foreach ($resultats as $res) {
126
					$idsImages[] = $res["id_image"];
127
				}
128
			}
2879 mathias 129
		}
2939 mathias 130
		// a-t-on trouvé au moins une image ?
131
		if (empty($idsImages)) {
132
			$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\" ?");
133
			return false; // aucun id fourni
134
		}
135
		//var_dump($idsImages);
136
 
2879 mathias 137
		$lib = new ImageRecreation($this->config);
2939 mathias 138
		foreach ($idsImages as $id) {
2879 mathias 139
			if (! is_numeric($id)) {
2939 mathias 140
				continue; // @TODO faire plutot un array_filter avant
2879 mathias 141
			}
142
			$id = intval($id);
2939 mathias 143
			//echo "Regen [$id]\n";
2879 mathias 144
			$lib->regenererMiniaturesPourId(array($id));
145
		}
146
		return "ok"; // aucune garantie, c'est juste pour faire style
147
	}
148
 
149
	/**
2143 jpm 150
	 * Méthode appelée avec une requête de type DELETE.
151
	 * Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
152
	 * Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
153
	 *
154
	 * @param int uid[0] id utilisateur
155
	 * @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
156
	 *
157
	 */
158
	public function deleteElement($uid){
2152 jpm 159
		$this->controlerAccessibiliteWs();
160
		$this->controleAppelIpAutorisee();
2143 jpm 161
 
2152 jpm 162
		$idImage = isset($uid[0]) ? $uid[0] : '';
163
		$this->verifierIdentifiantImage($idImage);
164
		$idsImages = explode(',', $idImage);
2143 jpm 165
 
2152 jpm 166
		$gestionnaireImage = new GestionImage($this->config);
167
		$suppressionImage = $gestionnaireImage->supprimerImage($idsImages);
2143 jpm 168
 
2152 jpm 169
		if ($suppressionImage) {
170
			$this->envoyer('OK');
171
		} else {
2939 mathias 172
			$this->envoyer("Au moins une image « $idImage » n'a pu être supprimée");
2143 jpm 173
		}
174
	}
175
 
176
	private function verifierIdentifiantImage($chaine) {
177
		$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
178
		if ($ok == false) {
2152 jpm 179
			$msg = "Indiquer un ou plusieurs identifiants d'image séparés par des virgules.";
180
			$this->envoyerMessageErreur(412, $msg);// Precondition Failed
2143 jpm 181
		}
182
		return $ok;
183
	}
549 jpm 184
}