Rev 816 | Rev 930 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?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
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* Cas d'utilisation :
*
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
* @copyright © 2011, Tela-Botanica
*/
class InventoryKeyWordObsLink extends Cel {
const SEPARATEUR_MOT_CLE_TEXTE = '##';
const SEPARATEUR_MOT_CLE_ID = ';';
public function getRessource() {
//$this->migrerMotsClesDansTableLiaison();
}
public function getElement($uid) {
}
// met à jour les associations des mots clés des observations
public function updateElement($uid,$pairs) {
// Controle detournement utilisateur
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 = '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);
$retour = false;
if ($resultat) {
$retour = true;
} else {
$this->logger('CEL_bugs', "Erreur de mise à jour des mots clés d'une obs : $requete");
}
$tableau_id_obs = split(',', $uid[1]);
foreach($tableau_id_obs as $ordre_obs) {
$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
}
return $retour;
}
public function deleteElement($uid){
$retour = false;
// 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);
$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);
if ($resultat) {
$retour = true;
} else {
$e = "Erreur de suppression des mots clés de plusieurs observations : $requete";
$this->logger('CEL_bugs', $e);
}
}
}
return $retour;
}
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 = '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);
}
private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {
$requete = 'SELECT mots_cles '.
'FROM cel_inventory '.
'WHERE ordre = '.$this->proteger($ordre_observation).
' AND identifiant = '.$this->proteger($identifiant_utilisateur);
$resultats = $this->executerRequete($requete);
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);
$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 = 'SELECT id, ordre, identifiant, mots_cles '.
'FROM cel_inventory '.
'WHERE TRIM(mots_cles) != "" ';
$obs_mots_cles = $this->executerRequete($requete);
echo '<pre>'.print_r($obs_mots_cles, true).'</pre>';
$max = 20000;
$i = 0;
foreach ($obs_mots_cles as $obs_mc) {
$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);
$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID, $mots_cles_nettoyes);
$requete_values = '';
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)) {
$requete_values .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';
}
}
$requete_values = rtrim($requete_values, ',');
if (trim($requete_values) != '') {
$requete = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
'VALUES '.$requete_values.' ';
echo $requete.'<br />';
$i++;
}
}
}
}
private function estUnIdentifiantMotCle($chaine) {
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine);
}
}
?>