Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3983 Rev 3985
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Service affichant les dernières photo publiques du CEL ouvrable sous forme de diaporama.
4
 * Service affichant les dernières photo publiques du CEL ouvrable sous forme de diaporama.
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 et documentation :
8
 * Cas d'utilisation et documentation :
9
 * @link http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=AideCELWidgetPhoto
9
 * @link http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=AideCELWidgetPhoto
10
 *
10
 *
11
 * Paramètres :
11
 * Paramètres :
12
 * ===> extra = booléen (1 ou 0)  [par défaut : 1]
12
 * ===> extra = booléen (1 ou 0)  [par défaut : 1]
13
 * Affiche / Cache la vignette en taille plus importante au bas du widget.
13
 * Affiche / Cache la vignette en taille plus importante au bas du widget.
14
 * ===> vignette = [0-9]+,[0-9]+  [par défaut : 4,3]
14
 * ===> vignette = [0-9]+,[0-9]+  [par défaut : 4,3]
15
 * Indique le nombre de vignette par ligne et le nombre de ligne.
15
 * Indique le nombre de vignette par ligne et le nombre de ligne.
16
 *
16
 *
17
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
17
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
18
 * @license     GPL v3 <http://www.gnu.org/licenses/gpl.txt>
18
 * @license     GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
 * @license     CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
19
 * @license     CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
 * @version     $Id$
20
 * @version     $Id$
21
 * @copyright   Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
21
 * @copyright   Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
22
 */
22
 */
