Subversion Repositories eFlore/Applications.cel

Rev

Rev 2461 | 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 fournissant une liste d'images doublon pour l'utilisateur qui s'authentifie.
4
 * Service fournissant une liste d'images doublon pour l'utilisateur qui s'authentifie.
5
 * Encodage en entrée : utf8
-
 
6
 * Encodage en sortie : utf8
-
 
7
 *
5
 *
8
 * Cas d'utilisation :
6
 * Cas d'utilisation :
9
 * /CelImageDoublon/Sortie : images doublon de l'utilisateur authentifié.
7
 * /CelImageDoublon/Sortie : images doublon de l'utilisateur authentifié.
10
 *
8
 *
11
 * Sortie = Type de sortie : html ou json. Par défaut : html
9
 * Sortie = Type de sortie : html ou json. Par défaut : html
12
 *
10
 *
13
 * Utilisateur :
11
 * Utilisateur :
14
 * identifiant (= courriel) de l'utilisateur récupéré via une identification HTTP.
12
 * identifiant (= courriel) de l'utilisateur récupéré via une identification HTTP.
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 CelImageDoublon extends Cel {
26
class CelImageDoublon 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', 'utilisateur'), $params, false);
32
		$parametres = $this->traiterParametres(array('mode', 'utilisateur'), $params, false);
35
		extract($parametres);
33
		extract($parametres);
36
		$contenu = '';
34
		$contenu = '';
37
 
35
 
38
		if ($this->authentifierUtilisateur()) {
36
		if ($this->authentifierUtilisateur()) {
39
			$retour = null;
37
			$retour = null;
40
 
38
 
41
			if (isset($mode)) {
39
			if (isset($mode)) {
42
				$methode = $this->traiterNomMethodeGet($mode);
40
				$methode = $this->traiterNomMethodeGet($mode);
43
				if (method_exists($this, $methode)) {
41
				if (method_exists($this, $methode)) {
44
					$retour = $this->$methode($parametres);
42
					$retour = $this->$methode($parametres);
45
				} else {
43
				} else {
46
					$service = get_class($this);
44
					$service = get_class($this);
47
					$this->messages[] = "Ce type de mode '$mode' pour le service '$service' n'est pas disponible.";
45
					$this->messages[] = "Ce type de mode '$mode' pour le service '$service' n'est pas disponible.";
48
				}
46
				}
49
			} else {
47
			} else {
50
				$this->messages[] = "Vous devez indiquer un type de mode.";
48
				$this->messages[] = "Vous devez indiquer un type de mode.";
51
			}
49
			}
52
 
50
 
53
			if (is_null($retour)) {
51
			if (is_null($retour)) {
54
				$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
52
				$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
55
			} else {
53
			} else {
56
				if ($retour['type'] == 'widget') {
54
				if ($retour['type'] == 'widget') {
57
					$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';
55
					$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';
58
					$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
56
					$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
59
				} else if ($retour['type'] == 'json') {
57
				} else if ($retour['type'] == 'json') {
60
					$contenu = $retour['donnees'];
58
					$contenu = $retour['donnees'];
61
				}
59
				}
62
			}
60
			}
63
		}
61
		}
64
 
62
 
65
		// Envoie sur la sortie standard
63
		// Envoie sur la sortie standard
66
		$encodage = 'UTF-8';
64
		$encodage = 'UTF-8';
67
		$mime = 'text/html';
65
		$mime = 'text/html';
68
		$formatage_json = (isset($retour) && $retour['type'] == 'json') ? true : false;
66
		$formatage_json = (isset($retour) && $retour['type'] == 'json') ? true : false;
69
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
67
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
70
	}
68
	}
71
 
69
 
72
	/**
70
	/**
73
	 * Carte par défaut
71
	 * Carte par défaut
74
	 */
72
	 */
75
	private function getDoublonHtml($parametres) {
73
	private function getDoublonHtml($parametres) {
76
		$widget = null;
74
		$widget = null;
77
		$utilisateur_mail = Cel::getAuthIdentifiant();
75
		$utilisateur_mail = Cel::getAuthIdentifiant();
78
		$utilisateur_infos = new User($this->config);
76
		$utilisateur_infos = new User($this->config);
79
		$utilisateur = $utilisateur_infos->obtenirUtilisateurSiExiste($utilisateur_mail);
77
		$utilisateur = $utilisateur_infos->obtenirUtilisateurSiExiste($utilisateur_mail);
80
		$utilisateur = $utilisateur['id_utilisateur'];
78
		$utilisateur = $utilisateur['id_utilisateur'];
81
 
79
 
82
		// Création des infos du widget
80
		// Création des infos du widget
83
		$widget['type'] = 'widget';
81
		$widget['type'] = 'widget';
84
		$widget['donnees']['utilisateur'] = $utilisateur_mail;
82
		$widget['donnees']['utilisateur'] = $utilisateur_mail;
85
		$widget['donnees']['doublons'] = $this->getImagesDoublon($utilisateur);
83
		$widget['donnees']['doublons'] = $this->getImagesDoublon($utilisateur);
86
		$widget['squelette'] = 'doublon_defaut';
84
		$widget['squelette'] = 'doublon_defaut';
87
 
85
 
88
		return $widget;
86
		return $widget;
89
	}
87
	}
90
 
88
 
91
	/**
89
	/**
92
	 * Images en doublon d'un utilisateur
90
	 * Images en doublon d'un utilisateur
93
	 */
91
	 */
