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