1,262 → 1,205 |
<?php |
|
// declare(encoding='UTF-8'); |
/** |
|
Aurelien Peronnet aurelienperonnet@gmail.com 2008 |
|
Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et |
respectant les principes de diffusion des logiciels libres. Vous pouvez |
utiliser, modifier et/ou redistribuer ce programme sous les conditions |
de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA |
sur 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'est |
offert aux utilisateurs qu'une garantie limit?e. Pour les m?mes raisons, |
seule une responsabilit? restreinte p?se sur l'auteur du programme, le |
titulaire des droits patrimoniaux et les conc?dants successifs. |
|
A cet ?gard l'attention de l'utilisateur est attir?e sur les risques |
associ?s au chargement, ? l'utilisation, ? la modification et/ou au |
d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant |
donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ? |
manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels |
avertis poss?dant des connaissances informatiques approfondies. Les |
utilisateurs sont donc invit?s ? charger et tester l'ad?quation du |
logiciel ? leurs besoins dans des conditions permettant d'assurer la |
s?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 avez |
pris connaissance de la licence CeCILL, et que vous en avez accept? les |
termes. |
|
*/ |
|
|
// in : utf8 |
// out : utf8 |
/* |
* InventoryImageLink.php |
* 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 : |
* 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 |
* @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 = ';'; |
|
function getRessource() { |
//$this->migrerMotsClesDansTableLiaison(); |
} |
|
function getElement($uid) { |
|
} |
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 |
function updateElement($uid,$pairs) |
{ |
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; |
} |
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']; |
} |
if (isset($pairs['action'])) { |
$action = $pairs['action']; |
} |
|
$valeur = $pairs['mots_cles']; |
|
$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]); |
|
$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); |
$resultat = $this->executerRequeteSimple($requete); |
|
$retour = false; |
|
if ($resultat_maj_liaison_mots_cles) { |
$retour = 'OK'; |
if ($resultat) { |
$retour = true; |
} else { |
$this->logger("CEL_bugs","Erreur de mise à jour des mots clés d'une obs : ".$requete_maj_liaison_mots_cles); |
$this->logger('CEL_bugs', "Erreur de mise à jour des mots clés d'une obs : $requete"); |
} |
|
$tableau_id_obs = split(',',$uid[1]); |
$tableau_id_obs = split(',', $uid[1]); |
foreach($tableau_id_obs as $ordre_obs) { |
$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]); |
} |
|
return true; |
return $retour; |
} |
|
function deleteElement($uid){ |
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); |
} |
} |
} |
|
// Controle detournement utilisateur |
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 (".$uid[1].") AND identifiant = '".$DB->escapeSimple($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; |
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); |
|
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); |
|
$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); |
$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); |
|
$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); |
$resultats = $this->executerRequete($requete); |
|
return $resultats_mot_cles_obs; |
return $resultats; |
} |
|
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); |
$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_selection_texte_mot_cles = $this->executerRequete($requete_selection_texte_mot_cles); |
$resultat = $this->executerRequete($requete); |
|
return $resultat_selection_texte_mot_cles; |
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, ','); |
|
$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; |
return $chaine_mot_cle_obs; |
} |
|
private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) { |
$mot_cles_texte_chaine = ''; |
|
$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; |
} |
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; |
} |
|
$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, ';;'); |
|
$valeur = str_replace('null','',$chaine); |
$valeur = trim($valeur, ";;"); |
|
return $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); |
|
$requete_selection_obs_mots_cles = 'SELECT id, ordre, identifiant, mots_cles FROM cel_inventory '. |
'WHERE TRIM(mots_cles) != ""'; |
echo '<pre>'.print_r($obs_mots_cles, true).'</pre>'; |
|
$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; |
}*/ |
|
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); |
$tableau_mots_cles_codes = split(self::SEPARATEUR_MOT_CLE_ID, $mots_cles_nettoyes); |
|
$sous_requete_insertion_valeur = ''; |
$requete_values = ''; |
|
if(count($tableau_mots_cles_codes) > 0) { |
|
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'].'),'; |
$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'].'),'; |
} |
} |
|
$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 />'; |
|
$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++; |
} |
} |
264,9 → 207,7 |
} |
|
private function estUnIdentifiantMotCle($chaine) { |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine) ; |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine); |
} |
|
|
} |
?> |