New file |
0,0 → 1,127 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
|
/** |
* in : utf8 |
* out : utf8 |
* |
* Librairie de liaison d'images et d'observation à des mots clés |
* |
*/ |
class LiaisonMotsCles extends Cel { |
|
const SEPARATEUR_MOT_CLE_TEXTE = '##'; |
private $mode = 'obs'; |
|
public function LiaisonMotsCles($config, $mode) { |
$this->mode = $mode; |
} |
|
public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
|
$requete_liaison_mots_cles = 'INSERT INTO cel_'.$this->mode.'_mots_cles '. |
'(id_observation, id_mot_cle_utilisateur)'. |
'VALUES ('; |
|
foreach($ids_images_ou_obs as $id_image_ou_obs) { |
foreach($mots_cles as $mot) { |
$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.$mot.')'; |
} |
$this->regenererIndexTexteMotCleObservation($id_image_ou_obs, $id_utilisateur); |
} |
|
$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles); |
|
if(!$resultat_liaison_mots_cles) { |
$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles); |
} |
|
return $resultat_liaison_mots_cles; |
} |
|
public function supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
|
$champ = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; |
|
$requete_suppression_liaison_mot_cle = 'DELETE FROM cel_'.$this->mode.'_mots_cles WHERE '; |
$champ.' IN ('.implode(',',$ids_images_ou_obs).') '. |
'AND id_mot_cle_utilisateur IN ('.implode(',',$ids_images_ou_obs).')'; |
|
$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 ".$this->mode." : $requete"; |
$this->logger($message); |
} |
|
foreach($ids_images_ou_obs as $image_ou_obs) { |
$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur); |
} |
} |
|
private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) { |
|
$mots_cles = $this->obtenirMotsCles($image_ou_obs, $identifiant_utilisateur); |
|
if (count($mots_cles) > 0) { |
$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles); |
$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur); |
} |
} |
|
//TODO : a refaire |
private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) { |
$requete = 'UPDATE '.(($this->mode == 'obs') ? 'cel_observation' : 'cel_image'). |
'SET mots_cles_texte = '.$this->proteger($mots_cles_texte_chaine).' '. |
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs). |
' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur); |
|
$this->executerRequeteSimple($requete); |
} |
|
private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) { |
$requete = 'SELECT mots_cles_texte '. |
'FROM '.(($this->mode == 'obs') ? 'cel_observation' : 'cel_image'). |
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.$this->proteger($id_image_ou_obs). |
' AND ce_utilisateur = '.$this->proteger($identifiant_utilisateur); |
|
$resultats = $this->executerRequete($requete); |
|
return $resultats; |
} |
|
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['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; |
} |
} |
?> |