Rev 819 | Rev 936 | 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 observationspublic function updateElement($uid,$pairs) {// Controle detournement utilisateursession_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 utilisateursession_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);}}?>