New file |
0,0 → 1,692 |
<?php |
class Maintenance extends Script { |
|
protected $bdd; |
protected $parametres_autorises = array( |
'-mc' => array(false, '1', 'Mot clef à chercher pour régénérer les machins'), |
'-doublon' => array(false, '1', "Id du mot clé qu'on veut réduire à un autre"), |
'-util' => array(false, null, "Id de l'utilisateur"), |
'-cible' => array(false, '1', "Id de l'autre mot clé") |
); |
|
public function __construct($script_nom, $parametres_cli) { |
parent::__construct($script_nom, $parametres_cli); |
$this->bdd = new Bdd(); |
} |
|
public function executer() { |
$cmd = $this->getParametre('a'); |
try { |
switch ($cmd) { |
case 'regenererMotsClesTexteObs' : |
$this->regenererMotsClesTexteObs(); |
break; |
case 'regenererMotsClesTexteImages' : |
$this->regenererMotsClesTexteImages(); |
break; |
case 'regenererMotsClesTexteObsTout' : |
$this->regenererMotsClesTexteObs(true); |
break; |
case 'regenererMotsClesTexteImagesTout' : |
$this->regenererMotsClesTexteImages(true); |
break; |
case 'viderMotsClesTexteImagesSansMotsCles' : |
$this->viderMotsClesTexteImagesSansMotsCles(); |
break; |
case 'viderMotsClesTexteObsSansMotsCles' : |
$this->viderMotsClesTexteObsSansMotsCles(); |
break; |
case 'regenererChampsTailleImage' : |
$this->regenererChampsTailleImage(); |
break; |
case 'reparerLiaisonsOublieesObs' : |
$this->reparerLiaisonsOublieesObs(); |
break; |
case 'reparerLiaisonsOublieesImages' : |
$this->reparerLiaisonsOublieesImages(); |
break; |
case 'reparerLiaisonsObsParMotsClesTexte' : |
$mot_clef = $this->getParametre('mc'); |
$this->reparerLiaisonsObsParMotsClesTexte($mot_clef); |
break; |
case 'reductionMotsClesImages' : |
// ex: cli.php maintenance -a reductionMotsClesImages -doublon 1234 -cible 5678 |
$idDoublon = $this->getParametre('doublon'); |
$idCible = $this->getParametre('cible'); |
$this->reductionMotsClesImages($idDoublon, $idCible); |
break; |
case 'reductionMotsClesImagesUtil' : |
// ex: cli.php maintenance -a reductionMotsClesImagesUtil -util 6865 |
$idUtilisateur = $this->obtenirParametreIntObligatoirePourMethode('util'); |
$this->reductionMotsClesImagesUtilisateur($idUtilisateur); |
break; |
case 'reduireEtNormaliserMotsClesImagesUtil' : |
// ex: cli.php maintenance -a reduireEtNormaliserMotsClesImages -util 6865 |
$idUtilisateur = $this->obtenirParametreIntObligatoirePourMethode('util'); |
$this->reduireEtNormaliserMotsClesImages($idUtilisateur); |
break; |
case 'reduireEtNormaliserMotsClesImages' : |
// ex: cli.php maintenance -a reduireEtNormaliserMotsClesImages |
$this->reduireEtNormaliserMotsClesImages(); |
break; |
case 'reductionMotsClesObs' : |
// ex: cli.php maintenance -a reductionMotsClesObs -doublon 1234 -cible 5678 |
$idDoublon = $this->getParametre('doublon'); |
$idCible = $this->getParametre('cible'); |
$this->reductionMotsClesObs($idDoublon, $idCible); |
break; |
case 'reductionMotsClesObsUtil' : |
// ex: cli.php maintenance -a reductionMotsClesObsUtil -util 6865 |
$idUtilisateur = $this->obtenirParametreIntObligatoirePourMethode('util'); |
$this->reductionMotsClesObsUtilisateur($idUtilisateur); |
break; |
case 'reduireEtNormaliserMotsClesObsUtil' : |
// ex: cli.php maintenance -a reduireEtNormaliserMotsClesObs -util 6865 |
$idUtilisateur = $this->obtenirParametreIntObligatoirePourMethode('util'); |
$this->reduireEtNormaliserMotsClesObs($idUtilisateur); |
break; |
case 'reduireEtNormaliserMotsClesObs' : |
// ex: cli.php maintenance -a reduireEtNormaliserMotsClesObs |
$this->reduireEtNormaliserMotsClesObs(); |
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 obtenirParametreIntObligatoirePourMethode($param) { |
$param_val = $this->getParametre($param); |
if(!$param_val || !is_numeric($param_val)) { |
$msg = "Erreur : le paramètre $param est obligatoire pour cette méthode et doit être un entier \n"; |
throw new Exception($msg); |
} |
return $param_val; |
} |
|
// Régénère le champ "mots_cles_texte" pour toutes les images ayant des mots clés mais ayant ce champ |
// vide, suite à une erreur |
protected function regenererMotsClesTexteImages($tout = false) { |
$req = "SELECT id_image FROM cel_images WHERE ". |
"id_image IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)"; |
if(!$tout) { |
$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')"; |
} |
$res = $this->bdd->recupererTous($req); |
echo count($res) . " images trouvées\n"; |
foreach ($res as $image) { |
$req = "UPDATE cel_images SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_images cm " |
. "INNER JOIN cel_mots_cles_images_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_image'] . "') " |
. "WHERE id_image = '" . $image['id_image'] . "'"; |
$this->bdd->requeter($req); |
} |
} |
|
// Régénère le champ "mots_cles_texte" pour toutes les observations ayant des mots clés mais ayant ce champ |
// vide, suite à une erreur |
protected function regenererMotsClesTexteObs($tout = false) { |
$req = "SELECT id_observation FROM cel_obs WHERE ". |
"id_observation IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)"; |
if(!$tout) { |
$req .= " AND (mots_cles_texte IS NULL OR mots_cles_texte='')"; |
} |
$res = $this->bdd->recupererTous($req); |
echo count($res) . " observations trouvées\n"; |
foreach ($res as $image) { |
$req = "UPDATE cel_obs SET mots_cles_texte = (SELECT GROUP_CONCAT(mot_cle) FROM cel_arbre_mots_cles_obs cm " |
. "INNER JOIN cel_mots_cles_obs_liaison cml ON cml.id_mot_cle = cm.id_mot_cle AND cml.id_element_lie = '" . $image['id_observation'] . "') " |
. "WHERE id_observation = '" . $image['id_observation'] . "'"; |
$this->bdd->requeter($req); |
} |
} |
|
// Vide le champ "mots_cles_texte" pour toutes les images n'ayant aucun mot clé |
protected function viderMotsClesTexteImagesSansMotsCles() { |
$req = "UPDATE cel_images SET mots_cles_texte = NULL WHERE id_image NOT IN (SELECT id_element_lie FROM cel_mots_cles_images_liaison)"; |
$res = $this->bdd->requeter($req); |
echo "$res images mises à jour\n"; |
} |
|
// Vide le champ "mots_cles_texte" pour toutes les obs n'ayant aucun mot clé |
protected function viderMotsClesTexteObsSansMotsCles() { |
$req = "UPDATE cel_obs SET mots_cles_texte = NULL WHERE id_observation NOT IN (SELECT id_element_lie FROM cel_mots_cles_obs_liaison)"; |
$res = $this->bdd->requeter($req); |
echo "$res observations mises à jour\n"; |
} |
|
protected function regenererChampsTailleImage() { |
$req = "SELECT id_image FROM cel_images WHERE hauteur = 0 OR largeur = 0"; |
$res = $this->bdd->recupererTous($req); |
|
echo count($res)." images concernees \n"; |
echo "Début du traitement \n"; |
$images_maj = 0; |
$image_meta_ratees = 0; |
$images_inexistantes = 0; |
|
foreach($res as $image) { |
$chemin = $this->getCheminImage($image['id_image']); |
if(file_exists($chemin)) { |
list($largeur, $hauteur) = @getimagesize($chemin); |
if(is_numeric($largeur) && is_numeric($hauteur)) { |
$req_maj = "UPDATE cel_images SET hauteur = '".$hauteur."', largeur = '".$largeur."' ". |
"WHERE id_image = '".$image['id_image']."'"; |
$maj_taille_image = $this->bdd->requeter($req_maj); |
if($maj_taille_image) { |
$images_maj++; |
} |
} else { |
$image_meta_ratees++; |
} |
} else { |
$images_inexistantes++; |
} |
$this->afficherAvancement("\tImages traitées : ", 1); |
} |
echo "\n"; |
echo "Fin de la régénération des tailles des images à partir des metadonnées \n"; |
echo $images_maj." images ont vu leur infos de taille régénérées \n"; |
echo $image_meta_ratees." images ont raté l'extraction de metadonnées \n"; |
echo $images_inexistantes." images n'existent pas en tant que fichier \n"; |
} |
|
private function getCheminImage($id) { |
$chemin_base = Config::get('dossierImages'); |
|
$id = sprintf('%09s', $id); |
$id = wordwrap($id, 3 , '_', true); |
|
list($dossierNiveau1, $dossierNiveau2) = explode('_', $id); |
|
$chemin = $chemin_base.'/'.$dossierNiveau1.'/'.$dossierNiveau2.'/O/'.$id.'_O.jpg'; |
|
return $chemin; |
} |
|
protected function reparerLiaisonsOublieesObs() { |
// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car |
// dans la table de liaison il est souvent vide |
$requete_liaisons = "SELECT com.id_observation, com.id_mot_cle_obs, co.ce_utilisateur ". |
"FROM `cel_obs_mots_cles` com INNER JOIN cel_obs co ON co.id_observation = com.id_observation "; |
|
$liaisons = $this->bdd->recupererTous($requete_liaisons); |
$nb_liaisons_originales = count($liaisons); |
|
// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé |
$requete_mots_cles = "SELECT id_mot_cle_obs, id_utilisateur, mot_cle FROM cel_mots_cles_obs "; |
$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles); |
|
$anciens_mots_cles_fmt = array(); |
foreach($anciens_mots_cles as &$ancien_mot_cle) { |
$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur']; |
if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) { |
$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array(); |
} |
$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_obs']] = $ancien_mot_cle; |
} |
|
// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot |
$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_obs"; |
$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles); |
|
$nouveau_mots_cles_fmt = array(); |
foreach($nouveau_mots_cles as &$nouveau_mot_cle) { |
$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur']; |
if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) { |
$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array(); |
} |
$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][strtolower($nouveau_mot_cle['mot_cle'])] = $nouveau_mot_cle; |
} |
|
$anciens_mot_cles_pas_trouves = 0; |
$nouveaux_mot_cles_pas_trouves = 0; |
$utilisateurs_pas_trouves = 0; |
$valeurs_a_inserer = array(); |
|
$ids_obs = array(); |
|
foreach($liaisons as &$liaison) { |
$id_utilisateur_liaison = $liaison['ce_utilisateur']; |
$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_obs']; |
|
if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) { |
if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) { |
$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle']; |
$texte_ancien_mot_cle = strtolower($texte_ancien_mot_cle); // l'astuce de ouf ! |
if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) { |
if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) { |
$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle']; |
|
$valeurs_a_inserer[] = array( |
'id_element_lie' => $liaison['id_observation'], |
'id_mot_cle' => $nouvel_id_mot_cle, |
'ancienne_liaison' => $liaison |
); |
$ids_obs[] = $liaison['id_observation']; |
} else { |
$nouveaux_mot_cles_pas_trouves++; |
} |
} else { |
|
} |
|
} else { |
$anciens_mot_cles_pas_trouves++; |
} |
} else { |
$utilisateurs_pas_trouves++; |
} |
} |
|
echo "Anciennes liaisons ".$nb_liaisons_originales." \n"; |
echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n"; |
echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n"; |
echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n"; |
echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n"; |
|
$tranches = array_chunk($valeurs_a_inserer, 800); |
|
foreach($tranches as $tranche) { |
$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ". |
"VALUES "; |
foreach($tranche as $l) { |
$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),"; |
} |
$requete_insertion = rtrim($requete_insertion, ','); |
$insertion = $this->bdd->requeter($requete_insertion); |
$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1); |
} |
echo "\n"; |
} |
|
private function reparerLiaisonsOublieesImages() { |
// Toutes les liaisons obs-motscles avec l'id utilisateur issu de la table cel obs car |
// dans la table de liaison il est souvent vide |
$requete_liaisons = "SELECT cim.id_image, cim.id_mot_cle_image, ci.ce_utilisateur ". |
"FROM cel_images_mots_cles cim INNER JOIN cel_images ci ON ci.id_image = cim.id_image "; |
|
$liaisons = $this->bdd->recupererTous($requete_liaisons); |
|
// Tous les anciens mots clés, à classer par utilisateur, puis par id mot clé |
$requete_mots_cles = "SELECT id_mot_cle_image, id_utilisateur, mot_cle FROM cel_mots_cles_images "; |
$anciens_mots_cles = $this->bdd->recupererTous($requete_mots_cles); |
|
$anciens_mots_cles_fmt = array(); |
foreach($anciens_mots_cles as &$ancien_mot_cle) { |
$id_utilisateur_ancien = $ancien_mot_cle['id_utilisateur']; |
if(!isset($anciens_mots_cles_fmt[$id_utilisateur_ancien])) { |
$anciens_mots_cles_fmt[$id_utilisateur_ancien] = array(); |
} |
$anciens_mots_cles_fmt[$id_utilisateur_ancien][$ancien_mot_cle['id_mot_cle_image']] = $ancien_mot_cle; |
} |
|
// Tous les nouveau mots clés, à classer par utilisateur, puis par valeur textuelle du mot |
$requete_nouveaux_mots_cles = "SELECT * FROM cel_arbre_mots_cles_images"; |
$nouveau_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cles); |
|
$nouveau_mots_cles_fmt = array(); |
foreach($nouveau_mots_cles as &$nouveau_mot_cle) { |
$id_utilisateur_nouveau = $nouveau_mot_cle['id_utilisateur']; |
if(!isset($nouveau_mots_cles_fmt[$id_utilisateur_nouveau])) { |
$nouveau_mots_cles_fmt[$id_utilisateur_nouveau] = array(); |
} |
$nouveau_mots_cles_fmt[$id_utilisateur_nouveau][$nouveau_mot_cle['mot_cle']] = $nouveau_mot_cle; |
} |
|
$anciens_mot_cles_pas_trouves = 0; |
$nouveaux_mot_cles_pas_trouves = 0; |
$utilisateurs_pas_trouves = 0; |
$valeurs_a_inserer = array(); |
|
foreach($liaisons as &$liaison) { |
$id_utilisateur_liaison = $liaison['ce_utilisateur']; |
$id_mot_cle_ancien_liaison = $liaison['id_mot_cle_image']; |
|
if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison])) { |
if(isset($anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison])) { |
$texte_ancien_mot_cle = $anciens_mots_cles_fmt[$id_utilisateur_liaison][$id_mot_cle_ancien_liaison]['mot_cle']; |
if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison])) { |
if(isset($nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle])) { |
$nouvel_id_mot_cle = $nouveau_mots_cles_fmt[$id_utilisateur_liaison][$texte_ancien_mot_cle]['id_mot_cle']; |
|
$valeurs_a_inserer[] = array( |
'id_element_lie' => $liaison['id_image'], |
'id_mot_cle' => $nouvel_id_mot_cle, |
'ancienne_liaison' => $liaison |
); |
$ids_imgs[] = $liaison['id_image']; |
} else { |
$nouveaux_mot_cles_pas_trouves++; |
} |
} else { |
|
} |
|
} else { |
$anciens_mot_cles_pas_trouves++; |
} |
} else { |
$utilisateurs_pas_trouves++; |
} |
} |
|
echo "Liaisons à insérer ".count($valeurs_a_inserer)."\n"; |
echo "Utilisateurs inconnus ".$utilisateurs_pas_trouves."\n"; |
echo "Anciens mots clés inconnus ".$anciens_mot_cles_pas_trouves."\n"; |
echo "Nouveaux mots clés inconnus ".$nouveaux_mot_cles_pas_trouves."\n"; |
|
$tranches = array_chunk($valeurs_a_inserer, 800); |
|
foreach($tranches as $tranche) { |
$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_images_liaison (id_element_lie, id_mot_cle) ". |
"VALUES "; |
foreach($tranche as $l) { |
$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),"; |
} |
$requete_insertion = rtrim($requete_insertion, ','); |
$insertion = $this->bdd->requeter($requete_insertion); |
$this->afficherAvancement("Liaisons insérées (par paquet de 800) ", 1); |
} |
echo "\n"; |
} |
|
private function reparerLiaisonsObsParMotsClesTexte($mot_cle_texte_recherche) { |
$ancienne_table_obs = Config::get('table_obs_recup'); |
$requete_anciens_mots_cles_texte = "SELECT ce_utilisateur, id_observation, mots_cles_texte ". |
"FROM ".$ancienne_table_obs." WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%'"; |
$obs_a_mot_cle = $this->bdd->recupererTous($requete_anciens_mots_cles_texte); |
|
$requete_nouveaux_mots_cle = "SELECT * FROM cel_arbre_mots_cles_obs ". |
"WHERE id_utilisateur IN ". |
"(SELECT id_utilisateur FROM ".$ancienne_table_obs." ". |
"WHERE mots_cles_texte LIKE '%".$mot_cle_texte_recherche."%')"; |
$nouveaux_mots_cles = $this->bdd->recupererTous($requete_nouveaux_mots_cle); |
|
$mots_cles_indexes = array(); |
foreach($nouveaux_mots_cles as $mot_cle) { |
$mots_cles_indexes[$mot_cle['id_utilisateur']][strtolower($mot_cle['mot_cle'])] = $mot_cle; |
} |
|
$liaisons_a_inserer = array(); |
$utilFoirax = 0; |
$mcFoirax = 0; |
foreach($obs_a_mot_cle as $obs) { |
$mots_cles_texte_tab = explode(',', $obs['mots_cles_texte']); |
$id_observation = $obs['id_observation']; |
$id_utilisateur = $obs['ce_utilisateur']; |
foreach($mots_cles_texte_tab as $mot_cle_t) { |
if($mot_cle_t == $mot_cle_texte_recherche) { |
if (isset($mots_cles_indexes[$id_utilisateur])) { |
if (isset($mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)])) { |
$id_nouveau_mot_cle = $mots_cles_indexes[$id_utilisateur][strtolower($mot_cle_t)]['id_mot_cle']; |
} else { |
$mcFoirax++; |
} |
} else { |
$utilFoirax++; |
} |
$liaisons_a_inserer[] = array('id_element_lie' => $id_observation, 'id_mot_cle' => $id_nouveau_mot_cle); |
} |
} |
} |
echo "Utilisateurs pas dans le tableau: $utilFoirax\n"; |
echo "Motf-clefs pas dans le tableau: $mcFoirax\n"; |
//echo '<pre>'.print_r($liaisons_a_inserer, true).'</pre>'; |
echo "Liaisons à insérer: " . count($liaisons_a_inserer) . " \n"; |
|
$requete_insertion = "INSERT IGNORE INTO cel_mots_cles_obs_liaison (id_element_lie, id_mot_cle) ". |
"VALUES "; |
foreach($liaisons_a_inserer as $l) { |
$requete_insertion .= "('".$l['id_element_lie']."', '".$l['id_mot_cle']."'),"; |
} |
$requete_insertion = rtrim($requete_insertion, ','); |
$insertion = $this->bdd->requeter($requete_insertion); |
} |
|
// Change toutes les associations images - mots_cles dont l'id mot_cle est $idDoublon, pour le remplacer par $idCible |
private function reductionMotsClesImages($idDoublon, $idCible, $supprimerVieuxMotsCles=true) { |
echo "Réduction de $idDoublon (images) à $idCible" . PHP_EOL; |
|
$q1 = "SELECT id_element_lie FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idCible;"; |
$r1 = $this->bdd->requeter($q1); |
$idsImages = array(); |
foreach ($r1 as $r) { |
$idsImages[] = $r['id_element_lie']; |
} |
|
if (count($idsImages) > 0) { |
// On vire ceux qui ont le doublon mais qui ont aussi la cible |
$q2 = "DELETE FROM cel_mots_cles_images_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsImages) . ");"; |
$r2 = $this->bdd->requeter($q2); |
} |
|
// On convertit tous les doublons en cible |
$q3 = "UPDATE cel_mots_cles_images_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;"; |
$r3 = $this->bdd->requeter($q3); |
|
if ($supprimerVieuxMotsCles) { |
// On supprime le mot cle qui sert plus à rien |
$q4 = "DELETE FROM cel_arbre_mots_cles_images WHERE id_mot_cle = $idDoublon;"; |
$r4 = $this->bdd->requeter($q4); |
} |
} |
|
// @TODO factoriser avec reductionMotsClesImages |
// Change toutes les associations obs - mots_cles dont l'id mot_cle est $idDoublon, pour le remplacer par $idCible |
private function reductionMotsClesObs($idDoublon, $idCible, $supprimerVieuxMotsCles=true) { |
echo "Réduction de $idDoublon (obs) à $idCible" . PHP_EOL; |
|
$q1 = "SELECT id_element_lie FROM cel_mots_cles_obs_liaison WHERE id_mot_cle = $idCible;"; |
$r1 = $this->bdd->requeter($q1); |
$idsObs = array(); |
foreach ($r1 as $r) { |
$idsObs[] = $r['id_element_lie']; |
} |
|
if (count($idsObs) > 0) { |
// On vire ceux qui ont le doublon mais qui ont aussi la cible |
$q2 = "DELETE FROM cel_mots_cles_obs_liaison WHERE id_mot_cle = $idDoublon AND id_element_lie IN (" . implode(',', $idsObs) . ");"; |
$r2 = $this->bdd->requeter($q2); |
} |
|
// On convertit tous les doublons en cible |
$q3 = "UPDATE cel_mots_cles_obs_liaison SET id_mot_cle = $idCible WHERE id_mot_cle = $idDoublon;"; |
$r3 = $this->bdd->requeter($q3); |
|
if ($supprimerVieuxMotsCles) { |
// On supprime le mot cle qui sert plus à rien |
$q4 = "DELETE FROM cel_arbre_mots_cles_obs WHERE id_mot_cle = $idDoublon;"; |
$r4 = $this->bdd->requeter($q4); |
} |
} |
|
private function reductionMotsClesImagesUtilisateur($idUtilisateur) { |
$this->reductionMotsClesUtilisateur($idUtilisateur, "images"); |
} |
|
private function reductionMotsClesObsUtilisateur($idUtilisateur) { |
$this->reductionMotsClesUtilisateur($idUtilisateur, "obs"); |
} |
|
// Parcourt l'arbre des mots-cles (obs ou images) de l'utilisateur dont l'id est $idUtilisateur, |
// et réduit tous ceux dont le chemin n'est pas unique |
private function reductionMotsClesUtilisateur($idUtilisateur, $mode = "images") { |
$table = "cel_arbre_mots_cles_"; |
if ($mode == "images" || $mode == "obs") { |
$table .= $mode; |
} |
$q1 = "SELECT id_mot_cle, chemin, mot_cle, (LOCATE(mot_cle, chemin) != 0) as valide FROM `$table`" |
. " WHERE id_utilisateur = '$idUtilisateur'" |
. " ORDER BY chemin ASC, valide DESC;"; |
$r1 = $this->bdd->requeter($q1); |
|
$idsMotsCles = array(); |
$nbVieux = 0; |
foreach ($r1 as $r) { |
$k = strtolower($r['chemin']); |
if (! isset($idsMotsCles[$k])) { |
$idsMotsCles[$k] = array(); |
} |
$idsMotsCles[$k][] = $r['id_mot_cle']; |
$nbVieux++; |
} |
$nbNouveaux = count($idsMotsCles); |
|
echo "Réduction de $nbVieux à $nbNouveaux mots-cles $mode" . PHP_EOL; |
$aTraiter = 0; |
foreach ($idsMotsCles as $chemin => $ids) { |
if (count($ids) > 1) { |
$aTraiter ++; |
$idCible = array_shift($ids); |
foreach ($ids as $idDoublon) { |
if ($mode == "images") { |
$this->reductionMotsClesImages($idDoublon, $idCible); |
} elseif ($mode == "obs") { |
$this->reductionMotsClesObs($idDoublon, $idCible); |
} |
} |
} |
} |
echo "$aTraiter groupes ($mode) ont été réduits" . PHP_EOL; |
} |
|
private function reduireEtNormaliserMotsClesImages($util=null) { |
$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_images', 'chemin', 'images', $util); |
} |
|
private function reduireEtNormaliserMotsClesObs($util=null) { |
$this->reduireEtNormaliserMotsCles('cel_arbre_mots_cles_obs', 'chemin', 'obs', $util); |
} |
|
private function reduireEtNormaliserMotsCles($table, $colonne, $mode = "images", $util=null) { |
echo "Suppression des accents dans la table $table, colonne $colonne ..."; |
$this->supprimerAccents($table, $colonne, $util); |
echo "effectuée \n"; |
echo "Suppression des majuscules dans la table $table, colonne $colonne ..."; |
$this->supprimerMajuscules($table, $colonne, $util); |
echo "effectuée \n"; |
echo "\n"; |
if ($util !== null) { |
echo "Réduction de tous les mots clés $mode de l'utilisateur $util\n"; |
if($mode == "images") { |
$this->reductionMotsClesImagesUtilisateur($util); |
} elseif($mode == "obs") { |
$this->reductionMotsClesObsUtilisateur($util); |
} |
} else { |
echo "Réduction de tous les mots clés $mode \n"; |
$req_utilisateurs = "SELECT DISTINCT id_utilisateur FROM ".$table; |
$utilisateurs = $this->bdd->recupererTous($req_utilisateurs); |
|
foreach($utilisateurs as $utilisateur) { |
echo "Utilisateur en cours de traitement : ".$utilisateur['id_utilisateur']." \n"; |
if($mode == "images") { |
$this->reductionMotsClesImagesUtilisateur($utilisateur['id_utilisateur']); |
} elseif($mode == "obs") { |
$this->reductionMotsClesObsUtilisateur($utilisateur['id_utilisateur']); |
} |
} |
} |
echo "Fin de la réduction des mots clés $mode \n"; |
} |
|
private function supprimerMajuscules($table, $colonne, $util=null) { |
$requete = "UPDATE ".$table." SET ".$colonne." = LOWER(".$colonne.")"; |
if ($util !== null) { |
$requete .= " WHERE id_utilisateur = $util"; |
} |
$this->bdd->requeter($requete); |
} |
|
private function supprimerAccents($table, $colonne, $util=null) { |
|
$requetes = array( |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Š','S')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'š','s')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ð','Dj')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ž','Z')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ž','z')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'À','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Á','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Â','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ã','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ä','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Å','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Æ','A')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ç','C')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'È','E')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'É','E')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ê','E')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ë','E')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ì','I')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Í','I')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Î','I')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ï','I')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ñ','N')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ò','O')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ó','O')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ô','O')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Õ','O')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ö','O')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ø','O')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ù','U')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ú','U')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Û','U')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ü','U')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Ý','Y')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'Þ','B')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ß','Ss')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'à','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'á','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'â','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ã','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ä','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'å','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'æ','a')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ç','c')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'è','e')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'é','e')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ê','e')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ë','e')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ì','i')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'í','i')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'î','i')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ï','i')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ð','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ñ','n')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ò','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ó','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ô','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'õ','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ö','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ø','o')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ù','u')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ú','u')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'û','u')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ý','y')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'þ','b')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ÿ','y')", |
"UPDATE ".$table." SET ".$colonne." = REPLACE(".$colonne.",'ƒ','f')", |
); |
|
foreach($requetes as $requete) { |
if ($util !== null) { |
$requete .= " WHERE id_utilisateur = $util"; |
} |
$this->bdd->requeter($requete); |
} |
} |
} |
?> |