Subversion Repositories eFlore/Applications.cel

Rev

Rev 628 | Rev 1358 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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