Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3981 Rev 3982
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
		
168
		
169
		if ($this->user){
169
		if ($this->user){
170
			$widget['donnees']['userId'] = $this->user['id'];
170
			$widget['donnees']['userId'] = $this->user['id'];
171
			$widget['donnees']['token'] = $this->user['token'];
171
			$widget['donnees']['token'] = $this->user['token'];
172
		}
172
		}
173
 
173
 
174
		$widget['squelette'] = 'popup' . $this->suffixeLangue;
174
		$widget['squelette'] = 'popup' . $this->suffixeLangue;
175
		
175
		
176
		return $widget;
176
		return $widget;
177
	}
177
	}
178
 
178
 
179
	private function executerContact() {
179
	private function executerContact() {
180
		session_start();
180
		session_start();
181
 
181
 
182
		$widget['donnees']['url_widget'] = $this->url_widget;
182
		$widget['donnees']['url_widget'] = $this->url_widget;
183
		$widget['donnees']['id_image'] = $_GET['id_image'];
183
		$widget['donnees']['id_image'] = $_GET['id_image'];
184
		$widget['donnees']['nom_sci'] = $_GET['nom_sci'];
184
		$widget['donnees']['nom_sci'] = $_GET['nom_sci'];
185
		$widget['donnees']['nn'] = $_GET['nn'];
185
		$widget['donnees']['nn'] = $_GET['nn'];
186
		$widget['donnees']['date'] = $_GET['date'];
186
		$widget['donnees']['date'] = $_GET['date'];
187
		$widget['donnees']['auteur'] = $_GET['auteur'];
187
		$widget['donnees']['auteur'] = $_GET['auteur'];
188
		$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
188
		$widget['donnees']['popup_url'] = isset( $_GET['popup_url'] ) ? $_GET['popup_url'] : null;
189
 
189
 
190
		if (isset($_GET['lang']) && 'nl' === $_GET['lang']) {
190
		if (isset($_GET['lang']) && 'nl' === $_GET['lang']) {
191
			$widget['donnees']['sujet'] = "Afbeelding #".$_GET['id_image']." op ".$_GET['nom_sci'];
191
			$widget['donnees']['sujet'] = "Afbeelding #".$_GET['id_image']." op ".$_GET['nom_sci'];
192
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nBetreft de foto \"".$_GET['nom_sci'].'" van "'.$_GET['date'];
192
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nBetreft de foto \"".$_GET['nom_sci'].'" van "'.$_GET['date'];
193
 
193
 
194
		} else {
194
		} else {
195
			$widget['donnees']['sujet'] = "Image #".$_GET['id_image']." de ".$_GET['nom_sci'];
195
			$widget['donnees']['sujet'] = "Image #".$_GET['id_image']." de ".$_GET['nom_sci'];
196
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nConcerne l'image de \"".$_GET['nom_sci'].'" du "'.$_GET['date'];
196
			$widget['donnees']['message'] = "\n\n\n\n\n\n\n\n--\nConcerne l'image de \"".$_GET['nom_sci'].'" du "'.$_GET['date'];
197
 
197
 
198
		}
198
		}
199
 
199
 
200
		$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
200
		$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
201
		$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
201
		$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
202
		$widget['squelette'] = 'contact';
202
		$widget['squelette'] = 'contact';
203
 
203
 
204
		return $widget;
204
		return $widget;
205
	}
205
	}
206
	
206
	
