migrerMotsClesDansTableLiaison(); } function getElement($uid) { } // met à jour les associations des mots clés des observations function updateElement($uid,$pairs) { // Controle detournement utilisateur if(!isset($_SESSION)) {session_start();} if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) { print "Acces interdit"; return; } if(!isset($pairs['mots_cles']) || !isset($uid[1])) { return; } if(isset($pairs['action'])) { $action = $pairs['action']; } $valeur = $pairs['mots_cles']; $valeur = $this->nettoyerMotsCles($valeur); $requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET ". "mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''),'".$valeur.";'),'null','') ". "WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]); /*echo $requete_maj_liaison_mots_cles; exit;*/ $resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles); $retour = false; if ($resultat_maj_liaison_mots_cles) { $retour = 'OK'; } else { $this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles); } $tableau_id_obs = split(',',$uid[1]); foreach($tableau_id_obs as $ordre_obs) { $this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]); } return true; } function deleteElement($uid){ // Controle detournement utilisateur if(!isset($_SESSION)) {session_start();} if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) { print "Acces interdit"; return; } if(!isset($uid[2]) || !isset($uid[1])) { echo 'pas de mots clés'; return; } $valeur = $uid[2] ; $valeur = $this->nettoyerMotsCles($valeur); $chaine = $this->proteger($valeur); $requete_suppression_mots_cles = "UPDATE cel_inventory SET " ; $requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,".$chaine.",''),';;',';') "; $requete_suppression_mots_cles .= "WHERE ordre IN (".$this->proteger($uid[1]).") AND identifiant = ".$this->proteger($uid[0]); $resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles); if ($resultat_suppression_mots_cles) { $this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles); return false; } return true; } private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) { $mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur); if(count($mots_cles_obs) > 0) { $tableau_texte_mots_cles = $this->obtenirMotClesTexte($mots_cles_obs[0]['mots_cles'],$identifiant_utilisateur); $mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($tableau_texte_mots_cles); $this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur); } } private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) { $requete_regeneration_texte_mots_cles = 'UPDATE cel_inventory '. 'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '. 'WHERE ordre = '.$this->proteger($ordre_observation).' AND '. 'identifiant = '.$this->proteger($identifiant_utilisateur); $this->executerRequeteSimple($requete_regeneration_texte_mots_cles); } private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) { $requete_mot_cle_obs = 'SELECT mots_cles FROM cel_inventory '. 'WHERE ordre = '.$this->proteger($ordre_observation).' AND '. ' identifiant = '.$this->proteger($identifiant_utilisateur); $resultats_mot_cles_obs = $this->executerRequete($requete_mot_cle_obs); return $resultats_mot_cles_obs; } private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) { $chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle); $requete_selection_texte_mot_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles_obs '. 'WHERE cmc_id_mot_cle_utilisateur IN ('.$chaine_mot_cle_obs.') '. 'AND cmc_id_proprietaire = '.$this->proteger($identifiant_utilisateur); $resultat_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles); return $resultat_selection_texte_mot_cles; } private function formaterChaineMotClePourConditionSql($chaine_mot_cle_obs) { $chaine_mot_cle_obs = $this->nettoyerMotsCles($chaine_mot_cle_obs); $chaine_mot_cle_obs = str_replace(self::SEPARATEUR_MOT_CLE_ID,',',$chaine_mot_cle_obs); $chaine_mot_cle_obs = trim($chaine_mot_cle_obs,','); return $chaine_mot_cle_obs; } private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) { $mot_cles_texte_chaine = ''; if(is_array($tableau_mots_cles_texte)) { foreach($tableau_mots_cles_texte as $mot_cle) { $mot_cles_texte_chaine .= $mot_cle['cmc_mot_cle'].self::SEPARATEUR_MOT_CLE_TEXTE; } } $mot_cles_texte_chaine = rtrim($mot_cles_texte_chaine,self::SEPARATEUR_MOT_CLE_TEXTE); return $mot_cles_texte_chaine; } private function nettoyerMotsCles($chaine) { $valeur = str_replace('null','',$chaine); $valeur = trim($valeur, ";;"); return $valeur; } private function migrerMotsClesDansTableLiaison() { $requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '. 'WHERE TRIM(mots_cles) != ""'; $obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles); echo '
'.print_r($obs_mots_cles,true).'
'; $max = 20000; $i = 0; foreach($obs_mots_cles as $obs_mc) { /*if($i >= $max) { return; }*/ $mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']); $tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes); $sous_requete_insertion_valeur = ''; if(count($tableau_mots_cles_codes) > 0) { foreach($tableau_mots_cles_codes as $mots_cles_codes) { $mots_cles_codes = trim($mots_cles_codes,self::SEPARATEUR_MOT_CLE_ID); if($this->estUnIdentifiantMotCle($mots_cles_codes)) { $sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),'; } } $sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,','); if(trim($sous_requete_insertion_valeur) != '') { $requete_insertion_mot_cles = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '. 'VALUES '.$sous_requete_insertion_valeur.' '; echo $requete_insertion_mot_cles.'
'; $i++; } } } } private function estUnIdentifiantMotCle($chaine) { return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ; } } ?>