Rev 1076 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/**Aurelien Peronnet aurelienperonnet@gmail.com 2008Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais etrespectant les principes de diffusion des logiciels libres. Vous pouvezutiliser, modifier et/ou redistribuer ce programme sous les conditionsde la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIAsur le site "http://www.cecill.info".En contrepartie de l'accessibilit? au code source et des droits de copie,de modification et de redistribution accord?s par cette licence, il n'estoffert aux utilisateurs qu'une garantie limit?e. Pour les m?mes raisons,seule une responsabilit? restreinte p?se sur l'auteur du programme, letitulaire des droits patrimoniaux et les conc?dants successifs.A cet ?gard l'attention de l'utilisateur est attir?e sur les risquesassoci?s au chargement, ? l'utilisation, ? la modification et/ou aud?veloppement et ? la reproduction du logiciel par l'utilisateur ?tantdonn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ?manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnelsavertis poss?dant des connaissances informatiques approfondies. Lesutilisateurs sont donc invit?s ? charger et tester l'ad?quation dulogiciel ? leurs besoins dans des conditions permettant d'assurer las?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement,? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?.Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avezpris connaissance de la licence CeCILL, et que vous en avez accept? lestermes.*/// in : utf8// out : utf8/** InventoryImageLink.php** Cas d'utilisation :* Service de liaisons d'images à des observations** 2: Le service lie une ou plusieurs images à une ou plusieurs observations* 3: Le service renvoie les observations liées à une image*/Class InventoryKeyWordObsLink extends Cel {const SEPARATEUR_MOT_CLE_TEXTE = '##';const SEPARATEUR_MOT_CLE_ID = ';';function getRessource() {$this->migrerMotsClesDansTableLiaison();}function getElement($uid) {}// met à jour les associations des mots clés des observationsfunction updateElement($uid,$pairs){// Controle detournement utilisateurif(!isset($_SESSION)) {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_maj_liaison_mots_cles = "UPDATE cel_inventory SET "."mots_cles = REPLACE(CONCAT(IFNULL(mots_cles,''),'".$valeur.";'),'null','') "."WHERE ordre IN (".$uid[1].") AND identifiant = ".$this->proteger($uid[0]);/*echo $requete_maj_liaison_mots_cles; exit;*/$resultat_maj_liaison_mots_cles = $this->executerRequeteSimple($requete_maj_liaison_mots_cles);$retour = false;if ($resultat_maj_liaison_mots_cles) {$retour = 'OK';} else {$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles);}$tableau_id_obs = split(',',$uid[1]);foreach($tableau_id_obs as $ordre_obs) {$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);}return true;}function deleteElement($uid){// Controle detournement utilisateurif(!isset($_SESSION)) {session_start();}if (($_SESSION['user']!="") && $_SESSION['user']['name']!=$uid[0]) {print "Acces interdit";return;}if(!isset($uid[2]) || !isset($uid[1])) {echo 'pas de mots clés';return;}$valeur = $uid[2] ;$valeur = $this->nettoyerMotsCles($valeur);$chaine = $this->proteger($valeur);$requete_suppression_mots_cles = "UPDATE cel_inventory SET " ;$requete_suppression_mots_cles .= "mots_cles = REPLACE(REPLACE(mots_cles,".$chaine.",''),';;',';') ";$requete_suppression_mots_cles .= "WHERE ordre IN (".$this->proteger($uid[1]).") AND identifiant = ".$this->proteger($uid[0]);$resultat_suppression_mots_cles = $this->executerRequeteSimple($requete_suppression_mots_cles);if ($resultat_suppression_mots_cles) {$this->logger("CEL_bugs","Erreur de suppression des mots clés de plusieurs observations : ".$requete_suppression_mots_cles);return false;}return true;}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_regeneration_texte_mots_cles = '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_regeneration_texte_mots_cles);}private function obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur) {$requete_mot_cle_obs = 'SELECT mots_cles FROM cel_inventory '.'WHERE ordre = '.$this->proteger($ordre_observation).' AND '.' identifiant = '.$this->proteger($identifiant_utilisateur);$resultats_mot_cles_obs = $this->executerRequete($requete_mot_cle_obs);return $resultats_mot_cles_obs;}private function obtenirMotClesTexte($chaine_mot_cle, $identifiant_utilisateur) {$chaine_mot_cle_obs = $this->formaterChaineMotClePourConditionSql($chaine_mot_cle);$requete_selection_texte_mot_cles = '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_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles);return $resultat_selection_texte_mot_cles;}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_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '.'WHERE TRIM(mots_cles) != ""';$obs_mots_cles = $this->executerRequete($requete_selection_obs_mots_cles);echo '<pre>'.print_r($obs_mots_cles,true).'</pre>';$max = 20000;$i = 0;foreach($obs_mots_cles as $obs_mc) {/*if($i >= $max) {return;}*/$mots_cles_nettoyes = $this->nettoyerMotsCles($obs_mc['mots_cles']);$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID,$mots_cles_nettoyes);$sous_requete_insertion_valeur = '';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)) {$sous_requete_insertion_valeur .= '('.$mots_cles_codes.','.$obs_mc['id'].'),';}}$sous_requete_insertion_valeur = rtrim($sous_requete_insertion_valeur,',');if(trim($sous_requete_insertion_valeur) != '') {$requete_insertion_mot_cles = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.'VALUES '.$sous_requete_insertion_valeur.' ';echo $requete_insertion_mot_cles.'<br />';$i++;}}}}private function estUnIdentifiantMotCle($chaine) {return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ;}}?>