Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 768 → Rev 769

/trunk/jrest/services/InventoryKeyWordObsLink.php
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) ;
}
 
}
?>