Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 929 → Rev 930

/trunk/jrest/services/InventoryKeyWordObsLink.php
1,9 → 1,9
<?php
// declare(encoding='UTF-8');
/**
* Service de liaisons d'images à des observations.
* Le service lie une ou plusieurs images à une ou plusieurs observations
* Le service renvoie les observations liées à une image
* Service de liaisons de mots clés à des observations.
* Le service lie une ou plusieurs mots clés à une ou plusieurs observations
*
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
27,45 → 27,41
public function getElement($uid) {
}
 
// met à jour les associations des mots clés des observations
public function updateElement($uid,$pairs) {
public function createElement($pairs) {
// Controle detournement utilisateur
session_start();
if (($_SESSION['user'] != '') && $_SESSION['user']['name'] != $uid[0]) {
print "Acces interdit";
return;
}
$this->controleUtilisateur($pairs['ce_utilisateur']);
if (!isset($pairs['mots_cles']) || !isset($uid[1])) {
if (!isset($pairs['mots_cles']) || !isset($pairs['observations']) || !isset($pairs['ce_utilisateur'])) {
return;
}
 
if (isset($pairs['action'])) {
$action = $pairs['action'];
$observations = explode(',',$pairs['observations']);
$mots_cles = explode(',',$pairs['mots_cles']);
$gestionnaire_observation = new RechercheObservation($this->config);
$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($pairs['ce_utilisateur'],$observations);
$requete_liaison_mots_cles = 'INSERT INTO cel_obs_mots_cles '.
'(id_observation, id_mot_cle_utilisateur)'.
'VALUES (';
foreach($ids_obs as $obs) {
foreach($mots_cles as $mot) {
$requete_liaison_mots_cles .= '('.$obs.','.$mot.')';
}
$this->regenererIndexTexteMotCleObservation($obs, $pairs['ce_utilisateur']);
}
 
$valeur = $pairs['mots_cles'];
$valeur = $this->nettoyerMotsCles($valeur);
$requete = 'UPDATE cel_inventory '.
"SET mots_cles = REPLACE(CONCAT(IFNULL(mots_cles, ''), '$valeur;'), 'null', '') ".
"WHERE ordre IN ({$uid[1]}) AND identifiant = ".$this->proteger($uid[0]);
 
$resultat = $this->executerRequeteSimple($requete);
$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
$retour = false;
if ($resultat) {
$retour = true;
} else {
$this->logger('CEL_bugs', "Erreur de mise à jour des mots clés d'une obs : $requete");
if(!$resultat_liaison_mots_cles) {
$this->logger('CEL_bugs', "Erreur d'ajout de mots clés à des obs : ".$requete_liaison_mots_cles);
}
$tableau_id_obs = split(',', $uid[1]);
foreach($tableau_id_obs as $ordre_obs) {
$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
}
 
return $retour;
return $resultat_liaison_mots_cles;
}
 
public function deleteElement($uid){
73,56 → 69,66
// Controle detournement utilisateur
session_start();
if ($_SESSION['user'] != '' && $_SESSION['user']['name'] != $uid[0]) {
print "Acces interdit";
} else {
if (!isset($uid[2]) || !isset($uid[1])) {
print 'pas de mots clés';
} else {
$mot_cle = $this->nettoyerMotsCles($uid[2]);
$mot_cle = $this->proteger($mot_cle);
$this->controleUtilisateur($uid[0]);
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2])) {
return;
}
$requete = 'UPDATE cel_inventory '.
"SET mots_cles = REPLACE(REPLACE(mots_cles, '$mot_cle', ''), ';;', ';') ".
"WHERE ordre IN ({$uid[1]}) ".
" AND identifiant = '".$DB->escapeSimple($uid[0])."'";
$resultat = $this->executerRequeteSimple($requete);
$mots_cle = $this->nettoyerMotsCles($uid[2]);
$mots_cle = $this->proteger($mots_cle);
if ($resultat) {
$retour = true;
} else {
$e = "Erreur de suppression des mots clés de plusieurs observations : $requete";
$this->logger('CEL_bugs', $e);
}
}
$ordre_observations = $uid[1];
$id_utilisateur = $uid[0];
$gestionnaire_observation = new RechercheObservation($this->config);
$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($id_utilisateur,$ordre_observations);
$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_obs_mots_cles WHERE ';
'id_observation IN ('.implode(',',$ids_obs).') '.
'AND id_mot_cle_utilisateur IN ('.$mots_cle.')';
$resultat_suppression_mot_cle = $this->executer($requete_suppression_liaison_mot_cle);
if ($resultat_suppression_mot_cle) {
$retour = true;
} else {
$message = "Erreur de suppression des mots clés de plusieurs observations : $requete";
$this->logger($message);
}
foreach($ids_obs as $obs) {
$this->regenererIndexTexteMotCleObservation($obs, $id_utilisateur);
}
 
return $retour;
}
private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
private function regenererIndexTexteMotCleObservation($id_observation, $identifiant_utilisateur) {
$mots_cles_obs = $this->obtenirMotsClesObs($id_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);
$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_observation, $identifiant_utilisateur);
}
}
private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
$requete = 'UPDATE cel_inventory '.
//TODO : a refaire
private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_observation, $identifiant_utilisateur) {
$requete = 'UPDATE cel_obs '.
'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '.
'WHERE ordre = '.$this->proteger($ordre_observation).
'WHERE id_observation = '.$this->proteger($id_observation).
' AND identifiant = '.$this->proteger($identifiant_utilisateur);
$this->executerRequeteSimple($requete);
}
private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
$requete = 'SELECT mots_cles '.
'FROM cel_inventory '.
'WHERE ordre = '.$this->proteger($ordre_observation).
private function obtenirMotsClesTexte($id_observation, $identifiant_utilisateur) {
$requete = 'SELECT mots_cles_texte '.
'FROM cel_obs '.
'WHERE id_observation = '.$this->proteger($id_observation).
' AND identifiant = '.$this->proteger($identifiant_utilisateur);
$resultats = $this->executerRequete($requete);
130,18 → 136,6
return $resultats;
}
private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {
$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);
$requete = '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 = $this->executerRequete($requete);
return $resultat;
}
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);
197,7 → 191,7
$requete_values = rtrim($requete_values, ',');
if (trim($requete_values) != '') {
$requete = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
$requete = 'INSERT IGNORE INTO cel_obs_mots_cles (id_observation, id_mot_cle_utilisateur) '.
'VALUES '.$requete_values.' ';
echo $requete.'<br />';
$i++;