Subversion Repositories eFlore/Applications.cel

Rev

Rev 2461 | Rev 2879 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2461 Rev 2462
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
 * Encodage en entrée : utf8
-
 
6
 * Encodage en sortie : utf8
-
 
7
 *
5
 *
8
 * Cas d'utilisation GET :
6
 * Cas d'utilisation GET :
9
 * /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'.
10
 *
8
 *
11
 * Cas d'utilisation DELETE :
9
 * Cas d'utilisation DELETE :
12
 *
10
 *
13
 * Sortie :
11
 * Sortie :
14
 * 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.
15
 *
13
 *
16
 * @internal   Mininum PHP version : 5.2
14
 * @internal   Mininum PHP version : 5.2
17
 * @category   CEL
15
 * @category   CEL
18
 * @package    Services
16
 * @package    Services
19
 * @subpackage Images
17
 * @subpackage Images
20
 * @version    0.1
18
 * @version    0.1
21
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
19
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
22
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
20
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
23
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
21
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
24
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
22
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
25
 * @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>
26
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
24
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
27
 */
25
 */
28
class CelImage extends Cel {
26
class CelImage extends Cel {
29
 
27
 
30
	/**
28
	/**
31
	 * Méthode appelée avec une requête de type GET.
29
	 * Méthode appelée avec une requête de type GET.
32
	 */
30
	 */
33
	public function getElement($params) {
31
	public function getElement($params) {
34
		$parametres = $this->traiterParametres(array('mode'), $params, false);
32
		$parametres = $this->traiterParametres(array('mode'), $params, false);
35
		extract($parametres);
33
		extract($parametres);
36
		$contenu = '';
34
		$contenu = '';
37
 
35
 
38
		$retour = null;
36
		$retour = null;
39
		if (isset($mode)) {
37
		if (isset($mode)) {
40
			$methode = $this->traiterNomMethodeGet($mode);
38
			$methode = $this->traiterNomMethodeGet($mode);
41
			if (method_exists($this, $methode)) {
39
			if (method_exists($this, $methode)) {
42
				$this->parametres = array_shift($params);
40
				$this->parametres = array_shift($params);
43
				$retour = $this->$methode();
41
				$retour = $this->$methode();
44
			} else {
42
			} else {
45
				$service = get_class($this);
43
				$service = get_class($this);
46
				$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.";
47
			}
45
			}
48
		} else {
46
		} else {
49
			$this->messages[] = "Vous devez indiquer un type de mode d'interrogation.";
47
			$this->messages[] = "Vous devez indiquer un type de mode d'interrogation.";
50
		}
48
		}
51
 
49
 
52
		if (is_null($retour)) {
50
		if (is_null($retour)) {
53
			$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";
54
		}
52
		}
55
		$this->envoyerJson($retour);
53
		$this->envoyerJson($retour);
56
	}
54
	}
57
 
55
 
58
	private function getImage() {
56
	private function getImage() {
59
		$image = null;
57
		$image = null;
60
		if (isset($_GET['imgId'])) {
58
		if (isset($_GET['imgId'])) {
61
			$recherche = new RechercheImage($this->config);
59
			$recherche = new RechercheImage($this->config);
62
			$params = array('id_image' => $_GET['imgId'], 'transmission' => "1");
60
			$params = array('id_image' => $_GET['imgId'], 'transmission' => "1");
63
			$image = $recherche->rechercherImages(null, $params, 0, 1);
61
			$image = $recherche->rechercherImages(null, $params, 0, 1);
64
			if(!empty($image)) {
62
			if(!empty($image)) {
65
				$image = $image[0];
63
				$image = $image[0];
66
			}
64
			}
67
		}
65
		}
68
		return $image;
66
		return $image;
69
	}
67
	}
70
 
68
 
71
	/**
69
	/**
72
	 * 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.
73
	 * Format de l'url du WS :
71
	 * Format de l'url du WS :
74
	 * /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'.
75
	 */
73
	 */
76
	private function getListeIds() {
74
	private function getListeIds() {
77
		$ids = array();
75
		$ids = array();
78
 
76
 
79
		if (isset($_GET['obsId'])) {
77
		if (isset($_GET['obsId'])) {
80
			$observations = $this->traiterValeursMultiples($_GET['obsId']);
78
			$observations = $this->traiterValeursMultiples($_GET['obsId']);
81
 
79
 
82
			if (! is_null($observations)) {
80
			if (! is_null($observations)) {
83
				$requete = 	'SELECT ce_observation, id_image '.
81
				$requete = 	'SELECT ce_observation, id_image '.
84
							'FROM cel_images '.
82
							'FROM cel_images '.
85
							"WHERE ce_observation IN ($observations) ";
83
							"WHERE ce_observation IN ($observations) ";
86
 
84
 
87
				$resultats = Cel::db()->requeter($requete);
85
				$resultats = Cel::db()->requeter($requete);
88
 
86
 
89
				$infos = array();
87
				$infos = array();
90
				if (is_array($resultats)) {
88
				if (is_array($resultats)) {
91
					$infos = $resultats;
89
					$infos = $resultats;
92
				}
90
				}
93
 
91
 
94
				foreach ($infos as $info) {
92
				foreach ($infos as $info) {
95
					if (is_numeric($info['id_image'])) {
93
					if (is_numeric($info['id_image'])) {
96
						$ids[$info['ce_observation']][] = (int) $info['id_image'];
94
						$ids[$info['ce_observation']][] = (int) $info['id_image'];
97
					}
95
					}
98
				}
96
				}
99
			}
97
			}
100
		}
98
		}
101
		return $ids;
99
		return $ids;
102
	}
100
	}
103
 
101
 
104
	/**
102
	/**
105
	 * Méthode appelée avec une requête de type DELETE.
103
	 * Méthode appelée avec une requête de type DELETE.
106
	 * Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
104
	 * Supprime les infos sur l'image et le fichier correspondant à l'ordre passé en parametre
107
	 * Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
105
	 * Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
108
	 *
106
	 *
109
	 * @param int uid[0] id utilisateur
107
	 * @param int uid[0] id utilisateur
110
	 * @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
108
	 * @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
111
	 *
109
	 *
112
	 */
110
	 */
113
	public function deleteElement($uid){
111
	public function deleteElement($uid){
114
		$this->controlerAccessibiliteWs();
112
		$this->controlerAccessibiliteWs();
115
		$this->controleAppelIpAutorisee();
113
		$this->controleAppelIpAutorisee();
116
 
114
 
117
		$idImage = isset($uid[0]) ? $uid[0] : '';
115
		$idImage = isset($uid[0]) ? $uid[0] : '';
118
		$this->verifierIdentifiantImage($idImage);
116
		$this->verifierIdentifiantImage($idImage);
119
		$idsImages = explode(',', $idImage);
117
		$idsImages = explode(',', $idImage);
120
 
118
 
121
		$gestionnaireImage = new GestionImage($this->config);
119
		$gestionnaireImage = new GestionImage($this->config);
122
		$suppressionImage = $gestionnaireImage->supprimerImage($idsImages);
120
		$suppressionImage = $gestionnaireImage->supprimerImage($idsImages);
123
 
121
 
124
		if ($suppressionImage) {
122
		if ($suppressionImage) {
125
			$this->envoyer('OK');
123
			$this->envoyer('OK');
126
		} else {
124
		} else {
127
			$this->envoyer("Au moins une image « $idImage » n'a pu être supprimé.");
125
			$this->envoyer("Au moins une image « $idImage » n'a pu être supprimé.");
128
		}
126
		}
129
	}
127
	}
130
 
128
 
131
	private function verifierIdentifiantImage($chaine) {
129
	private function verifierIdentifiantImage($chaine) {
132
		$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
130
		$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
133
		if ($ok == false) {
131
		if ($ok == false) {
134
			$msg = "Indiquer un ou plusieurs identifiants d'image séparés par des virgules.";
132
			$msg = "Indiquer un ou plusieurs identifiants d'image séparés par des virgules.";
135
			$this->envoyerMessageErreur(412, $msg);// Precondition Failed
133
			$this->envoyerMessageErreur(412, $msg);// Precondition Failed
136
		}
134
		}
137
		return $ok;
135
		return $ok;
138
	}
136
	}
139
}
137
}