Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
416 aurelien 1
<?php
2
/**
3
 * Service fournissant une liste d'images doublon.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * Cas d'utilisation :
8
 * /CelImageDoublon/Sortie/Utilisateur : images doublon d'un utilisateur.
9
 *
10
 * Sortie = Type de sortie : html ou json. Par défaut : html
11
 * Utilisateur = identifiant (= courriel) de l'utilisateur.
12
 *
13
 * @author Jean-Pascal MILCENT <jpm@clapas.org>
14
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
16
 * @version $Id$
17
 * @copyright © 2010, Jean-Pascal MILCENT
18
 */
19
class CelImageDoublon extends Cel {
20
 
21
	/**
22
	 * Méthode appelée avec une requête de type GET.
23
	 */
24
	public function getElement($params) {
538 jpm 25
		$parametres = $this->traiterParametres(array('mode', 'utilisateur'), $params, false);
416 aurelien 26
		extract($parametres);
538 jpm 27
		$contenu = '';
28
 
29
		if ($this->authentifierUtilisateur()) {
30
			$retour = null;
31
 
32
			if (isset($mode)) {
33
				$methode = $this->traiterNomMethodeGet($mode);
34
				if (method_exists($this, $methode)) {
35
					$retour = $this->$methode($parametres);
36
				} else {
37
					$service = get_class($this);
38
					$this->messages[] = "Ce type de mode '$mode' pour le service '$service' n'est pas disponible.";
39
				}
416 aurelien 40
			} else {
538 jpm 41
				$this->messages[] = "Vous devez indiquer un type de mode.";
416 aurelien 42
			}
538 jpm 43
 
44
			if (is_null($retour)) {
45
				$contenu = 'Un problème est survenu : '.print_r($this->messages, true);
46
			} else {
47
				if ($retour['type'] == 'widget') {
48
					$squelette = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR.$retour['squelette'].'.tpl.html';
49
					$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
50
				} else if ($retour['type'] == 'json') {
51
					$contenu = $retour['donnees'];
52
				}
416 aurelien 53
			}
54
		}
538 jpm 55
 
56
		// Envoie sur la sortie standard
57
		$encodage = 'UTF-8';
58
		$mime = 'text/html';
59
		$formatage_json = (isset($retour) && $retour['type'] == 'json') ? true : false;
60
		$this->envoyer($contenu, $mime, $encodage, $formatage_json);
416 aurelien 61
	}
62
 
63
	/**
64
	 * Carte par défaut
65
	 */
538 jpm 66
	private function getDoublonHtml($parametres) {
416 aurelien 67
		$widget = null;
538 jpm 68
		$utilisateur = $this->getAuthIdentifiant();
416 aurelien 69
 
70
		// Création des infos du widget
71
		$widget['type'] = 'widget';
72
		$widget['donnees']['utilisateur'] = $utilisateur;
73
		$widget['donnees']['doublons'] = $this->getImagesDoublon($utilisateur);
74
		$widget['squelette'] = 'doublon_defaut';
75
 
76
		return $widget;
77
	}
78
 
79
	/**
80
	 * Images en doublon d'un utilisateur
81
	 */
82
	private function getImagesDoublon($utilisateur) {
83
		$doublons = null;
84
 
85
		if (isset($utilisateur)) {
86
			// Un utilisateur en particulier
87
			$requete = 	'SELECT ci_id_image, ci_ordre, ci_nom_original, ci_md5 '.
88
						'FROM cel_images '.
89
						"WHERE ci_ce_utilisateur = '$utilisateur' ";
90
			$images = $this->executerRequete($requete);
91
 
92
			// Traitement
93
			$doublons = array();
526 jpm 94
			$images_doublons_id = array();
416 aurelien 95
			$md5 = array();
96
			foreach ($images as $img) {
97
				if (!isset($md5[$img['ci_md5']])) {
526 jpm 98
					$md5[$img['ci_md5']] = array(
99
						'url' => $this->getUrlImage($img['ci_id_image'], 'S'),
100
						'obs_ordre' => array(),
101
						'img_ordre' => $img['ci_ordre'],
102
						'img_id' => $img['ci_id_image']);
416 aurelien 103
				} else {
104
					if (!isset($doublons[$img['ci_md5']])) {
526 jpm 105
						$id_img = $md5[$img['ci_md5']]['img_id'];
106
						$doublons[$img['ci_md5']][$id_img] = $md5[$img['ci_md5']];
107
						$images_doublons_id[] = $this->bdd->quote($id_img);
416 aurelien 108
					}
526 jpm 109
					$doublons[$img['ci_md5']][$img['ci_id_image']] = array(
110
							'url' => $this->getUrlImage($img['ci_id_image'], 'S'),
111
							'obs_ordre' => array(),
112
							'img_ordre' => $img['ci_ordre'],
113
							'img_id' => $img['ci_id_image']);
114
					$images_doublons_id[] = $this->bdd->quote($img['ci_id_image']);
416 aurelien 115
				}
116
			}
526 jpm 117
 
530 jpm 118
			if (count($images_doublons_id) > 0) {
119
				$requete = 	'SELECT ci_id_image, ci_nom_original, ci_md5, ordre '.
120
							'FROM cel_images AS cim '.
121
							'	LEFT JOIN cel_obs_images AS coi '.
122
							'		ON (coi.coi_ce_image = cim.ci_id_image) '.
123
							'	LEFT JOIN cel_inventory AS ci '.
124
							'		ON (coi.coi_ce_observation = ci.ordre AND coi.coi_ce_utilisateur = ci.identifiant) '.
125
							"WHERE cim.ci_ce_utilisateur = '$utilisateur' ".
126
							'	AND cim.ci_id_image IN ('.implode(',', $images_doublons_id).')';
127
				$infos = $this->executerRequete($requete);
128
 
129
				foreach ($infos as $info) {
130
					if (isset($doublons[$info['ci_md5']][$info['ci_id_image']]) && ! $this->etreNull($info['ordre'])) {
131
						$doublons[$info['ci_md5']][$info['ci_id_image']]['obs_ordre'][] = $info['ordre'];
132
					}
526 jpm 133
				}
134
			}
416 aurelien 135
		}
136
 
137
		//echo '<pre>'.print_r($doublons, true).'</pre>';
138
		return $doublons;
139
	}
140
}