69,9 → 69,36 |
// 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 : regenererMotsClesTexteImages, regenererMotsClesTexteObs"; |
"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) { |
429,7 → 456,7 |
|
// 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 à $idCible" . PHP_EOL; |
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); |
455,10 → 482,51 |
} |
} |
|
// Parcourt l'arbre des mots-cles images de l'utilisateur dont l'id est $idUtilisateur, et réduit tous ceux dont le chemin |
// n'est pas unique |
// @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) { |
$q1 = "SELECT id_mot_cle, chemin, mot_cle, (LOCATE(mot_cle, chemin) != 0) as valide FROM cel_arbre_mots_cles_images" |
$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); |
475,7 → 543,7 |
} |
$nbNouveaux = count($idsMotsCles); |
|
echo "Réduction de $nbVieux à $nbNouveaux mots-cles" . PHP_EOL; |
echo "Réduction de $nbVieux à $nbNouveaux mots-cles $mode" . PHP_EOL; |
$aTraiter = 0; |
foreach ($idsMotsCles as $chemin => $ids) { |
if (count($ids) > 1) { |
482,11 → 550,15 |
$aTraiter ++; |
$idCible = array_shift($ids); |
foreach ($ids as $idDoublon) { |
$this->reductionMotsClesImages($idDoublon, $idCible); |
if ($mode == "images") { |
$this->reductionMotsClesImages($idDoublon, $idCible); |
} elseif ($mode == "obs") { |
$this->reductionMotsClesObs($idDoublon, $idCible); |
} |
} |
} |
} |
echo "$aTraiter groupes ont été réduits" . PHP_EOL; |
echo "$aTraiter groupes ($mode) ont été réduits" . PHP_EOL; |
} |
|
private function reduireEtNormaliserMotsClesImages($util=null) { |
493,6 → 565,10 |
$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); |
503,7 → 579,11 |
echo "\n"; |
if ($util !== null) { |
echo "Réduction de tous les mots clés $mode de l'utilisateur $util\n"; |
$this->reductionMotsClesImagesUtilisateur($util); |
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; |
513,9 → 593,8 |
echo "Utilisateur en cours de traitement : ".$utilisateur['id_utilisateur']." \n"; |
if($mode == "images") { |
$this->reductionMotsClesImagesUtilisateur($utilisateur['id_utilisateur']); |
} else { |
//TODO: créer cette fonction |
// $this->reductionMotsClesObsUtilisateur($utilisateur['id_utilisateur']); |
} elseif($mode == "obs") { |
$this->reductionMotsClesObsUtilisateur($utilisateur['id_utilisateur']); |
} |
} |
} |