Subversion Repositories eFlore/Applications.cel

Rev

Rev 798 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/**

David Delon 2008

 Cecill / GPL V3

 */


// in : utf8
// out : utf8
/*
 * InventoryObservationCount.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 InventoryObservationCount extends DBAccessor {

        var $config;

        function InventoryObservationCount($config) {

                $this->config=$config;
        }


        // renvoie le nombre d' observation  correspondant aux criteres

        function getElement($uid)
        {
                        // uid[0] : utilisateur obligatoire
                        // uid[1] : criteres de filtrage de la forme critere1:valeur1;critere2:valeur2

                // Controle detournement utilisateur
                if(!isset($_SESSION)) {session_start();}
                $this->controleUtilisateur($uid[0]);

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

                $criteres = array() ;

                if(isset($uid[1]))
                {
                        $criteres = explode("&", $uid[1]) ;
                }

                $query="SELECT count(*) as count FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($uid[0])."' AND "  ;

                foreach($criteres as $pair)
                {
                        $nom_valeur = explode("=",$pair) ;
                        if(sizeof($nom_valeur) != 0)
                        {
                                if($nom_valeur[0] == 'annee') {
                                        $query .= "year(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ;
                                        $query .= ' AND ' ;
                                }
                                elseif($nom_valeur[0] == 'mois') {
                                        $query .= "month(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ;
                                        $query .= ' AND ' ;
                                }
                                elseif($nom_valeur[0] == 'jour') {
                                        $query .= "day(date_observation) = '".$DB->escapeSimple($nom_valeur[1])."'" ;
                                        $query .= ' AND ' ;
                                }
                elseif($nom_valeur[0] == 'mots_cles') {
                    $liste_mc = explode(";",$nom_valeur[1]);
                    $query .= '(' ;
                    foreach($liste_mc as $mot) {

                        if(trim($mot) != '')
                        {
                          $query .= "mots_cles LIKE '%".$DB->escapeSimple($mot)."%' OR " ;
                        }
                    }
                    $query = rtrim($query,' OR ');
                    $query .= ') AND ' ;
                }
                elseif ($nom_valeur[0] == 'nom_taxon') {
                        $nom_valeur[1] = str_replace("*","%",$nom_valeur[1]);
                        $query .= "(nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR identifiant LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR ordre LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR num_nom_sel LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR num_nom_ret LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR num_taxon LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR location LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR id_location LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR date_observation LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR lieudit LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR station LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR milieu LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR commentaire LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR transmission LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR coord_x LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%' OR coord_y LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                                                                        "%')";

                                                                        //"%' OR famille LIKE '%".$DB->escapeSimple($nom_valeur[1]).
                    }
                                else {
                                        if(trim($nom_valeur[0]) != '')
                                        {
                                                $query .= $nom_valeur[0]." = '".$DB->escapeSimple($nom_valeur[1])."'" ;
                                                $query .= ' AND ' ;
                                        }
                                }
                        }
                }

                $query = rtrim($query,' AND ') ;

                $res =& $DB->query($query);
                if (PEAR::isError($res)) {
                                        $erreur = 'ERROR : probleme de liste des observations' ;
                                        $this->logger('CEL_bugs',$erreur.' '.$query);
                }

                $results = array() ;

                while($observation = $res->fetchrow(DB_FETCHMODE_ORDERED))
                {
                        $result[] = $observation[0] ;
                }

                $res = json_encode($result) ;

                print($res);
                exit() ;
        }
}
?>