Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1939 aurelien 1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
3
 
4
// in utf8
5
// out utf8
6
 
2143 jpm 7
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
1939 aurelien 8
class NomsChampsEtendus extends Cel {
2143 jpm 9
 
1939 aurelien 10
	/**
11
	 * Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
2143 jpm 12
	 *
1939 aurelien 13
	 * uid[0] : "cle" ou "valeur"
14
	 * $_GET["start"] et $GET_["limit"] : selection intervalle
15
	 * $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
16
	 * $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
17
	 */
18
	function getElement($uid){
19
		if (!$this->paramObligatoiresSontPresents($uid)) {
20
			return;
21
		}
22
 
23
		$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
24
		$referentiel = array();
2143 jpm 25
 
1939 aurelien 26
		if($uid[0] == "cle") {
27
			$referentiel = $this->rechercherCles($_GET['recherche']);
28
		} else if($uid[0] == "valeur") {
29
			$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
30
		}
31
 
2143 jpm 32
		$this->envoyerJson($referentiel);
33
		return true;
1939 aurelien 34
	}
2143 jpm 35
 
2394 aurelien 36
	function rechercherCles($recherche_cle) {
37
		// Recherche dans clé du catalogue et les clés déja saisies par les utilisateurs.
38
		// Si une clé est présente dans les deux tables, on privilégie celle du catalogue
39
		// qui contient un label bien formé
40
		$requete = "(SELECT cle, label, 'catalogue' FROM cel_catalogue_champs_etendus WHERE ".
41
						"label LIKE ".Cel::db()->proteger($recherche_cle)." ".
42
						"AND groupe = 0 ".
43
					") ".
44
					"UNION ".
45
					"(SELECT DISTINCT cle, cle as label, 'utilisateur' FROM cel_obs_etendues WHERE ".
46
						"cle LIKE ".Cel::db()->proteger($recherche_cle).
47
						"AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) ".
48
					") ";
49
 
2143 jpm 50
		$resultat = Cel::db()->requeter($requete);
2394 aurelien 51
 
1939 aurelien 52
		$referentiel = array();
2143 jpm 53
		foreach($resultat as $valeur) {
1939 aurelien 54
			$referentiel[$valeur['cle']] = $valeur['label'];
55
		}
56
		return $referentiel;
57
	}
2143 jpm 58
 
1939 aurelien 59
	function rechercherValeurs($cle, $recherche_valeur) {
60
		$requete = "SELECT DISTINCT valeur FROM cel_obs_etendues WHERE ".
2143 jpm 61
			"cle = ".Cel::db()->proteger($cle)." AND ".
62
			"valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";
1939 aurelien 63
 
2143 jpm 64
		$referentiel_resultat = Cel::db()->requeter($requete);
1939 aurelien 65
		$referentiel = array();
2143 jpm 66
 
67
		foreach ($referentiel_resultat as $valeur) {
68
			if (trim($valeur['valeur']) != '') {
2037 aurelien 69
				$referentiel[] = $valeur['valeur'];
70
			}
1939 aurelien 71
		}
72
		return $referentiel;
73
	}
2143 jpm 74
 
1939 aurelien 75
	function paramObligatoiresSontPresents($uid) {
2143 jpm 76
		return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
1939 aurelien 77
	}
2143 jpm 78
 
1939 aurelien 79
	function filtreRechercheEstDemande() {
2143 jpm 80
		return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != '');
1939 aurelien 81
	}
2143 jpm 82
 
1939 aurelien 83
	function limiteEstDemandee() {
84
		return isset($_GET["start"]) && is_numeric($_GET["start"]) && isset($_GET["limit"]) && is_numeric($_GET["limit"]);
85
	}
2143 jpm 86
 
1939 aurelien 87
	function estUneValeurValide($chaine) {
2143 jpm 88
		return ($chaine != null && $chaine != "000null" &&  trim($chaine) != '');
1939 aurelien 89
	}
2143 jpm 90
}