Subversion Repositories eFlore/Applications.cel

Rev

Rev 2937 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2937 Rev 2938
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe de nettoyage de la base de données du CEL.
4
 * Classe de nettoyage de la base de données du CEL.
5
 * Suppression des antislash
5
 * Suppression des antislash
6
 * Remplacement des chaines vides par des NULL
6
 * Remplacement des chaines vides par des NULL
7
 * Unifier les référentiels : pas de nom de version, majuscule...
7
 * Unifier les référentiels : pas de nom de version, majuscule...
8
 * Unifier les certitudes
8
 * Unifier les certitudes
9
 * Supprimer les INSEE-C: non rempli, les dates 0000-00 
9
 * Supprimer les INSEE-C: non rempli, les dates 0000-00 
10
 *
10
 *
11
 * Utilisation :
11
 * Utilisation :
12
 * - <code>/opt/lamp/bin/php cli.php nettoyage -a (voir méthode executer)</code>
12
 * - <code>/opt/lamp/bin/php cli.php nettoyage -a (voir méthode executer)</code>
13
 *
13
 *
14
 * @category   CEL
14
 * @category   CEL
15
 * @package    Scripts
15
 * @package    Scripts
16
 * @subpackage Nettoyage
16
 * @subpackage Nettoyage
17
 * @author     Delphine CAUQUIL <delphine@tela-botanica.org>
17
 * @author     Delphine CAUQUIL <delphine@tela-botanica.org>
18
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
18
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
19
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
 * @copyright  1999-2016 Tela Botanica <accueil@tela-botanica.org>
20
 * @copyright  1999-2016 Tela Botanica <accueil@tela-botanica.org>
21
 */
21
 */