23
class Photo extends WidgetCommun {
23
class Photo extends WidgetCommun {
24
 
24
 
25
	const DS = DIRECTORY_SEPARATOR;
25
	const DS = DIRECTORY_SEPARATOR;
26
	const SERVICE_DEFAUT = 'photo';
26
	const SERVICE_DEFAUT = 'photo';
27
	const VIGNETTE_DEFAULT = '4,3';
27
	const VIGNETTE_DEFAULT = '4,3';
28
	const WS_IMG_LIST = 'celImage';
28
	const WS_IMG_LIST = 'celImage';
29
	const IMAGE_FORMATS = [
29
	const IMAGE_FORMATS = [
30
		'CRX2S' => '63px (Carrée, rognée)',
30
		'CRX2S' => '63px (Carrée, rognée)',
31
		'CRXS'  => '100px (Carrée, rognée)',
31
		'CRXS'  => '100px (Carrée, rognée)',
32
		'CXS'   => '100px (Carrée)',
32
		'CXS'   => '100px (Carrée)',
33
		'CS'    => '300px (Carrée)',
33
		'CS'    => '300px (Carrée)',
34
		'CRS'   => '300px (Carrée, rognée)',
34
		'CRS'   => '300px (Carrée, rognée)',
35
		'XS'    => '150px',
35
		'XS'    => '150px',
36
		'S'     => '400px',
36
		'S'     => '400px',
37
		'M'     => '600px',
37
		'M'     => '600px',
38
		'L'     => '800px',
38
		'L'     => '800px',
39
		'CRL'   => '600px (Carrée, rognée)',
39
		'CRL'   => '600px (Carrée, rognée)',
40
		'XL'    => '1024px',
40
		'XL'    => '1024px',
41
		'X2L'   => '1280px',
41
		'X2L'   => '1280px',
42
		'X3L'   => '1600px',
42
		'X3L'   => '1600px',
43
		'O'     => 'Format original (Taille inconnue)'
43
		'O'     => 'Format original (Taille inconnue)'
44
	];
44
	];
45
	const START_DEFAUT = 0;
45
	const START_DEFAUT = 0;
46
	const LIMIT_DEFAUT = 100;
46
	const LIMIT_DEFAUT = 100;
47
	private $url_widget = null;
47
	private $url_widget = null;
48
	private $eflore_url_tpl = null;
48
	private $eflore_url_tpl = null;
49
	private $service_images_url = null;
49
	private $service_images_url = null;
50
	private $flux_rss_url = null;
50
	private $flux_rss_url = null;
51
 
51
 
52
	// Suffixe de template pour la langue (vide par défaut, correspond à "fr" au français)
52
	// Suffixe de template pour la langue (vide par défaut, correspond à "fr" au français)
53
	private $suffixeLangue = '';
53
	private $suffixeLangue = '';
54
	
54
	
55
	private $user = null;
55
	private $user = null;
56
	
56
	
57
	private $service_del_url = null;
57
	private $service_del_url = null;
58
	/**
58
	/**
59
	 * Méthode appelée par défaut pour charger ce widget.
59
	 * Méthode appelée par défaut pour charger ce widget.
60
	 */
60
	 */
61
	public function executer() {
61
	public function executer() {
62
		$retour = null;
62
		$retour = null;
63
		// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
63
		// Pour la création de l'id du cache nous ne tenons pas compte du paramètre de l'url callback
64
		unset($this->parametres['callback']);
64
		unset($this->parametres['callback']);
65
		extract($this->parametres);
65
		extract($this->parametres);
66
	
66
	
67
		if (!isset($mode)) {
67
		if (!isset($mode)) {
68
			$mode = self::SERVICE_DEFAUT;
68
			$mode = self::SERVICE_DEFAUT;
69
		}
69
		}
70
		$this->url_widget = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'photo');
70
		$this->url_widget = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'photo');
71
		$this->eflore_url_tpl = $this->config['photo']['efloreUrlTpl'];
71
		$this->eflore_url_tpl = $this->config['photo']['efloreUrlTpl'];
72
		$this->service_images_url = $this->config['photo']['celUrlImages'];
72
		$this->service_images_url = $this->config['photo']['celUrlImages'];
73
		$this->flux_rss_url = $this->config['photo']['fluxRssUrl'];
73
		$this->flux_rss_url = $this->config['photo']['fluxRssUrl'];
74
 
74
 
75
		$cache_activation = $this->config['photo.cache']['activation'];
75
		$cache_activation = $this->config['photo.cache']['activation'];
76
		$cache_stockage = $this->config['photo.cache']['stockageDossier'];
76
		$cache_stockage = $this->config['photo.cache']['stockageDossier'];
77
		$ddv = $this->config['photo.cache']['dureeDeVie'];
77
		$ddv = $this->config['photo.cache']['dureeDeVie'];
78
		$cache = new Cache($cache_stockage, $ddv, $cache_activation);
78
		$cache = new Cache($cache_stockage, $ddv, $cache_activation);
79
		$id_cache = 'photo-'.hash('adler32', print_r($this->parametres, true));
79
		$id_cache = 'photo-'.hash('adler32', print_r($this->parametres, true));
80
		$contenu = $cache->charger($id_cache);
80
		$contenu = $cache->charger($id_cache);
81
		
81
		
82
		$this->user = $this->getUserFromCookie();
82
		$this->user = $this->getUserFromCookie();
83
		
83
		
84
		if (!$contenu) {
84
		if (!$contenu) {
85
			$methode = $this->traiterNomMethodeExecuter($mode);
85
			$methode = $this->traiterNomMethodeExecuter($mode);
86
 
86
 
87
			if (method_exists($this, $methode)) {
87
			if (method_exists($this, $methode)) {
88
				$retour = $this->$methode();
88
				$retour = $this->$methode();
89
 
89
 
90
			} else {
90
			} else {
91
				$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
91
				$this->messages[] = "Ce type de service '$methode' n'est pas disponible.";
92
 
92
 
93
			}
93
			}
94
			// Suffixe de template pour la langue - fr par défaut @TODO configurer ça un jour
94
			// Suffixe de template pour la langue - fr par défaut @TODO configurer ça un jour
95
			if (isset($this->parametres['lang']) && $this->parametres['lang'] !== 'fr') {
95
			if (isset($this->parametres['lang']) && $this->parametres['lang'] !== 'fr') {
96
				$this->suffixeLangue = '_' . $this->parametres['lang'];
96
				$this->suffixeLangue = '_' . $this->parametres['lang'];
97
 
97
 
98
			}
98
			}
99
 
99
 
100
			$contenu = '';
100
			$contenu = '';
101
 
101
 
102
			if (is_null($retour)) {
102
			if (is_null($retour)) {
103
				$this->messages[] = 'Aucune image';
103
				$this->messages[] = 'Aucune image';
104
 
104
 
105
			} else {
105
			} else {
106
 
106
 
107
				if (isset($retour['donnees'])) {
107
				if (isset($retour['donnees'])) {
108
					$squelette = dirname(__FILE__) .self::DS. 'squelettes' .self::DS. $retour['squelette'].$this->suffixeLangue.'.tpl.html';
108
					$squelette = dirname(__FILE__) .self::DS. 'squelettes' .self::DS. $retour['squelette'].$this->suffixeLangue.'.tpl.html';
109
					$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
109
					$contenu = $this->traiterSquelettePhp($squelette, $retour['donnees']);
110
					$cache->sauver($id_cache, $contenu);
110
					$cache->sauver($id_cache, $contenu);
111
 
111
 
112
				} else {
112
				} else {
113
					$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
113
					$this->messages[] = 'Les données à transmettre au squelette sont nulles.';
114
 
114
 
115
				}
115
				}
116
			}
116
			}
117
		}
117
		}
118
		if (isset($_GET['callback'])) {
118
		if (isset($_GET['callback'])) {
119
			$this->envoyerJsonp(['contenu' => $contenu]);
119
			$this->envoyerJsonp(['contenu' => $contenu]);
120
 
120
 
121
		} else {
121
		} else {
122
			$this->envoyer($contenu);
122
			$this->envoyer($contenu);
123
 
123
 
124
		}
124
		}
125
		
125
		
126
		// POur l'envoi du vote vers PF
126
		// POur l'envoi du vote vers PF
127
		if ($_SERVER['REQUEST_METHOD'] === 'POST') {
127
		if ($_SERVER['REQUEST_METHOD'] === 'POST') {
128
			if (isset($_GET['action']) && $_GET['action'] === 'send_pf_vote') {
128
			if (isset($_GET['action']) && $_GET['action'] === 'send_pf_vote') {
129
				$this->sendVote();
129
				$this->sendVote();
130
			}
130
			}
131
		}
131
		}
132
	}
132
	}
133
 
133
 
134
	// maintenir la retrocompatibilité avec l'ancien mode ajax
134
	// maintenir la retrocompatibilité avec l'ancien mode ajax
135
	private function executerAjax() {
135
	private function executerAjax() {
136
		unset($this->parametres['mode']);
136
		unset($this->parametres['mode']);
137
 
137
 
138
		$chaineRequete = http_build_query($this->parametres);
138
		$chaineRequete = http_build_query($this->parametres);
139
		$chaineRequete = $chaineRequete ? '?'.$chaineRequete : '';
139
		$chaineRequete = $chaineRequete ? '?'.$chaineRequete : '';
140
		$widget['donnees']['url_widget'] = $this->url_widget.$chaineRequete;
140
		$widget['donnees']['url_widget'] = $this->url_widget.$chaineRequete;
141
 
141
 
142
		$id = '-'.(isset($this->parametres['id']) ? $this->parametres['id'] : '1');
142
		$id = '-'.(isset($this->parametres['id']) ? $this->parametres['id'] : '1');
143
		$widget['donnees']['id'] = $id;
143
		$widget['donnees']['id'] = $id;
144
 
144
 
145
		$widget['squelette'] = 'photo_retrocompatibilite_ajax';
145
		$widget['squelette'] = 'photo_retrocompatibilite_ajax';
146
 
146
 
147
		return $widget;
147
		return $widget;
148
	}
148
	}
