Subversion Repositories Applications.referentiel

Rev

Rev 344 | 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'));
406 delphine 25
	private $noms = array();
26
	private $resultats = array();
321 delphine 27
 
28
	public function executer() {
29
		$this->referentielDao = new ReferentielDao();
30
		// Récupération du dernier traitement demandé
31
		$referentiel = $this->getParam('r');
406 delphine 32
		$this->resultats = $this->referentielDao->preparerTablePrChpFamille($referentiel);
321 delphine 33
 
406 delphine 34
		//$noms = array();
321 delphine 35
		$introuvables = array();
36
		$introuvablesSyno = array();
37
		$i = 1;
38
 
39
		while(true) {
40
			printf("passe n°%d:\n", $i);
406 delphine 41
			$this->traiterResultatsFamille(  $introuvables, $introuvablesSyno);
42
			//echo "\n\n"; print_r(count($this->noms));
321 delphine 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 !
406 delphine 46
			if($i++ == 4) break;
47
			$this->resultats = array_merge($this->resultats, $introuvables, $introuvablesSyno);
321 delphine 48
			$introuvables = $introuvablesSyno = array();
49
		}
50
 
51
		foreach ($introuvablesSyno as $id => $nom) {
52
			$nn = $nom['num_nom'];
53
			$nnr = $nom['num_nom_retenu'];
406 delphine 54
			if (isset($this->noms[$nnr])) {
55
				$this->noms[$nn] = $this->noms[$nnr];
321 delphine 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
 
406 delphine 68
print_r(count($this->noms));echo "wtf:";
69
		print_r($this->referentielDao->remplirChpFamille($referentiel, $this->noms));
321 delphine 70
    }
71
 
72
 
73
 
74
 
406 delphine 75
	private function traiterResultatsFamille(&$introuvables, &$introuvablesSyno) {
76
 
77
		foreach ($this->resultats as $id => $nom) {
78
			$nn = $nom['num_nom'];
321 delphine 79
			$nnr = $nom['num_nom_retenu'];
80
			$nts = $nom['num_tax_sup'];
81
			$rg = $nom['rang'];
82
			if ($nnr != '') {
83
				if ($rg == '180') {
406 delphine 84
					$this->noms[$nn] = $nom['nom_sci'];
321 delphine 85
				} else {
86
					if ($nn == $nnr) {
87
						// nom retenu
406 delphine 88
						if (isset($this->noms[$nts])) {
321 delphine 89
							// signifie que recupererTuplesPrChpFamille() devrait
90
							// récupérer ce record *avant*
406 delphine 91
							$this->noms[$nn] = $this->noms[$nts];
321 delphine 92
						} else {
93
							$introuvables[] = $nn;
94
						}
95
					} else {// nom synonyme
406 delphine 96
						if (isset($this->noms[$nnr])) {
321 delphine 97
							// signifie que recupererTuplesPrChpFamille() devrait
98
							// récupérer ce record *avant*
406 delphine 99
							$this->noms[$nn] = $this->noms[$nnr];
321 delphine 100
						} else {
101
							$introuvablesSyno[] = $nom;
102
						}
103
					}
104
				}
105
			}
406 delphine 106
			unset($this->resultats[$id]);
321 delphine 107
		}
108
	}
109
 
110
}
406 delphine 111
?>