Subversion Repositories eFlore/Applications.cel

Rev

Rev 664 | Rev 927 | Go to most recent revision | 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
            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: text/html") ;
                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
            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_generale = '(ci_id_image IN ( '.($requete_recherche_taxon).') OR ('.$requete_recherche_comm.'))' ;
                                                        
                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;
        }
}
?>