Subversion Repositories eFlore/Applications.cel

Rev

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

<?php
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //

// in utf8
// out utf8

// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
class NomsChampsEtendus extends Cel {

        /**
         * Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
         *
         * uid[0] : "cle" ou "valeur"
         * $_GET["start"] et $GET_["limit"] : selection intervalle
         * $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
         * $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
         */
        function getElement($uid){
                if (!$this->paramObligatoiresSontPresents($uid)) {
                        return;
                }

                $_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
                $referentiel = array();

                if($uid[0] == "cle") {
                        $referentiel = $this->rechercherCles($_GET['recherche']);
                } else if($uid[0] == "valeur") {
                        $referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
                }

                $this->envoyerJson($referentiel);
                return true;
        }

        function rechercherCles($recherche_cle) {
                $requete = "SELECT DISTINCT cle, label FROM cel_obs_etendues WHERE ".
                        "cle LIKE ".Cel::db()->proteger($recherche_cle)." OR ".
                        "label LIKE ".Cel::db()->proteger($recherche_cle)." ";
                $resultat = Cel::db()->requeter($requete);

                $referentiel = array();
                foreach($resultat as $valeur) {
                        $referentiel[$valeur['cle']] = $valeur['label'];
                }
                return $referentiel;
        }

        function rechercherValeurs($cle, $recherche_valeur) {
                $requete = "SELECT DISTINCT valeur FROM cel_obs_etendues WHERE ".
                        "cle = ".Cel::db()->proteger($cle)." AND ".
                        "valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";

                $referentiel_resultat = Cel::db()->requeter($requete);
                $referentiel = array();

                foreach ($referentiel_resultat as $valeur) {
                        if (trim($valeur['valeur']) != '') {
                                $referentiel[] = $valeur['valeur'];
                        }
                }
                return $referentiel;
        }

        function paramObligatoiresSontPresents($uid) {
                return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
        }

        function filtreRechercheEstDemande() {
                return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != '');
        }

        function limiteEstDemandee() {
                return isset($_GET["start"]) && is_numeric($_GET["start"]) && isset($_GET["limit"]) && is_numeric($_GET["limit"]);
        }

        function estUneValeurValide($chaine) {
                return ($chaine != null && $chaine != "000null" &&  trim($chaine) != '');
        }
}