Subversion Repositories eFlore/Applications.cel

Rev

Rev 2459 | Rev 2538 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2459 Rev 2461
Line 1... Line 1...
1
<?php
1
<?php
2
 
-
 
-
 
2
// declare(encoding='UTF-8');
3
/**
3
/**
-
 
4
 * Classe métier de mise en forme des groupes de colonnes pour les exports.
-
 
5
 *
-
 
6
 * @internal   Mininum PHP version : 5.2
4
* @category  PHP
7
 * @category   CEL
5
* @package   jrest
8
 * @package    Services
-
 
9
 * @subpackage Bibliothèques
-
 
10
 * @version    0.1
-
 
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
6
* @author    Raphaël Droz <raphael@tela-botania.org>
12
 * @author     Raphaël Droz <raphael@tela-botania.org>
7
* @copyright 2013 Tela-Botanica
13
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
8
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
14
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
9
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
15
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
16
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
17
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
10
*/
18
 */
11
define('SEPARATEUR_IMAGES', " / ");
19
define('SEPARATEUR_IMAGES', ' / ');
12
define('PREFIX_CHAMPS_ETENDUS', "ext:");
20
define('PREFIX_CHAMPS_ETENDUS', 'ext:');
13
// utilisé par formaterUrlUser() [ nécessaire pour le widget d'export)
21
// utilisé par formaterUrlUser() [ nécessaire pour le widget d'export)
14
define('USER_BASEURL', 'http://www.tela-botanica.org/profil:%d');
22
define('USER_BASEURL', 'http://www.tela-botanica.org/profil:%d');
Line 15... Line 23...
15
 
23
 
Line 16... Line 24...
16
Class FormateurGroupeColonne {
24
class FormateurGroupeColonne {
17
 
25
 
Line 18... Line 26...
18
	// cache pour les données des fonctions
26
	// cache pour les données des fonctions
Line 31... Line 39...
31
	);
39
	);
Line 32... Line 40...
32
 
40
 
33
	// les données baseflor à récupérer: colonnes présentes dans cel_references
41
	// les données baseflor à récupérer: colonnes présentes dans cel_references
34
	// et intitulés associés
42
	// et intitulés associés
35
	static $baseflor_col = array(
43
	static $baseflor_col = array(
36
		"ve_lumiere" => "Lumière",
44
		've_lumiere' => 'Lumière',
37
		"ve_temperature" => "Température",
45
		've_temperature' => 'Température',
38
		"ve_continentalite" => "Continentalité",
46
		've_continentalite' => 'Continentalité',
39
		"ve_humidite_atmos" => "Humidité Atmosphérique",
47
		've_humidite_atmos' => 'Humidité Atmosphérique',
40
		"ve_humidite_edaph" => "Humidité",
48
		've_humidite_edaph' => 'Humidité',
41
		"ve_reaction_sol" => "Réaction (pH)",
49
		've_reaction_sol' => 'Réaction (pH)',
42
		"ve_nutriments_sol" => "Nutriments",
50
		've_nutriments_sol' => 'Nutriments',
43
		"ve_salinite" => "Salinité",
51
		've_salinite' => 'Salinité',
44
		"ve_texture_sol" => "Texture" ,
52
		've_texture_sol' => 'Texture' ,
45
		"ve_mat_org_sol" => "Matière Organique",
53
		've_mat_org_sol' => 'Matière Organique',
46
		"catminat_code" => "Code Catminat",
54
		'catminat_code' => 'Code Catminat',
47
		"syntaxon" => "Syntaxon",
55
		'syntaxon' => 'Syntaxon',
Line 48... Line 56...
48
	);
56
	);
49
 
57
 
50
	// TODO: dirty, ordre des champs étendus... souhaité pour florilèges:
58
	// TODO: dirty, ordre des champs étendus... souhaité pour florilèges:
