Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 731 → Rev 732

/trunk/services/modules/0.1/commun/Ontologies.php
44,7 → 44,7
case 'masque.nom' : $this->ajouterLeFiltreMasque('nom', $valeur); break;
case 'masque.description' : $this->ajouterLeFiltreMasque('description', $valeur); break;
case 'retour.format' : $this->retour_format = $valeur; break;
case 'retour.champs' : break;
case 'retour.champs' : $this->parametres['retour_champs'] = $valeur; break;
case 'navigation.depart' : $this->limite_requete['depart'] = $valeur; break;
case 'navigation.limite' : $this->limite_requete['limite'] = $valeur; break;
case 'recherche' : break;
117,6 → 117,12
$this->requete_condition[] =
' id IN (SELECT id FROM '.$this->table.' WHERE code = '.$this->getBdd()->proteger($match[2])
.' AND classe_id = (SELECT id FROM '.$this->table.' WHERE code = '.$this->getBdd()->proteger($match[1]).'))';
// TODO: optimiser, à voir: traiterMultipleRessourceId() ci-dessous
// SELECT a.*
// FROM $this->table a
// LEFT JOIN $this->table b ON a.id = b.id LEFT JOIN $this->table c ON b.classe_id = c.id
// WHERE b.code = $this->getBdd()->proteger($match[2])
// AND c.code = $this->getBdd()->proteger($match[1]);
} else {
$e = 'Erreur dans les paramètres de recherche de votre requête : </br> Le paramètre " '
.$this->ressources[0].' " n\'existe pas.';
153,7 → 159,7
$champs_recherches = explode(',', $this->parametres['retour_champs']);
$champs_possibles = $this->rechercherChampsPossibles();
foreach ($champs_recherches as $champ_recherche) {
if ($this->verifierValiditeChamp($champ_recherche)) {
if ($this->verifierValiditeChamp($champ_recherche, $champs_possibles)) {
$champ[] = (preg_match('/classe/', $champ_recherche)) ? 'classe_id' : $champ_recherche;
}
}
277,38 → 283,60
 
 
public function formaterOntologiesId($resultat) {
$table_retour = array();
foreach ($resultat as $key => $valeur) {
if ($valeur != '') {
$table_retour = array_merge($table_retour, $this->afficherDonnees($key, $valeur));
}
}
$table_retour = array_filter($resultat, function($val) { return $val != ''; });
$this->calculerClassID($table_retour);
return $table_retour;
}
 
public function afficherDonnees($champ, $valeur) {
$retour[$champ] = $valeur;
if ($this->retour_format == 'max') {
if ($champ == 'classe_id') {
unset($retour[$champ]); // remplacer par classe.id
if ($valeur != "0") { // pas de parent
if (isset($this->parametres['retour_champs'])) {
switch ($this->parametres['retour_champs']) {
case 'classe' : $retour['classe'] = $this->ajouterClasseCorrespondante($valeur); break;
case 'classe.id' : $retour['classe.id'] = $valeur; break;
case 'classe.href' : $retour['classe.href'] = $this->ajouterHref('ontologies', $valeur); break;
case 'classe.*' : $retour['classe.id'] = $valeur; $retour['classe.href'] = $this->ajouterHref('ontologies', $valeur); break;
}
} else {
$nom_classe = $this->ajouterClasseCorrespondante($valeur);
if (isset($nom_classe)) $retour['classe'] = $nom_classe;
$retour['classe.id'] = $valeur;
$retour['classe.href'] = $this->ajouterHref('ontologies', $valeur);
}
}
public function calculerClassID(&$resultat) {
// commenté: pourquoi restreindre le choix des champs au format "max",
// ça ne semble pas logique...
// if ($this->retour_format != 'max') return;
 
 
// question: pourquoi ne pas passer les infos relatives aux ontologies 0 ?
// et que signifie ce commentaire: "pas de parent"
if ($resultat['classe_id'] == '0') return;
 
$valeur = isset($resultat['classe_id']) ? $resultat['classe_id'] : $resultat['classe.id'];
if(! $resultat['classe.id']) {
$resultat['classe.id'] = $resultat['classe_id'];
unset($resultat['classe_id']);
}
 
// max-format et pas de champs spécifiques demandés ?
// Alors on rempli "classe" et "classe.href"
// Mais ne pas recalculer (surtout la classe) si ce n'est pas nécessaire
// (c'est le cas si l'on a demandé plusieurs critère [provenons de formaterMultipleOntologiesId()])
if (! $this->parametres['retour_champs']) {
if(! isset($resultat['classe'])) {
$nom_classe = $this->ajouterClasseCorrespondante($valeur);
if (isset($nom_classe)) $resultat['classe'] = $nom_classe;
}
if(! isset($resultat['classe.href'])) {
$resultat['classe.href'] = $this->ajouterHref('ontologies', $valeur);
}
return;
}
return $retour;
 
// cas où des champs sont demandés
$champs = explode(',', $this->parametres['retour_champs']);
if(in_array('classe', $champs) && ! isset($resultat['classe'])) {
$this->ajouterClasseCorrespondante($valeur);
}
 
if(in_array('classe.id', $champs) && ! isset($resultat['classe.id'])) {
$resultat['classe.id'] = $valeur;
}
 
if(in_array('classe.href', $champs) && ! isset($resultat['classe.href'])) {
$resultat['classe.href'] = $this->ajouterHref('ontologies', $valeur);
}
 
if(in_array('classe.*', $champs) && (! isset($resultat['classe.href']) || ! isset($resultat['classe.id']))) {
$resultat['classe.id'] = $valeur;
$resultat['classe.href'] = $this->ajouterHref('ontologies', $valeur);
}
}
 
/** Recherche par interrogation de la base, le nom de la classe à partir de son identifiant (classe.id) */