Rev 2066 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// Encodage : UTF-8// +-------------------------------------------------------------------------------------------------------------------+/*** Traitement des mots clés cel pour les migrer vers des mots clés stockés avec path enumeration** Description : classe de migration vers des mots clés stockés avec path enumeration* Utilisation : php script.php migrationmotsclees -a obs* * Utilisation : php script.php migrationmotsclees -a images** @category PHP 5.3* @package scripts//Auteur original :* @author Aurélien PERONNET <aurelien@tela-botanica.org>* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2* @version $Id$*/// +-------------------------------------------------------------------------------------------------------------------+class Migrationmotscles extends Script {private $mode;// +-------------------------------------------------------------------------------------------------------------------+public function executer() {include_once dirname(__FILE__).'/bibliotheque/Dao.php';$cmd = $this->getParametre('a');$this->mode_verbeux = $this->getParametre('v');switch($cmd) {case 'obs':$this->mode = $cmd;$this->migrerMotsClesObservations();break;case 'images':$this->mode = $cmd;$this->migrerMotsClesImages();break;default:echo 'Méthode inconnue, les méthodes possibles sont obs et images'."\n";}}private function migrerMotsClesObservations() {$this->dao = new Dao('obs');$this->convertirNestedSetVersPathEnum();}private function migrerMotsClesImages() {$this->dao = new Dao('images');$this->convertirNestedSetVersPathEnum();}private function convertirNestedSetVersPathEnum() {$debut = microtime();$this->dao->viderTables();$mots_cles_hierarchiques = $this->dao->obtenirMotsClesOriginaux($this->mode);$mots_cles_hierarchiques = $this->formaterChemin($mots_cles_hierarchiques);$liaisons = $this->dao->obtenirLiaisonsMotsClesOriginaux($this->mode);if($this->mode_verbeux) {echo "-------------------------------------------------------------------\n";echo " Début de la migration des mots clés ".$this->mode." \n";echo " ".count($mots_cles_hierarchiques)." mots clés et ".count($liaisons)." liaisons à migrer \n";echo "-------------------------------------------------------------------\n";}$nb_mots_cles = 0;$nb_liaisons = 0;$mots_cles_slice = array_chunk($mots_cles_hierarchiques, 800, true);echo " Insertion des mots clés par paquet de 800 \n";foreach($mots_cles_slice as &$mots_cles_tranche) {$this->dao->insererMotsCles($mots_cles_tranche);$nb_mots_cles += 800;if($this->mode_verbeux) {$this->afficherAvancement(' mots clés insérés ', $nb_mots_cles);}}echo "\n Insertion des mots clés ".$this->mode." terminée \n";$infos_nouveaux_mots_cles = $this->dao->obtenirInfosNouveauxMotsCles();$correspondances = $this->formaterCorrespondanceCheminId($infos_nouveaux_mots_cles);$liaisons_slice = array_chunk($liaisons, 800, true);echo " Insertion des mots liaisons par paquet de 800 \n";foreach($liaisons_slice as &$liaison_tranche) {$this->dao->insererLiaisonsMotsCles($mots_cles_hierarchiques, $liaison_tranche, $correspondances);$nb_liaisons += 800;if($this->mode_verbeux) {$this->afficherAvancement(' liaisons insérées ', $nb_liaisons);}}echo "\n Insertion des liaisons ".$this->mode." terminée \n";$fin = microtime(true);if($this->mode_verbeux) {echo "\n";echo "-------------------------------------------------------------------\n";echo " Fin de la migration des mots clés ".$this->mode.", \n";echo " ".($fin - $debut)." secondes écoulées \n";echo " ".count($mots_cles_hierarchiques)." mots clés insérés \n";echo " ".count($liaisons)." liaisons insérées \n";echo "-------------------------------------------------------------------\n";echo "\n";}}private function formaterCorrespondanceCheminId($infos_nouveaux_mots_cles) {$mots_cles_correspondances = array();foreach($infos_nouveaux_mots_cles as &$mot) {$cle = $mot['chemin'].'-'.$mot['id_utilisateur'];$mots_cles_correspondances[$cle] = $mot;}return $mots_cles_correspondances;}private function formaterChemin($mots_cles) {$mots_cles_hierarchiques = array();$chemin_traites = array();$pbs = array('doublons' => array(), 'vides' => array());foreach($mots_cles as &$mot) {if(trim($mot['mot_cle']) != "") {$chemin = '/';$cle_parent = $mot['parent'].'-'.$mot['id_utilisateur'];if(isset($mots_cles_hierarchiques[$cle_parent])) {$chemin = $mots_cles_hierarchiques[$cle_parent]['chemin'];}$chemin .= self::simplifier($mot['mot_cle']).'/';$chemin = str_replace("//", "/", $chemin);if(!isset($chemin_traites[self::harmoniserPourDoublon($chemin).'-'.$mot['id_utilisateur']])) {$cle = $mot['id_mot_cle'].'-'.$mot['id_utilisateur'];$mots_cles_hierarchiques[$cle] = array('id_utilisateur' => $mot['id_utilisateur'],'chemin' => $chemin,'mot_cle' => $mot['mot_cle']);$chemin_traites[self::harmoniserPourDoublon($chemin).'-'.$mot['id_utilisateur']] = 1;} else {$pbs['doublons'][self::harmoniserPourDoublon($chemin).'-'.$mot['id_utilisateur']] = $mot;}} else {$pbs['vides'][] = $mot;}}//echo '<pre>'.print_r($mots_cles_hierarchiques,true).'</pre>';exit;return $mots_cles_hierarchiques;}static public function harmoniserPourDoublon($texte) {$texte = htmlentities($texte, ENT_NOQUOTES, 'utf-8');$texte = preg_replace('/&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);/', '\1', $texte);$texte = preg_replace('/&([A-za-z]{2})(?:lig);/', '\1', $texte); // pour les ligatures e.g. 'œ'$texte = preg_replace('/&[^;]+;/', '', $texte); // supprime les autres caractèresreturn strtolower($texte);}static public function simplifier($text) {// le slash est le seul caractère interdit dans les mots clésreturn trim(str_replace(array('\\','/'), '', $text));}}?>