51
	static $ordre_champ_etendus_Florileges = array(
59
	static $ordre_champ_etendus_Florileges = array(
52
		"personneStructure",
60
		'personneStructure',
53
		"personneService",
61
		'personneService',
54
		"personneFonction",
62
		'personneFonction',
55
		"adresse",
63
		'adresse',
56
		"latitudeDebutRue",
64
		'latitudeDebutRue',
57
		"longitudeDebutRue",
65
		'longitudeDebutRue',
58
		"latitudeFinRue",
66
		'latitudeFinRue',
59
		"longitudeFinRue",
67
		'longitudeFinRue',
60
		"typoUrbaine",
68
		'typoUrbaine',
61
		"revetementSol",
69
		'revetementSol',
62
		"presenceZoneVegetalise",
70
		'presenceZoneVegetalise',
63
		"hauteurBatimentAvoisinant",
71
		'hauteurBatimentAvoisinant',
64
		"intensiteGestion",
72
		'intensiteGestion',
65
		"periodiciteTraitementPhyto",
73
		'periodiciteTraitementPhyto',
66
		"dateArretTraitementPhyto",
74
		'dateArretTraitementPhyto',
67
		"itineraireGestion",
75
		'itineraireGestion',
68
		"dateDerniereIntervention",
76
		'dateDerniereIntervention',
69
		"hauteurPlante",
77
		'hauteurPlante',
70
		"resistanceTraitementPhyto",
78
		'resistanceTraitementPhyto',
71
		"vitesseCroissance",
79
		'vitesseCroissance',
72
		"perceptionTechnicien",
80
		'perceptionTechnicien',
Line 73... Line 81...
73
		"perceptionRiverainMauvaise",
81
		'perceptionRiverainMauvaise',
74
	);
82
	);
75
 
83
 
76
	static function colGroupsValidation($groupe_de_champs = 'standard,avance') {
84
	static function colGroupsValidation($groupe_de_champs = 'standard,avance') {
77
		if(! $groupe_de_champs) return FALSE;
-
 
78
		if(is_string($groupe_de_champs)) {
85
		if (! $groupe_de_champs) return FALSE;
79
			$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
86
		if (is_string($groupe_de_champs)) {
-
 
87
			$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
-
 
88
		} elseif(is_array($groupe_de_champs)) {
80
		}
89
			$groupe_de_champs = array_flip($groupe_de_champs);
-
 
90
		} else {
81
		elseif(is_array($groupe_de_champs)) {
91
			return null;
82
			$groupe_de_champs = array_flip($groupe_de_champs);
92
		}
83
		}
93
		$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), $groupe_de_champs);
84
		else {
-
 
85
			return NULL;
-
 
86
		}
-
 
87
		$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups),
94
		if (!$groupe_de_champs) {
88
												$groupe_de_champs);
95
			return false;
89
		if(!$groupe_de_champs) return FALSE;
96
		}
90
		// toujours ajouter standard
97
		// toujours ajouter standard
Line 91... Line 98...
91
		$groupe_de_champs['standard'] = TRUE;
98
		$groupe_de_champs['standard'] = true;
92
		return implode(',', array_keys($groupe_de_champs));
99
		return implode(',', array_keys($groupe_de_champs));
Line 102... Line 109...
102
	* 		valeur: des données relative à cette colonne, cf GenColInfo
109
	* 		valeur: des données relative à cette colonne, cf GenColInfo
103
	*
110
	*
104
	* Si la colonne n'utilise pas de fonction de récupération particulière
111
	* Si la colonne n'utilise pas de fonction de récupération particulière
105
	* (ie: si le champ exportés [ou importé] correspond exactement au champ dans la base de donnée)
112
	* (ie: si le champ exportés [ou importé] correspond exactement au champ dans la base de donnée)
106
	* Alors 'abbrev' doit avoir la même valeur que le nom de la colonne dans la table mysql `cel_obs`.
113
	* Alors 'abbrev' doit avoir la même valeur que le nom de la colonne dans la table mysql `cel_obs`.
107
	*
-
 
108
	*/
114
	*/
109
	static function nomEnsembleVersListeColonnes($groupe_de_champs = 'standard') {
115
	static function nomEnsembleVersListeColonnes($groupe_de_champs = 'standard') {
110
		if(! $groupe_de_champs) $groupe_de_champs = 'standard';
-
 
111
		if(is_string($groupe_de_champs)) {
116
		if (! $groupe_de_champs) {
112
			$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
117
			$groupe_de_champs = 'standard';
113
		}
118
		}
-
 
119
		if (is_string($groupe_de_champs)) {
-
 
120
			$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
114
		elseif(is_array($groupe_de_champs)) {
121
		} elseif(is_array($groupe_de_champs)) {
115
			$groupe_de_champs = array_flip($groupe_de_champs);
122
			$groupe_de_champs = array_flip($groupe_de_champs);
-
 
123
		} else {
-
 
124
			return null;
116
		}
125
		}
-
 
126
		$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), $groupe_de_champs);
