Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1759 Rev 1765
Line 327... Line 327...
327
			// // cette section devrait être vide:
327
			// // cette section devrait être vide:
328
			// // cas particuliers ingérable avec l'architecture actuelle:
328
			// // cas particuliers ingérable avec l'architecture actuelle:
329
			if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
329
			if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
330
				/* blah */
330
				/* blah */
331
			}
331
			}
332
			// ici à cause du passage de $cel ($this), TODO: DB en Singleton !
332
			// ici à cause du passage de $cel ($this->utilisateur)
333
			if($abbrev == 'images') {
333
			if($abbrev == 'images') {
334
				$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur, $cel);
334
				$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
335
			}
335
			}
336
			if($abbrev == 'nom-commun') {
336
			if($abbrev == 'nom-commun') {
337
				$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $cel);
337
				$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
338
			}
338
			}
Line 339... Line 339...
339
				
339
				
340
			if($valeur == null) {
340
			if($valeur == null) {
341
				$valeur = "";
341
				$valeur = "";
Line 349... Line 349...
349
		foreach($colonnes as $abbrev => $colonne) {
349
		foreach($colonnes as $abbrev => $colonne) {
350
			$valeur = null;
350
			$valeur = null;
351
			if(is_null($colonne['dyna'])) continue;
351
			if(is_null($colonne['dyna'])) continue;
352
			// XXX: PHP-5.3
352
			// XXX: PHP-5.3
353
			call_user_func_array($colonne['dyna'],
353
			call_user_func_array($colonne['dyna'],
354
								 array($cel, $obs, &$ligne_formatee));
354
								 array($obs, &$ligne_formatee));
355
		}
355
		}
Line 356... Line 356...
356
 
356
 
357
		return $ligne_formatee;
357
		return $ligne_formatee;
Line 391... Line 391...
391
	*		  Utile, notamment, dans le cadre de l'export
391
	*		  Utile, notamment, dans le cadre de l'export
Line 392... Line 392...
392
 
392
 
393
	* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
393
	* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
394
	*		  Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
394
	*		  Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
395
	*		  La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
395
	*		  La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
396
	*		  La fonction doit prendre comme arguments ($cel, $obs, &$ligne_formatee)
396
	*		  La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
397
	*/
397
	*/
398
	static function GenColInfo($args) {
398
	static function GenColInfo($args) {
399
		$default = Array('abbrev' => NULL,
399
		$default = Array('abbrev' => NULL,
400
						 'nom' => NULL,
400
						 'nom' => NULL,
Line 441... Line 441...
441
			self::$cache['getImages'][$v['id_observation']] = $v['i'];
441
			self::$cache['getImages'][$v['id_observation']] = $v['i'];
442
		}
442
		}
443
		return NULL;
443
		return NULL;
444
	}
444
	}
Line 445... Line 445...
445
 
445
 
446
	static function getImages($obs, $id_utilisateur, $cel) {
446
	static function getImages($obs, $id_utilisateur) {
447
		if(! $id_utilisateur) return NULL;
447
		if(! $id_utilisateur) return NULL;
448
		if(isset(self::$cache['getImages'][$obs['id_observation']]))
448
		if(isset(self::$cache['getImages'][$obs['id_observation']]))
Line 449... Line 449...
449
			return self::$cache['getImages'][$obs['id_observation']];
449
			return self::$cache['getImages'][$obs['id_observation']];
450
 
450
 
451
		$rec = $cel->requeter(
451
		$rec = Cel::db()->requeter(
452
			sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i FROM cel_images i"
452
			sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i FROM cel_images i"
453
					." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
453
					." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
454
					." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
454
					." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
Line 603... Line 603...
603
 
603
 
604
	/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
604
	/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
605
	   Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
605
	   Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
606
	static function getNomCommun_preload($cel, $obsids) {
606
	static function getNomCommun_preload($cel, $obsids) {
607
		if(!$obsids) return;
607
		if(!$obsids) return;
Line 608... Line 608...
608
		if(!self::referenceTableExiste($cel)) return NULL;
608
		if(!self::referenceTableExiste()) return NULL;
609
 
609
 
610
		// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
610
		// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
611
		$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
611
		$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
612
					   " INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
612
					   " INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
613
					   " WHERE c.id_observation IN (%s)",
613
					   " WHERE c.id_observation IN (%s)",
614
					   implode(',', $obsids));
614
					   implode(',', $obsids));
615
		$res = $cel->requeter($req);
615
		$res = Cel::db()->requeter($req);
616
		foreach($res as $v) {
616
		foreach($res as $v) {
617
			self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
617
			self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
618
		}
618
		}
Line 619... Line 619...
619
		return NULL;
619
		return NULL;
620
	}
620
	}
621
 
621
 
622
	static function referenceTableExiste($cel) {
622
	static function referenceTableExiste() {
623
		if(!self::$is_table) {
623
		if(!self::$is_table) {
624
			// une seule fois
624
			// une seule fois
625
			if(! $cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
625
			if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
626
			self::$is_table = TRUE;
626
			self::$is_table = TRUE;
Line 627... Line 627...
627
		}
627
		}
628
		return TRUE;
628
		return TRUE;
629
	}
629
	}
Line 630... Line 630...
630
					   
630
					   
631
	static function getNomCommun_v4($obs, $cel) {
631
	static function getNomCommun_v4($obs) {
632
		if(! $obs['nt']) return NULL;
632
		if(! $obs['nt']) return NULL;
Line 642... Line 642...
642
			// XXX: problème de valeurs NULL ?
642
			// XXX: problème de valeurs NULL ?
643
			if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
643
			if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
644
		}
644
		}
Line 645... Line 645...
645
 
645
 
646
		// pas de cache:
646
		// pas de cache:
647
		$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
647
		$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
648
											 "WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
648
												  "WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
649
											 $referentiel,
649
												  $referentiel,
650
											 $obs['nt']),
650
												  $obs['nt']),
Line 651... Line 651...
651
									 Cel::SQL_RETOUR_LIGNE);
651
										  Cel::SQL_RETOUR_LIGNE);
652
 
652
 
Line 653... Line 653...
653
		if(! $nom) return NULL;
653
		if(! $nom) return NULL;
Line 661... Line 661...
661
 
661
 
662
	/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
662
	/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
663
	   Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
663
	   Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
664
	static function baseflor_preload($cel, $obsids) {
664
	static function baseflor_preload($cel, $obsids) {
665
		if(!$obsids) return;
665
		if(!$obsids) return;
Line 666... Line 666...
666
		if(!self::referenceTableExiste($cel)) return NULL;
666
		if(!self::referenceTableExiste()) return NULL;
667
 
667
 
668
		$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
668
		$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
669
					   " INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
669
					   " INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
670
					   " WHERE c.id_observation IN (%s)",
670
					   " WHERE c.id_observation IN (%s)",
671
					   //" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
671
					   //" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
672
					   implode(',', array_keys(self::$baseflor_col)),
672
					   implode(',', array_keys(self::$baseflor_col)),
673
					   implode(',', $obsids));
673
					   implode(',', $obsids));
Line 674... Line 674...
674
		$res = $cel->requeter($req);
674
		$res = Cel::db()->requeter($req);
675
		if(!$res) return NULL;
675
		if(!$res) return NULL;
676
 
676
 
Line 683... Line 683...
683
 
683
 
684
		return NULL;
684
		return NULL;
Line 685... Line 685...
685
	}
