Subversion Repositories eFlore/Applications.cel

Rev

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

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