Subversion Repositories eFlore/Applications.cel

Rev

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

<?php
/**
 
 Aurelien Peronnet aurelienperonnet@gmail.com 2008

 Ce logiciel est r?gi par la licence CeCILL soumise au droit fran?ais et
 respectant les principes de diffusion des logiciels libres. Vous pouvez
 utiliser, modifier et/ou redistribuer ce programme sous les conditions
 de la licence CeCILL telle que diffus?e par le CEA, le CNRS et l'INRIA 
 sur le site "http://www.cecill.info".
 En contrepartie de l'accessibilit? au code source et des droits de copie,
 de modification et de redistribution accord?s par cette licence, il n'est
 offert aux utilisateurs qu'une garantie limit?e.  Pour les m?mes raisons,
 seule une responsabilit? restreinte p?se sur l'auteur du programme,  le
 titulaire des droits patrimoniaux et les conc?dants successifs.

 A cet ?gard  l'attention de l'utilisateur est attir?e sur les risques
 associ?s au chargement,  ? l'utilisation,  ? la modification et/ou au
 d?veloppement et ? la reproduction du logiciel par l'utilisateur ?tant 
 donn? sa sp?cificit? de logiciel libre, qui peut le rendre complexe ? 
 manipuler et qui le r?serve donc ? des d?veloppeurs et des professionnels
 avertis poss?dant  des  connaissances  informatiques approfondies.  Les
 utilisateurs sont donc invit?s ? charger  et  tester  l'ad?quation  du
 logiciel ? leurs besoins dans des conditions permettant d'assurer la
 s?curit? de leurs syst?mes et ou de leurs donn?es et, plus g?n?ralement, 
 ? l'utiliser et l'exploiter dans les m?mes conditions de s?curit?. 
                                                                                                      
 Le fait que vous puissiez acc?der ? cet en-t?te signifie que vous avez 
 pris connaissance de la licence CeCILL, et que vous en avez accept? les
 termes.
 
 */


// in : utf8
// out : utf8
/*
 * InventoryImageCount.php  
 * 
 * Cas d'utilisation :
 * Service recherche du nombre a partir de divers crit�res
 * 
 * 2: Le service recherche le nombre d'images correspondant au crit�res demand�
 * 3: Le service renvoie le nombre calcule
 */ 
 
 Class InventoryImageCount extends DBAccessor {

        var $config;
        
        function InventoryImageCount($config) {

                $this->config=$config;
        }
        
        
        // renvoie lee nombre d'images correspondant aux criteres 
        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 
                $this->controleUtilisateur($uid[0]);
                        
                $DB=$this->connectDB($this->config,'cel_db');
                
                $criteres = array() ;
                
                if(isset($uid[1]))
                {
                        $criteres = explode("&", $uid[1]) ;
                }

                $query='SELECT COUNT(*) FROM cel_images WHERE ci_ce_utilisateur = "'.$DB->escapeSimple($uid[0]).'" AND '  ;
                        
                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).')'.
                                                $query .= ' AND ';
                                        }
                                        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 ' ;
                                        }
                        }
                }
                
                $query = rtrim($query,' AND ') ;
                
                $res =& $DB->query($query);
                if (PEAR::isError($res)) {
                
                        die($res->getMessage());
                }
                
                $results = array() ; 
                
                while($image = $res->fetchrow(DB_FETCHMODE_ORDERED)) 
                {
                        $result[] = $image[0] ;
                }
                
                $res = json_encode($result) ; 
                
                header("content-type: text/json") ;
                print $res ;
                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;
        }
}
?>