Subversion Repositories eFlore/Applications.cel

Rev

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

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