Subversion Repositories eFlore/Applications.cel

Rev

Rev 2910 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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