22
class Nettoyage extends Script {
22
class Nettoyage extends Script {
23
 
23
 
24
	protected $bdd;
24
	protected $bdd;
25
	protected $colonnes;
25
	protected $colonnes;
26
 
26
 
27
 
27
 
28
	public function __construct($script_nom, $parametres_cli) {
28
	public function __construct($script_nom, $parametres_cli) {
29
		parent::__construct($script_nom, $parametres_cli);
29
		parent::__construct($script_nom, $parametres_cli);
30
		$this->bdd = new Bdd();
30
		$this->bdd = new Bdd();
31
	}
31
	}
32
 
32
 
33
	public function executer() {
33
	public function executer() {
34
		$cmd = $this->getParametre('a');
34
		$cmd = $this->getParametre('a');
35
		$requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'cel_obs' AND table_schema='tb_cel';";
35
		$requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'cel_obs' AND table_schema='tb_cel';";
36
		$this->colonnes = $this->bdd->recupererTous($requete_colonnes);
36
		$this->colonnes = $this->bdd->recupererTous($requete_colonnes);
37
		try {
37
		try {
38
			switch ($cmd) {
38
			switch ($cmd) {
39
				case 'tout' :
39
				case 'tout' :
40
					$this->supprimerRetourLigne();
40
					$this->supprimerRetourLigne();
41
					$this->supprimerAntislash();
41
					$this->supprimerAntislash();
42
					$this->supprimerGuillement();
42
					$this->supprimerGuillemet();
43
					$this->unifierNomReferentiel();
43
					$this->unifierNomReferentiel();
44
					$this->unifierCertitude();
44
					$this->unifierCertitude();
45
					$this->verifierGeodatum();
45
					$this->verifierGeodatum();
46
					$this->unifierNull();
46
					$this->unifierNull();
47
					break;
47
					break;
48
				case 'supprimerAntislash' :
48
				case 'supprimerAntislash' :
49
					$this->supprimerAntislash();
49
					$this->supprimerAntislash();
50
					break;
50
					break;
51
				case 'unifierNomReferentiel' :
51
				case 'unifierNomReferentiel' :
52
					$this->unifierNomReferentiel();
52
					$this->unifierNomReferentiel();
53
					break;
53
					break;
54
				case 'unifierCertitude' :
54
				case 'unifierCertitude' :
55
					$this->unifierCertitude();
55
					$this->unifierCertitude();
56
					break;
56
					break;
57
				case 'verifierGeodatum' :
57
				case 'verifierGeodatum' :
58
					$this->verifierGeodatum();
58
					$this->verifierGeodatum();
59
					break;
59
					break;
60
				case 'unifierNull' : // lancer en dernier pour bien réussir
60
				case 'unifierNull' : // lancer en dernier pour bien réussir
61
					$this->unifierNull();
61
					$this->unifierNull();
62
					break;
62
					break;
63
				default :
63
				default :
64
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
64
					$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
65
						"Commandes existantes : regenererMotsClesTexteObs, regenererMotsClesTexteImages"
65
						"Commandes existantes : regenererMotsClesTexteObs, regenererMotsClesTexteImages"
66
							. ", regenererMotsClesTexteObsTout, regenererMotsClesTexteImagesTout"
66
							. ", regenererMotsClesTexteObsTout, regenererMotsClesTexteImagesTout"
67
							. ", viderMotsClesTexteImagesSansMotsCles, viderMotsClesTexteObsSansMotsCles"
67
							. ", viderMotsClesTexteImagesSansMotsCles, viderMotsClesTexteObsSansMotsCles"
68
							. ", regenererChampsTailleImage, reparerLiaisonsOublieesObs, reparerLiaisonsOublieesImages"
68
							. ", regenererChampsTailleImage, reparerLiaisonsOublieesObs, reparerLiaisonsOublieesImages"
69
							. ", reparerLiaisonsObsParMotsClesTexte, reductionMotsClesImages, reductionMotsClesImagesUtil"
69
							. ", reparerLiaisonsObsParMotsClesTexte, reductionMotsClesImages, reductionMotsClesImagesUtil"
70
							. ", reduireEtNormaliserMotsClesImagesUtil, reduireEtNormaliserMotsClesImages"
70
							. ", reduireEtNormaliserMotsClesImagesUtil, reduireEtNormaliserMotsClesImages"
71
							. ", reductionMotsClesObs, reductionMotsClesObsUtil, reduireEtNormaliserMotsClesObsUtil"
71
							. ", reductionMotsClesObs, reductionMotsClesObsUtil, reduireEtNormaliserMotsClesObsUtil"
72
							. ", reduireEtNormaliserMotsClesObs";
72
							. ", reduireEtNormaliserMotsClesObs";
73
					throw new Exception($msg);
73
					throw new Exception($msg);
74
			}
74
			}
75
		} catch (Exception $e) {
75
		} catch (Exception $e) {
76
			$this->traiterErreur($e->getMessage());
76
			$this->traiterErreur($e->getMessage());
77
		}
77
		}
78
	}
78
	}
79
	
79
	
80
 
80
 
81
	private function supprimerRetourLigne() {		
81
	private function supprimerRetourLigne() {		
82
		foreach ($this->colonnes as $id=>$colonne) {
82
		foreach ($this->colonnes as $id=>$colonne) {
83
			echo "Suppression des retour ligne dans la colonne ".$colonne['column_name']." ...";
83
			echo "Suppression des retour ligne dans la colonne ".$colonne['column_name']." ...";
84
			$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].', "\n", "")';
84
			$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].', "\n", "")';
85
			$this->bdd->requeter($requete);
85
			$this->bdd->requeter($requete);
86
			echo "effectuée \n";
86
			echo "effectuée \n";
87
		}
87
		}
88
	}
88
	}
89
	
89
	
90
	private function supprimerAntislash() {
90
	private function supprimerAntislash() {
91
		foreach ($this->colonnes as $id=>$colonne) {
91
		foreach ($this->colonnes as $id=>$colonne) {
92
			echo "Suppression des antislash dans la colonne ".$colonne['column_name']." ...";
92
			echo "Suppression des antislash dans la colonne ".$colonne['column_name']." ...";
93
			$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].', "\", "")';
93
			$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].', "\", "")';
94
			$this->bdd->requeter($requete);
94
			$this->bdd->requeter($requete);
95
			echo "effectuée \n";
95
			echo "effectuée \n";
96
		}
96
		}
97
	}
97
	}
98
	
98
	
