Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
1939 aurelien 1
<?php
2458 jpm 2
// declare(encoding='UTF-8');
3
/**
4
 * Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus.
5
 *
6
 * @internal   Mininum PHP version : 5.2
7
 * @category   CEL
8
 * @package    Services
9
 * @subpackage Auto-complétions
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>
17
 */
1939 aurelien 18
class NomsChampsEtendus extends Cel {
2143 jpm 19
 
1939 aurelien 20
	/**
21
	 * Suivant le type de référentiel donné en paramètre, renvoie les liste de ses éléments
2143 jpm 22
	 *
1939 aurelien 23
	 * uid[0] : "cle" ou "valeur"
24
	 * $_GET["cle"] : restreint la recherche sur les valeurs d'une certaine clé
25
	 * $_GET["recherche"] : cherche les noms qui commmencent selon la valeur
26
	 */
2458 jpm 27
	public function getElement($uid){
1939 aurelien 28
		if (!$this->paramObligatoiresSontPresents($uid)) {
29
			return;
30
		}
31
		$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']);
32
		$referentiel = array();
2143 jpm 33
 
2458 jpm 34
		if ($uid[0] == 'cle') {
1939 aurelien 35
			$referentiel = $this->rechercherCles($_GET['recherche']);
2458 jpm 36
		} else if($uid[0] == 'valeur') {
1939 aurelien 37
			$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']);
38
		}
39
 
2143 jpm 40
		$this->envoyerJson($referentiel);
41
		return true;
1939 aurelien 42
	}
2143 jpm 43
 
2458 jpm 44
	private function rechercherCles($recherche_cle) {
2394 aurelien 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
47
		// qui contient un label bien formé
2604 aurelien 48
		$labelP = Cel::db()->proteger($recherche_cle."%");
2458 jpm 49
		$requete = "(SELECT cle, label, 'catalogue' ".
50
			'FROM cel_catalogue_champs_etendus '.
51
			"WHERE label LIKE $labelP ".
52
			'AND groupe = 0 )'.
53
			'UNION '.
54
			"(SELECT DISTINCT cle, cle AS label, 'utilisateur' ".
55
			'FROM cel_obs_etendues '.
56
			"WHERE cle LIKE $labelP ".
57
			'AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) '.
58
			') '.
59
			' -- '.__FILE__.':'.__LINE__;
60
		$resultat = Cel::db()->requeter($requete);
2394 aurelien 61
 
1939 aurelien 62
		$referentiel = array();
2458 jpm 63
		foreach ($resultat as $valeur) {
1939 aurelien 64
			$referentiel[$valeur['cle']] = $valeur['label'];
65
		}
66
		return $referentiel;
67
	}
2143 jpm 68
 
2458 jpm 69
	private function rechercherValeurs($cle, $recherche_valeur) {
70
		$cleP = Cel::db()->proteger($cle);
71
		$valeurP = Cel::db()->proteger($recherche_valeur.'%');
72
		$requete = 'SELECT DISTINCT valeur '.
73
			'FROM cel_obs_etendues '.
74
			"WHERE cle = $cleP ".
75
			"AND valeur LIKE $valeurP ".
76
			' -- '.__FILE__.':'.__LINE__;
77
		$resultats = Cel::db()->requeter($requete);
1939 aurelien 78
 
79
		$referentiel = array();
2458 jpm 80
		foreach ($resultats as $valeur) {
2143 jpm 81
			if (trim($valeur['valeur']) != '') {
2037 aurelien 82
				$referentiel[] = $valeur['valeur'];
83
			}
1939 aurelien 84
		}
85
		return $referentiel;
86
	}
2143 jpm 87
 
2458 jpm 88
	private function paramObligatoiresSontPresents($uid) {
2143 jpm 89
		return (isset($uid[0]) && ($uid[0] == 'cle' || $uid[0] == 'valeur'));
1939 aurelien 90
	}
2143 jpm 91
}