1,10 → 1,20 |
<?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 |
// declare(encoding='UTF-8'); |
/** |
* Fournit un référentiel relatif à l'utilisateur sur les noms ou les valeurs des champs étendus. |
* |
* @internal Mininum PHP version : 5.2 |
* @category CEL |
* @package Services |
* @subpackage Auto-complétions |
* @version 0.1 |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class NomsChampsEtendus extends Cel { |
|
/** |
11,21 → 21,19 |
* 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){ |
public function getElement($uid){ |
if (!$this->paramObligatoiresSontPresents($uid)) { |
return; |
} |
|
$_GET['recherche'] = str_replace('*', '%', $_GET['recherche']); |
$referentiel = array(); |
|
if($uid[0] == "cle") { |
if ($uid[0] == 'cle') { |
$referentiel = $this->rechercherCles($_GET['recherche']); |
} else if($uid[0] == "valeur") { |
} else if($uid[0] == 'valeur') { |
$referentiel = $this->rechercherValeurs($_GET['cle'], $_GET['recherche']); |
} |
|
33,38 → 41,43 |
return true; |
} |
|
function rechercherCles($recherche_cle) { |
private function rechercherCles($recherche_cle) { |
// Recherche dans clé du catalogue et les clés déja saisies par les utilisateurs. |
// Si une clé est présente dans les deux tables, on privilégie celle du catalogue |
// qui contient un label bien formé |
$requete = "(SELECT cle, label, 'catalogue' FROM cel_catalogue_champs_etendus WHERE ". |
"label LIKE ".Cel::db()->proteger($recherche_cle)." ". |
"AND groupe = 0 ". |
") ". |
"UNION ". |
"(SELECT DISTINCT cle, cle as label, 'utilisateur' FROM cel_obs_etendues WHERE ". |
"cle LIKE ".Cel::db()->proteger($recherche_cle). |
"AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) ". |
") "; |
$labelP = Cel::db()->proteger($recherche_cle); |
$requete = "(SELECT cle, label, 'catalogue' ". |
'FROM cel_catalogue_champs_etendus '. |
"WHERE label LIKE $labelP ". |
'AND groupe = 0 )'. |
'UNION '. |
"(SELECT DISTINCT cle, cle AS label, 'utilisateur' ". |
'FROM cel_obs_etendues '. |
"WHERE cle LIKE $labelP ". |
'AND cle NOT IN (SELECT cle FROM cel_catalogue_champs_etendus) '. |
') '. |
' -- '.__FILE__.':'.__LINE__; |
$resultat = Cel::db()->requeter($requete); |
|
$resultat = Cel::db()->requeter($requete); |
|
$referentiel = array(); |
foreach($resultat as $valeur) { |
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.'%')." "; |
private function rechercherValeurs($cle, $recherche_valeur) { |
$cleP = Cel::db()->proteger($cle); |
$valeurP = Cel::db()->proteger($recherche_valeur.'%'); |
$requete = 'SELECT DISTINCT valeur '. |
'FROM cel_obs_etendues '. |
"WHERE cle = $cleP ". |
"AND valeur LIKE $valeurP ". |
' -- '.__FILE__.':'.__LINE__; |
$resultats = Cel::db()->requeter($requete); |
|
$referentiel_resultat = Cel::db()->requeter($requete); |
$referentiel = array(); |
|
foreach ($referentiel_resultat as $valeur) { |
foreach ($resultats as $valeur) { |
if (trim($valeur['valeur']) != '') { |
$referentiel[] = $valeur['valeur']; |
} |
72,19 → 85,7 |
return $referentiel; |
} |
|
function paramObligatoiresSontPresents($uid) { |
private 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) != ''); |
} |
} |