Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2192 → Rev 2229

/trunk/scripts/modules/maintenance/Maintenance.php
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']);
}
}
}