Rev 3510 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe de nettoyage de la base de données du CEL.* Suppression des antislash* Remplacement des chaines vides par des NULL* Unifier les référentiels : pas de nom de version, majuscule...* Unifier les certitudes* Supprimer les INSEE-C: non rempli, les dates 0000-00** Utilisation :* - <code>/opt/lamp/bin/php cli.php nettoyage -a (voir méthode executer)</code>** @category CEL* @package Scripts* @subpackage Nettoyage* @author Delphine CAUQUIL <delphine@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @copyright 1999-2016 Tela Botanica <accueil@tela-botanica.org>*/class Nettoyage extends Script {protected $bdd;protected $colonnes;protected $bd_cel = "tb_nettoye_cel";protected $bd_del = "tb_del";public function __construct($script_nom, $parametres_cli) {parent::__construct($script_nom, $parametres_cli);$this->bdd = new Bdd();$this->bd_cel = Config::get('nettoyage.cel_nettoye');$this->bd_del = Config::get('nettoyage.del');}public function executer() {$cmd = $this->getParametre('a');$requete_colonnes = "SELECT column_name FROM information_schema.columns WHERE table_name = 'cel_obs' AND table_schema='".$this->bd_cel."';";$this->colonnes = $this->bdd->recupererTous($requete_colonnes);try {switch ($cmd) {case 'tout' :$this->supprimerRetourLigne();$this->supprimerAntislash();$this->supprimerGuillemet();$this->unifierNull();$this->unifierNomReferentiel();$this->unifierCertitude();$this->supprimerCertitudeAutre();$this->unifierUtilisateur();$this->unifierPhenologie();$this->verifierCodeInsee();$this->verifierGeodatum();$this->supprimerInfosLiesObsInexistante();$this->supprimerImagesetTagAnonymes();$this->analyserMotsCles();$this->changerSensible();$this->unifierNull();break;case 'supprimerRetourLigne' :$this->supprimerRetourLigne();break;case 'supprimerAntislash' :$this->supprimerAntislash();break;case 'supprimerGuillemet' :$this->supprimerGuillemet();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 'sensible' :$this->changerSensible();break;case 'unifierNull' : // lancer en dernier pour bien réussir$this->unifierNull();break;case 'supprimerImagesetTagAnonymes' :$this->supprimerImagesetTagAnonymes();break;case 'supprimerInfosLiesObsInexistante' :$this->supprimerInfosLiesObsInexistante();break;case 'unifierUtilisateur' :$this->unifierUtilisateur();break;case 'unifierInfosEspece' :$this->unifierUtilisateur();break;case 'unifierPhenologie' :$this->unifierPhenologie();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 ".$this->bd_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 ".$this->bd_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 ".$this->bd_cel.".cel_obs SET ".$colonne['column_name']." = REPLACE(".$colonne['column_name'].',"\"", "")';$this->bdd->requeter($requete);echo "effectuée \n";}}private function unifierNull() {foreach ($this->colonnes as $id=>$colonne) {echo "Suppression des vides dans la colonne ".$colonne['column_name']." ...";$dsl = array( 'transmission', 'altitude');if (isset($dsl[$colonne['column_name']])) {$requete = "UPDATE ".$this->bd_cel.".cel_obs SET ".$colonne['column_name']." = NULL WHERE trim(".$colonne['column_name'].") = '' and ".$colonne['column_name']." != '0'";} else {$requete = "UPDATE ".$this->bd_cel.".cel_obs SET ".$colonne['column_name']." = NULL WHERE trim(".$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","A déterminer" => "à 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 '.$this->bd_cel.'.cel_obs SET commentaire = concat(commentaire, " Certitude : ", certitude), certitude = "'.$saisie.'" WHERE certitude ="'.$valeur.'"';$this->bdd->requeter($requete);echo "effectuée \n";}$requete_verif = "SELECT certitude FROM ".$this->bd_cel.".cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'à déterminer', '') and certitude is not 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 ".$this->bd_cel.".cel_obsSET commentaire = case isnull(commentaire) when 1 THEN certitude ELSE concat(commentaire, ' Certitude : ', certitude) END,certitude = '' WHERE `certitude` NOT IN ('douteux', 'certain', 'à déterminer', '') and certitude is not NULL";$this->bdd->requeter($requete);echo "effectuée \n";$requete_verif = "SELECT certitude FROM ".$this->bd_cel.".cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'à déterminer', '') and certitude is not NULL";$verif = $this->bdd->recupererTous($requete_verif);if ($verif != array()) print_r($verif);}private function unifierPhenologie() {echo "Uniformisation du champ phenologie";$phenologie = array("2" => "00-09: germination, développement des bourgeons","5" => "00-09: germination, développement des bourgeons","5" => "00-09: germination, développement des bourgeons","8" => "00-09: germination, développement des bourgeons","8" => "00-09: germination, développement des bourgeons","9" => "00-09: germination, développement des bourgeons","00-09" => "00-09: germination, développement des bourgeons","Germination, développement des bourgeons" => "00-09: germination, développement des bourgeons","10" => "10-19: développement des feuilles","11" => "10-19: développement des feuilles","12" => "10-19: développement des feuilles","14" => "10-19: développement des feuilles","15" => "10-19: développement des feuilles","16" => "10-19: développement des feuilles","17" => "10-19: développement des feuilles","18" => "10-19: développement des feuilles","19" => "10-19: développement des feuilles","10-19" => "10-19: développement des feuilles","10-19: développement des feui" => "10-19: développement des feuilles","10-19: développement des feuilles" => "10-19: développement des feuilles","15: environ % des feuilles épanouies" => "10-19: développement des feuilles","19 environ 50% des feuilles épanouies" => "10-19: développement des feuilles","en feuilles" => "10-19: développement des feuilles","Feuille" => "10-19: développement des feuilles","feuille peu dvt, a confirmer" => "10-19: développement des feuilles","feuilles seulement" => "10-19: développement des feuilles","20" => "20-29: formation de pousses latérales, tallage","Formation de pousses latérales, tallage" => "20-29: formation de pousses latérales, tallage","30" => "30-39: développement des tiges, croissance des rosettes","35" => "30-39: développement des tiges, croissance des rosettes","36" => "30-39: développement des tiges, croissance des rosettes","38" => "30-39: développement des tiges, croissance des rosettes","39" => "30-39: développement des tiges, croissance des rosettes","3: développement des tiges, croissance des rosettes" => "30-39: développement des tiges, croissance des rosettes","Développement des tiges, croissance des rosettes" => "30-39: développement des tiges, croissance des rosettes","40" => "40-49: développement des organes de propagation végétative","43" => "40-49: développement des organes de propagation végétative","45" => "40-49: développement des organes de propagation végétative","46" => "40-49: développement des organes de propagation végétative","48" => "40-49: développement des organes de propagation végétative","49" => "40-49: développement des organes de propagation végétative","40-49" => "40-49: développement des organes de propagation végétative","40-49: développement des organes de propagation végétative" => "40-49: développement des organes de propagation végétative","40-49: développement des organes de propagation végétativegt" => "40-49: développement des organes de propagation végétative","40-49: développement des organes de propagation végétativepas d'inflorescence" => "40-49: développement des organes de propagation végétative","50" => "50-59 : apparition de l’inflorescence","56" => "50-59 : apparition de l’inflorescence","57" => "50-59 : apparition de l’inflorescence","58" => "50-59 : apparition de l’inflorescence","59" => "50-59 : apparition de l’inflorescence","10x En bouton" => "50-59 : apparition de l’inflorescence","14x En bouton" => "50-59 : apparition de l’inflorescence","20x En bouton" => "50-59 : apparition de l’inflorescence","30-39" => "50-59 : apparition de l’inflorescence","50-59" => "50-59 : apparition de l’inflorescence","50-59: apparition de l'inflorescence, épiais" => "50-59 : apparition de l’inflorescence","50-59: apparition de l'inflorescence, épiaison" => "50-59 : apparition de l’inflorescence","59: apparition de l'inflorescence, épiaison" => "50-59 : apparition de l’inflorescence","8x En bouton" => "50-59 : apparition de l’inflorescence","60" => "60-69 : floraison","62" => "60-69 : floraison","63" => "60-69 : floraison","64" => "60-69 : floraison","66" => "60-69 : floraison","67" => "60-69 : floraison","68" => "60-69 : floraison","69" => "60-69 : floraison"," floraison " => "60-69 : floraison","-69: floraison" => "60-69 : floraison","10x Fin de floraison" => "60-69 : floraison","12x Pleine floraison" => "60-69 : floraison","14x Début de floraison" => "60-69 : floraison","150x Pleine floraison" => "60-69 : floraison","17x Fin de floraison" => "60-69 : floraison","1x Début de floraison" => "60-69 : floraison","1x En fleur" => "60-69 : floraison","1x Fin de floraison" => "60-69 : floraison","1x Pleine floraison" => "60-69 : floraison","20x Début de floraison" => "60-69 : floraison","20x Pleine floraison" => "60-69 : floraison","25x Pleine floraison" => "60-69 : floraison","27x En fleur" => "60-69 : floraison","30x Fin de floraison" => "60-69 : floraison","35x Début de floraison" => "60-69 : floraison","35x Fin de floraison" => "60-69 : floraison","35x Pleine floraison" => "60-69 : floraison","3x Fin de floraison" => "60-69 : floraison","3x Pleine floraison" => "60-69 : floraison","40x Début de floraison" => "60-69 : floraison","44x Pleine floraison" => "60-69 : floraison","48x Pleine floraison" => "60-69 : floraison","4x Pleine floraison" => "60-69 : floraison","50x Pleine floraison" => "60-69 : floraison","5x Pleine floraison" => "60-69 : floraison","6: floraison" => "60-69 : floraison","60 : floraison en amorce, pétales jaunes, corolle non ouverte encore" => "60-69 : floraison","60-" => "60-69 : floraison","60-6: floraison" => "60-69 : floraison","60-65" => "60-69 : floraison","60-69" => "60-69 : floraison","60-69 floraison" => "60-69 : floraison","60-69 floraison +70-79: fructification" => "60-69 : floraison","60-69: florai" => "60-69 : floraison","60-69: florais" => "60-69 : floraison","60-69: floraison" => "60-69 : floraison","60-69: floraison - fructification" => "60-69 : floraison","60-69: floraison (8" => "60-69 : floraison","60-69: floraison 1 individu fleuri sur une trentaine" => "60-69 : floraison","60-69: floraison à 50 pour" => "60-69 : floraison","60-69: floraison Fleurs déjà fanées ou en cours de l'être" => "60-69 : floraison","60-69: floraison floraison" => "60-69 : floraison","60-69: floraison pour le 09/04/2019" => "60-69 : floraison","60-69: floraison5" => "60-69 : floraison","60-69: floraison6" => "60-69 : floraison","60-69: floraisondi" => "60-69 : floraison","60-69: floraisonentre les pierres du mur des quai" => "60-69 : floraison","60-69: floraisonfleurs et fruit" => "60-69 : floraison","60-69: floraisonl" => "60-69 : floraison","60-69: floraisonvi" => "60-69 : floraison","60-69: fructification" => "60-69 : floraison","60: floraison" => "60-69 : floraison","63: floraison" => "60-69 : floraison","63: environ 3% des fleurs épanouies" => "60-69 : floraison","64: floraison" => "60-69 : floraison","66, avec quelques fruits" => "60-69 : floraison","66: floraison" => "60-69 : floraison","67 : floraison" => "60-69 : floraison","67 Nbses fleurs épanouies," => "60-69 : floraison","67: floraison" => "60-69 : floraison","67: environ 70% des fleurs épanouies + formation de gousses." => "60-69 : floraison","68: environ 0% des fleurs épanouies" => "60-69 : floraison","68: floraison" => "60-69 : floraison","68: environ 50% des fleurs épanouies" => "60-69 : floraison","68: environ 80% des fleurs épanouies + formation des gousses." => "60-69 : floraison","68floraison" => "60-69 : floraison","69 (floraison de toutes fleurs)" => "60-69 : floraison","69-70" => "60-69 : floraison","69-70: fin de floraisonfructification" => "60-69 : floraison","69-70n" => "60-69 : floraison","69: 100% des fleurs épanouies" => "60-69 : floraison","69s" => "60-69 : floraison","82x Pleine floraison" => "60-69 : floraison","9: floraison" => "60-69 : floraison","début de ffloraison" => "60-69 : floraison","début floraison" => "60-69 : floraison","en fleurs" => "60-69 : floraison","environ 30% des fleurs épanouies" => "60-69 : floraison","environ 950% des fleurs épanouies" => "60-69 : floraison","fin d floraison" => "60-69 : floraison","fin de floraison" => "60-69 : floraison","fin floraison" => "60-69 : floraison","fl" => "60-69 : floraison","fl2" => "60-69 : floraison","fleur" => "60-69 : floraison","Fleurs" => "60-69 : floraison","fleurs épanouies; fin" => "60-69 : floraison","floraison" => "60-69 : floraison","Nombreux plants en début de floraison" => "60-69 : floraison","61" => "61: environ 10% des fleurs épanouies","10% des fleurs épanouies" => "61: environ 10% des fleurs épanouies","61 :" => "61: environ 10% des fleurs épanouies","61 : environ 10% des fleurs épanouies" => "61: environ 10% des fleurs épanouies","61: début defloraison" => "61: environ 10% des fleurs épanouies","61: floraison" => "61: environ 10% des fleurs épanouies","61: environ 10% des fleurs épanouie" => "61: environ 10% des fleurs épanouies","61: environ 10% des fleurs épanouies" => "61: environ 10% des fleurs épanouies","61: environ 10% des fleurs épanouies63" => "61: environ 10% des fleurs épanouies","61: environ 10% des fleurs épanouies68" => "61: environ 10% des fleurs épanouies","61: environ 2% des fleurs épanouies" => "61: environ 10% des fleurs épanouies","61: environ20% des fleurs épanouies" => "61: environ 10% des fleurs épanouies","Fleurs (environ 10% des fleurs épanouies)" => "61: environ 10% des fleurs épanouies","65" => "65: environ 50% des fleurs épanouies","65" => "65: environ 50% des fleurs épanouies","6: environ 50% des fleurs épanouies" => "65: environ 50% des fleurs épanouies","65 , avec quelques fruits" => "65: environ 50% des fleurs épanouies","65 : environ 80% des fleurs épanouies" => "65: environ 50% des fleurs épanouies","65 : environ 10% des fleurs ép" => "65: environ 50% des fleurs épanouies","65 : environ 50% des fleurs épa" => "65: environ 50% des fleurs épanouies","65 : environ 50% des fleurs épanouies" => "65: environ 50% des fleurs épanouies","65 : environ 50% des fleurs épanouies-75" => "65: environ 50% des fleurs épanouies","65-6: floraison" => "65: environ 50% des fleurs épanouies","65-69: floraison" => "65: environ 50% des fleurs épanouies","65-7: floraison" => "65: environ 50% des fleurs épanouies","65-72" => "65: environ 50% des fleurs épanouies","65:" => "65: environ 50% des fleurs épanouies","65: floraison" => "65: environ 50% des fleurs épanouies","65: environ 10% des fleurs épanouies" => "65: environ 50% des fleurs épanouies","65: environ 50% des fleurs épanoui" => "65: environ 50% des fleurs épanouies","65: environ 50% des fleurs épanouie6" => "65: environ 50% des fleurs épanouies","65: environ 50% des fleurs épanouies" => "65: environ 50% des fleurs épanouies","65: environ 50% des fleurs épanouies et fructification" => "65: environ 50% des fleurs épanouies","65: environ 50% des fleurs épanouies75" => "65: environ 50% des fleurs épanouies","65: environ 50% des fleurs épanouies78" => "65: environ 50% des fleurs épanouies","65:-70" => "65: environ 50% des fleurs épanouies","65:-75" => "65: environ 50% des fleurs épanouies","avec quelques fruits, 65" => "65: environ 50% des fleurs épanouies","nviron 50% des fleurs épanouies" => "65: environ 50% des fleurs épanouies","70" => "70-79: fructification","71" => "70-79: fructification","72" => "70-79: fructification","73" => "70-79: fructification","74" => "70-79: fructification","75" => "70-79: fructification","76" => "70-79: fructification","77" => "70-79: fructification","78" => "70-79: fructification","79" => "70-79: fructification","7: fructification" => "70-79: fructification","70-: fructification" => "70-79: fructification","70-71" => "70-79: fructification","70-79" => "70-79: fructification","70-79: floraison" => "70-79: fructification","70-79: fructification" => "70-79: fructification","70-79: fructification ?" => "70-79: fructification","70-79: fructification +floraison" => "70-79: fructification","70-79: fructification Entre autre" => "70-79: fructification","70-79: fructification, mais fruits verts" => "70-79: fructification","70-79: fructificationfleurs et fruit" => "70-79: fructification","70-79:fin floraison fructification" => "70-79: fructification","709: fructification" => "70-79: fructification","75: fructification" => "70-79: fructification","Début de ruits" => "70-79: fructification","fin floraison et fructification" => "70-79: fructification","fleur, fruit" => "70-79: fructification","fleurs e fructification" => "70-79: fructification","Fleurs et début fruits" => "70-79: fructification","Fleurs et début ruits" => "70-79: fructification","Fleurs et fructification" => "70-79: fructification","floraison - fructification" => "70-79: fructification","floraison zet fructification" => "70-79: fructification","Floraison, fructification" => "70-79: fructification","floraison(fin) fructification" => "70-79: fructification","floraison+ ou - finie" => "70-79: fructification","fr1" => "70-79: fructification","quelques fruits rares" => "70-79: fructification","stérile70-79: fructification" => "70-79: fructification","toutes les fleurs épanouies et début fructification" => "70-79: fructification","fleurs et fruits" => "70-79: fructification","Fleurs et jeunes fruits" => "70-79: fructification","floraison + fructification" => "70-79: fructification","Fructificaiton" => "70-79: fructification","fleurs et quelques fruits" => "70-79: fructification","Fleurs et surtout début defruits" => "70-79: fructification","floraison et fructification" => "70-79: fructification","fructification" => "70-79: fructification","Fleurs/fruits" => "70-79: fructification","fructification ?" => "70-79: fructification","80" => "80-89: maturité des fruits et des graines","81" => "80-89: maturité des fruits et des graines","82" => "80-89: maturité des fruits et des graines","83" => "80-89: maturité des fruits et des graines","84" => "80-89: maturité des fruits et des graines","86" => "80-89: maturité des fruits et des graines","87" => "80-89: maturité des fruits et des graines","88" => "80-89: maturité des fruits et des graines","89" => "80-89: maturité des fruits et des graines","-89: maturité des fruits et des graines" => "80-89: maturité des fruits et des graines","80-89" => "80-89: maturité des fruits et des graines","80-89: maturité des fruits et des graines" => "80-89: maturité des fruits et des graines","80-89: maturité des fruits et des graines,début sénescence" => "80-89: maturité des fruits et des graines","80-95" => "80-89: maturité des fruits et des graines","88 maturité des fruits et des graines" => "80-89: maturité des fruits et des graines","89: maturité des fruits et des graines" => "80-89: maturité des fruits et des graines","floraison et fructification, graines mûres" => "80-89: maturité des fruits et des graines","floraison et maturation des graines" => "80-89: maturité des fruits et des graines","fructification passée" => "80-89: maturité des fruits et des graines","Fruit" => "80-89: maturité des fruits et des graines","Fruits" => "80-89: maturité des fruits et des graines","85" => "85: 50% des fruits matures","50% des fruits matures (fructification d'Août)î" => "85: 50% des fruits matures","85, mais avec encore des fleurs" => "85: 50% des fruits matures","85:" => "85: 50% des fruits matures","85: fruits matures 20" => "85: 50% des fruits matures","85: 50% des fruits mature8" => "85: 50% des fruits matures","85: 50% des fruits matures" => "85: 50% des fruits matures","85: 50% des fruits matures0" => "85: 50% des fruits matures","85: 50% des fruits matures56" => "85: 50% des fruits matures","85: 50% des fruits matures88" => "85: 50% des fruits matures","88: 50% des fruits matures" => "85: 50% des fruits matures","90" => "90-99: sénescence et dormance","91" => "90-99: sénescence et dormance","92" => "90-99: sénescence et dormance","94" => "90-99: sénescence et dormance","95" => "90-99: sénescence et dormance","97" => "90-99: sénescence et dormance","98" => "90-99: sénescence et dormance","99" => "90-99: sénescence et dormance","100% de feuilles jaunes" => "90-99: sénescence et dormance","80% feuillage d'automne" => "90-99: sénescence et dormance","90-99" => "90-99: sénescence et dormance","90-99: sénescence et dormance" => "90-99: sénescence et dormance","95: environ 9% des feuilles jaunes" => "90-99: sénescence et dormance");foreach ($phenologie as $valeur=>$saisie) {$requete = 'UPDATE '.$this->bd_cel.'.cel_obs SET commentaire = concat(commentaire, " Certitude : ", certitude), phenologie = "'.$saisie.'" WHERE phenologie ="'.$valeur.'"';$this->bdd->requeter($requete);echo "effectuée \n";}$requete_verif = "SELECT certitude FROM ".$this->bd_cel.".cel_obs WHERE certitude NOT IN ('douteux', 'certain', 'à déterminer', '') and certitude is not NULL";$verif = $this->bdd->recupererTous($requete_verif);if ($verif != array()) print_r($verif);}private function unifierUtilisateur() {echo "vérification de la présence de l'annuaire \n";$requete = "SELECT * FROM ".$this->bd_cel.".`users`;";$result = $this->bdd->requeter($requete);if ($result === NULL) {echo $requete;echo "Il manque la table annuaire (à recopier de telaorg users\n";exit;}echo "suppression de le colonne ordre \n";$requete = "ALTER TABLE ".$this->bd_cel.".cel_obs DROP INDEX id_obs;";$this->bdd->requeter($requete);$requete = "ALTER TABLE ".$this->bd_cel.".cel_obs DROP INDEX ordre;";$this->bdd->requeter($requete);$requete = "ALTER TABLE ".$this->bd_cel.".`cel_obs` DROP IF EXISTS `ordre`;";$this->bdd->requeter($requete);$requete = "ALTER TABLE ".$this->bd_cel.".`cel_obs` ADD IF NOT EXISTS pseudo varchar(250);";$this->bdd->requeter($requete);echo "modification des observations ayant une adresse mail en identifiant";$requete_annu_mail = "UPDATE ".$this->bd_cel.".`cel_obs` right join ".$this->bd_cel.".`users` ON `user_email` = ce_utilisateur SET `ce_utilisateur` = `ID`, pseudo = user_nicename,`courriel_utilisateur` = `user_email` 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 ".$this->bd_cel.".`cel_obs` join ".$this->bd_cel.".`users` ON `user_email` = courriel_utilisateur SET `ce_utilisateur` = `ID`, pseudo = user_nicename,`courriel_utilisateur` = `user_email` WHERE (ce_utilisateur IS NULL OR CHAR_LENGTH(ce_utilisateur) > 6OR 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 ".$this->bd_cel.".`cel_obs` join ".$this->bd_cel.".`users` ON ID = ce_utilisateur SET pseudo = user_nicename,`courriel_utilisateur` = `user_email` WHERE (ce_utilisateur IS NULL OR char_length(ce_utilisateur) > 6) and (courriel_utilisateur is null or courriel_utilisateur='')";$utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail);echo "suppression des autres valeurs ce_utilisateur";$requete_annu_mail = "UPDATE ".$this->bd_cel.".`cel_obs` SET ce_utilisateur = NULL, courriel_utilisateur = if (ce_utilisateur like '%@%'and (courriel_utilisateur is null or courriel_utilisateur='') , ce_utilisateur, courriel_utilisateur) WHERE ce_utilisateur IS NOT NULL AND char_length(ce_utilisateur) > 6";$utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail);echo "suppression des obs anonymes";$requete_anonyme = "DELETE FROM ".$this->bd_cel.".`cel_obs` WHERE (ce_utilisateur IS NULL OR char_length(ce_utilisateur) > 6OR ce_utilisateur = 0) and (`courriel_utilisateur` is null or `courriel_utilisateur` not like '%@%')";$this->bdd->requeter($requete_anonyme);$requete_verif = "SELECT `ce_utilisateur`, `prenom_utilisateur`, `nom_utilisateur`, `courriel_utilisateur` FROM ".$this->bd_cel.".cel_obsWHERE ce_utilisateur IS NOT NULL OR char_length(ce_utilisateur) > 6";$verif = $this->bdd->recupererTous($requete_verif);if ($verif != array()) print_r($verif);echo "effectuée \n";$this->unifierUtilisateurTag("cel_arbre_mots_cles_obs");$this->unifierUtilisateurTag("cel_arbre_mots_cles_images");}private function unifierUtilisateurTag($table) {echo "séparation des identifiants en ce_utilisateur et courriel";$requete = "ALTER TABLE ".$this->bd_cel.".".$table." ADD courriel varchar(255);";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".".$table." SET courriel = id_utilisateur,id_utilisateur = NULL WHERE id_utilisateur like '%@%';";$this->bdd->requeter($requete);echo "recherche des identifiants pour les tags ayant que des courriels dans users";$requete = "UPDATE ".$this->bd_cel.".".$table." join ".$this->bd_cel.".`users` ON `user_email` = courriel SET `id_utilisateur` = `ID`WHERE courriel like '%@%';";$this->bdd->requeter($requete);echo "recherche des identifiants pour les tags ayant que des courriels dans obs";$requete = "UPDATE ".$this->bd_cel.".".$table." t join ".$this->bd_cel.".`cel_obs` o ON`courriel` = courriel_utilisateur SET t.`id_utilisateur` = o.`ce_utilisateur`WHERE courriel_utilisateur like '%@%';";$this->bdd->requeter($requete);echo "suppression des tags sans identifiant";$requete_anonyme = "DELETE FROM ".$this->bd_cel.".".$table." WHERE(id_utilisateur IS NULL OR trim(id_utilisateur) = '') OR char_length(id_utilisateur) > 6";$this->bdd->requeter($requete_anonyme);if ($table == "cel_arbre_mots_cles_obs") {$requete_anonyme = "DELETE FROM ".$this->bd_cel.".`cel_mots_cles_obs_liaison`WHERE `id_element_lie` not in (SELECT `id_observation` FROM ".$this->bd_cel.".`cel_obs`)OR `id_mot_cle` NOT IN (SELECT `id_mot_cle` FROM ".$this->bd_cel.".`cel_arbre_mots_cles_obs`);";$this->bdd->requeter($requete_anonyme);} else {$requete_anonyme = "DELETE FROM ".$this->bd_cel.".`cel_mots_cles_images_liaison`WHERE `id_element_lie` not in (SELECT `id_image` FROM ".$this->bd_cel.".`cel_images`)OR `id_mot_cle` NOT IN (SELECT `id_mot_cle` FROM ".$this->bd_cel.".`cel_arbre_mots_cles_images`);";$this->bdd->requeter($requete_anonyme);}}private function supprimerImagesetTagAnonymes() {echo "vérification de la présence de l'annuaire \n";$requete = "SELECT * FROM ".$this->bd_cel.".`users`;";$result = $this->bdd->requeter($requete);if ($result === NULL) {echo $requete;echo "Il manque la table annuaire (à recopier de telaorg users\n";exit;}echo "suppression de le colonne ordre \n";$requete = "ALTER TABLE ".$this->bd_cel.".cel_images DROP INDEX id_img;";$this->bdd->requeter($requete);$requete = "ALTER TABLE ".$this->bd_cel.".`cel_images` DROP IF EXISTS `ordre`;";$this->bdd->requeter($requete);$requete = "ALTER TABLE ".$this->bd_cel.".`cel_images` ADD IF NOT EXISTS pseudo varchar(250);";$this->bdd->requeter($requete);echo "modification des images ayant une adresse mail en identifiant";$requete_annu_mail = "UPDATE ".$this->bd_cel.".`cel_images` right join ".$this->bd_cel.".`users` ON `user_email` = ce_utilisateur SET `ce_utilisateur` = `ID`, pseudo = user_nicename,`courriel_utilisateur` = `user_email` WHERE ce_utilisateur like '%@%'";$utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail);echo "modification des images ayant une adresse mail mais pas d'identifiant";$requete_annu_mail = "UPDATE ".$this->bd_cel.".`cel_images` join ".$this->bd_cel.".`users` ON `user_email` = courriel_utilisateur SET `ce_utilisateur` = `ID`, pseudo = user_nicename,`courriel_utilisateur` = `user_email` WHERE (ce_utilisateur IS NULL OR char_length(ce_utilisateur) > 6OR ce_utilisateur = 0) and courriel_utilisateur like '%@%'";$utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail);echo "modification des images ayant un identifiant";$requete_annu_mail = "UPDATE ".$this->bd_cel.".`cel_images` join ".$this->bd_cel.".`users` ON ID = ce_utilisateur SET pseudo = user_nicename,`courriel_utilisateur` = `user_email` WHERE (ce_utilisateur IS NULL OR char_length(ce_utilisateur) > 6) and (courriel_utilisateur is null or courriel_utilisateur='')";$utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail);echo "suppression des autres valeurs ce_utilisateur";$requete_annu_mail = "UPDATE ".$this->bd_cel.".`cel_images` SET ce_utilisateur = NULL, courriel_utilisateur = if (ce_utilisateur like '%@%'and (courriel_utilisateur is null or courriel_utilisateur='') , ce_utilisateur, courriel_utilisateur)WHERE ce_utilisateur IS NOT NULL AND (LENGTH(ce_utilisateur) > 6 OR trim(ce_utilisateur) = '')";$utilisateur_mail = $this->bdd->recupererTous($requete_annu_mail);echo "suppression des images\n";$requete_anonyme = "DELETE FROM ".$this->bd_cel.".`cel_images` WHERE (ce_utilisateur IS NULL OR char_length(ce_utilisateur) > 6OR ce_utilisateur = 0) and (`courriel_utilisateur` is null or `courriel_utilisateur` not like '%@%')";$this->bdd->requeter($requete_anonyme);/* echo "suppression des tags obs anonymes";$requete_create = "CREATE TABLE ".$this->bd_cel.".user_mot_cle_absent AS SELECT distinct id_utilisateur FROM ".$this->bd_cel.".cel_arbre_mots_cles_obs WHERE id_utilisateur not in(SELECT distinct id_utilisateur FROM ".$this->bd_cel.".cel_arbre_mots_cles_obs WHERE id_utilisateur in(select distinct ce_utilisateur from ".$this->bd_cel.".cel_obs) orid_utilisateur in (SELECT distinct courriel_utilisateur FROM ".$this->bd_cel.".cel_obs))";$this->bdd->requeter($requete_create);$requete_index = "ALTER TABLE ".$this->bd_cel.".`user_mot_cle_absent` ADD PRIMARY KEY(`id_utilisateur`);";$this->bdd->requeter($requete_index);$requete_anonyme = "DELETE FROM ".$this->bd_cel.".`cel_arbre_mots_cles_obs` WHERE `id_utilisateur` in (SELECT * FROM ".$this->bd_cel.".`user_mot_cle_absent`);";$this->bdd->requeter($requete_anonyme);$requete_anonyme = "DROP TABLE ".$this->bd_cel.".user_mot_cle_absent;";$this->bdd->requeter($requete_anonyme);$requete_anonyme = "UPDATE ".$this->bd_cel.".`cel_arbre_mots_cles_obs` a join ".$this->bd_cel.".cel_obs b on a.`id_utilisateur` = b.courriel_utilisateur SET a.`id_utilisateur` = b.ce_utilisateurWHERE b.ce_utilisateur IS NOT NULL AND b.ce_utilisateur != ''";$this->bdd->requeter($requete_anonyme);*/}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 ".$this->bd_cel.".cel_obs SET nom_referentiel = '".$referentiel."' WHERE nom_referentiel like '".$referentiel."%'";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET nom_referentiel = 'Autre/inconnu' WHERE nom_sel_nn IS NULL or nom_sel_nn = '0'";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET nom_referentiel = 'apd' WHERE nom_referentiel like 'bdtao%'";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET nom_referentiel = 'bdtfx' WHERE nom_referentiel like 'bdnff%'";$this->bdd->requeter($requete);echo "effectuée \n";$requete = "UPDATE ".$this->bd_cel.".cel_obs SET nom_referentiel = 'Autre/inconnu' WHERE nom_referentiel IS NULL or nom_referentiel = ''";$this->bdd->requeter($requete);echo "effectuée \n";}$requete_verif = "SELECT nom_referentiel FROM ".$this->bd_cel.".cel_obs WHERE nom_referentiel NOT IN ('".implode("', '", $referentiels)."', 'Autre/inconnu')";$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 ".$this->bd_cel.".`cel_obs_etendues` WHERE `id_observation` not in (select `id_observation` from ".$this->bd_cel.".cel_obs);";$this->bdd->requeter($requete);$requete = "DELETE FROM ".$this->bd_cel.".`cel_mots_cles_obs_liaison` WHERE `id_element_lie` not in (select `id_observation` from ".$this->bd_cel.".cel_obs);";$this->bdd->requeter($requete);$requete = "DELETE FROM ".$this->bd_cel.".`cel_mots_cles_obs_liaison` WHERE `id_mot_cle` not in (SELECT `id_mot_cle` FROM ".$this->bd_cel.".`cel_arbre_mots_cles_obs`);";$this->bdd->requeter($requete);$requete = "DELETE FROM ".$this->bd_cel.".`cel_images` WHERE `ce_observation` is not null and `ce_observation` not in (select id_observation from ".$this->bd_cel.".cel_obs)";$this->bdd->requeter($requete);$requete = "DELETE FROM ".$this->bd_cel.".`cel_mots_cles_images_liaison` WHERE `id_element_lie` not in (select `id_image` from ".$this->bd_cel.".cel_images);";$this->bdd->requeter($requete);$requete = "DELETE FROM ".$this->bd_cel.".`cel_mots_cles_images_liaison` WHERE `id_mot_cle` not in (SELECT `id_mot_cle` FROM ".$this->bd_cel.".`cel_arbre_mots_cles_images`);";$this->bdd->requeter($requete);echo "effectuée \n";}private function verifierGeodatum() {echo "Uniformisation du geodatum";$requete = "UPDATE ".$this->bd_cel.".cel_obs SET geodatum = 'WGS84' WHERE (latitude IS NOT NULL or latitude != '0.00000') AND geodatum IS NULL";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET geodatum = NULL WHERE (latitude IS NULL or latitude = '0.00000')";$this->bdd->requeter($requete);echo "effectuée \n";echo "Suppression des coordonnées fausses : ";$requete = "UPDATE ".$this->bd_cel.".cel_obs SET latitude = NULL, longitude = NULL WHERE latitude < -90 OR latitude > 90 OR longitude < -180 OR longitude > 180";$this->bdd->requeter($requete);echo "effectuée \n";}private function verifierCodeInsee() {echo "Mise à jour des valeurs code_insee";$requete = 'UPDATE `cel_obs` SET `ce_zone_geo` = NULL,commentaire = concat(if(commentaire is null, "", concat(commentaire, ", ")), if(ce_zone_geo is null, "", concat("Zone geo : ",ce_zone_geo))) where `ce_zone_geo` not like "insee-c%"';$this->bdd->requeter($requete);$requete = 'UPDATE `cel_obs` SET `ce_zone_geo` = substr(`ce_zone_geo`, 9, 5) where `ce_zone_geo` like "insee-c:%"';$this->bdd->requeter($requete);$requete = 'UPDATE `cel_obs` SET `ce_zone_geo` = NULL where trim(`ce_zone_geo`) = ""';$this->bdd->requeter($requete);echo "effectuée \n";echo "Vérification du code insee";$requete = "ALTER TABLE ".$this->bd_cel.".`cel_obs` ADD IF NOT EXISTS `locality_consistency` INT(1) ;";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET locality_consistency = '0' WHERE((ce_zone_geo != 'INSEE-C:' and ce_zone_geo like 'INSEE-C:%') and code_insee_calcule != '') andreplace(`ce_zone_geo`, 'INSEE-C:', '') != `code_insee_calcule`";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET locality_consistency = '1' WHERE((ce_zone_geo != 'INSEE-C:' and ce_zone_geo like 'INSEE-C:%') and code_insee_calcule != '') andreplace(`ce_zone_geo`, 'INSEE-C:', '') = `code_insee_calcule`";$this->bdd->requeter($requete);$requete_verif = "SELECT `ce_zone_geo`, `code_insee_calcule`, `locality_consistency` FROM `cel_obs` WHERE `locality_consistency` IS NOT NULL";$verif = $this->bdd->recupererTous($requete_verif);if ($verif != array()) print_r($verif);echo "effectuée \n";}private function analyserMotsCles(){echo "Input source \n";$requete = "ALTER TABLE ".$this->bd_cel.".`cel_obs` ADD IF NOT EXISTS `input_source` VARCHAR(15)";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET input_source = 'PlantNet' WHERE `mots_cles_texte` like '%plantnet%'";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET input_source = 'autre' WHERE `mots_cles_texte` like '%MobileSauvages%'";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET input_source = 'widget' WHERE `mots_cles_texte` like '%Projets coopératifs%' and (input_source = '' OR input_source IS NULL)";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET input_source = 'widget' WHERE `mots_cles_texte` like '%widget%' and (input_source = '' OR input_source IS NULL)";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET input_source = 'CEL' WHERE input_source = '' OR input_source IS NULL";$this->bdd->requeter($requete);echo "Suppression motcle du chemin \n";$requete = "UPDATE ".$this->bd_cel.".`cel_arbre_mots_cles_obs` SET chemin =if(CHAR_LENGTH(chemin)-CHAR_LENGTH(`mot_cle`) = 2, '\/', substr(`chemin`, 1, CHAR_LENGTH(chemin)-CHAR_LENGTH(`mot_cle`)-2))";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".`cel_arbre_mots_cles_images` SET chemin =substr(`chemin`, 1, CHAR_LENGTH(chemin)-CHAR_LENGTH(`mot_cle`)-1)";$this->bdd->requeter($requete);echo "Certitude à certaine quand obs validée sur ip \n";$requete = "UPDATE ".$this->bd_cel.".`cel_obs` c left join(SELECT distinct `ce_observation`, `nom_sel_nn`FROM ".$this->bd_del.".`del_commentaire` WHERE `proposition_retenue` = 1) d on`ce_observation` = `id_observation` SET `certitude` = 'certain'WHERE (c.`mots_cles_texte` LIKE '%adeterminer%'or c.`certitude` = 'à déterminer') and c.`nom_sel_nn` = d.`nom_sel_nn`";$this->bdd->requeter($requete);echo "Certitude à douteux quand obs validée sur ip mais num_nom diff entre ip et cel \n";$requete = "UPDATE ".$this->bd_cel.".`cel_obs` c left join(SELECT distinct `ce_observation`, `nom_sel_nn`FROM ".$this->bd_del.".`del_commentaire` WHERE `proposition_retenue` = 1 ) d on`ce_observation` = `id_observation` SET `certitude` = 'douteux'WHERE (c.`mots_cles_texte` LIKE '%adeterminer%'or c.`certitude` = 'à déterminer') and c.`nom_sel_nn` != d.`nom_sel_nn`";$this->bdd->requeter($requete);echo "Certitude à aDeterminer quand obs non validée sur ip \n";$requete = "UPDATE ".$this->bd_cel.".`cel_obs` c SET `certitude` = 'à déterminer'WHERE c.`mots_cles_texte` LIKE '%adeterminer%' AND(c.`certitude` = '' or c.certitude IS NULL)";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".`cel_obs` SET`mots_cles_texte` = REPLACE(`mots_cles_texte`, 'aDeterminer,', '')WHERE `mots_cles_texte` LIKE '%adeterminer,%'";$this->bdd->requeter($requete);}private function changerSensible(){echo "Sensible \n";$requete = "ALTER TABLE ".$this->bd_cel.".`cel_obs` ADD IF NOT EXISTS `published_location` varchar(50)";$this->bdd->requeter($requete);$requete = "UPDATE ".$this->bd_cel.".cel_obs SET published_location = 'localité' WHERE `mots_cles_texte` like '%sensible%'";$this->bdd->requeter($requete);}}