Subversion Repositories Applications.referentiel

Rev

Rev 323 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
321 delphine 1
<?php
2
// Encodage : UTF-8
3
// +-------------------------------------------------------------------------------------------------------------------+
4
/**
5
* Versionnage de référentiels de nomenclature et taxonomie
6
*
7
* Description : classe permettant de versionner les référentiels selon le manuel technique
323 mathias 8
* Utilisation : php script.php famille -r bdtfx_v2_00
321 delphine 9
*
10
//Auteur original :
11
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
* @copyright	Tela-Botanica 1999-2010
13
* @link			http://www.tela-botanica.org/wikini/RTaxMethodo/wakka.php?wiki=MaNuel
14
* @licence		GPL v3 & CeCILL v2
15
* @version		$Id$
16
*/
17
// +-------------------------------------------------------------------------------------------------------------------+
18
// TODO : lors de la génération de la version 2 de la BDTFX tester les diff! Il se peut que la mémoire soit dépassée.
19
class Famille extends ScriptCommande {
20
 
21
	const SCRIPT_NOM = 'famille';
22
	private $referentielDao = null;
23
	public $parametres = array(
24
			'-r' => array(true, true, 'referentiel'));
25
 
26
 
27
 
28
	public function executer() {
29
		$this->referentielDao = new ReferentielDao();
30
		// Récupération du dernier traitement demandé
31
		$referentiel = $this->getParam('r');
32
		$resultats = $this->referentielDao->preparerTablePrChpFamille($referentiel);
33
 
34
		$noms = array();
35
		$introuvables = array();
36
		$introuvablesSyno = array();
37
		$i = 1;
38
 
39
		while(true) {
40
			printf("passe n°%d:\n", $i);
41
			$this->traiterResultatsFamille($resultats, $noms, $introuvables, $introuvablesSyno);
42
			echo "\n\n";
43
			// printf("noms: %d, introuvables: %d, introuvablesSyno: %d\n", count($noms), count($introuvables), count($introuvablesSyno));
44
			// XXX, au 22/07/2013, 3 passes sont suffisantes
45
			// TODO: MySQL procédure stockée !
46
			if($i++ == 3) break;
47
			$resultats = array_merge($resultats, $introuvables, $introuvablesSyno);
48
			$introuvables = $introuvablesSyno = array();
49
		}
50
 
51
		foreach ($introuvablesSyno as $id => $nom) {
52
			$nn = $nom['num_nom'];
53
			$nnr = $nom['num_nom_retenu'];
54
			if (isset($noms[$nnr])) {
55
				$noms[$nn] = $noms[$nnr];
56
			} else {
57
				$introuvables[] = $nn;
58
			}
59
			unset($introuvablesSyno[$id]);
60
 
61
		}
62
		echo "\n";
63
 
64
 
65
		/*$msg = 'Plusieurs familles sont introuvables';
66
		$this->creerFichierLog($msg, $introuvables, 'famille_introuvable');*/
67
 
68
		$this->referentielDao->remplirChpFamille($referentiel, $noms);
69
    }
70
 
71
 
72
 
73
 
74
	private function traiterResultatsFamille(&$resultats, &$noms, &$introuvables, &$introuvablesSyno) {
75
		foreach ($resultats as $id => $nom) {
76
			$nn = $nom['num_nom'];
77
			$nnr = $nom['num_nom_retenu'];
78
			$nts = $nom['num_tax_sup'];
79
			$rg = $nom['rang'];
80
			if ($nnr != '') {
81
				if ($rg == '180') {
82
					$noms[$nn] = $nom['nom_sci'];
83
				} else {
84
					if ($nn == $nnr) {
85
						// nom retenu
86
						if (isset($noms[$nts])) {
87
							// signifie que recupererTuplesPrChpFamille() devrait
88
							// récupérer ce record *avant*
89
							$noms[$nn] = $noms[$nts];
90
						} else {
91
							$introuvables[] = $nn;
92
						}
93
					} else {// nom synonyme
94
						if (isset($noms[$nnr])) {
95
							// signifie que recupererTuplesPrChpFamille() devrait
96
							// récupérer ce record *avant*
97
							$noms[$nn] = $noms[$nnr];
98
						} else {
99
							$introuvablesSyno[] = $nom;
100
						}
101
					}
102
				}
103
			}
104
			unset($resultats[$id]);
105
		}
106
	}
107
 
108
}
109
?>