149
 
149
 
150
	private function executerPopup() {
150
	private function executerPopup() {
151
		session_start();
151
		session_start();
152
 
152
 
153
		$protocoles = $this->getProtocoles();
153
		$protocoles = $this->getProtocoles();
154
		
154
		
155
		$galerie_id = $_GET['galerie_id'];
155
		$galerie_id = $_GET['galerie_id'];
156
		$widget['donnees']['url_image'] = $_GET['url_image'];
156
		$widget['donnees']['url_image'] = $_GET['url_image'];
157
		$widget['donnees']['infos_images'] = $_SESSION[$galerie_id]['infos_images'];
157
		$widget['donnees']['infos_images'] = $_SESSION[$galerie_id]['infos_images'];
158
		$widget['donnees']['url_widget'] = $this->url_widget;
158
		$widget['donnees']['url_widget'] = $this->url_widget;
159
		$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
159
		$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
160
		$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
160
		$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
161
		$widget['donnees']['max_photo'] = $_SESSION[$galerie_id]['max_photo'];
161
		$widget['donnees']['max_photo'] = $_SESSION[$galerie_id]['max_photo'];
162
		$widget['donnees']['start'] = $_SESSION[$galerie_id]['start'];
162
		$widget['donnees']['start'] = $_SESSION[$galerie_id]['start'];
163
		$widget['donnees']['url_ws_regenerer_img'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_IMG_LIST) . '/regenerer-miniatures?ids-img=';
163
		$widget['donnees']['url_ws_regenerer_img'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_IMG_LIST) . '/regenerer-miniatures?ids-img=';
164
		$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
164
		$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
165
		$widget['donnees']['url_base_telechargement'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelImageFormat/');
165
		$widget['donnees']['url_base_telechargement'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], 'CelImageFormat/');
166
		$widget['donnees']['formats_description'] = self::IMAGE_FORMATS;
166
		$widget['donnees']['formats_description'] = self::IMAGE_FORMATS;
167
		$widget['donnees']['protocoles'] = $protocoles;
167
		$widget['donnees']['protocoles'] = $protocoles;
168
		$widget['donnees']['del_url'] = sprintf($this->config['chemins']['baseURLServicesDelTpl'], '');
168
		$widget['donnees']['del_url'] = sprintf($this->config['chemins']['baseURLServicesDelTpl'], '');
-
 
169
		$widget['donnees']['new_cel_url'] = sprintf($this->config['chemins']['baseURLServicesNewCelTpl'], '');
169
		
170
		
170
		if ($this->user){
171
		if ($this->user){
171
			$widget['donnees']['userId'] = $this->user['id'];
172
			$widget['donnees']['userId'] = $this->user['id'];
172
			$widget['donnees']['token'] = $this->user['token'];
173
			$widget['donnees']['token'] = $this->user['token'];
173
		}
174
		}
174
 
175
 
175
		$widget['squelette'] = 'popup' . $this->suffixeLangue;
176
		$widget['squelette'] = 'popup' . $this->suffixeLangue;
176
		
177
		
177
		return $widget;
178
		return $widget;
178
	}
179
	}
179
 
180
 
180
	private function executerContact() {
181
	private function executerContact() {
181
		session_start();
182
		session_start();
182
 
183
 
183
		$widget['donnees']['url_widget'] = $this->url_widget;
184
		$widget['donnees']['url_widget'] = $this->url_widget;
184
		$widget['donnees']['id_image'] = $_GET['id_image'];
185
		$widget['donnees']['id_image'] = $_GET['id_image'];
185
		$widget['donnees']['nom_sci'] = $_GET['nom_sci'];
186
		$widget['donnees']['nom_sci'] = $_GET['nom_sci'];
186
		$widget['donnees']['nn'] = $_GET['nn'];
187
		$widget['donnees']['nn'] = $_GET['nn'];
187
		$widget['donnees']['date'] = $_GET['date'];
188
		$widget['donnees']['date'] = $_GET['date'];
188
		$widget['donnees']['auteur'] = $_GET['auteur'];
189
		$widget['donnees']['auteur'] = $_GET['auteur'];
189
		$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
190
		$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
190
 
191
 
191
		if (isset($_GET['lang']) && 'nl' === $_GET['lang']) {
192
		if (isset($_GET['lang']) && 'nl' === $_GET['lang']) {
192
			$widget['donnees']['sujet'] = "Afbeelding #".$_GET['id_image']." op ".$_GET['nom_sci'];
193
			$widget['donnees']['sujet'] = "Afbeelding #".$_GET['id_image']." op ".$_GET['nom_sci'];
193
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nBetreft de foto \"".$_GET['nom_sci'].'" van "'.$_GET['date'];
194
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nBetreft de foto \"".$_GET['nom_sci'].'" van "'.$_GET['date'];
194
 
195
 
195
		} else {
196
		} else {
196
			$widget['donnees']['sujet'] = "Image #".$_GET['id_image']." de ".$_GET['nom_sci'];
197
			$widget['donnees']['sujet'] = "Image #".$_GET['id_image']." de ".$_GET['nom_sci'];
197
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nConcerne l'image de \"".$_GET['nom_sci'].'" du "'.$_GET['date'];
198
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nConcerne l'image de \"".$_GET['nom_sci'].'" du "'.$_GET['date'];
198
 
199
 
199
		}
200
		}
200
 
201
 
201
		$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
202
		$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
202
		$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
203
		$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
203
		$widget['squelette'] = 'contact';
204
		$widget['squelette'] = 'contact';
204
 
205
 
205
		return $widget;
206
		return $widget;
206
	}
207
	}
