Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 898 → Rev 899

/trunk/jrest/services/InventoryImageList.php
1,254 → 1,107
<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
/**
* Service recherche, et de suppression multiple d'images a partir de divers critères
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @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$
*/
Class InventoryImageList extends DBAccessor {
* PHP Version 5
*
* @category PHP
* @package jrest
* @author Aurélien Peronnet <aurelien@tela-botanica.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/
*/
/**
* InventoryImageList.php
*
* in : utf8
* out : utf8
*
* Service recherche, et de suppression multiple d'images a partir de divers critères
*
*/
class InventoryImageList extends Cel {
 
var $config;
 
function InventoryImageList($config) {
 
$this->config=$config;
}
 
 
// renvoie l'enregistrement correspond � une image
/**
* Recherche les images correspondant aux critères passés en paramètres
* uid[0] : utilisateur obligatoire
* uid[1] : critères de filtrage de la forme critère1=valeur1;critère2=valeur2
*/
function getElement($uid)
{
// uid[0] : utilisateur obligatoire
// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
 
//TODO : remplacer le contenu du $uid[1] par le tableau $_GET;
// Controle detournement utilisateur
session_start();
$this->controleUtilisateur($uid[0]);
$chercheur_images = new RechercheImage($this->config);
 
$DB=$this->connectDB($this->config,'cel_db');
$numero_page = 0;
$taille_page = 50;
$criteres = array();
 
$criteres = array() ;
 
if(isset($uid[1]))
{
$criteres = explode("&", $uid[1]) ;
}
 
$query='SELECT * FROM cel_images WHERE ci_ce_utilisateur = "'.$uid[0].'" AND ' ;
 
$numero_page = 0 ;
$limite = 50 ;
 
foreach($criteres as $pair)
{
$nom_valeur = explode("=",$pair) ;
 
if(sizeof($nom_valeur) != 0)
{
if($nom_valeur[0] == "ci_limite")
{
$limite = $DB->escapeSimple($nom_valeur[1]) ;
}
elseif($nom_valeur[0] == "ci_numero_page")
{
$numero_page = $DB->escapeSimple($nom_valeur[1]) ;
}
elseif($nom_valeur[0] == "ci_meta_mots_cles")
{
$mots_cles = rtrim($nom_valeur[1], ',') ;
$mots_cles_liste = explode("," , $mots_cles) ;
 
foreach($mots_cles_liste as $mot_cle)
{
$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
$query .= ' AND ' ;
}
}
elseif($nom_valeur[0] == "ci_meta_comment")
{
$mots_comment_liste = explode(" " , $nom_valeur[1]) ;
 
foreach($mots_comment_liste as $mot_comment)
{
$mot_comment = trim($mot_comment) ;
$query .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
$query .= ' AND ' ;
}
}
elseif($nom_valeur[0] == "annee" || $nom_valeur[0] == "mois" || $nom_valeur[0] == "jour")
{
$query .= $this->fabriquerSousRequeteRechercheDate($nom_valeur[0], $nom_valeur[1]) ;
$query .= ' AND ' ;
}
elseif($nom_valeur[0] == "ci_id_tampon")
{
$ids_tampon = rtrim($nom_valeur[1], ',') ;
$query .= 'ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ;
}
elseif($nom_valeur[0] == "ci_recherche_generale")
{
$query .= $this->fabriquerSousRequeteRechercheGenerale($uid[0], $nom_valeur[1]);
$query .= ' AND ';
}
else
{
$query .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
$query .= '" AND ' ;
}
$criteres = $chercheur_images->parserRequeteCriteres($uid[1]) ;
if(isset($criteres['numero_page']) && isset($criteres['limite'])) {
$numero_page = $criteres['numero_page'];
$taille_page = $criteres['limite'];
}
}
 
$debut = $limite*$numero_page ;
$retour = $chercheur_images->rechercherImagesEtObservationAssociees($uid[0], $criteres, $numero_page, $taille_page);
 
$query = rtrim($query,' AND ') ;
$query .= ' ORDER BY ci_ordre LIMIT '.$debut.','.$limite ;
$retour_encode = json_encode($retour) ;
$retour_encode = $this->nettoyerCaracteresNuls($retour_encode);
 
$res =& $DB->query($query);
if (PEAR::isError($res)) {
 
die($res->getMessage());
}
 
$result = array() ;
 
while($image = $res->fetchrow(DB_FETCHMODE_ASSOC))
{
$date = split("-",$image['ci_meta_date']) ;
if(count($date) > 2)
{
$image['ci_meta_date'] = $date[2].'/'.$date[1].'/'.$date[0] ;
}
 
$image['ci_ce_observation'] = '';
 
$requete_table_liaison = 'SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = '.$image['ci_id_image'].' AND coi_ce_utilisateur ="'.$uid[0].'"';
$res_table_liaison =& $DB->query($requete_table_liaison);
if (PEAR::isError($res_table_liaison)) {
 
die($res_table_liaison->getMessage());
}
 
$ids_obs = '';
while($liaison = $res_table_liaison->fetchrow(DB_FETCHMODE_ASSOC))
{
$ids_obs .= $liaison['coi_ce_observation'].",";
}
 
$ids_obs = rtrim($ids_obs,',');
 
if(trim($ids_obs) != '') {
$requete_obs_liees = 'SELECT * FROM cel_inventory WHERE ordre IN ('.$ids_obs.') AND identifiant ="'.$uid[0].'"';
$res_obs_liees =& $DB->query($requete_obs_liees);
if (PEAR::isError($res_obs_liees)) {
 
die($res_obs_liees->getMessage());
}
 
while($obs_liee = $res_obs_liees->fetchrow(DB_FETCHMODE_ASSOC))
{
$image['ci_ce_observation'] .= $obs_liee['ordre'].'#'.$obs_liee['nom_sel'].'#'.$obs_liee['transmission'].';;' ;
}
}
 
$result[] = $image ;
}
 
$res = json_encode($result) ;
$res = str_replace('\u0000','',$res);
 
header("content-type: text/html") ;
print $res ;
header("content-type: application/json") ;
print $retour_encode ;
exit() ;
}
 
private function nettoyerCaracteresNuls($chaine) {
return str_replace('\u0000','',$chaine);
}
function updateElement($uid,$pairs)
{
 
}
 
/**
* @param int uid[0] : utilisateur obligatoire
* @param string uid[1] : identifiant(s) image(s) obligatoire(s)
*
*/
function deleteElement($uid)
{
 
// uid[0] : utilisateur obligatoire
// uid[1] : identifiant(s) image(s) obligatoire(s)
 
// Controle detournement utilisateur
// Controle detournement utilisateur
session_start();
$this->controleUtilisateur($uid[0]);
 
$DB=$this->connectDB($this->config,'cel_db');
$ids_images = rtrim($uid[1],",") ;
 
$id = rtrim($uid[1],",") ;
 
if (isset($id)) {
$query="DELETE FROM cel_images WHERE ci_id_image in (".$DB->escapeSimple($id) .")";
$query_sup_lien = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$DB->escapeSimple($id) .")";
}
 
$res =& $DB->query($query);
 
if (PEAR::isError($res)) {
die($res->getMessage());
}
else
{
$res =& $DB->query($query_sup_lien);
if(PEAR::isError($res))
if (isset($ids_images)) {
$ids_images_proteges = $this->proteger($ids_images);
$requete_suppression_images = "DELETE FROM cel_images WHERE id_image in (".$ids_images_proteges.")";
$requete_suppression_liens = "DELETE FROM cel_obs_images WHERE id_image in (".$ids_images_proteges.")";
$supression_images_bdd = $this->executer($requete_suppression_images);
$supression_liens = $this->executer($requete_suppression_liens);
$ids_fichiers = explode(",",$ids_images) ;
foreach($ids_fichiers as $en_cours)
{
die($res->getMessage());
}
 
$id_fichiers = explode(",",$id) ;
foreach($id_fichiers as $en_cours)
{
$manipulateur_image = new ImageRecreation($this->config);
$manipulateur_image->detruireImageSurDisque($id);
$manipulateur_image->detruireImageSurDisque($en_cours);
}
 
echo "OK" ;
exit() ;
}
}
private function fabriquerSousRequeteRechercheGenerale($id_utilisateur, $chaine_recherche) {
$requete_recherche_taxon .= 'SELECT coi_ce_image
FROM cel_obs_images
WHERE coi_ce_observation IN ' .
'(SELECT ordre ' .
'FROM cel_inventory '.
'WHERE identifiant ="'.$id_utilisateur.'" '.
'AND nom_sel LIKE "'.$chaine_recherche.'%" '.
')';
$requete_recherche_comm = ' ci_meta_comment LIKE "%'.$chaine_recherche.'%" ';
$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
return $requete_recherche_generale;
echo "OK" ;
exit() ;
}
private function fabriquerSousRequeteRechercheDate($intervalle, $valeur) {
$correspondance_champ = array('annee' => 'YEAR','mois' => 'MONTH','jour' => 'DAY');
$requete_recherche_date = '';
 
if(is_numeric($valeur) && $valeur != "00") {
$requete_recherche_date = $correspondance_champ[$intervalle].'(ci_meta_date) = "'.$valeur.'" ';
} else {
$requete_recherche_date = '( ci_meta_date IS NULL OR ci_meta_date = "0000-00-00")';
}
return $requete_recherche_date;
}
}
?>