Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1720 Rev 1722
Line 209... Line 209...
209
			// // cette section devrait être vide:
209
			// // cette section devrait être vide:
210
			// // cas particuliers ingérable avec l'architecture actuelle:
210
			// // cas particuliers ingérable avec l'architecture actuelle:
211
			if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
211
			if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
212
				/* blah */
212
				/* blah */
213
			}
213
			}
214
			// ici à cause du passage de $cel ($this), TODO: DB en Singleton !
214
			// ici à cause du passage de $cel ($this->utilisateur)
215
			if($abbrev == 'images') {
215
			if($abbrev == 'images') {
216
				$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur, $cel);
216
				$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
217
			}
217
			}
218
			if($abbrev == 'nom-commun') {
218
			if($abbrev == 'nom-commun') {
219
				$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $cel);
219
				$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
220
			}
220
			}
Line 221... Line 221...
221
				
221
				
222
			if($valeur == null) {
222
			if($valeur == null) {
223
				$valeur = "";
223
				$valeur = "";
Line 231... Line 231...
231
		foreach($colonnes as $abbrev => $colonne) {
231
		foreach($colonnes as $abbrev => $colonne) {
232
			$valeur = null;
232
			$valeur = null;
233
			if(is_null($colonne['dyna'])) continue;
233
			if(is_null($colonne['dyna'])) continue;
234
			// XXX: PHP-5.3
234
			// XXX: PHP-5.3
235
			call_user_func_array($colonne['dyna'],
235
			call_user_func_array($colonne['dyna'],
236
								 array($cel, $obs, &$ligne_formatee));
236
								 array($obs, &$ligne_formatee));
237
		}
237
		}
Line 238... Line 238...
238
 
238
 
239
		return $ligne_formatee;
239
		return $ligne_formatee;
Line 273... Line 273...
273
	*		  Utile, notamment, dans le cadre de l'export
273
	*		  Utile, notamment, dans le cadre de l'export
Line 274... Line 274...
274
 
274
 
275
	* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
275
	* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
276
	*		  Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
276
	*		  Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
277
	*		  La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
277
	*		  La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
278
	*		  La fonction doit prendre comme arguments ($cel, $obs, &$ligne_formatee)
278
	*		  La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
279
	*/
279
	*/
280
	static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE, $preload = NULL, $fonction_dynamique = NULL) {
280
	static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE, $preload = NULL, $fonction_dynamique = NULL) {
281
		return Array('abbrev' => $abbrev,
281
		return Array('abbrev' => $abbrev,
282
					 'nom' => $nom,
282
					 'nom' => $nom,
Line 306... Line 306...
306
		$date_formatee = strftime('%Y/%m/%d', $timestamp);
306
		$date_formatee = strftime('%Y/%m/%d', $timestamp);
307
		if(!$date_formatee) return "00/00/0000";
307
		if(!$date_formatee) return "00/00/0000";
308
		return $date_formatee;
308
		return $date_formatee;
309
	}
309
	}
Line 310... Line 310...
310
	
310
	
311
	static function getImages($obs, $id_utilisateur, $cel) {
311
	static function getImages($obs, $id_utilisateur) {
312
		if(! $id_utilisateur) return NULL;
312
		if(! $id_utilisateur) return NULL;
313
		$rec = $cel->requeter(
313
		$rec = Cel::db()->requeter(
314
			sprintf("SELECT GROUP_CONCAT(nom_original SEPARATOR '%s') FROM cel_images i"
314
			sprintf("SELECT GROUP_CONCAT(nom_original SEPARATOR '%s') FROM cel_images i"
315
					." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
315
					." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
316
					." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
316
					." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
317
					." WHERE ce_utilisateur = %d",
317
					." WHERE ce_utilisateur = %d",
Line 456... Line 456...
456
 
456
 
457
	/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
457
	/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
458
	   Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
458
	   Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
459
	static function getNomCommun_preload($cel, $obsids) {
459
	static function getNomCommun_preload($cel, $obsids) {
460
		if(!$obsids) return;
460
		if(!$obsids) return;
Line 461... Line 461...
461
		if(!self::referenceTableExiste($cel)) return NULL;
461
		if(!self::referenceTableExiste()) return NULL;
462
 
462
 
463
		// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
463
		// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
464
		$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
464
		$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
465
					   " INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
465
					   " INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
466
					   " WHERE c.id_observation IN (%s)",
466
					   " WHERE c.id_observation IN (%s)",
467
					   implode(',', $obsids));
467
					   implode(',', $obsids));
468
		$res = $cel->requeter($req);
468
		$res = Cel::db()->requeter($req);
469
		foreach($res as $v) {
469
		foreach($res as $v) {
470
			self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
470
			self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
471
		}
471
		}
Line 472... Line 472...
472
		return NULL;
472
		return NULL;
473
	}
473
	}
474
 
474
 
475
	static function referenceTableExiste($cel) {
475
	static function referenceTableExiste() {
476
		if(!self::$is_table) {
476
		if(!self::$is_table) {
477
			// une seule fois
477
			// une seule fois
478
			if(! $cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
478
			if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
479
			self::$is_table = TRUE;
479
			self::$is_table = TRUE;
Line 480... Line 480...
480
		}
480
		}
481
		return TRUE;
481
		return TRUE;
482
	}
482
	}
Line 483... Line 483...
483
					   
483
					   
484
	static function getNomCommun_v4($obs, $cel) {
484
	static function getNomCommun_v4($obs) {
485
		if(! $obs['nt']) return NULL;
485
		if(! $obs['nt']) return NULL;
Line 486... Line 486...
486
		if(! self::referenceTableExiste($cel)) return NULL;
486
		if(! self::referenceTableExiste()) return NULL;
487
 
487
 
488
		$langue = 'fra';
488
		$langue = 'fra';
Line 489... Line 489...
489
		list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
489
		list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
490
		$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
490
		$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
491
 
491
 
492
		if(isset(self::$cache['getNomCommun'][$cache_id])) return self::$cache['getNomCommun'][$cache_id];
492
		if(isset(self::$cache['getNomCommun'][$cache_id])) return self::$cache['getNomCommun'][$cache_id];
493
		// XXX: problème de valeurs NULL ?
493
		// XXX: problème de valeurs NULL ?
494
		if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
494
		if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
Line 495... Line 495...
495
 
495
 
496
		// pas de cache:
496
		// pas de cache:
Line 497... Line 497...
497
		$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
497
		$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
Line 511... Line 511...
511
 
511
 
512
	/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
512
	/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
513
	   Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
513
	   Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
514
	static function baseflor_preload($cel, $obsids) {
514
	static function baseflor_preload($cel, $obsids) {
515
		if(!$obsids) return;
515
		if(!$obsids) return;
Line 516... Line 516...
516
		if(!self::referenceTableExiste($cel)) return NULL;
516
		if(!self::referenceTableExiste()) return NULL;
517
 
517
 
518
		$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
518
		$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
519
					   " INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
519
					   " INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
520
					   " WHERE c.id_observation IN (%s)",
520
					   " WHERE c.id_observation IN (%s)",
521
					   //" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
521
					   //" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
522
					   implode(',', array_keys(self::$baseflor_col)),
522
					   implode(',', array_keys(self::$baseflor_col)),
523
					   implode(',', $obsids));
523
					   implode(',', $obsids));
Line 524... Line 524...
524
		$res = $cel->requeter($req);
524
		$res = Cel::db()->requeter($req);
525
		if(!$res) return NULL;
525
		if(!$res) return NULL;
526
 
526
 
Line 533... Line 533...
533
 
533
 
534
		return NULL;
534
		return NULL;
Line 535... Line 535...
535
	}
535
	}
536
	
536
	
537
 
537
 
538
	static function baseflor_ligne($cel, $obs, &$ligne) {
538
	static function baseflor_ligne($obs, &$ligne) {
539
		if(! $obs['nom_ret_nn']) {
539
		if(! $obs['nom_ret_nn']) {
Line 540... Line 540...
540
			$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
540
			$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
541
			return;
541
			return;
542
		}
542
		}
543
 
543
 
Line 544... Line 544...
544
		if(! self::referenceTableExiste($cel)) {
544
		if(! self::referenceTableExiste()) {
Line 555... Line 555...
555
			$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
555
			$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
556
			return;
556
			return;
557
		}
557
		}
Line 558... Line 558...
558
 
558
 
559
		// pas de cache:
559
		// pas de cache:
560
		$data = $cel->executerRequete(sprintf("SELECT %s FROM cel_references " .
560
		$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " .
561
											 "WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
561
											 "WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
562
											 implode(', ', array_keys(self::$baseflor_col)),
562
											 implode(', ', array_keys(self::$baseflor_col)),
563
											 $referentiel,
563
											 $referentiel,
564
											 $obs['nom_ret_nn']),
564
											 $obs['nom_ret_nn']),
Line 601... Line 601...
601
			$champs_etendus_fmt[$champ->cle] = $champ->valeur;
601
			$champs_etendus_fmt[$champ->cle] = $champ->valeur;
602
		}
602
		}
603
		return $champs_etendus_fmt;
603
		return $champs_etendus_fmt;
604
	}
604
	}
Line 605... Line 605...
605
 
605
 
606
	static function champsEtendus_ligne($cel, $obs, &$ligne) {
606
	static function champsEtendus_ligne($obs, &$ligne) {
607
		// si header n'est pas défini, aucune observation ne possède de champ étendu
607
		// si header n'est pas défini, aucune observation ne possède de champ étendu
608
		// et nous n'ajoutons ni colonnes, ni valeurs.
608
		// et nous n'ajoutons ni colonnes, ni valeurs.
609
		if(! isset(self::$cache['champsEtendus']['header'])) return;
609
		if(! isset(self::$cache['champsEtendus']['header'])) return;
610
		var_dump(self::$cache['champsEtendus']['header']);die;
610
		var_dump(self::$cache['champsEtendus']['header']);die;