207
	
208
	
208
	private function executerPhoto() {
209
	private function executerPhoto() {
209
		$widget = null;
210
		$widget = null;
210
 
211
 
211
		$this->parametres['start'] = $this->parametres['start'] ?? self::START_DEFAUT;
212
		$this->parametres['start'] = $this->parametres['start'] ?? self::START_DEFAUT;
212
		$this->parametres['limit'] = $this->parametres['limit'] ?? self::LIMIT_DEFAUT;
213
		$this->parametres['limit'] = $this->parametres['limit'] ?? self::LIMIT_DEFAUT;
213
 
214
 
214
		extract($this->parametres);
215
		extract($this->parametres);
215
		
216
		
216
		$hasTriedValueInConfig = false;
217
		$hasTriedValueInConfig = false;
217
		while (!isset($vignette) || !preg_match('/^[0-9]+,[0-9]+$/', $vignette)) {
218
		while (!isset($vignette) || !preg_match('/^[0-9]+,[0-9]+$/', $vignette)) {
218
			$vignette = (!$hasTriedValueInConfig) ? $this->config['photo']['vignette'] : self::VIGNETTE_DEFAULT;
219
			$vignette = (!$hasTriedValueInConfig) ? $this->config['photo']['vignette'] : self::VIGNETTE_DEFAULT;
219
			$hasTriedValueInConfig = true;
220
			$hasTriedValueInConfig = true;
220
		}
221
		}
221
		
222
		
222
		$id = '-'.(isset($id) ? $id : '1');
223
		$id = '-'.(isset($id) ? $id : '1');
223
		$titre = isset($titre) ? htmlentities(rawurldecode($titre)) : '';
224
		$titre = isset($titre) ? htmlentities(rawurldecode($titre)) : '';
224
 
225
 
225
		$icone_rss = (isset($_GET['rss']) && $_GET['rss'] != 1) ? false : true;
226
		$icone_rss = (isset($_GET['rss']) && $_GET['rss'] != 1) ? false : true;
226
		$utilise_fancybox = (isset($_GET['mode_zoom']) && $_GET['mode_zoom'] != 'fancybox') ? false : true;
227
		$utilise_fancybox = (isset($_GET['mode_zoom']) && $_GET['mode_zoom'] != 'fancybox') ? false : true;
227
		
228
		
228
		$champ_recherche = $champ_recherche ? $this->obtenirBooleen($champ_recherche) : ($this->config['photo']['champRecherche'] ? $this->obtenirBooleen($this->config['photo']['champRecherche']) : false) ;
229
		$champ_recherche = $champ_recherche ? $this->obtenirBooleen($champ_recherche) : ($this->config['photo']['champRecherche'] ? $this->obtenirBooleen($this->config['photo']['champRecherche']) : false) ;
229
		
230
		
230
		// Affichage mode e-flore avec le paramètre mode_eflore
231
		// Affichage mode e-flore avec le paramètre mode_eflore
231
		if ($_GET['mode_eflore']) {
232
		if ($_GET['mode_eflore']) {
232
			$champ_recherche = false;
233
			$champ_recherche = false;
233
			$vignette ='5,2';
234
			$vignette ='5,2';
234
			
235
			
235
			$tags = [
236
			$tags = [
236
				'fleur',
237
				'fleur',
237
				'feuille',
238
				'feuille',
238
				'fruit',
239
				'fruit',
239
				'ecorce',
240
				'ecorce',
240
				'port',
241
				'port',
241
				'rameau',
242
				'rameau',
242
			];
243
			];
243
			foreach ($tags as $tag) {
244
			foreach ($tags as $tag) {
244
				$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,
245
				$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,
245
										   true, $tag, $widget,$champ_recherche);
246
										   true, $tag, $widget,$champ_recherche);
246
				$widget['donnees']['champ_recherche'] = $champ_recherche;
247
				$widget['donnees']['champ_recherche'] = $champ_recherche;
247
			}
248
			}
248
			$widget['donnees']['tagToDisplay'] = 'fleur';
249
			$widget['donnees']['tagToDisplay'] = 'fleur';
249
		} else {
250
		} else {
250
			$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,false, 'non_eflore', $widget,$champ_recherche);
251
			$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,false, 'non_eflore', $widget,$champ_recherche);
251
			$widget['donnees']['champ_recherche'] = $champ_recherche;
252
			$widget['donnees']['champ_recherche'] = $champ_recherche;
252
		}
253
		}
253
		
254
		
254
		return $widget;
255
		return $widget;
255
	}
256
	}
256
 
257
 
