1,29 → 1,27 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* 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 |
* |
* 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 |
* |
* 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) { |
|
} |
43,25 → 41,11 |
|
$gestionnaire_observation = new RechercheObservation($this->config); |
$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($pairs['ce_utilisateur'],$observations); |
|
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'obs'); |
$liaison_mot_cle = $gestionnaire_mots_cles->ajouterLiaisonMotsCles($ids_obs, $mots_cles); |
|
$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']); |
} |
|
$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 obs : ".$requete_liaison_mots_cles); |
} |
|
return $resultat_liaison_mots_cles; |
return $liaison_mot_cle; |
} |
|
public function deleteElement($uid){ |
71,137 → 55,27 |
session_start(); |
$this->controleUtilisateur($uid[0]); |
|
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2])) { |
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || !$this->estUnIdentifiantMotCle($uid[2])) { |
return; |
} |
|
$mots_cles = $this->nettoyerMotsCles($uid[2]); |
$mots_cles = explode(',',$mots_cles); |
|
$mots_cle = $this->nettoyerMotsCles($uid[2]); |
$mots_cle = $this->proteger($mots_cle); |
|
$ordre_observations = $uid[1]; |
$ordre_observations = explode(',',$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); |
} |
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'obs'); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsCles($ids_obs, $mots_cles); |
|
return $retour; |
return $suppression_liaison_mot_cle; |
} |
|
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, $id_observation, $identifiant_utilisateur); |
} |
} |
|
//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 id_observation = '.$this->proteger($id_observation). |
' AND identifiant = '.$this->proteger($identifiant_utilisateur); |
|
$this->executerRequeteSimple($requete); |
} |
|
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); |
|
return $resultats; |
} |
|
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 (id_observation, id_mot_cle_utilisateur) '. |
'VALUES '.$requete_values.' '; |
echo $requete.'<br />'; |
$i++; |
} |
} |
} |
} |
|
|
private function estUnIdentifiantMotCle($chaine) { |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine); |
} |
} |
} |
?> |