207
	private function executerPhoto() {
207
	private function executerPhoto() {
208
		$widget = null;
208
		$widget = null;
209
 
209
 
210
		$this->parametres['start'] = $this->parametres['start'] ?? self::START_DEFAUT;
210
		$this->parametres['start'] = $this->parametres['start'] ?? self::START_DEFAUT;
211
		$this->parametres['limit'] = $this->parametres['limit'] ?? self::LIMIT_DEFAUT;
211
		$this->parametres['limit'] = $this->parametres['limit'] ?? self::LIMIT_DEFAUT;
212
 
212
 
213
		extract($this->parametres);
213
		extract($this->parametres);
214
		
214
		
215
		$hasTriedValueInConfig = false;
215
		$hasTriedValueInConfig = false;
216
		while (!isset($vignette) || !preg_match('/^[0-9]+,[0-9]+$/', $vignette)) {
216
		while (!isset($vignette) || !preg_match('/^[0-9]+,[0-9]+$/', $vignette)) {
217
			$vignette = (!$hasTriedValueInConfig) ? $this->config['photo']['vignette'] : self::VIGNETTE_DEFAULT;
217
			$vignette = (!$hasTriedValueInConfig) ? $this->config['photo']['vignette'] : self::VIGNETTE_DEFAULT;
218
			$hasTriedValueInConfig = true;
218
			$hasTriedValueInConfig = true;
219
		}
219
		}
220
		
220
		
221
		$id = '-'.(isset($id) ? $id : '1');
221
		$id = '-'.(isset($id) ? $id : '1');
222
		$titre = isset($titre) ? htmlentities(rawurldecode($titre)) : '';
222
		$titre = isset($titre) ? htmlentities(rawurldecode($titre)) : '';
223
 
223
 
224
		$icone_rss = (isset($_GET['rss']) && $_GET['rss'] != 1) ? false : true;
224
		$icone_rss = (isset($_GET['rss']) && $_GET['rss'] != 1) ? false : true;
225
		$utilise_fancybox = (isset($_GET['mode_zoom']) && $_GET['mode_zoom'] != 'fancybox') ? false : true;
225
		$utilise_fancybox = (isset($_GET['mode_zoom']) && $_GET['mode_zoom'] != 'fancybox') ? false : true;
226
		
226
		
227
		$champ_recherche = $champ_recherche ? $this->obtenirBooleen($champ_recherche) : ($this->config['photo']['champRecherche'] ? $this->obtenirBooleen($this->config['photo']['champRecherche']) : false) ;
227
		$champ_recherche = $champ_recherche ? $this->obtenirBooleen($champ_recherche) : ($this->config['photo']['champRecherche'] ? $this->obtenirBooleen($this->config['photo']['champRecherche']) : false) ;
228
		
228
		
229
		// Affichage mode e-flore avec le paramètre mode_eflore
229
		// Affichage mode e-flore avec le paramètre mode_eflore
230
		if ($_GET['mode_eflore']) {
230
		if ($_GET['mode_eflore']) {
231
			$champ_recherche = false;
231
			$champ_recherche = false;
232
			$vignette ='5,2';
232
			$vignette ='5,2';
233
			
233
			
234
			$tags = [
234
			$tags = [
235
				'fleur',
235
				'fleur',
236
				'feuille',
236
				'feuille',
237
				'fruit',
237
				'fruit',
238
				'ecorce',
238
				'ecorce',
239
				'port',
239
				'port',
240
				'rameau',
240
				'rameau',
241
			];
241
			];
242
			foreach ($tags as $tag) {
242
			foreach ($tags as $tag) {
243
				$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,
243
				$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,
244
										   true, $tag, $widget,$champ_recherche);
244
										   true, $tag, $widget,$champ_recherche);
245
				$widget['donnees']['champ_recherche'] = $champ_recherche;
245
				$widget['donnees']['champ_recherche'] = $champ_recherche;
246
			}
246
			}
247
			$widget['donnees']['tagToDisplay'] = 'fleur';
247
			$widget['donnees']['tagToDisplay'] = 'fleur';
248
		} else {
248
		} else {
249
			$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,false, 'non_eflore', $widget,$champ_recherche);
249
			$widget = $this->getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox,false, 'non_eflore', $widget,$champ_recherche);
250
			$widget['donnees']['champ_recherche'] = $champ_recherche;
250
			$widget['donnees']['champ_recherche'] = $champ_recherche;
251
		}
251
		}
252
		
252
		
253
		return $widget;
253
		return $widget;
254
	}
254
	}
255
 
255
 