257
	private function traiterParametres() {
258
	private function traiterParametres() {
258
		$parametres_flux = '?';
259
		$parametres_flux = '?';
259
		$criteres = [
260
		$criteres = [
260
			'taxon',
261
			'taxon',
261
			'referentiel',
262
			'referentiel',
262
			'date_deb',
263
			'date_deb',
263
			'date_fin',
264
			'date_fin',
264
			'commune',
265
			'commune',
265
			'dept',
266
			'dept',
266
			'pays',
267
			'pays',
267
			'auteur',
268
			'auteur',
268
			'programme',
269
			'programme',
269
			'tag',
270
			'tag',
270
			'standard',
271
			'standard',
271
			'recherche',
272
			'recherche',
272
			'date',
273
			'date',
273
			'motcle',
274
			'motcle',
274
			'projet',
275
			'projet',
275
			'num_taxon',
276
			'num_taxon',
276
			'num_nom',
277
			'num_nom',
277
			'start',
278
			'start',
278
			'limit',
279
			'limit',
279
			'mode_eflore',
280
			'mode_eflore',
280
			'famille'
281
			'famille'
281
		];
282
		];
282
 
283
 
283
		foreach($this->parametres as $nom_critere => $valeur_critere) {
284
		foreach($this->parametres as $nom_critere => $valeur_critere) {
284
			if (in_array($nom_critere, $criteres)) {
285
			if (in_array($nom_critere, $criteres)) {
285
				$valeur_critere = str_replace(' ', '%20', $valeur_critere);
286
				$valeur_critere = str_replace(' ', '%20', $valeur_critere);
286
				$parametres_flux .= $nom_critere.'='.$valeur_critere.'&';
287
				$parametres_flux .= $nom_critere.'='.$valeur_critere.'&';
287
 
288
 
288
			}
289
			}
289
		}
290
		}
290
		if ($parametres_flux === '?') {
291
		if ($parametres_flux === '?') {
291
			$parametres_flux = '';
292
			$parametres_flux = '';
292
 
293
 
293
		} else {
294
		} else {
294
			$parametres_flux = rtrim($parametres_flux, '&');
295
			$parametres_flux = rtrim($parametres_flux, '&');
295
 
296
 
296
		}
297
		}
297
 
298
 
298
		return $parametres_flux;
299
		return $parametres_flux;
299
	}
300
	}
300
 
301
 
301
	private function obtenirBooleen($var) {
302
	private function obtenirBooleen($var) {
302
		switch ($var) {
303
		switch ($var) {
303
			case 'false' :
304
			case 'false' :
304
			case 'null' :
305
			case 'null' :
305
			case 'non' :
306
			case 'non' :
306
			case 'no' :
307
			case 'no' :
307
				return false;
308
				return false;
308
			default:
309
			default:
309
				return boolval($var);
310
				return boolval($var);
310
		}
311
		}
311
	}
312
	}
312
	
313
	
313
	private function getProtocoles(){
314
	private function getProtocoles(){
314
		$protocoles = [];
315
		$protocoles = [];
315
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
316
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
316
		$url = sprintf($this->service_del_url, 'protocoles');
317
		$url = sprintf($this->service_del_url, 'protocoles');
317
		$json = $this->getDao()->consulter($url);
318
		$json = $this->getDao()->consulter($url);
318
		
319
		
319
		if (empty($json)) {
320
		if (empty($json)) {
320
			$this->messages[] = "L'URI suivante est invalide : $url";
321
			$this->messages[] = "L'URI suivante est invalide : $url";
321
		} else {
322
		} else {
322
			$protocoles= json_decode($json, true);
323
			$protocoles= json_decode($json, true);
323
		}
324
		}
324
		
325
		
325
		return $protocoles['resultats'];
326
		return $protocoles['resultats'];
326
	}
327
	}
327
	
328
	
328
	private function getVotes($image){
329
	private function getVotes($image){
329
		$votes = [];
330
		$votes = [];
330
		
331
		
331
		$id = $image['id_photo'];
332
		$id = $image['id_photo'];
332
		
333
		
333
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
334
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
334
		$url = sprintf($this->service_del_url, 'images/'.$id.'/votes');
335
		$url = sprintf($this->service_del_url, 'images/'.$id.'/votes');
335
		
336
		
336
		$json = $this->getDao()->consulter($url);
337
		$json = $this->getDao()->consulter($url);
337
		
338
		
338
		if (empty($json)) {
339
		if (empty($json)) {
339
			$this->messages[] = "L'URI suivante est invalide : $url";
340
			$this->messages[] = "L'URI suivante est invalide : $url";
340
		} else {
341
		} else {
341
			foreach (json_decode($json, true)['resultats'] as $vote){
342
			foreach (json_decode($json, true)['resultats'] as $vote){
342
				$votes[] = $vote;
343
				$votes[] = $vote;
343
			}
344
			}
344
		}
345
		}
345
		
346
		
346
		return $votes;
347
		return $votes;
347
	}
348
	}
348
 
349
 
349
	public function sendVote(){
350
	public function sendVote(){
350
		$data = json_decode(file_get_contents('php://input'), true);
351
		$data = json_decode(file_get_contents('php://input'), true);
351
		
352
		
352
		$id = $data['idImage'];
353
		$id = $data['idImage'];
353
		$mode = $data['mode'];
354
		$mode = $data['mode'];
354
		$contenu = [
355
		$contenu = [
355
			'utilisateur' => $data['user'],
356
			'utilisateur' => $data['user'],
356
			'protocole' => $data['protocole'],
357
			'protocole' => $data['protocole'],
357
			'valeur' => $data['vote']
358
			'valeur' => $data['vote']
358
		];
359
		];
359
		
360
		
360
		switch ($mode){
361
		switch ($mode){
361
			case 'PUT':
362
			case 'PUT':
362
			case 'POST':
363
			case 'POST':
363
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
364
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
364
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/');
365
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/');
365
				$this->send($url, $mode, $contenu);
366
				$this->send($url, $mode, $contenu);
366
				break;
367
				break;
367
			case 'DELETE':
368
			case 'DELETE':
368
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
369
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
369
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/'.$data['voteId']);
370
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/'.$data['voteId']);
370
				$this->send($url, $mode, $contenu);
371
				$this->send($url, $mode, $contenu);
371
				break;
372
				break;
372
		}
373
		}
373
	}
374
	}
