Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | 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)) {
2446 jpm 81
				$requete = 	'SELECT ce_observation, id_image '.
82
							'FROM cel_images '.
83
							"WHERE ce_observation 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() {
107
		$ids = array();
108
		if (!empty($_GET['ids'])) {
109
			$ids = explode(',', $_GET['ids']);
110
		}
111
		//var_dump($ids);
112
 
113
		$lib = new ImageRecreation($this->config);
114
		foreach ($ids as $id) {
115
			if (! is_numeric($id)) {
116
				continue;
117
			}
118
			$id = intval($id);
119
			$lib->regenererMiniaturesPourId(array($id));
120
		}
121
		return "ok"; // aucune garantie, c'est juste pour faire style
122
	}
123
 
124
	/**
2143 jpm 125
	 * 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
127
	 * Supporte la suppression multiple en passant plusieurs numéros séparés par des virgules
128
	 *
129
	 * @param int uid[0] id utilisateur
130
	 * @param string uid[1] : ordre(s) image(s) obligatoire(s) séparés par des virgules
131
	 *
132
	 */
133
	public function deleteElement($uid){
2152 jpm 134
		$this->controlerAccessibiliteWs();
135
		$this->controleAppelIpAutorisee();
2143 jpm 136
 
2152 jpm 137
		$idImage = isset($uid[0]) ? $uid[0] : '';
138
		$this->verifierIdentifiantImage($idImage);
139
		$idsImages = explode(',', $idImage);
2143 jpm 140
 
2152 jpm 141
		$gestionnaireImage = new GestionImage($this->config);
142
		$suppressionImage = $gestionnaireImage->supprimerImage($idsImages);
2143 jpm 143
 
2152 jpm 144
		if ($suppressionImage) {
145
			$this->envoyer('OK');
146
		} else {
147
			$this->envoyer("Au moins une image « $idImage » n'a pu être supprimé.");
2143 jpm 148
		}
149
	}
150
 
151
	private function verifierIdentifiantImage($chaine) {
152
		$ok = preg_match('/^(?:[0-9]+,)*[0-9]+$/', $chaine);
153
		if ($ok == false) {
2152 jpm 154
			$msg = "Indiquer un ou plusieurs identifiants d'image séparés par des virgules.";
155
			$this->envoyerMessageErreur(412, $msg);// Precondition Failed
2143 jpm 156
		}
157
		return $ok;
158
	}
549 jpm 159
}