685
	}
686
	
686
	
687
 
687
 
688
	static function baseflor_ligne($cel, $obs, &$ligne) {
688
	static function baseflor_ligne($obs, &$ligne) {
689
		if(! $obs['nom_ret_nn']) {
689
		if(! $obs['nom_ret_nn']) {
Line 690... Line 690...
690
			$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
690
			$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
691
			return;
691
			return;
692
		}
692
		}
693
 
693
 
Line 694... Line 694...
694
		if(! self::referenceTableExiste($cel)) {
694
		if(! self::referenceTableExiste()) {
Line 705... Line 705...
705
			$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
705
			$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
706
			return;
706
			return;
707
		}
707
		}
Line 708... Line 708...
708
 
708
 
709
		// pas de cache:
709
		// pas de cache:
710
		$data = $cel->executerRequete(sprintf("SELECT %s FROM cel_references " .
710
		$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " .
711
											 "WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
711
											 "WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
712
											 implode(', ', array_keys(self::$baseflor_col)),
712
											 implode(', ', array_keys(self::$baseflor_col)),
713
											 $referentiel,
713
											 $referentiel,
714
											 $obs['nom_ret_nn']),
714
											 $obs['nom_ret_nn']),
Line 758... Line 758...
758
			$champs_etendus_fmt[$champ->cle] = $champ->valeur;
758
			$champs_etendus_fmt[$champ->cle] = $champ->valeur;
759
		}
759
		}
760
		return $champs_etendus_fmt;
760
		return $champs_etendus_fmt;
761
	}
761
	}
Line 762... Line 762...
762
 
762
 
763
	static function champsEtendus_ligne($cel, $obs, &$ligne) {
763
	static function champsEtendus_ligne($obs, &$ligne) {
764
		// si header n'est pas défini, aucune observation ne possède de champ étendu
764
		// si header n'est pas défini, aucune observation ne possède de champ étendu
765
		// et nous n'ajoutons ni colonnes, ni valeurs.
765
		// et nous n'ajoutons ni colonnes, ni valeurs.
766
		if(! isset(self::$cache['champsEtendus']['header'])) return;
766
		if(! isset(self::$cache['champsEtendus']['header'])) return;