44,17 → 44,20 |
* 2: Le service lie une ou plusieurs images à une ou plusieurs observations |
* 3: Le service renvoie les observations liées à une image |
*/ |
Class InventoryKeyWordObsLink extends Cel { |
|
const SEPARATEUR_MOT_CLE_TEXTE = '##'; |
const SEPARATEUR_MOT_CLE_ID = ';'; |
|
function getRessource() { |
$this->migrerMotsClesDansTableLiaison(); |
} |
|
function getElement($uid) { |
|
} |
|
Class InventoryKeyWordObsLink extends DBAccessor { |
|
var $config; |
|
function InventoryKeyWordObsLink($config) { |
|
$this->config=$config; |
} |
|
// met à jour les associations entre images et observations |
// met à jour les associations des mots clés des observations |
function updateElement($uid,$pairs) |
{ |
// Controle detournement utilisateur |
63,9 → 66,7 |
print "Acces interdit"; |
return; |
} |
|
$DB=$this->connectDB($this->config,'database_cel'); |
|
|
if(!isset($pairs['mots_cles']) || !isset($uid[1])) { |
return; |
} |
76,25 → 77,28 |
|
$valeur = $pairs['mots_cles']; |
|
$valeur = str_replace('null','',$valeur); |
$valeur = trim($valeur, "null"); |
$valeur = trim($valeur, ";;"); |
$valeur = $this->nettoyerMotsCles($valeur); |
|
$query="UPDATE cel_inventory SET " ; |
$query .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$DB->escapeSimple($valeur).";') "; |
$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'"; |
$requete_maj_liaison_mots_cles = "UPDATE cel_inventory SET " ; |
$requete_maj_liaison_mots_cles .= "mots_cles = CONCAT(IFNULL(mots_cles,''),'".$valeur.";') "; |
$requete_maj_liaison_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]); |
|
echo $query; |
$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]); |
} |
|
$res =& $DB->query($query); |
|
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur d'ajout de plusieurs observations :".$res->getMessage()." ".$query); |
die($res->getMessage()); |
} |
echo $query; |
|
return true; |
return true; |
} |
|
function deleteElement($uid){ |
106,8 → 110,6 |
return; |
} |
|
$DB=$this->connectDB($this->config,'database_cel'); |
|
if(!isset($uid[2]) || !isset($uid[1])) { |
echo 'pas de mots clés'; |
return; |
115,26 → 117,157 |
|
$valeur = $uid[2] ; |
|
$valeur = trim($valeur, "null"); |
$valeur = trim($valeur, ";;"); |
$valeur = $this->nettoyerMotsCles($valeur); |
$chaine = $this->proteger($valeur); |
|
$query="UPDATE cel_inventory SET " ; |
$chaine = $DB->escapeSimple($valeur); |
$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ; |
|
$query .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') "; |
$query .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'"; |
$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,'".$chaine."',''),';;',';') "; |
$requete_suppression_mots_cles .= "WHERE ordre IN (".$uid[1].") AND identifiant = '".$DB->escapeSimple($uid[0])."'"; |
|
$res =& $DB->query($query); |
$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles); |
|
if (PEAR::isError($res)) { |
$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations :".$res->getMessage()." ".$query); |
die($res->getMessage()); |
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, "null"); |
$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 '<pre>'.print_r($obs_mots_cles,true).'</pre>'; |
|
$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.'<br />'; |
|
$i++; |
} |
} |
} |
} |
|
private function estUnIdentifiantMotCle($chaine) { |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ; |
} |
|
|
} |
?> |