256
	private function traiterParametres() {
256
	private function traiterParametres() {
257
		$parametres_flux = '?';
257
		$parametres_flux = '?';
258
		$criteres = [
258
		$criteres = [
259
			'taxon',
259
			'taxon',
260
			'referentiel',
260
			'referentiel',
261
			'date_deb',
261
			'date_deb',
262
			'date_fin',
262
			'date_fin',
263
			'commune',
263
			'commune',
264
			'dept',
264
			'dept',
265
			'pays',
265
			'pays',
266
			'auteur',
266
			'auteur',
267
			'programme',
267
			'programme',
268
			'tag',
268
			'tag',
269
			'standard',
269
			'standard',
270
			'recherche',
270
			'recherche',
271
			'date',
271
			'date',
272
			'motcle',
272
			'motcle',
273
			'projet',
273
			'projet',
274
			'num_taxon',
274
			'num_taxon',
275
			'num_nom',
275
			'num_nom',
276
			'start',
276
			'start',
277
			'limit',
277
			'limit',
278
			'mode_eflore',
278
			'mode_eflore',
279
			'famille'
279
			'famille'
280
		];
280
		];
281
 
281
 
282
		foreach($this->parametres as $nom_critere => $valeur_critere) {
282
		foreach($this->parametres as $nom_critere => $valeur_critere) {
283
			if (in_array($nom_critere, $criteres)) {
283
			if (in_array($nom_critere, $criteres)) {
284
				$valeur_critere = str_replace(' ', '%20', $valeur_critere);
284
				$valeur_critere = str_replace(' ', '%20', $valeur_critere);
285
				$parametres_flux .= $nom_critere.'='.$valeur_critere.'&';
285
				$parametres_flux .= $nom_critere.'='.$valeur_critere.'&';
286
 
286
 
287
			}
287
			}
288
		}
288
		}
289
		if ($parametres_flux === '?') {
289
		if ($parametres_flux === '?') {
290
			$parametres_flux = '';
290
			$parametres_flux = '';
291
 
291
 
292
		} else {
292
		} else {
293
			$parametres_flux = rtrim($parametres_flux, '&');
293
			$parametres_flux = rtrim($parametres_flux, '&');
294
 
294
 
295
		}
295
		}
296
 
296
 
297
		return $parametres_flux;
297
		return $parametres_flux;
298
	}
298
	}
299
 
299
 
300
	private function obtenirBooleen($var) {
300
	private function obtenirBooleen($var) {
301
		switch ($var) {
301
		switch ($var) {
302
			case 'false' :
302
			case 'false' :
303
			case 'null' :
303
			case 'null' :
304
			case 'non' :
304
			case 'non' :
305
			case 'no' :
305
			case 'no' :
306
				return false;
306
				return false;
307
			default:
307
			default:
308
				return boolval($var);
308
				return boolval($var);
309
		}
309
		}
310
	}
310
	}
311
	
311
	
312
	private function getProtocoles(){
312
	private function getProtocoles(){
313
		$protocoles = [];
313
		$protocoles = [];
314
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
314
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
315
		$url = sprintf($this->service_del_url, 'protocoles');
315
		$url = sprintf($this->service_del_url, 'protocoles');
316
		$json = $this->getDao()->consulter($url);
316
		$json = $this->getDao()->consulter($url);
317
		
317
		
318
		if (empty($json)) {
318
		if (empty($json)) {
319
			$this->messages[] = "L'URI suivante est invalide : $url";
319
			$this->messages[] = "L'URI suivante est invalide : $url";
320
		} else {
320
		} else {
321
			$protocoles= json_decode($json, true);
321
			$protocoles= json_decode($json, true);
322
		}
322
		}
323
		
323
		
324
		return $protocoles['resultats'];
324
		return $protocoles['resultats'];
325
	}
325
	}
326
	
326
	
327
	private function getVotes($image){
327
	private function getVotes($image){
328
		$votes = [];
328
		$votes = [];
329
		
329
		
330
		$id = $image['id_photo'];
330
		$id = $image['id_photo'];
331
		
331
		
332
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
332
		$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
333
		$url = sprintf($this->service_del_url, 'images/'.$id.'/votes');
333
		$url = sprintf($this->service_del_url, 'images/'.$id.'/votes');
334
		
334
		
335
		$json = $this->getDao()->consulter($url);
335
		$json = $this->getDao()->consulter($url);
336
		
336
		
337
		if (empty($json)) {
337
		if (empty($json)) {
338
			$this->messages[] = "L'URI suivante est invalide : $url";
338
			$this->messages[] = "L'URI suivante est invalide : $url";
339
		} else {
339
		} else {
340
			foreach (json_decode($json, true)['resultats'] as $vote){
340
			foreach (json_decode($json, true)['resultats'] as $vote){
341
				$votes[] = $vote;
341
				$votes[] = $vote;
342
			}
342
			}
343
		}
343
		}
344
		
344
		
345
		return $votes;
345
		return $votes;
346
	}
346
	}