374
	
375
	
375
	public function send($url, $mode, Array $donnees = array()){
376
	public function send($url, $mode, Array $donnees = array()){
376
		$contenu = false;
377
		$contenu = false;
377
		$this->user = $this->getUserFromCookie();
378
		$this->user = $this->getUserFromCookie();
378
		$authorizationToken = $this->user['token'];
379
		$authorizationToken = $this->user['token'];
379
 
380
 
380
		$json = json_encode($donnees);
381
		$json = json_encode($donnees);
381
		$contexte = stream_context_create([
382
		$contexte = stream_context_create([
382
			  'http' => [
383
			  'http' => [
383
				  'method' => $mode,
384
				  'method' => $mode,
384
				  'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
385
				  'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
385
					  "Authorization: $authorizationToken\r\n",
386
					  "Authorization: $authorizationToken\r\n",
386
				  'content' => http_build_query($donnees, null, '&')]
387
				  'content' => http_build_query($donnees, null, '&')]
387
										  ]);
388
										  ]);
388
		$flux = fopen($url, 'r', false, $contexte);
389
		$flux = fopen($url, 'r', false, $contexte);
389
		if (!$flux) {
390
		if (!$flux) {
390
			$e = "L'ouverture de l'url '{$url}' par la méthode HTTP {$mode} a échoué! avec les données {$json} et le token {$authorizationToken}";
391
			$e = "L'ouverture de l'url '{$url}' par la méthode HTTP {$mode} a échoué! avec les données {$json} et le token {$authorizationToken}";
391
			trigger_error($e, E_USER_WARNING);
392
			trigger_error($e, E_USER_WARNING);
392
		} else {
393
		} else {
393
			// Contenu actuel de $url
394
			// Contenu actuel de $url
394
			$contenu = stream_get_contents($flux);
395
			$contenu = stream_get_contents($flux);
395
			
396
			
396
			fclose($flux);
397
			fclose($flux);
397
		}
398
		}
398
		return $contenu;
399
		return $contenu;
399
	}
400
	}
400
	
401
	
401
	public function formaterDate($item, $image){
402
	public function formaterDate($item, $image){
402
		$item['date_photo'] = $image['date_photo'] ?? $image['obs']['date_obs'];
403
		$item['date_photo'] = $image['date_photo'] ?? $image['obs']['date_obs'];
403
		$item['date_redige'] = strftime('%A %d %B %Y', strtotime($item['date_photo']));
404
		$item['date_redige'] = strftime('%A %d %B %Y', strtotime($item['date_photo']));
404
		$item['date'] = date_format(date_create($item['date_photo']),"d/m/Y");
405
		$item['date'] = date_format(date_create($item['date_photo']),"d/m/Y");
405
		$item['lien'] = sprintf($this->eflore_url_tpl, $image['obs']['nom_referentiel'], $image['obs']['nom_sel_nn']);
406
		$item['lien'] = sprintf($this->eflore_url_tpl, $image['obs']['nom_referentiel'], $image['obs']['nom_sel_nn']);
406
		$image['url_photo'] = preg_replace('/,/', "", $image['url_photo']);
407
		$image['url_photo'] = preg_replace('/,/', "", $image['url_photo']);
407
		$item['url_tpl'] = preg_replace('/(O|XS|[SML]|X(?:[23]|)L|CR(?:|X2)S|C(?:|X)S)$/', '%s.jpg',$image['url_photo']);
408
		$item['url_tpl'] = preg_replace('/(O|XS|[SML]|X(?:[23]|)L|CR(?:|X2)S|C(?:|X)S)$/', '%s.jpg',$image['url_photo']);
408
		return $item;
409
		return $item;
409
	}
410
	}
410
	
411
	
411
	public function formaterTitre($item, $image, $auteur){
412
	public function formaterTitre($item, $image, $auteur){
412
		$item['titre'] = $image['obs']['nom_sel'].' [nn'.$image['obs']['nom_sel_nn'].'] par '.$auteur.' le '
413
		$item['titre'] = $image['obs']['nom_sel'].' [nn'.$image['obs']['nom_sel_nn'].'] par '.$auteur.' le '
413
			.date_format(date_create($image['obs']['date_obs']),"d/m/Y").' - '.$image['obs']['localisation'];
414
			.date_format(date_create($image['obs']['date_obs']),"d/m/Y").' - '.$image['obs']['localisation'];
414
		
415
		
415
		$item['id_photo_formate'] = sprintf('%09d', $image['id_photo']);
416
		$item['id_photo_formate'] = sprintf('%09d', $image['id_photo']);
416
		$item['urlProfil'] = sprintf($this->config['photo']['tbProfilUrlTpl'], $image['utilisateur']['id_utilisateur'] );
417
		$item['urlProfil'] = sprintf($this->config['photo']['tbProfilUrlTpl'], $image['utilisateur']['id_utilisateur'] );
417
		return $item;
418
		return $item;
418
	}
419
	}
419
	
420
	
420
	private function getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox, $fromEflore,
421
	private function getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox, $fromEflore,
