Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 929 → Rev 930

/trunk/jrest/services/InventoryKeyWordObsLink.php
1,9 → 1,9
<?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
* 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
*
27,45 → 27,41
public function getElement($uid) {
}
 
// met à jour les associations des mots clés des observations
public function updateElement($uid,$pairs) {
public function createElement($pairs) {
// Controle detournement utilisateur
session_start();
if (($_SESSION['user'] != '') && $_SESSION['user']['name'] != $uid[0]) {
print "Acces interdit";
return;
}
$this->controleUtilisateur($pairs['ce_utilisateur']);
if (!isset($pairs['mots_cles']) || !isset($uid[1])) {
if (!isset($pairs['mots_cles']) || !isset($pairs['observations']) || !isset($pairs['ce_utilisateur'])) {
return;
}
 
if (isset($pairs['action'])) {
$action = $pairs['action'];
$observations = explode(',',$pairs['observations']);
$mots_cles = explode(',',$pairs['mots_cles']);
$gestionnaire_observation = new RechercheObservation($this->config);
$ids_obs = $gestionnaire_observation->obtenirIdObservationsPourOrdre($pairs['ce_utilisateur'],$observations);
$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']);
}
 
$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);
$resultat_liaison_mots_cles = $this->executer($requete_liaison_mots_cles);
$retour = false;
if ($resultat) {
$retour = true;
} else {
$this->logger('CEL_bugs', "Erreur de mise à jour des mots clés d'une obs : $requete");
if(!$resultat_liaison_mots_cles) {
$this->logger('CEL_bugs', "Erreur d'ajout de mots clés à des obs : ".$requete_liaison_mots_cles);
}
$tableau_id_obs = split(',', $uid[1]);
foreach($tableau_id_obs as $ordre_obs) {
$this->regenererIndexTexteMotCleObservation($ordre_obs, $uid[0]);
}
 
return $retour;
return $resultat_liaison_mots_cles;
}
 
public function deleteElement($uid){
73,56 → 69,66
// 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);
$this->controleUtilisateur($uid[0]);
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2])) {
return;
}
$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);
$mots_cle = $this->nettoyerMotsCles($uid[2]);
$mots_cle = $this->proteger($mots_cle);
if ($resultat) {
$retour = true;
} else {
$e = "Erreur de suppression des mots clés de plusieurs observations : $requete";
$this->logger('CEL_bugs', $e);
}
}
$ordre_observations = $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);
}
 
