/opt/lamp/bin/php cli.php nettoyage -a (voir méthode executer) * * @category CEL * @package Scripts * @subpackage Nettoyage * @author Delphine CAUQUIL * @license GPL v3 * @license CECILL v2 * @copyright 1999-2016 Tela Botanica */ class Nettoyage extends Script { protected $bdd; protected $colonnes; public function __construct($script_nom, $parametres_cli) { parent::__construct($script_nom, $parametres_cli); $this->bdd = new Bdd(); } public function executer() { $cmd = $this->getParametre('a'); $requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'tb_nettoye_cel.cel_obs' AND table_schema='tb_cel';"; $this->colonnes = $this->bdd->recupererTous($requete_colonnes); try { switch ($cmd) { case 'tout' : $this->supprimerRetourLigne(); $this->supprimerAntislash(); $this->supprimerGuillement(); $this->unifierNull(); $this->unifierNomReferentiel(); $this->unifierCertitude(); $this->supprimerCertitudeAutre(); $this->unifierUtilisateur(); $this->verifierCodeInsee(); $this->verifierGeodatum(); $this->analyserMotsCles(); $this->supprimerInfosLiesObsInexistante(); $this->unifierNull(); break; case 'supprimerAntislash' : $this->supprimerAntislash(); break; case 'unifierNomReferentiel' : $this->unifierNomReferentiel(); break; case 'unifierCertitude' : $this->unifierCertitude(); break; case 'supprimerCertitudeAutre' : // après unifier certitude si les autres valeurs sont bien à supprimer $this->supprimerCertitudeAutre(); break; case 'analyserMotsCles' : // après unifier certitude si les autres valeurs sont bien à supprimer $this->analyserMotsCles(); break; case 'verifierGeodatum' : $this->verifierGeodatum(); break; case 'verifierCodeInsee' : $this->verifierCodeInsee(); break; case 'unifierNull' : // lancer en dernier pour bien réussir $this->unifierNull(); break; case 'supprimerInfosLiesObsInexistante' : $this->supprimerInfosLiesObsInexistante(); break; case 'unifierUtilisateur' : $this->unifierUtilisateur(); break; default : $msg = "Erreur : la commande '$cmd' n'existe pas!\n". "Commandes existantes : regenererMotsClesTexteObs, regenererMotsClesTexteImages" . ", regenererMotsClesTexteObsTout, regenererMotsClesTexteImagesTout" . ", viderMotsClesTexteImagesSansMotsCles, viderMotsClesTexteObsSansMotsCles" . ", regenererChampsTailleImage, reparerLiaisonsOublieesObs, reparerLiaisonsOublieesImages" . ", reparerLiaisonsObsParMotsClesTexte, reductionMotsClesImages, reductionMotsClesImagesUtil" . ", reduireEtNormaliserMotsClesImagesUtil, reduireEtNormaliserMotsClesImages" . ", reductionMotsClesObs, reductionMotsClesObsUtil, reduireEtNormaliserMotsClesObsUtil" . ", reduireEtNormaliserMotsClesObs"; throw new Exception($msg); } } catch (Exception $e) { $this->traiterErreur($e->getMessage()); } } private function supprimerRetourLigne() { foreach ($this->colonnes as $id=>$colonne) { echo "Suppression des retour ligne dans la colonne ".$colonne['column_name']." ..."; $requete = "UPDATE tb_nettoye_cel.cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].', "\n", "")'; $this->bdd->requeter($requete); echo "effectuée \n"; } } private function supprimerAntislash() { foreach ($this->colonnes as $id=>$colonne) { echo "Suppression des antislash dans la colonne ".$colonne['column_name']." ..."; $requete = "UPDATE tb_nettoye_cel.cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].', "\", "")'; $this->bdd->requeter($requete); echo "effectuée \n"; } } private function supprimerGuillemet() { foreach ($this->colonnes as $id=>$colonne) { echo "Suppression des guillements dans la colonne ".$colonne['column_name']." ..."; $requete = "UPDATE tb_nettoye_cel.cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].',"\"", "")'; $this->bdd->requeter($requete); echo "effectuée \n"; } } private function unifierNull() { $requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'tb_nettoye_cel.cel_obs' AND table_schema='tb_cel';"; $colonnes = $this->bdd->recupererTous($requete_colonnes); foreach ($colonnes as $colonne) { echo "Suppression des vides dans la colonne ".$colonne['column_name']." ..."; $dsl = array( 'transmission', 'altitude'); if (isset($dsl[$colonne['column_name']])) { $requete = "UPDATE tb_nettoye_cel.cel_obs SET ".$colonne['column_name']." = NULL WHERE ".$colonne['column_name']."= ''"; } else { $requete = "UPDATE tb_nettoye_cel.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')"; } $this->bdd->requeter($requete); echo "effectuée \n"; } } private function unifierCertitude() { echo "Uniformisation du champ certitude/identification"; $certitude = array("A déterminer" => "à déterminer", "À déterminer, voir photo" => "à déterminer", "aDeterminer" => "à déterminer", "déterminer" => "à déterminer", "Inconnue" => "à déterminer", "Ceraine" => "certain", "certain" => "certain", "Certainaaua" => "certain", "Certaine" => "certain", "Certaine K- rhizines blanche" => "certain", "Certaine ( mais voir notes)" => "certain", "Certaine (à 99%)" => "certain", "Certaine Anett" => "certain", "Certaine Anette" => "certain", "Certaine Valériane officinale" => "certain", "Certaine, Faite et confirmée par JM BERAUD" => "certain", "Certaine, par Jean Lebail" => "certain", "Certaine, subsp. minus" => "certain", "Certainea" => "certain", "Certaineanno" => "certain", "Certainearia n" => "certain", "Certainee" => "certain", "Certainej" => "certain", "Certainel" => "certain", "CertaineNom de travai" => "certain", "CertaineNom de travail" => "certain", "Certainesites" => "certain", "Certainesous-bois de feuillus en versant sud à sud-ouest" => "certain", "Certaineu" => "certain", "sure" => "certain", "validée sur forum Naturalistes de l'ouest" => "certain", "à confirmer" => "douteux", "à approfondir" => "douteux", "à cofirmer" => "douteux", "À confiermer" => "douteux", "A confirlmer" => "douteux", "A confirmer" => "douteux", "à confirmer vs. pumilum" => "douteux", "à conirmer" => "douteux", "à vérifier" => "douteux", "douteuse" => "douteux", "Douteuse (canadensis ?)" => "douteux", "Douteuse ?" => "douteux", "Douteuse à confirmer" => "douteux", "Douteuse peut-être cordata" => "douteux", "Douteuse, fleurs rouges" => "douteux", "douteux" => "douteux", "espèce bisannuelle mais non bien déterminée" => "douteux", "Incertaine" => "douteux", "Pavot douteux" => "douteux", "Potentille ansérine, supposé" => "douteux", "presque certaine" => "douteux", "Quasi Certaine" => "douteux", "ssp déterminer" => "douteux", "subsp à vérifier" => "douteux", "subsp. microphyllum ?" => "douteux", "très douteuse" => "douteux", "Très probable" => "douteux"); foreach ($certitude as $valeur=>$saisie) { $requete = "UPDATE tb_nettoye_cel.cel_obs SET commentaire = concat(commentaire, ' ', certitude), certitude = '".$saisie."' WHERE certitude ='".$valeur."'"; $this->bdd->requeter($requete); echo "effectuée \n"; } $requete_verif = "SELECT certitude FROM tb_nettoye_cel.cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'aDeterminer', '', NULL)"; $verif = $this->bdd->recupererTous($requete_verif); if ($verif != array()) print_r($verif); } private function supprimerCertitudeAutre() { echo "suppression des valeurs non compréhensible du champ certitude/identification"; $requete = "UPDATE tb_nettoye_cel.cel_obs SET commentaire = case isnull(commentaire) when 1 THEN certitude ELSE concat(commentaire, ' ', certitude) END, certitude IS NULL WHERE `certitude` NOT IN ('douteux', 'certain', 'aDeterminer', '') and certitude is not NULL"; $this->bdd->requeter($requete); echo "effectuée \n"; $requete_verif = "SELECT certitude FROM tb_nettoye_cel.cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'aDeterminer', '', NULL)"; $verif = $this->bdd->recupererTous($requete_verif); if ($verif != array()) print_r($verif); } private function unifierUtilisateur() { echo "suppression des images anonymes"; $requete_anonyme = "DELETE FROM tb_nettoye_cel.`cel_images` WHERE (ce_utilisateur IS NULL OR LENGTH(ce_utilisateur) > 6 OR ce_utilisateur = 0) and `courriel_utilisateur` is null"; $this->bdd->requeter($requete_anonyme); echo "suppression des tags images anonymes"; $requete_anonyme = "DELETE FROM tb_nettoye_cel.`cel_arbre_mots_cles_images` WHERE id_utilisateur in (select ce_utilisateur FROM tb_nettoye_cel.`cel_obs` WHERE (ce_utilisateur IS NULL OR LENGTH(ce_utilisateur) > 6 OR ce_utilisateur = 0) and `courriel_utilisateur` is null)"; $this->bdd->requeter($requete_anonyme); echo "suppression des tags obs anonymes"; $requete_anonyme = "DELETE FROM tb_nettoye_cel.`cel_arbre_mots_cles_obs` WHERE id_utilisateur in (select ce_utilisateur FROM tb_nettoye_cel.`cel_obs` WHERE (ce_utilisateur IS NULL OR LENGTH(ce_utilisateur) > 6 OR ce_utilisateur = 0) and `courriel_utilisateur` is null)"; $this->bdd->requeter($requete_anonyme); echo "suppression des obs anonymes"; $requete_anonyme = "DELETE FROM tb_nettoye_cel.`cel_obs` WHERE (ce_utilisateur IS NULL OR LENGTH(ce_utilisateur) > 6 OR ce_utilisateur = 0) and `courriel_utilisateur` is null"; $this->bdd->requeter($requete_anonyme); echo "modification des observations ayant une adresse mail en identifiant"; $requete_annu_mail = "UPDATE tb_nettoye_cel.`cel_obs` join tela_prod_v4.`annuaire_tela` ON `U_MAIL` = ce_utilisateur SET `ce_utilisateur` = `U_ID`, `prenom_utilisateur` = `U_NAME`, `nom_utilisateur` = `U_SURNAME` , `courriel_utilisateur` = `U_MAIL` WHERE ce_utilisateur like '%@%'"; $utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail); echo "modification des observations ayant une adresse mail mais pas d'identifiant"; $requete_annu_mail = "UPDATE tb_nettoye_cel.`cel_obs` join tela_prod_v4.`annuaire_tela` ON `U_MAIL` = courriel_utilisateur SET `ce_utilisateur` = `U_ID`, `prenom_utilisateur` = `U_NAME`, `nom_utilisateur` = `U_SURNAME` , `courriel_utilisateur` = `U_MAIL` WHERE (ce_utilisateur IS NULL OR LENGTH(ce_utilisateur) > 6 OR ce_utilisateur = 0) and courriel_utilisateur like '%@%'"; $utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail); echo "modification des observations ayant un identifiant"; $requete_annu_mail = "UPDATE tb_nettoye_cel.`cel_obs` join tela_prod_v4.`annuaire_tela` ON U_ID = ce_utilisateur SET `prenom_utilisateur` = `U_NAME`, `nom_utilisateur` = `U_SURNAME` , `courriel_utilisateur` = `U_MAIL` WHERE (ce_utilisateur IS NOT NULL OR LENGTH(ce_utilisateur) > 6) and courriel_utilisateur not like '%@%'"; $utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail); $requete_verif = "SELECT `ce_utilisateur`, `prenom_utilisateur`, `nom_utilisateur`, `courriel_utilisateur` FROM tb_nettoye_cel.cel_obs WHERE ce_utilisateur IS NOT NULL OR LENGTH(ce_utilisateur) > 6"; $verif = $this->bdd->recupererTous($requete_verif); if ($verif != array()) print_r($verif); } private function unifierNomReferentiel() { echo "Uniformisation du nom de référentiel"; $referentiels = array("BDTFX", "BDTRE", "BDTXA", "APD", "LBF", "ISFAN"); foreach ($referentiels as $referentiel) { $requete = "UPDATE tb_nettoye_cel.cel_obs SET nom_referentiel = '".$referentiel."' WHERE nom_referentiel like '".$referentiel."%'"; $this->bdd->requeter($requete); $requete = "UPDATE tb_nettoye_cel.cel_obs SET nom_referentiel = NULL WHERE nom_sel_nn = '' or nom_sel_nn = '0'"; $this->bdd->requeter($requete); $requete = "UPDATE tb_nettoye_cel.cel_obs SET nom_referentiel = 'APD' WHERE nom_referentiel like 'bdtao%'"; $this->bdd->requeter($requete); $requete = "UPDATE tb_nettoye_cel.cel_obs SET nom_referentiel = 'BDTFX' WHERE nom_referentiel like 'bdnff%'"; $this->bdd->requeter($requete); echo "effectuée \n"; } $requete_verif = "SELECT nom_referentiel FROM tb_nettoye_cel.cel_obs WHERE nom_referentiel NOT IN ('".implode("', '", $referentiels)."', 'autre')"; $verif = $this->bdd->recupererTous($requete_verif); if ($verif != array()) print_r($verif); } private function supprimerInfosLiesObsInexistante() { echo "Supprimer infos liés à obs inexistante"; $requete = "DELETE FROM tb_nettoye_cel.`cel_obs_etendues` WHERE `id_observation` not in (select `id_observation` from tb_nettoye_cel.cel_obs);"; $this->bdd->requeter($requete); $requete = "DELETE FROM tb_nettoye_cel.`cel_mots_cles_obs_liaison` WHERE `id_element_lie` not in (select `id_observation` from tb_nettoye_cel.cel_obs);"; $this->bdd->requeter($requete); $requete = "DELETE FROM tb_nettoye_cel.`cel_mots_cles_images_liaison` WHERE `id_element_lie` not in (select `id_observation` from tb_nettoye_cel.cel_obs);"; $this->bdd->requeter($requete); echo "effectuée \n"; } private function verifierGeodatum() { echo "Uniformisation du geodatum"; $requete = "UPDATE tb_nettoye_cel.cel_obs SET geodatum = 'wgs84' WHERE (latitude IS NOT NULL or latitude != '0.00000') AND geodatum = ''"; $this->bdd->requeter($requete); $requete = "UPDATE tb_nettoye_cel.cel_obs SET geodatum = NULL WHERE (latitude IS NULL or latitude == '0.00000')"; $this->bdd->requeter($requete); echo "effectuée \n"; } private function verifierCodeInsee() { echo "Vérification du code insee"; $requete = "UPDATE tb_nettoye_cel.cel_obs SET locality_consistency = '0' WHERE ((ce_zone_geo != 'INSEE-C:' and ce_zone_geo like 'INSEE-C:%') and code_insee_calcule != '') and replace(`ce_zone_geo`, 'INSEE-C:', '') != `code_insee_calcule`"; $this->bdd->requeter($requete); $requete = "UPDATE tb_nettoye_cel.cel_obs SET locality_consistency = '1' WHERE ((ce_zone_geo != 'INSEE-C:' and ce_zone_geo like 'INSEE-C:%') and code_insee_calcule != '') and replace(`ce_zone_geo`, 'INSEE-C:', '') = `code_insee_calcule`";$this->bdd->requeter($requete); echo "effectuée \n"; } private function analyserMotsCles(){ } }