421
	$tag, $widget, $champ_recherche){
422
	$tag, $widget, $champ_recherche){
422
		if ($fromEflore){
423
		if ($fromEflore){
423
			$this->parametres['tag'] = $tag;
424
			$this->parametres['tag'] = $tag;
424
		}
425
		}
425
		list($colonne, $ligne) = explode(',', $vignette);
426
		list($colonne, $ligne) = explode(',', $vignette);
426
		$extra = (isset($extra) && $extra == 0) ? false : (!$this->config['photo']['extraActif'] ? false : ($colonne == 1 || $ligne == 1 ? false : true));
427
		$extra = (isset($extra) && $extra == 0) ? false : (!$this->config['photo']['extraActif'] ? false : ($colonne == 1 || $ligne == 1 ? false : true));
427
		
428
		
428
		$max_photo = $colonne * $ligne;
429
		$max_photo = $colonne * $ligne;
429
		if ( $extra && 2 == $colonne ) {
430
		if ( $extra && 2 == $colonne ) {
430
			$max_photo = $max_photo - 1;
431
			$max_photo = $max_photo - 1;
431
		} elseif (  $extra && 2 < $colonne ) {
432
		} elseif (  $extra && 2 < $colonne ) {
432
			$max_photo = $max_photo - 3;
433
			$max_photo = $max_photo - 3;
433
		}
434
		}
434
		
435
		
435
		$limit = $limit < $max_photo ? $limit : $max_photo;
436
		$limit = $limit < $max_photo ? $limit : $max_photo;
436
		$this->parametres['limit'] = $limit;
437
		$this->parametres['limit'] = $limit;
437
		$parametresTraites = $this->traiterParametres();
438
		$parametresTraites = $this->traiterParametres();
438
		$this->flux_rss_url .= $parametresTraites;
439
		$this->flux_rss_url .= $parametresTraites;
439
		$url = $this->service_images_url.(!empty($parametresTraites) ? $parametresTraites.'&' : '?');
440
		$url = $this->service_images_url.(!empty($parametresTraites) ? $parametresTraites.'&' : '?');
440
		$json = $this->getDao()->consulter($url);
441
		$json = $this->getDao()->consulter($url);
441
		if ($fromEflore) {
442
		if ($fromEflore) {
442
			unset($this->parametres['tag']);
443
			unset($this->parametres['tag']);
443
		}
444
		}
444
		if (empty($json) || !strpos($json,'images') ) {
445
		if (empty($json) || !strpos($json,'images') ) {
445
			$this->messages[] = "L'URI suivante est invalide : $this->service_images_url.\n".
446
			$this->messages[] = "L'URI suivante est invalide : $this->service_images_url.\n".
446
				"Veuillez vérifier les paramêtres indiqués et la présence d'images associées.";
447
				"Veuillez vérifier les paramêtres indiqués et la présence d'images associées.";
447
			
448
			
448
		} else {
449
		} else {
449
			$tableau = json_decode($json, true);
450
			$tableau = json_decode($json, true);
450
//			print_r($tableau);
451
//			print_r($tableau);
451
			if (empty($tableau['total']) || empty($tableau['images'])) {
452
			if (empty($tableau['total']) || empty($tableau['images'])) {
452
				$this->messages[] = 'Aucune photo ne correspond à vos critères';
453
				$this->messages[] = 'Aucune photo ne correspond à vos critères';
453
			} else {
454
			} else {
454
 
455
 
455
				$parametres_photo_suivante = $parametres_photo_precedente = $this->parametres;
456
				$parametres_photo_suivante = $parametres_photo_precedente = $this->parametres;
456
				$start = $this->parametres['start'] ? : 0;
457
				$start = $this->parametres['start'] ? : 0;
457
				$parametres_photo_suivante['start'] = $start + $limit;
458
				$parametres_photo_suivante['start'] = $start + $limit;
458
				$parametres_photo_precedente['start'] = 0 < $start - $limit ? $start - $limit : 0;
459
				$parametres_photo_precedente['start'] = 0 < $start - $limit ? $start - $limit : 0;
459
				
460
				
460
				$widget['donnees']['total'] = $tableau['total'];
461
				$widget['donnees']['total'] = $tableau['total'];
461
				$widget['donnees']['id'] = $id;
462
				$widget['donnees']['id'] = $id;
462
				$widget['donnees']['titre'] = $titre;
463
				$widget['donnees']['titre'] = $titre;
463
				$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
464
				$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
464
				$widget['donnees']['url_widget'] = $this->url_widget;
465
				$widget['donnees']['url_widget'] = $this->url_widget;
465
				$widget['donnees']['url_widget_photos_suivantes'] = $this->url_widget.'?'.http_build_query($parametres_photo_suivante);
466
				$widget['donnees']['url_widget_photos_suivantes'] = $this->url_widget.'?'.http_build_query($parametres_photo_suivante);
466
				$widget['donnees']['url_widget_photos_precedente'] = $this->url_widget.'?'.http_build_query($parametres_photo_precedente);
467
				$widget['donnees']['url_widget_photos_precedente'] = $this->url_widget.'?'.http_build_query($parametres_photo_precedente);
467
				$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
468
				$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
468
				$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
469
				$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
469
				$widget['donnees']['colonne'] = $colonne;
470
				$widget['donnees']['colonne'] = $colonne;
470
				$widget['donnees']['ligne'] = $ligne;
471
				$widget['donnees']['ligne'] = $ligne;
471
				$widget['donnees']['extra_actif'] = $extra;
472
				$widget['donnees']['extra_actif'] = $extra;
472
				$widget['donnees']['icone_rss'] = $icone_rss;
473
				$widget['donnees']['icone_rss'] = $icone_rss;
473
				$widget['donnees']['champ_recherche'] = $champ_recherche;
474
				$widget['donnees']['champ_recherche'] = $champ_recherche;
474
				$widget['donnees']['start'] = $start;
475
				$widget['donnees']['start'] = $start;
475
				$widget['donnees']['limit'] = $limit;
476
				$widget['donnees']['limit'] = $limit;
476
				$widget['donnees']['utilise_fancybox'] = $utilise_fancybox;
477
				$widget['donnees']['utilise_fancybox'] = $utilise_fancybox;
477
				$widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
478
				$widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
478
				$widget['donnees']['filtres'] = $this->parametres;
479
				$widget['donnees']['filtres'] = $this->parametres;
479
				
480
				
480
				$num = 0;
481
				$num = 0;
481
				$galerie_id = md5(http_build_query($_GET));
482
				$galerie_id = md5(http_build_query($_GET));
482
				$widget['donnees']['galerie_id'] = $galerie_id;
483
				$widget['donnees']['galerie_id'] = $galerie_id;
483
				
484
				
484
				session_start();
485
				session_start();
485
				$_SESSION[$galerie_id]['max_photo'] = $max_photo;
486
				$_SESSION[$galerie_id]['max_photo'] = $max_photo;
486
				$_SESSION[$galerie_id]['start'] = $start;
487
				$_SESSION[$galerie_id]['start'] = $start;
487
				
488
				
488
				foreach ($tableau['images'] as $key => $image) {
489
				foreach ($tableau['images'] as $key => $image) {
489
					if ($key == $max_photo) {
490
					if ($key == $max_photo) {
490
						break;
491
						break;
491
					}
492
					}
492
					$auteurTruncatedEmail = $this->tronquerCourriel($image['utilisateur']['mail_utilisateur']);
493
					$auteurTruncatedEmail = $this->tronquerCourriel($image['utilisateur']['mail_utilisateur']);
493
					$auteur = trim($image['utilisateur']['nom_utilisateur']) ? $image['utilisateur']['nom_utilisateur'] : $auteurTruncatedEmail;
494
					$auteur = trim($image['utilisateur']['nom_utilisateur']) ? $image['utilisateur']['nom_utilisateur'] : $auteurTruncatedEmail;
494
					
495
					
495
					$item = $image;
496
					$item = $image;
496
					
497
					
497
					$item = $this->formaterDate($item, $image);
498
					$item = $this->formaterDate($item, $image);
498
				
499
				
499
					$item = $this->formaterTitre($item, $image, $auteur);
500
					$item = $this->formaterTitre($item, $image, $auteur);
500
					
501
					
501
					$item['tag_eflore'] = $tag;
502
					$item['tag_eflore'] = $tag;
502
					
503
					
503
					// Ajout aux items et si première photo à extra
504
					// Ajout aux items et si première photo à extra
504
					if ($key == 0) {
505
					if ($key == 0) {
505
						$widget['donnees']['extra'] =  $item;
506
						$widget['donnees']['extra'] =  $item;
506
					}
507
					}
507
					
508
					
508
					$widget['donnees']['items'][$tag][$num++] =  $item;
509
					$widget['donnees']['items'][$tag][$num++] =  $item;
509
					$url_galerie_popup = sprintf($item['url_tpl'],'O');
510
					$url_galerie_popup = sprintf($item['url_tpl'],'O');
510
					$image_size = getimagesize($url_galerie_popup);
511
					$image_size = getimagesize($url_galerie_popup);
511
					$item['width'] = $image_size[0];
512
					$item['width'] = $image_size[0];
512
					$item['height'] = $image_size[1];
513
					$item['height'] = $image_size[1];
513
					
514
					
514
					// Récupération des votes pictoflora
515
					// Récupération des votes pictoflora
515
					$item['votes'] = $this->getVotes($item);
516
					$item['votes'] = $this->getVotes($item);
516
					
517
					
517
					// Récupération des tags pictoflora
518
					// Récupération des tags pictoflora
518
					$item['tags_pf'] = $this->getPfTags($item);
519
					$item['tags_pf'] = $this->getPfTags($item);
519
					
520
					
520
					$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = $item;
521
					$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = $item;
521
				}
522
				}
522
				
523
				
523
				$widget['squelette'] = 'photo';
524
				$widget['squelette'] = 'photo';
524
			}
525
			}
525
		}
526
		}
526
		
527
		
527
		return $widget;
528
		return $widget;
528
	}
