Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2101 → Rev 2102

/trunk/scripts/modules/maintenance/Maintenance.php
27,6 → 27,12
case 'regenererChampsTailleImage' :
$this->regenererChampsTailleImage();
break;
case 'reparerLiaisonsOublieesObs' :
$this->reparerLiaisonsOublieesObs();
break;
case 'reparerLiaisonsOublieesImages' :
$this->reparerLiaisonsOublieesImages();
break;
default :
$msg = "Erreur : la commande '$cmd' n'existe pas!\n".
"Commandes existantes : regenererMotsClesTexteImages, regenererMotsClesTexteObs";
129,5 → 135,217
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][$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'];
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";
// éventuellement dans le cas ou l'on verrait des mots clés manquants dans l'index texte
/*echo "\nRegénération de l'index des mots clés pour les obs concernées\n";
$ids_obs = array_unique($ids_obs);
foreach($ids_obs as $id_obs_index) {
$req_index = "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 = '".$id_obs_index."') "
. "WHERE id_observation = '".$id_obs_index."'";
$this->bdd->requeter($req_index);
$this->afficherAvancement("Index mots clés régénérés ", 1);
}
echo "\nFin de la régénération de l'index des mots clés";*/
}
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";
// éventuellement dans le cas ou l'on verrait des mots clés manquants dans l'index texte
/*echo "\nRegénération de l'index des mots clés pour les obs concernées\n";
$ids_imgs = array_unique($ids_imgs);
foreach($ids_imgs as $id_image_index) {
$req_index = "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 = '".$id_image_index."') "
. "WHERE id_image = '".$id_image_index."'";
$this->bdd->requeter($req_index);
$this->afficherAvancement("Index mots clés régénérés ", 1);
}
echo "\nFin de la régénération de l'index des mots clés";*/
}
}
?>