Subversion Repositories eFlore/Applications.cel

Rev

Rev 2604 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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