Subversion Repositories eFlore/Applications.cel

Rev

Rev 2462 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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