1433 |
aurelien |
1 |
<?php
|
|
|
2 |
// declare(encoding='UTF-8');
|
|
|
3 |
/**
|
|
|
4 |
* Réalise la migration des obs du référentiel bdnff vers le référentie bdtfx
|
|
|
5 |
*
|
|
|
6 |
* @category php 5.2
|
|
|
7 |
* @package Cel/Scripts
|
|
|
8 |
* @author Aurelien PERONNET <aurelien@tela-botanica.org>
|
|
|
9 |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
|
|
|
10 |
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
|
|
|
11 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
|
|
|
12 |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
|
|
|
13 |
* @version $Id$
|
|
|
14 |
*/
|
|
|
15 |
class MigrationReferentiel {
|
|
|
16 |
|
|
|
17 |
private $bdd = null;
|
|
|
18 |
private $script = null;
|
|
|
19 |
|
|
|
20 |
private $table_eflore = 'tb_eflore.bdtfx_v1_01';
|
|
|
21 |
private $table_cel = 'tb_cel.cel_obs';
|
|
|
22 |
private $correspondance_nn_sel_nn_ret = null;
|
|
|
23 |
private $infos_noms = array();
|
|
|
24 |
|
|
|
25 |
private $obs_sans_nn = array();
|
|
|
26 |
private $obs_a_modifier = array();
|
|
|
27 |
private $modif_douteuses = array();
|
|
|
28 |
private $modif_familles = 0;
|
|
|
29 |
|
|
|
30 |
private $chemin_log = '/home/telabotap/www/tmp/migration_noms_log.csv';
|
|
|
31 |
private $fp = null;
|
|
|
32 |
|
|
|
33 |
public function __construct(Conteneur $conteneur) {
|
|
|
34 |
$this->bdd = $conteneur->getBdd();
|
|
|
35 |
$this->script = $conteneur->getScript();
|
|
|
36 |
$this->initialiserLog();
|
|
|
37 |
}
|
|
|
38 |
|
|
|
39 |
public function executer($arguments) {
|
|
|
40 |
if (isset($arguments[0]) == false) {
|
|
|
41 |
throw new Exception("Veuillez indiquer l'action à réaliser en paramètre.", E_USER_ERROR);
|
|
|
42 |
}
|
|
|
43 |
$action = $arguments[0];
|
|
|
44 |
switch ($action) {
|
|
|
45 |
case 'migration_referentiel' :
|
|
|
46 |
$this->migrerReferentiel();
|
|
|
47 |
break;
|
|
|
48 |
}
|
|
|
49 |
fclose($this->fp);
|
|
|
50 |
}
|
|
|
51 |
|
|
|
52 |
private function migrerReferentiel() {
|
|
|
53 |
|
|
|
54 |
echo "-------------------------------------------------------------------\n";
|
|
|
55 |
echo " ETAPE 1. Paramétrage ... \n";
|
|
|
56 |
echo "-------------------------------------------------------------------\n";
|
|
|
57 |
$this->chargerInfosNoms();
|
|
|
58 |
|
|
|
59 |
echo "-------------------------------------------------------------------\n";
|
|
|
60 |
echo " ETAPE 2. Chargement des observations ... \n";
|
|
|
61 |
echo "-------------------------------------------------------------------\n";
|
|
|
62 |
|
|
|
63 |
$requete_selection_obs = 'SELECT id_observation, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, '.
|
|
|
64 |
'famille, nom_referentiel FROM '.$this->table_cel;
|
|
|
65 |
$liste_obs = $this->bdd->requeter($requete_selection_obs);
|
|
|
66 |
echo sizeof($liste_obs)." observations sélectionnées \n";
|
|
|
67 |
|
|
|
68 |
foreach ($liste_obs as $obs) {
|
|
|
69 |
if($this->doitChangerNomRetenu($obs)) {
|
|
|
70 |
$nouveau_nom = $this->getInfosNouveauNumNomRetenu($obs);
|
|
|
71 |
$this->obs_a_modifier[] = array(
|
|
|
72 |
'id' => $obs['id_observation'],
|
|
|
73 |
'nouveau_nom_sci_retenu' => $nouveau_nom['nom_complet'],
|
|
|
74 |
'nouveau_nn_retenu' => $nouveau_nom['num_nom'],
|
|
|
75 |
'nouveau_num_tax' => $nouveau_nom['num_taxonomique'],
|
|
|
76 |
'nouvelle_famille' => $nouveau_nom['famille']
|
|
|
77 |
);
|
|
|
78 |
$this->logger($obs, $nouveau_nom);
|
|
|
79 |
}
|
|
|
80 |
}
|
|
|
81 |
|
|
|
82 |
echo "-------------------------------------------------------------------\n";
|
|
|
83 |
echo " ETAPE 3. modification des observations ... \n";
|
|
|
84 |
echo "-------------------------------------------------------------------\n";
|
|
|
85 |
echo sizeof($this->obs_a_modifier)." obs doivent voir changer leur nom retenu \n";
|
|
|
86 |
echo $this->modif_familles." obs doivent voir changer leur famille \n";
|
|
|
87 |
echo sizeof($this->obs_sans_nn)." observations n'ont pas de num nom \n";
|
|
|
88 |
echo sizeof($this->modif_douteuses)." modifications sont douteuses et ne seront pas effectuées \n";
|
|
|
89 |
echo "\n";
|
|
|
90 |
$this->executerRequeteMiseAJour();
|
|
|
91 |
echo "\n";
|
|
|
92 |
echo "-------------------------------------------------------------------\n";
|
|
|
93 |
echo " Migration des noms terminée ... \n";
|
|
|
94 |
echo "-------------------------------------------------------------------\n";
|
|
|
95 |
|
|
|
96 |
}
|
|
|
97 |
|
|
|
98 |
private function chargerInfosNoms() {
|
|
|
99 |
|
|
|
100 |
$requete = 'SELECT num_nom, num_nom_retenu, nom_complet, num_taxonomique, famille FROM '.$this->table_eflore;
|
|
|
101 |
$nums = $this->bdd->requeter($requete);
|
|
|
102 |
|
|
|
103 |
foreach ($nums as $num) {
|
|
|
104 |
$this->correspondance_nn_sel_nn_ret[$num['num_nom']] = $num['num_nom_retenu'];
|
|
|
105 |
$this->infos_noms[$num['num_nom']] = $num;
|
|
|
106 |
}
|
|
|
107 |
|
|
|
108 |
echo sizeof($this->correspondance_nn_sel_nn_ret)." noms sélectionnés\n";
|
|
|
109 |
}
|
|
|
110 |
|
|
|
111 |
private function doitChangerNomRetenu($obs) {
|
|
|
112 |
$changement = false;
|
|
|
113 |
$nn_retenu_obs = $obs['nom_ret_nn'];
|
|
|
114 |
$nn_saisi_obs = $obs['nom_sel_nn'];
|
|
|
115 |
$famille_saisie_obs = $obs['famille'];
|
|
|
116 |
$sans_nn_retenu = false;
|
|
|
117 |
|
|
|
118 |
if($nn_saisi_obs != '') {
|
|
|
119 |
if(!isset($this->correspondance_nn_sel_nn_ret[$nn_saisi_obs]) || $this->correspondance_nn_sel_nn_ret[$nn_saisi_obs] == 0) {
|
|
|
120 |
$this->obs_sans_nn[] = $obs['id_observation'];
|
|
|
121 |
$sans_nn_retenu = true;
|
|
|
122 |
} else {
|
|
|
123 |
if($nn_retenu_obs != $this->correspondance_nn_sel_nn_ret[$nn_saisi_obs] && str_word_count($obs['nom_ret']) >= 1) {
|
|
|
124 |
$changement = true;
|
|
|
125 |
}
|
|
|
126 |
}
|
|
|
127 |
|
|
|
128 |
if(!$sans_nn_retenu && $famille_saisie_obs != $this->infos_noms[$nn_saisi_obs]['famille']) {
|
|
|
129 |
$changement = true;
|
|
|
130 |
$this->modif_familles++;
|
|
|
131 |
}
|
|
|
132 |
}
|
|
|
133 |
|
|
|
134 |
if($changement && str_word_count($obs['nom_ret']) == 1) {
|
|
|
135 |
$this->modif_douteuses[] = $obs;
|
|
|
136 |
$changement = false;
|
|
|
137 |
}
|
|
|
138 |
|
|
|
139 |
return $changement;
|
|
|
140 |
}
|
|
|
141 |
|
|
|
142 |
private function getInfosNouveauNumNomRetenu($obs) {
|
|
|
143 |
$nouveau_nn_ret = $this->correspondance_nn_sel_nn_ret[$obs['nom_sel_nn']];
|
|
|
144 |
return $this->infos_noms[$nouveau_nn_ret];
|
|
|
145 |
}
|
|
|
146 |
|
|
|
147 |
private function executerRequeteMiseAJour() {
|
|
|
148 |
$total = 0;
|
|
|
149 |
foreach($this->obs_a_modifier as $valeurs) {
|
|
|
150 |
$requete = $this->assemblerRequeteMiseAJour($valeurs);
|
|
|
151 |
$migration_noms = $this->bdd->executer($requete);
|
|
|
152 |
if ($migration_noms) {
|
|
|
153 |
$total++;
|
|
|
154 |
$this->script->afficherAvancement('Migration des noms (par 1)', $total);
|
|
|
155 |
} else {
|
|
|
156 |
echo $requete."\n";
|
|
|
157 |
exit('Erreur lors de la migration des noms de l\'observation '.$valeurs['id']."\n");
|
|
|
158 |
}
|
|
|
159 |
}
|
|
|
160 |
}
|
|
|
161 |
private function proteger($valeur) {
|
|
|
162 |
return $this->bdd->proteger($valeur);
|
|
|
163 |
}
|
|
|
164 |
|
|
|
165 |
private function assemblerRequeteMiseAJour($tableau) {
|
|
|
166 |
$requete = 'UPDATE '.$this->table_cel.' '.
|
|
|
167 |
'SET nom_ret = '.$this->proteger($tableau['nouveau_nom_sci_retenu']).', '.
|
|
|
168 |
'nom_ret_nn = '.$this->proteger($tableau['nouveau_nn_retenu']).', '.
|
|
|
169 |
'nt = '.$this->proteger($tableau['nouveau_num_tax']).', '.
|
|
|
170 |
'famille = '.$this->proteger($tableau['nouvelle_famille']).', '.
|
|
|
171 |
'nom_referentiel = "bdtfx:v1.01" '.
|
|
|
172 |
'WHERE id_observation = '.$this->proteger($tableau['id']);
|
|
|
173 |
return $requete;
|
|
|
174 |
}
|
|
|
175 |
|
|
|
176 |
private function initialiserLog() {
|
|
|
177 |
$this->fp = fopen($this->chemin_log, 'w');
|
|
|
178 |
$colonnes = 'nom sélectionné, nn nom sélectionné, ancien nom retenu, nn ancien nom retenu, '.
|
|
|
179 |
'nouveau nom sélectionné, nn nouveau nom sélectionné'."\n";
|
|
|
180 |
fwrite($this->fp, $colonnes);
|
|
|
181 |
}
|
|
|
182 |
|
|
|
183 |
private function logger($obs, $nouveau_nom) {
|
|
|
184 |
$chaine = '"'.$obs['nom_sel'].'"'.','.'"'.$obs['nom_sel_nn'].'"'.','.'"'.$obs['nom_ret'].'"'.','.
|
|
|
185 |
'"'.$obs['nom_ret_nn'].'"'.','.'"'.$nouveau_nom['nom_complet'].'"'.','.
|
|
|
186 |
'"'.$nouveau_nom['num_nom'].'"'."\n";
|
|
|
187 |
fwrite($this->fp, $chaine);
|
|
|
188 |
}
|
|
|
189 |
}
|
|
|
190 |
?>
|