347
 
347
 
348
	public function sendVote(){
348
	public function sendVote(){
349
		$data = json_decode(file_get_contents('php://input'), true);
349
		$data = json_decode(file_get_contents('php://input'), true);
350
		
350
		
351
		$id = $data['idImage'];
351
		$id = $data['idImage'];
352
		$mode = $data['mode'];
352
		$mode = $data['mode'];
353
		$contenu = [
353
		$contenu = [
354
			'utilisateur' => $data['user'],
354
			'utilisateur' => $data['user'],
355
			'protocole' => $data['protocole'],
355
			'protocole' => $data['protocole'],
356
			'valeur' => $data['vote']
356
			'valeur' => $data['vote']
357
		];
357
		];
358
		
358
		
359
		switch ($mode){
359
		switch ($mode){
360
			case 'PUT':
360
			case 'PUT':
361
			case 'POST':
361
			case 'POST':
362
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
362
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
363
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/');
363
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/');
364
				$this->send($url, $mode, $contenu);
364
				$this->send($url, $mode, $contenu);
365
				break;
365
				break;
366
			case 'DELETE':
366
			case 'DELETE':
367
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
367
				$this->service_del_url = $this->config['chemins']['baseURLServicesDelTpl'];
368
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/'.$data['voteId']);
368
				$url = sprintf($this->service_del_url, 'images/'.$id.'/votes/'.$data['voteId']);
369
				$this->send($url, $mode, $contenu);
369
				$this->send($url, $mode, $contenu);
370
				break;
370
				break;
371
		}
371
		}
372
	}
372
	}
373
	
373
	
374
	public function send($url, $mode, Array $donnees = array()){
374
	public function send($url, $mode, Array $donnees = array()){
375
		$contenu = false;
375
		$contenu = false;
376
		$this->user = $this->getUserFromCookie();
376
		$this->user = $this->getUserFromCookie();
377
		$authorizationToken = $this->user['token'];
377
		$authorizationToken = $this->user['token'];
378
 
378
 
379
		$json = json_encode($donnees);
379
		$json = json_encode($donnees);
380
		$contexte = stream_context_create([
380
		$contexte = stream_context_create([
381
			  'http' => [
381
			  'http' => [
382
				  'method' => $mode,
382
				  'method' => $mode,
383
				  'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
383
				  'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
384
					  "Authorization: $authorizationToken\r\n",
384
					  "Authorization: $authorizationToken\r\n",
385
				  'content' => http_build_query($donnees, null, '&')]
385
				  'content' => http_build_query($donnees, null, '&')]
386
										  ]);
386
										  ]);
387
		$flux = fopen($url, 'r', false, $contexte);
387
		$flux = fopen($url, 'r', false, $contexte);
388
		if (!$flux) {
388
		if (!$flux) {
389
			$e = "L'ouverture de l'url '{$url}' par la méthode HTTP {$mode} a échoué! avec les données {$json} et le token {$authorizationToken}";
389
			$e = "L'ouverture de l'url '{$url}' par la méthode HTTP {$mode} a échoué! avec les données {$json} et le token {$authorizationToken}";
390
			trigger_error($e, E_USER_WARNING);
390
			trigger_error($e, E_USER_WARNING);
391
		} else {
391
		} else {
392
			// Contenu actuel de $url
392
			// Contenu actuel de $url
393
			$contenu = stream_get_contents($flux);
393
			$contenu = stream_get_contents($flux);
394
			
394
			
395
			fclose($flux);
395
			fclose($flux);
396
		}
396
		}
397
		return $contenu;
397
		return $contenu;
398
	}
398
	}
399
	
399
	