99
	private function supprimerGuillemet() {
99
	private function supprimerGuillemet() {
100
		foreach ($this->colonnes as $id=>$colonne) {
100
		foreach ($this->colonnes as $id=>$colonne) {
101
			echo "Suppression des guillements dans la colonne ".$colonne['column_name']." ...";
101
			echo "Suppression des guillements dans la colonne ".$colonne['column_name']." ...";
102
			$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].',"\"", "")';
102
			$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].',"\"", "")';
103
			$this->bdd->requeter($requete);
103
			$this->bdd->requeter($requete);
104
			echo "effectuée \n";
104
			echo "effectuée \n";
105
		}
105
		}
106
	}
106
	}
107
	
107
	
108
	private function unifierNull() {
108
	private function unifierNull() {
109
		$requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'cel_obs' AND table_schema='tb_cel';";
109
		$requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'cel_obs' AND table_schema='tb_cel';";
110
		$colonnes = $this->bdd->recupererTous($requete_colonnes);
110
		$colonnes = $this->bdd->recupererTous($requete_colonnes);
111
		foreach ($colonnes as $colonne) {
111
		foreach ($colonnes as $colonne) {
112
			echo "Suppression des vides dans la colonne ".$colonne['column_name']." ...";
112
			echo "Suppression des vides dans la colonne ".$colonne['column_name']." ...";
113
			$dsl = array( 'transmission', 'altitude');
113
			$dsl = array( 'transmission', 'altitude');
114
			if (isset($dsl[$colonne['column_name']])) {
114
			if (isset($dsl[$colonne['column_name']])) {
115
				$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = NULL WHERE ".$colonne['column_name']."= ''";
115
				$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = NULL WHERE ".$colonne['column_name']."= ''";
116
			} else {
116
			} else {
117
				$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = NULL WHERE ".$colonne['column_name']."= '' OR ".$colonne['column_name']." IN ('INSEE-C:', '0000-00-00 00:00:00', '0.00000')";
117
				$requete = "UPDATE cel_obs SET ".$colonne['column_name']." = NULL WHERE ".$colonne['column_name']."= '' OR ".$colonne['column_name']." IN ('INSEE-C:', '0000-00-00 00:00:00', '0.00000')";
118
			}
118
			}
119
			$this->bdd->requeter($requete);
119
			$this->bdd->requeter($requete);
120
			echo "effectuée \n";
120
			echo "effectuée \n";
121
		}
121
		}
122
	}
122
	}
123
	
123
	
124
	private function unifierCertitude() {
124
	private function unifierCertitude() {
125
		echo "Uniformisation du champ certitude/identification";
125
		echo "Uniformisation du champ certitude/identification";
126
		$certitude = array("Douteuse" => "douteux",
126
		$certitude = array("Douteuse" => "douteux",
127
			"Certainea" => "certain",
127
			"Certainea" => "certain",
128
			"Certaine" => "certain",
128
			"Certaine" => "certain",
129
			"A déterminer" => "aDeterminer",
129
			"A déterminer" => "aDeterminer",
130
			"à vérifier" => "aDeterminer",
130
			"à vérifier" => "aDeterminer",
131
			"Certaine, par Jean Lebail" => "certain",
131
			"Certaine, par Jean Lebail" => "certain",
132
			"Certaine (à 99%)" => "certain",
132
			"Certaine (à 99%)" => "certain",
133
			"sur" => "certain");
133
			"sur" => "certain");
134
		foreach ($certitude as $valeur=>$saisie) {
134
		foreach ($certitude as $valeur=>$saisie) {
135
			$requete = "UPDATE cel_obs SET certitude = '".$saisie."' WHERE certitude ='".$valeur."'";
135
			$requete = "UPDATE cel_obs SET certitude = '".$saisie."' WHERE certitude ='".$valeur."'";
136
			$this->bdd->requeter($requete);
136
			$this->bdd->requeter($requete);
137
			echo "effectuée \n";
137
			echo "effectuée \n";
138
		}
138
		}
139
		$requete_verif = "SELECT nom_referentiel FROM cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'aDeterminer', '', NULL)";
139
		$requete_verif = "SELECT nom_referentiel FROM cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'aDeterminer', '', NULL)";
140
		$verif = $this->bdd->recupererTous($requete_verif);
140
		$verif = $this->bdd->recupererTous($requete_verif);
141
		if ($verif != array()) print_r($verif);
141
		if ($verif != array()) print_r($verif);
142
	}
142
	}
