Subversion Repositories eFlore/Applications.cel

Rev

Rev 2394 | Rev 2604 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2394 Rev 2458
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
// declare(encoding='UTF-8');
-
 
3
/**
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
4
 * Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus.
3
 
5
 *
-
 
6
 * @internal   Mininum PHP version : 5.2
4
// in utf8
7
 * @category   CEL
-
 
8
 * @package    Services
-
 
9
 * @subpackage Auto-complétions
5
// out utf8
10
 * @version    0.1
-
 
11
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
-
 
12
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
-
 
13
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
-
 
14
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
15
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
16
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
6
 
17
 */
7
// Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus
-
 
8
class NomsChampsEtendus extends Cel {
18
class NomsChampsEtendus extends Cel {
Line 9... Line 19...
9
 
19
 
10
	/**
20
	/**
11
	 * Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
21
	 * Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
12
	 *
22
	 *
13
	 * uid[0] : "cle" ou "valeur"
-
 
14
	 * $_GET["start"] et $GET_["limit"] : selection intervalle
23
	 * uid[0] : "cle" ou "valeur"
15
	 * $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
24
	 * $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
16
	 * $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
25
	 * $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
17
	 */
26
	 */
18
	function getElement($uid){
27
	public function getElement($uid){
19
		if (!$this->paramObligatoiresSontPresents($uid)) {
28
		if (!$this->paramObligatoiresSontPresents($uid)) {
20
			return;
29
			return;
21
		}
-
 
22
 
30
		}
23
		$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
31
		$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
Line 24... Line 32...
24
		$referentiel = array();
32
		$referentiel = array();
25
 
33
 
26
		if($uid[0] == "cle") {
34
		if ($uid[0] == 'cle') {
27
			$referentiel = $this->rechercherCles($_GET['recherche']);
35
			$referentiel = $this->rechercherCles($_GET['recherche']);
28
		} else if($uid[0] == "valeur") {
36
		} else if($uid[0] == 'valeur') {
Line 29... Line 37...
29
			$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
37
			$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
30
		}
38
		}
31
 
39
 
Line 32... Line 40...
32
		$this->envoyerJson($referentiel);
40
		$this->envoyerJson($referentiel);
33
		return true;
41
		return true;
34
	}
42
	}
35
 
43
 
-
 
44
	private function rechercherCles($recherche_cle) {
36
	function rechercherCles($recherche_cle) {		
45
		// Recherche dans clé du catalogue et les clés déja saisies par les utilisateurs.
37
		// Recherche dans clé du catalogue et les clés déja saisies par les utilisateurs.
46
		// Si une clé est présente dans les deux tables, on privilégie celle du catalogue
38
		// Si une clé est présente dans les deux tables, on privilégie celle du catalogue
47
		// qui contient un label bien formé
39
		// qui contient un label bien formé
48
		$labelP = Cel::db()->proteger($recherche_cle);
40
		$requete = "(SELECT cle, label, 'catalogue' FROM cel_catalogue_champs_etendus WHERE ".
49
		$requete = "(SELECT cle, label, 'catalogue' ".
41
						"label LIKE ".Cel::db()->proteger($recherche_cle)." ".
50
			'FROM cel_catalogue_champs_etendus '.
-
 
51
			"WHERE label LIKE $labelP ".
42
						"AND groupe = 0 ".
52
			'AND groupe = 0 )'.
43
					") ".
53
			'UNION '.
44
					"UNION ".
54
			"(SELECT DISTINCT cle, cle AS label, 'utilisateur' ".
45
					"(SELECT DISTINCT cle, cle as label, 'utilisateur' FROM cel_obs_etendues WHERE ".
-
 
-
 
55
			'FROM cel_obs_etendues '.
46
						"cle LIKE ".Cel::db()->proteger($recherche_cle).
56
			"WHERE cle LIKE $labelP ".
47
						"AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) ".
57
			'AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) '.
48
					") ";
58
			') '.
49
 
59
			' -- '.__FILE__.':'.__LINE__;
50
		$resultat = Cel::db()->requeter($requete);
60
		$resultat = Cel::db()->requeter($requete);
51
		
61
 
52
		$referentiel = array();
62
		$referentiel = array();
53
		foreach($resultat as $valeur) {
63
		foreach ($resultat as $valeur) {
Line 54... Line 64...
54
			$referentiel[$valeur['cle']] = $valeur['label'];
64
			$referentiel[$valeur['cle']] = $valeur['label'];
-
 
65
		}
-
 
66
		return $referentiel;
55
		}
67
	}
-
 
68
 
-
 
69
	private function rechercherValeurs($cle, $recherche_valeur) {
56
		return $referentiel;
70
		$cleP = Cel::db()->proteger($cle);
-
 
71
		$valeurP = Cel::db()->proteger($recherche_valeur.'%');
57
	}
72
		$requete = 'SELECT DISTINCT valeur '.
Line 58... Line -...
58
 
-
 
59
	function rechercherValeurs($cle, $recherche_valeur) {
73
			'FROM cel_obs_etendues '.
60
		$requete = "SELECT DISTINCT valeur FROM cel_obs_etendues WHERE ".
-
 
61
			"cle = ".Cel::db()->proteger($cle)." AND ".
74
			"WHERE cle = $cleP ".
62
			"valeur LIKE ".Cel::db()->proteger($recherche_valeur.'%')." ";
75
			"AND valeur LIKE $valeurP ".
63
 
76
			' -- '.__FILE__.':'.__LINE__;
64
		$referentiel_resultat = Cel::db()->requeter($requete);
77
		$resultats = Cel::db()->requeter($requete);
65
		$referentiel = array();
78
 
66
 
79
		$referentiel = array();
67
		foreach ($referentiel_resultat as $valeur) {
80
		foreach ($resultats as $valeur) {
Line 68... Line 81...
68
			if (trim($valeur['valeur']) != '') {
81
			if (trim($valeur['valeur']) != '') {
69
				$referentiel[] = $valeur['valeur'];
82
				$referentiel[] = $valeur['valeur'];
70
			}
83
			}
71
		}
-
 
72
		return $referentiel;
-
 
73
	}
-
 
74
 
-
 
75
	function paramObligatoiresSontPresents($uid) {
-
 
76
		return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
-
 
77
	}
-
 
78
 
-
 
79
	function filtreRechercheEstDemande() {
-
 
80
		return (isset($_GET["recherche"]) && trim($_GET["recherche"]) != '');
-
 
81
	}
-
 
82
 
-
 
83
	function limiteEstDemandee() {
84
		}
84
		return isset($_GET["start"]) && is_numeric($_GET["start"]) && isset($_GET["limit"]) && is_numeric($_GET["limit"]);
85
		return $referentiel;