Subversion Repositories eFlore/Applications.cel

Rev

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