143
	
143
	
144
	private function unifierNomReferentiel() {
144
	private function unifierNomReferentiel() {
145
		echo "Uniformisation du nom de référentiel";
145
		echo "Uniformisation du nom de référentiel";
146
		$referentiels = array("BDTFX", "BDTRE", "BDTXA", "APD", "LBF", "ISFAN");
146
		$referentiels = array("BDTFX", "BDTRE", "BDTXA", "APD", "LBF", "ISFAN");
147
		foreach ($referentiels as $referentiel) {
147
		foreach ($referentiels as $referentiel) {
148
			$requete = "UPDATE cel_obs SET nom_referentiel = '".$referentiel."' WHERE nom_referentiel like '".$referentiel."%'";
148
			$requete = "UPDATE cel_obs SET nom_referentiel = '".$referentiel."' WHERE nom_referentiel like '".$referentiel."%'";
149
			$this->bdd->requeter($requete);
149
			$this->bdd->requeter($requete);
150
			$requete = "UPDATE cel_obs SET nom_referentiel = NULL WHERE nom_sel_nn = '' or nom_sel_nn = '0'";
150
			$requete = "UPDATE cel_obs SET nom_referentiel = NULL WHERE nom_sel_nn = '' or nom_sel_nn = '0'";
151
			$this->bdd->requeter($requete);
151
			$this->bdd->requeter($requete);
152
			$requete = "UPDATE cel_obs SET nom_referentiel = 'APD' WHERE nom_referentiel like 'bdtao%'";
152
			$requete = "UPDATE cel_obs SET nom_referentiel = 'APD' WHERE nom_referentiel like 'bdtao%'";
153
			$this->bdd->requeter($requete);
153
			$this->bdd->requeter($requete);
154
			$requete = "UPDATE cel_obs SET nom_referentiel = 'BDTFX' WHERE nom_referentiel like 'bdnff%'";
154
			$requete = "UPDATE cel_obs SET nom_referentiel = 'BDTFX' WHERE nom_referentiel like 'bdnff%'";
155
			$this->bdd->requeter($requete);
155
			$this->bdd->requeter($requete);
156
			echo "effectuée \n";
156
			echo "effectuée \n";
157
		}
157
		}
158
		$requete_verif = "SELECT nom_referentiel FROM cel_obs WHERE nom_referentiel NOT IN ('".implode("', '", $referentiels)."', 'autre')";
158
		$requete_verif = "SELECT nom_referentiel FROM cel_obs WHERE nom_referentiel NOT IN ('".implode("', '", $referentiels)."', 'autre')";
159
		$verif = $this->bdd->recupererTous($requete_verif);
159
		$verif = $this->bdd->recupererTous($requete_verif);
160
		if ($verif != array()) print_r($verif);
160
		if ($verif != array()) print_r($verif);
161
	}
161
	}
162
	
162
	
163
	private function verifierGeodatum() {
163
	private function verifierGeodatum() {
164
		echo "Uniformisation du geodatum";
164
		echo "Uniformisation du geodatum";
165
		$requete = "UPDATE cel_obs SET geodatum = 'wgs84' WHERE (latitude IS NOT NULL or latitude != '0.00000') AND geodatum = ''";
165
		$requete = "UPDATE cel_obs SET geodatum = 'wgs84' WHERE (latitude IS NOT NULL or latitude != '0.00000') AND geodatum = ''";
166
		$this->bdd->requeter($requete);
166
		$this->bdd->requeter($requete);
167
		$requete = "UPDATE cel_obs SET geodatum = NULL WHERE (latitude IS NULL or latitude == '0.00000')";
167
		$requete = "UPDATE cel_obs SET geodatum = NULL WHERE (latitude IS NULL or latitude == '0.00000')";
168
		$this->bdd->requeter($requete);
168
		$this->bdd->requeter($requete);
169
		echo "effectuée \n";
169
		echo "effectuée \n";
170
	}
170
	}
171
}
171
}