117
		else {
127
		if (!$groupe_de_champs) {
118
			return NULL;
128
			return null;
119
		}
129
		}
120
		$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups),
-
 
121
												$groupe_de_champs);
-
 
122
		if(!$groupe_de_champs) return NULL;
-
 
123
 
-
 
124
		$colonnes = Array();
-
 
Line -... Line 130...
-
 
130
 
125
 
131
		$colonnes = array();
126
		if(isset($groupe_de_champs['standard'])) {
132
		if (isset($groupe_de_champs['standard'])) {
127
			$colonnes += Array(
133
			$colonnes += Array(
128
				'nom_sel'			=> self::GenColInfo(Array('abbrev' => 'nom_sel',
134
				'nom_sel'			=> self::GenColInfo(Array('abbrev' => 'nom_sel',
129
															  'nom' => 'Espèce')),
135
															  'nom' => 'Espèce')),
130
				'nom_sel_nn'		=> self::GenColInfo(Array('abbrev' => 'nom_sel_nn',
136
				'nom_sel_nn'		=> self::GenColInfo(Array('abbrev' => 'nom_sel_nn',
Line 247... Line 253...
247
				   'nom-commun'			=> self::GenColInfo(Array('abbrev' => 'nom-commun',
253
				   'nom-commun'			=> self::GenColInfo(Array('abbrev' => 'nom-commun',
248
				   'nom' => 'Nom Commun',
254
				   'nom' => 'Nom Commun',
249
				   'extra' => 1,
255
				   'extra' => 1,
250
				   'fonction_data' => 'getNomCommun_v3'),
256
				   'fonction_data' => 'getNomCommun_v3'),
251
				   'importable' => FALSE), */
257
				   'importable' => FALSE), */
252
				'nom-commun'		=> self::GenColInfo(Array('abbrev' => 'nom-commun',
258
				'nom-commun' => self::GenColInfo(array(
-
 
259
					'abbrev' => 'nom-commun',
253
															  'nom' => 'Nom Commun',
260
					'nom' => 'Nom Commun',
254
															  'extra' => 1,
261
					'extra' => 1,
255
															  'fonction_data' => NULL /* cas particu 'getNomCommun_v4' */,
262
					'fonction_data' => null /* cas particu 'getNomCommun_v4' */,
256
															  'preload' => array(__CLASS__, 'getNomCommun_preload')))
263
					'preload' => array(__CLASS__, 'getNomCommun_preload')))
257
			);
264
			);
258
		}
265
		}
Line 259... Line 266...
259
 
266
 
260
		if(isset($groupe_de_champs['baseflor'])) {
267
		if(isset($groupe_de_champs['baseflor'])) {
261
			$colonnes += array(
268
			$colonnes += array(
262
				// champ dynamique
269
				// champ dynamique
-
 
270
				'baseflor' => self::GenColInfo(array(
263
				'baseflor'			=> self::GenColInfo(Array('abbrev' => 'baseflor',
271
					'abbrev' => 'baseflor',
264
															  'nom' => '',
272
					'nom' => '',
265
															  'extra' => 1,
273
					'extra' => 1,
266
															  'importable' => FALSE,
274
					'importable' => false,
267
															  'preload' => array(__CLASS__, 'baseflor_preload'),
275
					'preload' => array(__CLASS__, 'baseflor_preload'),
268
															  'dyna' => array(__CLASS__, 'baseflor_ligne'))),
276
					'dyna' => array(__CLASS__, 'baseflor_ligne'))),
269
			);
277
			);
Line 270... Line 278...
270
		}
278
		}
271
 
279
 
272
		if(isset($groupe_de_champs['etendu'])) {
280
		if (isset($groupe_de_champs['etendu'])) {
273
			$colonnes += array(
281
			$colonnes += array(
-
 
282
				// champ dynamique
274
				// champ dynamique
283
				'etendu' => self::GenColInfo(array(
275
				'etendu'			=> self::GenColInfo(Array('abbrev' => 'etendu',
284
					'abbrev' => 'etendu',
276
															  'nom' => '',
285
					'nom' => '',
277
															  'extra' => 1,
286
					'extra' => 1,
278
															  'importable' => FALSE,
287
					'importable' => false,
279
															  'preload' => array(__CLASS__, 'champsEtendus_preload'),
288
					'preload' => array(__CLASS__, 'champsEtendus_preload'),
280
															  'dyna' => array(__CLASS__, 'champsEtendus_ligne'))),
289
					'dyna' => array(__CLASS__, 'champsEtendus_ligne'))),
Line 281... Line 290...
281
			);
290
			);
282
		}
291
		}
283
 
292
 
-
 
293
		if (isset($groupe_de_champs['auteur'])) {
284
		if(isset($groupe_de_champs['auteur'])) {
294
			$colonnes += array(
285
			$colonnes += array(
295
				'observateur' => self::GenColInfo(array(
286
				'observateur'	=> self::GenColInfo(Array('abbrev' => 'observateur',
296
					'abbrev' => 'observateur',
287
														  'nom' => 'Observateur',
297
					'nom' => 'Observateur',
288
														  'extra' => 1,
298
					'extra' => 1,
289
														  'fonction_data' => 'formaterUrlUser',
299
					'fonction_data' => 'formaterUrlUser',
290
														  'importable' => FALSE)),
-
 
291
			);
300
					'importable' => false)),
292
		}
301
			);
Line 293... Line 302...
293
 
302
		}
294
		return $colonnes;
303
		return $colonnes;
295
	}
304
	}
296
 
305
 
-
 
306
	static function preload($colonnes, $cel, $ids) {
-
 
307
		$result = array();
297
	static function preload($colonnes, $cel, $ids) {
308
		foreach ($colonnes as $abbrev => $colonne) {
298
		$result = array();
309
			if (!$colonne['preload']) {
299
		foreach($colonnes as $abbrev => $colonne) {
310
				continue;
300
			if(!$colonne['preload']) continue;
311
			}
Line 314... Line 325...
314
 
325
 
315
	public static function getLigneObservation(&$obs, &$colonnes, $cel = false) {
326
	public static function getLigneObservation(&$obs, &$colonnes, $cel = false) {
316
		$ligne_formatee = array();
327
		$ligne_formatee = array();
317
		foreach($colonnes as $abbrev => $colonne) {
328
		foreach($colonnes as $abbrev => $colonne) {
318
			$valeur = null;
329
			$valeur = null;
-
 
330
			if ($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) {
-
 
331
				continue;
Line 319... Line 332...
319
			if($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) continue;
332
			}
320
 
333
 
-
 
334
			// valeur directe depuis cel_obs ?
-
 
335
			if (isset($obs[$abbrev])) {
Line 321... Line 336...
321
			// valeur directe depuis cel_obs ?
336
				$valeur = $obs[$abbrev];
322
			if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
337
			}
323
 
338
 
324
			// pré-processeur des champs
339
			// pré-processeur des champs
325
			if(function_exists($colonne['fonction'])) {
340
			if (function_exists($colonne['fonction'])) {
326
				$valeur = $colonne['fonction']($valeur);
341
				$valeur = $colonne['fonction']($valeur);
327
			} elseif(method_exists(__CLASS__, $colonne['fonction'])) {
342
			} else if(method_exists(__CLASS__, $colonne['fonction'])) {
328
				$valeur = call_user_func(array(__CLASS__, $colonne['fonction']), $valeur);
-
 
329
			} elseif($colonne['fonction']) {
-
 
330
				die("méthode {$colonne['fonction']} introuvable");
343
				$valeur = call_user_func(array(__CLASS__, $colonne['fonction']), $valeur);
331
			}
344
			} else if($colonne['fonction']) {
332
			// fonction pour obtenir des champs (étendus)
-
 
333
			elseif(function_exists($colonne['fonction_data'])) {
345
				die("méthode {$colonne['fonction']} introuvable");
334
				$valeur = $colonne['fonction_data']($obs);
346
			} else if(function_exists($colonne['fonction_data'])) {// fonction pour obtenir des champs (étendus)
335
			}
347
				$valeur = $colonne['fonction_data']($obs);
Line 336... Line 348...
336
			elseif(method_exists(__CLASS__, $colonne['fonction_data'])) {
348
			} else if(method_exists(__CLASS__, $colonne['fonction_data'])) {
337
				$valeur = call_user_func(array(__CLASS__, $colonne['fonction_data']), $obs);
349
				$valeur = call_user_func(array(__CLASS__, $colonne['fonction_data']), $obs);
338
			}
350
			}
339
 
351
 
340
			// // cette section devrait être vide:
352
			// // cette section devrait être vide:
341
			// // cas particuliers ingérable avec l'architecture actuelle:
353
			// // cas particuliers ingérable avec l'architecture actuelle:
342
			if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
354
			if (false && $abbrev == 'date_observation' && $valeur == '0000-00-00') {
343
				/* blah */
355
				/* blah */
344
			}
356
			}
345
			// ici à cause du passage de $cel ($this->utilisateur)
357
			// ici à cause du passage de $cel ($this->utilisateur)
346
			if($abbrev == 'images') {
358
			if ($abbrev == 'images') {
347
				$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
359
				$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
Line 348... Line 360...
348
			}
360
			}
349
			if($abbrev == 'nom-commun') {
361
			if ($abbrev == 'nom-commun') {
350
				$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
362
				$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
Line 351... Line 363...
351
			}
363
			}
352
 
364
 
353
			if($valeur == null) {
365
			if ($valeur == null) {
Line 354... Line 366...
354
				$valeur = "";
366
				$valeur = '';
355
			}
367
			}
356
 
368
 
357
			// // fin de section "cas particuliers"
369
			// fin de section "cas particuliers"
358
			$ligne_formatee[] = $valeur;
370
			$ligne_formatee[] = $valeur;
-
 
371
		}
359
		}
372
 
360
 
-
 
361
		// uniquement les champs dynamiques
373
		// uniquement les champs dynamiques
362
		foreach($colonnes as $abbrev => $colonne) {
-
 
363
			$valeur = null;
374
		foreach($colonnes as $abbrev => $colonne) {
364
			if(is_null($colonne['dyna'])) continue;
375
			$valeur = null;
Line 365... Line 376...
365
			// XXX: PHP-5.3
376
			if (is_null($colonne['dyna'])) {
366
			call_user_func_array($colonne['dyna'],
377
				continue;
Line 407... Line 418...
407
	*		  Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
418
	*		  Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
408
	*		  La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
419
	*		  La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
409
	*		  La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
420
	*		  La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
410
	*/
421
	*/
411
	static function GenColInfo($args) {
422
	static function GenColInfo($args) {
412
		$default = Array('abbrev' => NULL,
423
		$default = array(
-
 
424
			'abbrev' => null,
413
						 'nom' => NULL,
425
			'nom' => null,
414
						 'extra' => 0,
426
			'extra' => 0,
415
						 'fonction' => NULL,
427
			'fonction' => null,
416
						 'fonction_data' => NULL,
428
			'fonction_data' => null,
417
						 'importable' => TRUE,
429
			'importable' => true,
418
						 'preload' => NULL,
430
			'preload' => null,
419
						 'dyna' => NULL);
431
			'dyna' => null);
420
		$ret = array_intersect_key($args, $default);
432
		$ret = array_intersect_key($args, $default);
421
		return array_merge($default, $ret);
433
		return array_merge($default, $ret);
422
	}
434
	}
Line 423... Line 435...
423
 
435
 
424
	static function formaterDate($date_heure_mysql) {
436
	static function formaterDate($date_heure_mysql) {
425
		//return "";
437
		//return "";
-
 
438
		if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") {
-
 
439
			return null;
426
		if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") return NULL;
440
		}
427
		// malheureusement pas disponible en php < 5.3
441
		// malheureusement pas disponible en php < 5.3
428
		//$date_format = DateTime::createFromFormat("Y-m-d H:i:s", $date_heure_mysql);
442
		//$date_format = DateTime::createFromFormat("Y-m-d H:i:s", $date_heure_mysql);
429
		$val = explode(' ', $date_heure_mysql);
443
		$val = explode(' ', $date_heure_mysql);
430
		$date = explode('-', $val[0]);
444
		$date = explode('-', $val[0]);
431
		$heure = explode(':', $val[1]);
445
		$heure = explode(':', $val[1]);
432
		$timestamp = mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
446
		$timestamp = mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]);
-
 
447
		if (!$timestamp) {
-
 
448
			return null;
433
		if(!$timestamp) return NULL;
449
		}
434
		// TODO: les widgets ne font malheureusement pas usage de l'heure dans le CEL
450
		// TODO: les widgets ne font malheureusement pas usage de l'heure dans le CEL
435
		// TODO: si modification, ne pas oublier de modifier le format d'import correspondant
451
		// TODO: si modification, ne pas oublier de modifier le format d'import correspondant
436
		//	dans ImportXLS, traiterDateObs() (actuellement: "Y/m/d" car utilisation de strtotime() qui ne lit pas tout)
452
		//	dans ImportXLS, traiterDateObs() (actuellement: "Y/m/d" car utilisation de strtotime() qui ne lit pas tout)
437
		// $date_formatee = strftime('%d/%m/%Y', $timestamp);
453
		// $date_formatee = strftime('%d/%m/%Y', $timestamp);
438
		$date_formatee = strftime('%Y/%m/%d', $timestamp);
454
		$date_formatee = strftime('%Y/%m/%d', $timestamp);
-
 
455
		if (!$date_formatee) {
-
 
456
			return '00/00/0000';
439
		if(!$date_formatee) return "00/00/0000";
457
		}
440
		return $date_formatee;
458
		return $date_formatee;
Line 441... Line 459...
441
	}
459
	}
442
 
460
 
443
	static function formaterUrlUser($obs) {
461
	static function formaterUrlUser($obs) {
444
		$is_id = is_numeric($obs['ce_utilisateur']);
462
		$is_id = is_numeric($obs['ce_utilisateur']);
445
		return sprintf("%s %s <%s>%s",
463
		return sprintf("%s %s <%s>%s",
446
					   $obs['prenom_utilisateur'],
464
			$obs['prenom_utilisateur'],
447
					   $obs['nom_utilisateur'],
465
			$obs['nom_utilisateur'],
448
					   preg_replace(';@.*;', '@...', $obs['courriel_utilisateur']),
466
			preg_replace(';@.*;', '@...', $obs['courriel_utilisateur']),
Line 449... Line 467...
449
					   $is_id ? sprintf(' (' . USER_BASEURL . ')', $obs['ce_utilisateur']) : '');
467
			$is_id ? sprintf(' (' . USER_BASEURL . ')', $obs['ce_utilisateur']) : '');
450
	}
468
	}
451
 
469
 
452
	static function getImages_preload($cel, $obsids) {
470
	static function getImages_preload($cel, $obsids) {
453
		if(!$obsids) return;
471
		if (!$obsids) return;
454
		$rec = Cel::db()->requeter(
472
		$rec = Cel::db()->requeter(
455
			sprintf("SELECT o.id_observation, GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i " .
473
			sprintf("SELECT o.id_observation, GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i " .
456
					"FROM cel_images i LEFT JOIN cel_obs o ON (i.ce_observation = o.id_observation) " .
474
					"FROM cel_images i LEFT JOIN cel_obs o ON (i.ce_observation = o.id_observation) " .
457
					"WHERE o.ce_utilisateur = %d AND o.id_observation IN (%s) " .
475
					"WHERE o.ce_utilisateur = %d AND o.id_observation IN (%s) " .
458
					"GROUP BY id_observation",
476
					"GROUP BY id_observation",
459
					SEPARATEUR_IMAGES,
477
					SEPARATEUR_IMAGES,
460
					$cel->id_utilisateur,
478
					$cel->id_utilisateur,
461
					implode(',', $obsids)));
479
					implode(',', $obsids)));
462
		foreach($rec as $v) {
480
		foreach ($rec as $v) {
463
			self::$cache['getImages'][$v['id_observation']] = $v['i'];
481
			self::$cache['getImages'][$v['id_observation']] = $v['i'];
Line 464... Line 482...
464
		}
482
		}
465
		return NULL;
483
		return null;
466
	}
484
	}
Line 502... Line 520...
502
 
520
 
503
	public static function estUnCodeInseeDepartement($code_a_tester) {
521
	public static function estUnCodeInseeDepartement($code_a_tester) {
504
		return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester);
522
		return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester);
Line 505... Line -...
505
	}
-
 
506
 
523
	}
507
 
524
 
508
	// TODO: référentiel ne devrait pas être généré au moment d'un Config::get,
525
	// TODO: référentiel ne devrait pas être généré au moment d'un Config::get,
509
	// comme dans Config::get('nomsVernaRechercheLimiteeTpl')
526
	// comme dans Config::get('nomsVernaRechercheLimiteeTpl')
510
	// Par exemple, la variable pour "nva" ?
527
	// Par exemple, la variable pour "nva" ?
Line 851... Line 868...
851
				unset($array[$key]);
868
				unset($array[$key]);
852
			}
869
			}
853
		}
870
		}
854
		return $ordered + $array;
871
		return $ordered + $array;
855
	}
872
	}
856
 
-
 
857
}
873
}
858
874