400
	public function formaterDate($item, $image){
400
	public function formaterDate($item, $image){
401
		$item['date_photo'] = $image['date_photo'] ?? $image['obs']['date_obs'];
401
		$item['date_photo'] = $image['date_photo'] ?? $image['obs']['date_obs'];
402
		$item['date_redige'] = strftime('%A %d %B %Y', strtotime($item['date_photo']));
402
		$item['date_redige'] = strftime('%A %d %B %Y', strtotime($item['date_photo']));
403
		$item['date'] = date_format(date_create($item['date_photo']),"d/m/Y");
403
		$item['date'] = date_format(date_create($item['date_photo']),"d/m/Y");
404
		$item['lien'] = sprintf($this->eflore_url_tpl, $image['obs']['nom_referentiel'], $image['obs']['nom_sel_nn']);
404
		$item['lien'] = sprintf($this->eflore_url_tpl, $image['obs']['nom_referentiel'], $image['obs']['nom_sel_nn']);
405
		$image['url_photo'] = preg_replace('/,/', "", $image['url_photo']);
405
		$image['url_photo'] = preg_replace('/,/', "", $image['url_photo']);
406
		$item['url_tpl'] = preg_replace('/(O|XS|[SML]|X(?:[23]|)L|CR(?:|X2)S|C(?:|X)S)$/', '%s.jpg',$image['url_photo']);
406
		$item['url_tpl'] = preg_replace('/(O|XS|[SML]|X(?:[23]|)L|CR(?:|X2)S|C(?:|X)S)$/', '%s.jpg',$image['url_photo']);
407
		return $item;
407
		return $item;
408
	}
408
	}
409
	
409
	
410
	public function formaterTitre($item, $image, $auteur){
410
	public function formaterTitre($item, $image, $auteur){
411
		$item['titre'] = $image['obs']['nom_sel'].' [nn'.$image['obs']['nom_sel_nn'].'] par '.$auteur.' le '
411
		$item['titre'] = $image['obs']['nom_sel'].' [nn'.$image['obs']['nom_sel_nn'].'] par '.$auteur.' le '
412
			.date_format(date_create($image['obs']['date_obs']),"d/m/Y").' - '.$image['obs']['localisation'];
412
			.date_format(date_create($image['obs']['date_obs']),"d/m/Y").' - '.$image['obs']['localisation'];
413
		
413
		
414
		$item['id_photo_formate'] = sprintf('%09d', $image['id_photo']);
414
		$item['id_photo_formate'] = sprintf('%09d', $image['id_photo']);
415
		$item['urlProfil'] = sprintf($this->config['photo']['tbProfilUrlTpl'], $image['utilisateur']['id_utilisateur'] );
415
		$item['urlProfil'] = sprintf($this->config['photo']['tbProfilUrlTpl'], $image['utilisateur']['id_utilisateur'] );
416
		return $item;
416
		return $item;
417
	}
417
	}
418
	
418
	
419
	private function getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox, $fromEflore,
