Subversion Repositories eFlore/Applications.cel

Rev

Rev 605 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

Class InventoryImageListPublic extends DBAccessor {
        
        private $start = 0;
        private $limit = 50;
        private $distinct = true;
        
        private $criteres = array('mot_cles' => 'c.ci_meta_mots_cles', 
                                                        'auteur' => 'c.ci_ce_utilisateur', 
                                                        'commune' => 'b.location', 
                                                        'departement' => 'b.id_location',
                                                        'taxon' => 'b.nom_ret');

        function InventoryImageListPublic($config) {

                $this->config=$config;
        }

        function getRessource() {
        
        }

        function getElement($uid)
        {
                
                // uid[0] : utilisateur obligatoire
                // uid[1] : critères de filtrage de la forme critère1:valeur1;critère2:valeur2

                $DB=$this->connectDB($this->config,'cel_db');

                $criteres = array() ;
                
                if($uid[0] != '*') {
                        
                        $criteres[$this->criteres['auteur']] = $uid[0];
                        
                }

                $criteres = $this->traiterCriteres($_GET) ;
                
                                // Construction de la requête
                $requete =      (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' * '.
                        'FROM cel_obs_images a '.
                        'INNER JOIN cel_inventory b '.
                                'ON a.coi_ce_observation = b.ordre AND a.coi_ce_utilisateur = b.identifiant '.
                        'INNER JOIN cel_images c '.
                                'ON a.coi_ce_image = c.ci_id_image AND a.coi_ce_utilisateur = c.ci_ce_utilisateur '.  
                        'WHERE b.transmission = 1 AND b.identifiant = c.ci_ce_utilisateur 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")
                                        {
                                                $this->limite = $DB->escapeSimple($nom_valeur[1]) ;
                                        }
                                        elseif($nom_valeur[0] == "c.ci_numero_page")
                                        {
                                                $this->start = $this->limite*$DB->escapeSimple($nom_valeur[1]) ;
                                        }
                                        elseif($nom_valeur[0] == "c.ci_meta_mots_cles")
                                        {
                                                $mots_cles = rtrim($nom_valeur[1], ',') ;
                                                $mots_cles_liste = explode("," , $mots_cles) ;

                                                foreach($mots_cles_liste as $mot_cle)
                                                {
                                                        $requete .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_cle).'%"' ;
                                                        $requete .= ' AND ' ;
                                                }
                                        }
                                        elseif($nom_valeur[0] == "c.ci_meta_comment")
                                        {
                                                $mots_comment_liste = explode(" " , $nom_valeur[1]) ;

                                                foreach($mots_comment_liste as $mot_comment)
                                                {
                                                        $mot_comment = trim($mot_comment) ;
                                                        $requete .= $nom_valeur[0].' LIKE "%'.$DB->escapeSimple($mot_comment).'%"' ;
                                                        $requete .= ' AND ' ;
                                                }
                                        }
                                        elseif($nom_valeur[0] == "c.ci_meta_date")
                                        {
                                                $requete .= 'DATE_FORMAT( '.$nom_valeur[0].', \'%Y-%m-%d\' ) = "'.$DB->escapeSimple($nom_valeur[1]).'"' ;
                                                $requete .= ' AND ' ;
                                        }
                                        elseif($nom_valeur[0] == "c.ci_id_tampon")
                                        {
                                                $ids_tampon = rtrim($nom_valeur[1], ',') ;
                                                $requete .= 'c.ci_id_image IN ( '.$DB->escapeSimple($ids_tampon).')' ;
                                        }
                                        else
                                        {
                                                $requete .= $nom_valeur[0].' = "'.$DB->escapeSimple($nom_valeur[1]) ;
                                                $requete .= '" AND ' ;
                                        }
                        }
                }
                
                $requete = rtrim($requete,' AND ') ;

                $requete .= ' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'c.ci_meta_date_ajout DESC').' ';
                $requete .= "LIMIT $this->start,$this->limit ";
                
                $res =& $DB->query($requete);
        if (PEAR::isError($res)) {
                die($res->getMessage());
        }
        
        $images = array();
        
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
                $images[]= $row;
        }

                $images_json = json_encode($images) ;

                header("content-type: text/html") ;
                print $images_json ;
                exit() ;
        }
        
        private function traiterCriteres($tableau_criteres) {
                
                $tableau_criteres_pour_bdd = array();
                
                foreach($tableau_criteres as $nom_critere => $valeur_critere) {
                        if(isset($this->criteres[$nom_critere])) {
                                $tableau_criteres_pour_bdd[] = $this->criteres[$nom_critere].'='.$valeur_critere;
                        }
                }
                
                return $tableau_criteres_pour_bdd;
        }
}

?>