return $retour;
}
private function regenererIndexTexteMotCleObservation($ordre_observation, $identifiant_utilisateur) {
$mots_cles_obs = $this->obtenirMotsClesObs($ordre_observation, $identifiant_utilisateur);
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, $ordre_observation, $identifiant_utilisateur);
$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_observation, $identifiant_utilisateur);
}
}
private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $ordre_observation, $identifiant_utilisateur) {
$requete = 'UPDATE cel_inventory '.
//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 ordre = '.$this->proteger($ordre_observation).
'WHERE id_observation = '.$this->proteger($id_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).
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);
130,18 → 136,6
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);
197,7 → 191,7
$requete_values = rtrim($requete_values, ',');
if (trim($requete_values) != '') {
$requete = 'INSERT IGNORE INTO cel_obs_mots_cles (ce_observation, ce_mot_cle) '.
$requete = 'INSERT IGNORE INTO cel_obs_mots_cles (id_observation, id_mot_cle_utilisateur) '.
'VALUES '.$requete_values.' ';
echo $requete.'<br />';
$i++;
/trunk/jrest/lib/RechercheObservation.php
20,6 → 20,32
*/
class RechercheObservation extends Cel {
public function obtenirIdObservationsPourOrdre($id_utilisateur, $ordre) {
$requete_selection_id = 'SELECT id_observation FROM cel_obs WHERE ordre ';
if(is_array($ordre)) {
$ordre = array_map(array($this,'proteger'), $ordre);
$requete_selection_id .= ' IN ('.implode(',',$ordre).') ';
} else {
$requete_selection_id .= ' = '.$this->proteger($ordre).' ';
}
$requete_selection_id = ' AND ce_utilisateur = '.$this->proteger($id_utilisateur);
$requete_selection_id = ' ORDER BY id_observation';
$resultat_ids = $this->requeter($requete_selection_id);
$ids = array();
if(is_array($resultat_ids)) {
foreach ($resultat_ids as $resultat) {
$ids[] = $resultat['id_observation'];
}
}
return $ids;
}
public function rechercherObservations($id_utilisateur = null, $criteres = array(), $numero_page = 0, $taille_page = 50) {
$requete_selection_observations = 'SELECT * FROM cel_obs ';
/trunk/jrest/lib/RechercheImage.php
42,7 → 42,10
$criteres = explode("&", $chaine_criteres) ;
 
foreach($criteres as &$critere) {
$criteres_parses[] = explode("=",$critere) ;
$nom_valeur = explode("=",$critere) ;
if(count($nom_valeur) >= 2) {
$criteres_parses[$nom_valeur[0]] = $nom_valeur[1];
}
}
return $criteres_parses;
64,14 → 67,13
 
public function rechercherImages($id_utilisateur, $criteres, $numero_page = 0 , $taille_page = 50) {
$requete_recherche_images = 'SELECT * FROM cel_images WHERE ce_utilisateur = "'.$id_utilisateur.'"' ;
$requete_recherche_images = 'SELECT * FROM cel_images WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' ';
 
$sous_requete_recherche = $this->fabriquerSousRequeteRecherche($id_utilisateur, $criteres);
$requete_recherche_images .= $sous_requete_recherche;
$debut = $taille_page*$numero_page ;
$requete_recherche_image .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
$requete_recherche_images .= ' ORDER BY ordre LIMIT '.$debut.','.$taille_page ;
$resultats_images = array();
$resultats_images = $this->requeter($requete_recherche_images);
127,32 → 129,32
$sous_requete = ' AND ';
foreach($criteres as $nom_valeur)
foreach($criteres as $nom => $valeur)
{
if(count($nom_valeur) == 0) {
if(trim($nom) == "" || trim($valeur) == "") {
continue;
}
switch($nom_valeur[0]) {
switch($nom) {
case "mots_cles";
$mots_cles = rtrim($nom_valeur[1], ',') ;
$mots_cles_liste = explode("," , $mots_cles) ;
$mots_cles = rtrim($valeur, ',') ;
$mots_cles_liste = explode(',' , $mots_cles) ;
foreach($mots_cles_liste as $mot_cle)
{
$sous_requete .= $nom_valeur[0].' LIKE "%'.$this->proteger($mot_cle).'%"' ;
$sous_requete .= $nom.' LIKE '.$this->proteger('%'.$mot_cle.'%') ;
$sous_requete .= ' AND ' ;
}
break;
case "commentaire":
$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
$mots_comment_liste = explode(" " , $valeur) ;
foreach($mots_comment_liste as $mot_comment)
{
$mot_comment = trim($mot_comment) ;
$sous_requete .= $nom_valeur[0].' LIKE "%'.$this->proteger($mot_comment).'%"' ;
$sous_requete .= $nom.' LIKE '.$this->proteger('%'.$mot_comment.'%') ;
$sous_requete .= ' AND ' ;
}
break;
160,23 → 162,23
case "annee":
case "mois":
case "jour":
$sous_requete .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
$sous_requete .= $this->fabriquerSousRequeteRechercheDate($nom, $valeur) ;
$sous_requete .= ' AND ' ;
break;
case "tampon":
$ids_tampon = rtrim($nom_valeur[1], ',') ;
$ids_tampon = rtrim($valeur, ',') ;
$sous_requete .= 'id_images IN ( '.$this->proteger($ids_tampon).')' ;
break;
case "recherche_generale":
$sous_requete .= $this->fabriquerSousRequeteRechercheGenerale($id_utilisateur, $nom_valeur[1]);
$sous_requete .= $this->fabriquerSousRequeteRechercheGenerale($id_utilisateur, $valeur);
$sous_requete .= ' AND ';
break;
default:
$sous_requete .= $nom_valeur[0].' = "'.$this->proteger($nom_valeur[1]) ;
$sous_requete .= '" AND ' ;
$sous_requete .= $nom.' = '.$this->proteger($valeur) ;
$sous_requete .= ' AND ' ;
break;
}
}
193,11 → 195,11
WHERE id_observation IN ' .
'(SELECT id_observation ' .
'FROM cel_obs '.
'WHERE ce_utilisateur ="'.$id_utilisateur.'" '.
'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
'WHERE ce_utilisateur = '.$this->proteger($id_utilisateur).' '.
'AND nom_sel LIKE "'.$this->proteger($chaine_recherche.'%').
')';
$requete_recherche_comm = ' commentaire LIKE "%'.$chaine_recherche.'%" ';
$requete_recherche_comm = ' commentaire LIKE '.$this->proteger('%'.chaine_recherche.'%');
$requete_recherche_generale = '(id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
211,7 → 213,7
$requete_recherche_date = '';
 
if(is_numeric($valeur) && $valeur != "00") {
$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = '.$this->proteger($valeur).' ';
} else {
$requete_recherche_date = '(date_prise_de_vue IS NULL OR date_prise_de_vue = "0000-00-00")';
}