419
	private function getImages($vignette, $extra, $limit, $id, $titre, $icone_rss, $utilise_fancybox, $fromEflore,
420
	$tag, $widget, $champ_recherche){
420
	$tag, $widget, $champ_recherche){
421
		if ($fromEflore){
421
		if ($fromEflore){
422
			$this->parametres['tag'] = $tag;
422
			$this->parametres['tag'] = $tag;
423
		}
423
		}
424
		list($colonne, $ligne) = explode(',', $vignette);
424
		list($colonne, $ligne) = explode(',', $vignette);
425
		$extra = (isset($extra) && $extra == 0) ? false : (!$this->config['photo']['extraActif'] ? false : ($colonne == 1 || $ligne == 1 ? false : true));
425
		$extra = (isset($extra) && $extra == 0) ? false : (!$this->config['photo']['extraActif'] ? false : ($colonne == 1 || $ligne == 1 ? false : true));
426
		
426
		
427
		$max_photo = $colonne * $ligne;
427
		$max_photo = $colonne * $ligne;
428
		if ( $extra && 2 == $colonne ) {
428
		if ( $extra && 2 == $colonne ) {
429
			$max_photo = $max_photo - 1;
429
			$max_photo = $max_photo - 1;
430
		} elseif (  $extra && 2 < $colonne ) {
430
		} elseif (  $extra && 2 < $colonne ) {
431
			$max_photo = $max_photo - 3;
431
			$max_photo = $max_photo - 3;
432
		}
432
		}
433
		
433
		
434
		$limit = $limit < $max_photo ? $limit : $max_photo;
434
		$limit = $limit < $max_photo ? $limit : $max_photo;
435
		$this->parametres['limit'] = $limit;
435
		$this->parametres['limit'] = $limit;
436
		$parametresTraites = $this->traiterParametres();
436
		$parametresTraites = $this->traiterParametres();
437
		$this->flux_rss_url .= $parametresTraites;
437
		$this->flux_rss_url .= $parametresTraites;
438
		$url = $this->service_images_url.(!empty($parametresTraites) ? $parametresTraites.'&' : '?');
438
		$url = $this->service_images_url.(!empty($parametresTraites) ? $parametresTraites.'&' : '?');
439
		$json = $this->getDao()->consulter($url);
439
		$json = $this->getDao()->consulter($url);
440
		if ($fromEflore) {
440
		if ($fromEflore) {
441
			unset($this->parametres['tag']);
441
			unset($this->parametres['tag']);
442
		}
442
		}
443
		if (empty($json) || !strpos($json,'images') ) {
443
		if (empty($json) || !strpos($json,'images') ) {
444
			$this->messages[] = "L'URI suivante est invalide : $this->service_images_url.\n".
444
			$this->messages[] = "L'URI suivante est invalide : $this->service_images_url.\n".
445
				"Veuillez vérifier les paramêtres indiqués et la présence d'images associées.";
445
				"Veuillez vérifier les paramêtres indiqués et la présence d'images associées.";
446
			
446
			
447
		} else {
447
		} else {
448
			$tableau = json_decode($json, true);
448
			$tableau = json_decode($json, true);
449
			
449
			
450
			if (empty($tableau['total']) || empty($tableau['images'])) {
450
			if (empty($tableau['total']) || empty($tableau['images'])) {
451
				$this->messages[] = 'Aucune photo ne correspond à vos critères';
451
				$this->messages[] = 'Aucune photo ne correspond à vos critères';
452
			} else {
452
			} else {
453
				
453
				
454
				$parametres_photo_suivante = $parametres_photo_precedente = $this->parametres;
454
				$parametres_photo_suivante = $parametres_photo_precedente = $this->parametres;
-
 
455
				$start = $this->parametres['start'] ? : 0;
455
				$parametres_photo_suivante['start'] = $start + $limit;
456
				$parametres_photo_suivante['start'] = $start + $limit;
456
				$parametres_photo_precedente['start'] = 0 < $start - $limit ? $start - $limit : 0;
457
				$parametres_photo_precedente['start'] = 0 < $start - $limit ? $start - $limit : 0;
457
				
458
				
458
				$widget['donnees']['total'] = $tableau['total'];
459
				$widget['donnees']['total'] = $tableau['total'];
459
				$widget['donnees']['id'] = $id;
460
				$widget['donnees']['id'] = $id;
460
				$widget['donnees']['titre'] = $titre;
461
				$widget['donnees']['titre'] = $titre;
461
				$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
462
				$widget['donnees']['flux_rss_url'] = $this->flux_rss_url;
462
				$widget['donnees']['url_widget'] = $this->url_widget;
463
				$widget['donnees']['url_widget'] = $this->url_widget;
463
				$widget['donnees']['url_widget_photos_suivantes'] = $this->url_widget.'?'.http_build_query($parametres_photo_suivante);
464
				$widget['donnees']['url_widget_photos_suivantes'] = $this->url_widget.'?'.http_build_query($parametres_photo_suivante);
464
				$widget['donnees']['url_widget_photos_precedente'] = $this->url_widget.'?'.http_build_query($parametres_photo_precedente);
465
				$widget['donnees']['url_widget_photos_precedente'] = $this->url_widget.'?'.http_build_query($parametres_photo_precedente);
465
				$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
466
				$widget['donnees']['url_css'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/css/');
466
				$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
467
				$widget['donnees']['url_js'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], 'modules/photo/squelettes/js/');
467
				$widget['donnees']['colonne'] = $colonne;
468
				$widget['donnees']['colonne'] = $colonne;
468
				$widget['donnees']['ligne'] = $ligne;
469
				$widget['donnees']['ligne'] = $ligne;
469
				$widget['donnees']['extra_actif'] = $extra;
470
				$widget['donnees']['extra_actif'] = $extra;
470
				$widget['donnees']['icone_rss'] = $icone_rss;
471
				$widget['donnees']['icone_rss'] = $icone_rss;
471
				$widget['donnees']['champ_recherche'] = $champ_recherche;
472
				$widget['donnees']['champ_recherche'] = $champ_recherche;
472
				$widget['donnees']['start'] = $start;
473
				$widget['donnees']['start'] = $start;
473
				$widget['donnees']['limit'] = $limit;
474
				$widget['donnees']['limit'] = $limit;
474
				$widget['donnees']['utilise_fancybox'] = $utilise_fancybox;
475
				$widget['donnees']['utilise_fancybox'] = $utilise_fancybox;
475
				$widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
476
				$widget['donnees']['prod'] = ($this->config['parametres']['modeServeur'] === 'prod');
476
				$widget['donnees']['filtres'] = $this->parametres;
477
				$widget['donnees']['filtres'] = $this->parametres;
477
				
478
				
478
				$num = 0;
479
				$num = 0;
479
				$galerie_id = md5(http_build_query($_GET));
480
				$galerie_id = md5(http_build_query($_GET));
480
				$widget['donnees']['galerie_id'] = $galerie_id;
481
				$widget['donnees']['galerie_id'] = $galerie_id;
481
				
482
				
482
				session_start();
483
				session_start();
483
				$_SESSION[$galerie_id]['max_photo'] = $max_photo;
484
				$_SESSION[$galerie_id]['max_photo'] = $max_photo;
484
				$_SESSION[$galerie_id]['start'] = $start;
485
				$_SESSION[$galerie_id]['start'] = $start;
485
				
486
				
486
				foreach ($tableau['images'] as $key => $image) {
487
				foreach ($tableau['images'] as $key => $image) {
487
					if ($key == $max_photo) {
488
					if ($key == $max_photo) {
488
						break;
489
						break;
489
					}
490
					}
490
					$auteurTruncatedEmail = $this->tronquerCourriel($image['utilisateur']['mail_utilisateur']);
491
					$auteurTruncatedEmail = $this->tronquerCourriel($image['utilisateur']['mail_utilisateur']);
491
					$auteur = trim($image['utilisateur']['nom_utilisateur']) ? $image['utilisateur']['nom_utilisateur'] : $auteurTruncatedEmail;
492
					$auteur = trim($image['utilisateur']['nom_utilisateur']) ? $image['utilisateur']['nom_utilisateur'] : $auteurTruncatedEmail;
492
					
493
					
493
					$item = $image;
494
					$item = $image;
494
					
495
					
495
					$item = $this->formaterDate($item, $image);
496
					$item = $this->formaterDate($item, $image);
496
				
497
				
497
					$item = $this->formaterTitre($item, $image, $auteur);
498
					$item = $this->formaterTitre($item, $image, $auteur);
498
					
499
					
499
					$item['tag_eflore'] = $tag;
500
					$item['tag_eflore'] = $tag;
500
					
501
					
501
					// Ajout aux items et si première photo à extra
502
					// Ajout aux items et si première photo à extra
502
					if ($key == 0) {
503
					if ($key == 0) {
503
						$widget['donnees']['extra'] =  $item;
504
						$widget['donnees']['extra'] =  $item;
504
					}
505
					}
505
					
506
					
506
					$widget['donnees']['items'][$tag][$num++] =  $item;
507
					$widget['donnees']['items'][$tag][$num++] =  $item;
507
					$url_galerie_popup = sprintf($item['url_tpl'],'O');
508
					$url_galerie_popup = sprintf($item['url_tpl'],'O');
508
					$image_size = getimagesize($url_galerie_popup);
509
					$image_size = getimagesize($url_galerie_popup);
509
					$item['width'] = $image_size[0];
510
					$item['width'] = $image_size[0];
510
					$item['height'] = $image_size[1];
511
					$item['height'] = $image_size[1];
511
					
512
					
512
					// Récupération des votes pictoflora
513
					// Récupération des votes pictoflora
513
					$item['votes'] = $this->getVotes($item);
514
					$item['votes'] = $this->getVotes($item);
514
					
515
					
515
					$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = $item;
516
					$_SESSION[$galerie_id]['infos_images'][$url_galerie_popup] = $item;
516
				}
517
				}
517
				
518
				
518
				$widget['squelette'] = 'photo';
519
				$widget['squelette'] = 'photo';
519
			}
520
			}
520
		}
521
		}
521
		
522
		
522
		return $widget;
523
		return $widget;
523
	}
524
	}
524
}
525
}
525
?>
526
?>