Rev 1078 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
/**
* 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 {
var $config;
function InventoryImageList($config) {
$this->config=$config;
}
// renvoie l'enregistrement correspond � une image
function getElement($uid)
{
// uid[0] : utilisateur obligatoire
// uid[1] : crit�res de filtrage de la forme crit�re1:valeur1;crit�re2:valeur2
// Controle detournement utilisateur
if(!isset($_SESSION)) {session_start();}
$this->controleUtilisateur($uid[0]);
$DB=$this->connectDB($this->config,'cel_db');
$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 ' ;
}
}
}
$debut = $limite*$numero_page ;
$query = rtrim($query,' AND ') ;
$query .= ' ORDER BY ci_ordre LIMIT '.$debut.','.$limite ;
$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: application/json") ;
print $res ;
exit() ;
}
function updateElement($uid,$pairs)
{
}
function deleteElement($uid)
{
// uid[0] : utilisateur obligatoire
// uid[1] : identifiant(s) image(s) obligatoire(s)
// Controle detournement utilisateur
if(!isset($_SESSION)) {session_start();}
$this->controleUtilisateur($uid[0]);
$DB=$this->connectDB($this->config,'cel_db');
$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))
{
die($res->getMessage());
}
$id_fichiers = explode(",",$id) ;
foreach($id_fichiers as $en_cours)
{
$manipulateur_image = new ImageRecreation($this->config);
$manipulateur_image->detruireImageSurDisque($id);
}
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_nom_or = ' ci_nom_original LIKE "%'.$chaine_recherche.'%" ';
$requete_recherche_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.') OR ('.$requete_recherche_nom_or.'))' ;
return $requete_recherche_generale;
}
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;
}
}
?>