529
	}
529
	
530
	
530
	private function getPfTags($image){
531
	private function getPfTags($image){
531
		$tags = [];
532
		$tags = [];
532
		
533
		
533
		$id = $image['id_photo'];
534
		$id = $image['id_photo'];
534
		
535
		
535
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
536
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
536
		$url = sprintf($this->service_del_url, 'mots-cles?image='.$id);
537
		$url = sprintf($this->service_del_url, 'mots-cles?image='.$id);
537
		
538
		
538
		$json = $this->getDao()->consulter($url);
539
		$json = $this->getDao()->consulter($url);
539
		
540
		
540
		if (empty($json)) {
541
		if (empty($json)) {
541
			$this->messages[] = "L'URI suivante est invalide : $url";
542
			$this->messages[] = "L'URI suivante est invalide : $url";
542
		} else {
543
		} else {
543
			foreach (json_decode($json, true)['resultats'] as $tag){
544
			foreach (json_decode($json, true)['resultats'] as $tag){
544
				$tags[] = [
545
				$tags[] = [
545
					'id_mot_cle' => $tag['id_mot_cle'],
546
					'id_mot_cle' => $tag['id_mot_cle'],
546
					'mot_cle' => $tag['mot_cle']
547
					'mot_cle' => $tag['mot_cle']
547
				];
548
				];
548
			}
549
			}
549
		}
550
		}
550
		
551
		
551
		return $tags;
552
		return $tags;
552
	}
553
	}
553
}
554
}
554
?>
555
?>