94
	private function getImagesDoublon($utilisateur) {
92
	private function getImagesDoublon($utilisateur) {
95
		$doublons = null;
93
		$doublons = null;
96
		if (isset($utilisateur)) {
94
		if (isset($utilisateur)) {
97
			// Un utilisateur en particulier
95
			// Un utilisateur en particulier
98
			$idUtilisateurP = Cel::db()->proteger($utilisateur);
96
			$idUtilisateurP = Cel::db()->proteger($utilisateur);
99
			$requete = 'SELECT id_image, ordre, nom_original, md5 '.
97
			$requete = 'SELECT id_image, ordre, nom_original, md5 '.
100
				'FROM cel_images '.
98
				'FROM cel_images '.
101
				"WHERE ce_utilisateur = $idUtilisateurP ".
99
				"WHERE ce_utilisateur = $idUtilisateurP ".
102
				' -- '.__FILE__.':'.__LINE__;
100
				' -- '.__FILE__.':'.__LINE__;
103
			$images = Cel::db()->requeter($requete);
101
			$images = Cel::db()->requeter($requete);
104
 
102
 
105
			// Traitement
103
			// Traitement
106
			$doublons = array();
104
			$doublons = array();
107
			$images_doublons_id = array();
105
			$images_doublons_id = array();
108
			$md5 = array();
106
			$md5 = array();
109
			foreach ($images as $img) {
107
			foreach ($images as $img) {
110
				if (!isset($md5[$img['md5']])) {
108
				if (!isset($md5[$img['md5']])) {
111
					$md5[$img['md5']] = array(
109
					$md5[$img['md5']] = array(
112
						'url' => $this->getUrlImage($img['id_image'], 'CXS'),
110
						'url' => $this->getUrlImage($img['id_image'], 'CXS'),
113
						'obs_ordre' => array(),
111
						'obs_ordre' => array(),
114
						'img_ordre' => $img['ordre'],
112
						'img_ordre' => $img['ordre'],
115
						'img_id' => $img['id_image']);
113
						'img_id' => $img['id_image']);
116
				} else {
114
				} else {
117
					if (!isset($doublons[$img['md5']])) {
115
					if (!isset($doublons[$img['md5']])) {
118
						$id_img = $md5[$img['md5']]['img_id'];
116
						$id_img = $md5[$img['md5']]['img_id'];
119
						$doublons[$img['md5']][$id_img] = $md5[$img['md5']];
117
						$doublons[$img['md5']][$id_img] = $md5[$img['md5']];
120
						$images_doublons_id[] = Cel::db()->proteger($id_img);
118
						$images_doublons_id[] = Cel::db()->proteger($id_img);
121
					}
119
					}
122
 
120
 
123
					$doublons[$img['md5']][$img['id_image']] = array(
121
					$doublons[$img['md5']][$img['id_image']] = array(
124
						'url' => $this->getUrlImage($img['id_image'], 'CXS'),
122
						'url' => $this->getUrlImage($img['id_image'], 'CXS'),
125
						'obs_ordre' => array(),
123
						'obs_ordre' => array(),
126
						'img_ordre' => $img['ordre'],
124
						'img_ordre' => $img['ordre'],
127
						'img_id' => $img['id_image']);
125
						'img_id' => $img['id_image']);
128
					$images_doublons_id[] = Cel::db()->quote($img['id_image']);
126
					$images_doublons_id[] = Cel::db()->quote($img['id_image']);
129
				}
127
				}
130
			}
128
			}
131
 
129
 
132
			if (count($images_doublons_id) > 0) {
130
			if (count($images_doublons_id) > 0) {
133
				$idsImgConcat = implode(',', $images_doublons_id);
131
				$idsImgConcat = implode(',', $images_doublons_id);
134
				$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre AS ordre_obs '.
132
				$requete = 'SELECT cim.id_image, nom_original, md5, co.ordre AS ordre_obs '.
135
					'FROM cel_images AS cim '.
133
					'FROM cel_images AS cim '.
136
					'	LEFT JOIN cel_obs AS co '.
134
					'	LEFT JOIN cel_obs AS co '.
137
					'		ON (cim.ce_observation = co.id_observation) '.
135
					'		ON (cim.ce_observation = co.id_observation) '.
138
					"WHERE cim.ce_utilisateur = $idUtilisateurP ".
136
					"WHERE cim.ce_utilisateur = $idUtilisateurP ".
139
					"AND cim.id_image IN ($idsImgConcat) ".
137
					"AND cim.id_image IN ($idsImgConcat) ".
140
					' -- '.__FILE__.':'.__LINE__;
138
					' -- '.__FILE__.':'.__LINE__;
141
				$infos = Cel::db()->requeter($requete);
139
				$infos = Cel::db()->requeter($requete);
142
 
140
 
143
				foreach ($infos as $info) {
141
				foreach ($infos as $info) {
144
					if (isset($doublons[$info['md5']][$info['id_image']]) && ! $this->etreNull($info['ordre_obs'])) {
142
					if (isset($doublons[$info['md5']][$info['id_image']]) && ! $this->etreNull($info['ordre_obs'])) {
145
						$doublons[$info['md5']][$info['id_image']]['obs_ordre'][] = $info['ordre_obs'];
143
						$doublons[$info['md5']][$info['id_image']]['obs_ordre'][] = $info['ordre_obs'];
146
					}
144
					}
147
				}
145
				}
148
			}
146
			}
149
		}
147
		}
150
		return $doublons;
148
		return $doublons;
151
	}
149
	}
152
}
150
}