Line 23... |
Line 23... |
23 |
*/
|
23 |
*/
|
Line 24... |
Line 24... |
24 |
|
24 |
|
25 |
// Un caractère de concaténation entre le projet et le service.
|
25 |
// Un caractère de concaténation entre le projet et le service.
|
26 |
// Ce caractère ne doit pas faire partie d'aucun des noms de service ou projet
|
26 |
// Ce caractère ne doit pas faire partie d'aucun des noms de service ou projet
|
- |
|
27 |
define('RES_VAL_SEP', '@');
|
Line 27... |
Line 28... |
27 |
define('RES_VAL_SEP', '@');
|
28 |
define('SPE_INDEX_NVJFL', '_result_ontologies' . RES_VAL_SEP . 'nvjfl');
|
- |
|
29 |
|
- |
|
30 |
class NomsVernaculaires extends Commun {
|
28 |
|
31 |
|
29 |
class NomsVernaculaires extends Commun {
|
32 |
static $onto_multi_support = array('conseil_emploi', 'genre');
|
30 |
protected $champ_infos = array(
|
33 |
static $champ_infos = array(
|
31 |
'taxon' => array('service' => 'taxons', 'ressource' => 'nt:', 'projet' => 'bdtfx', 'nom' => 'nom_sci',
|
34 |
'taxon' => array('service' => 'taxons', 'ressource' => 'nt:', 'projet' => 'bdtfx', 'nom' => 'nom_sci',
|
32 |
// utilisés par ajouterChampsOntologieLigneResultat()
|
35 |
// utilisés par ajouterChampsOntologieLigneResultat()
|
33 |
'intitule' => 'taxon.code', // intitulé du champ tel qu'il sera renvoyé en JSON
|
36 |
'intitule' => 'taxon.code', // intitulé du champ tel qu'il sera renvoyé en JSON
|
Line 424... |
Line 427... |
424 |
return $table_retour_json;
|
427 |
return $table_retour_json;
|
425 |
}
|
428 |
}
|
Line 426... |
Line 429... |
426 |
|
429 |
|
427 |
/**
|
430 |
/**
|
428 |
* Ajoute les champs d'ontologie supplémentaires si necéssaire
|
431 |
* Ajoute les champs d'ontologie supplémentaires si necéssaire
|
- |
|
432 |
* en faisant appels aux web services associés.
|
- |
|
433 |
* Les appels peuvent être fait individuellement (pour un couple <ontologie:valeur>) ou bien
|
- |
|
434 |
* regroupés, **si le webservice correspondant le supporte**.
|
- |
|
435 |
*
|
- |
|
436 |
* Nous disposons à ce jour de 3 (trois) webservices d'ontologies correspondant aux noms vernaculaires (cf $champ_infos)
|
- |
|
437 |
* Mais 2 d'entre eux sont identiques, il s'agit de /nvjfl/ontologies/. Or ce webservice supporte le multi-critère.
|
- |
|
438 |
* Nous pouvons donc factorisé l'appel pour "conseil_emploi" et "genre", mais pas pour "taxon".
|
429 |
* en faisant appels aux web services associés
|
439 |
*
|
430 |
* @param array in/out $resultats: tous les résultats
|
440 |
* @param array in/out $resultats: tous les résultats
|
431 |
*/
|
441 |
*/
|
432 |
public function ajouterChampsOntologieLigneTousResultats(&$resultats) {
|
- |
|
433 |
foreach($this->champ_infos as $cle => $champs_supplementaires) {
|
442 |
public function ajouterChampsOntologieLigneTousResultats(&$resultats) {
|
434 |
if(!in_array($cle, $this->champs_supp)) continue;
|
- |
|
435 |
|
- |
|
436 |
// TODO: n'activer QUE lorsque le webservice ontologie Nvjfl supportera le multi-critère
|
- |
|
437 |
// cf: services/modules/0.1/commun/Ontologies.php
|
- |
|
438 |
if($cle == 'conseil_emploi') {
|
- |
|
439 |
// la factorisation des toutes les valeurs recherchées (pour tous les
|
- |
|
440 |
// résultats, peut [potentiellement] être effectuée ci-dessous)
|
- |
|
441 |
$ontologieParamPending = self::NvjflOntologieIndex($resultats, $champs_supplementaires);
|
- |
|
442 |
$this->NvjflOntologieExpand($ontologieParamPending);
|
- |
|
443 |
self::NvjflOntologieCombine($resultats, $champs_supplementaires);
|
- |
|
444 |
continue;
|
- |
|
Line -... |
Line 443... |
- |
|
443 |
$champs_sup = array_intersect($this->champs_supp, array_keys(self::$champ_infos));
|
- |
|
444 |
|
- |
|
445 |
// La regroupement des toutes les valeurs recherchées (pour tous les
|
- |
|
446 |
// résultats), pour "les" onotologies supportant le multi-critère est effectué ci-dessous.
|
- |
|
447 |
// Dans les faits ce n'est le cas que pour nvjfl.
|
- |
|
448 |
$ontologieParamPending = self::NvjflOntologieIndex($resultats, $champs_sup);
|
- |
|
449 |
$this->NvjflOntologieExpand($ontologieParamPending);
|
- |
|
450 |
self::NvjflOntologieCombine($resultats);
|
- |
|
451 |
|
- |
|
452 |
// pour les ontologies multi-critères, on vient de le régler ci-dessus
|
- |
|
453 |
$champs_sup = array_diff($champs_sup, self::$onto_multi_support);
|
- |
|
454 |
|
- |
|
455 |
|
- |
|
456 |
// ici, $champs_sup ne peut contenir, au plus, que "taxon".
|
- |
|
457 |
// code historique:
|
445 |
}
|
458 |
foreach($champs_sup as $cle) {
|
446 |
|
459 |
$champs_supplementaires = self::$champ_infos[$cle];
|
447 |
// extrait, depuis un élément de $champ_infos:
|
460 |
// extrait, depuis un élément de $champ_infos:
|
Line 448... |
Line 461... |
448 |
// $service, $ressource, $projet, $nom, $intitule, $bdd_champ
|
461 |
// $service, $ressource, $projet, $nom, $intitule, $bdd_champ
|
Line 461... |
Line 474... |
461 |
/* Récupère les valeurs recherchées pour une liste de résultats, (plus ou moins)
|
474 |
/* Récupère les valeurs recherchées pour une liste de résultats, (plus ou moins)
|
462 |
spécifiquement au service d'Ontologies de NVJFL.
|
475 |
spécifiquement au service d'Ontologies de NVJFL.
|
463 |
Aggrège les valeurs dans le tableau retourné.
|
476 |
Aggrège les valeurs dans le tableau retourné.
|
464 |
Une référence vers l'index du tableau (NULL pour l'instant) est laissée dans
|
477 |
Une référence vers l'index du tableau (NULL pour l'instant) est laissée dans
|
465 |
un élément du résultat. */
|
478 |
un élément du résultat. */
|
466 |
static function NvjflOntologieIndex(&$resultats, $champs_infos) {
|
479 |
static function NvjflOntologieIndex(&$resultats, $champs_sup) {
|
- |
|
480 |
// nous ne supportons le multi-critère que sur les ontologies nvjfl, et nous
|
- |
|
481 |
// avons précisé celles qui sont concernées dans self::$onto_multi_support
|
- |
|
482 |
$champs_sup = array_intersect($champs_sup, self::$onto_multi_support);
|
467 |
$ontologieParamPending = Array();
|
483 |
$ontologieParamPending = Array();
|
468 |
extract($champs_infos);
|
- |
|
469 |
foreach($resultats as &$resultat) {
|
484 |
foreach($resultats as &$resultat) {
|
- |
|
485 |
foreach($champs_sup as $v) {
|
470 |
$valeur_recherche = $resultat[$bdd_champ]; // NvjflOntologieIndex uniquement pour "conseil_emploi", donc $bdd_champ = 'num_statut'
|
486 |
// de cet extract() nous n'utilisons que $bdd_champ et $ressource
|
- |
|
487 |
extract(self::$champ_infos[$v]);
|
- |
|
488 |
if(!isset($resultat[$bdd_champ])) continue;
|
- |
|
489 |
|
- |
|
490 |
$valeur_recherche = $resultat[$bdd_champ];
|
471 |
if(!trim($valeur_recherche)) continue;
|
491 |
if(!trim($valeur_recherche)) continue;
|
- |
|
492 |
|
- |
|
493 |
// XXX: $ressource contient déjà ':' comme suffixe
|
- |
|
494 |
$critere = $ressource . $valeur_recherche;
|
472 |
$ontologieParamPending[$ressource . $valeur_recherche] = NULL;
|
495 |
$ontologieParamPending[$critere] = NULL;
|
473 |
// placeholder pour le résultat
|
496 |
// placeholder pour le résultat
|
474 |
$resultat['_result_ontologies' . RES_VAL_SEP . 'nvjfl'] =
|
497 |
$resultat[SPE_INDEX_NVJFL][$v][$critere] =
|
475 |
&$ontologieParamPending[$ressource . $valeur_recherche];
|
498 |
&$ontologieParamPending[$critere];
|
- |
|
499 |
}
|
476 |
}
|
500 |
}
|
477 |
return $ontologieParamPending;
|
501 |
return $ontologieParamPending;
|
478 |
}
|
502 |
}
|
Line 479... |
Line 503... |
479 |
|
503 |
|
480 |
// TODO: switch to static si il peut en être de même pour ajouterHrefAutreProjet()
|
504 |
// TODO: switch to static si il peut en être de même pour ajouterHrefAutreProjet()
|
481 |
/* À partir d'un aggrégat des critère de requêtes d'ontologies, spécifiques à NVJFL,
|
505 |
/* À partir d'un aggrégat des critère de requêtes d'ontologies, spécifiques à NVJFL,
|
482 |
créé une URL multi-critère.
|
506 |
créé une URL multi-critère.
|
483 |
Celle-ci, dans ce cas précis, n'est que la concaténation, par des virgules,
|
507 |
Celle-ci, dans ce cas précis, n'est que la concaténation, par des virgules,
|
484 |
des couples <ressource - valeur recherchée>.
|
508 |
des couples <ressource:ValeurRecherchée>.
|
Line 485... |
Line 509... |
485 |
L'URL est appelée et la valeur correspondante, dans $criteres_requete, remplacée.
|
509 |
L'URL est appelée et la valeur correspondante est remplacée dans $criteres_requete.
|
486 |
|
510 |
|
487 |
Note: dans le cadre du tryptique index/expand/combine pour lequel cette fonction existe,
|
511 |
Note: dans le cadre du tryptique index/expand/combine pour lequel cette fonction existe,
|
488 |
la valeur est référencée par une élément d'une ou plusieurs lignes de $resultat correspondantes.
|
512 |
la valeur est référencée par un élément d'une ou plusieurs lignes de $resultat correspondantes.
|
489 |
Celle(s)-ci sera[ont] donc changée(s) dans la foulée. */
|
513 |
Celle(s)-ci sera[ont] donc changée(s) dans la foulée. */
|
490 |
public function NvjflOntologieExpand(&$criteres_requete) {
|
514 |
public function NvjflOntologieExpand(&$criteres_requete) {
|
- |
|
515 |
// équivalent spécifique de ajouterHrefAutreProjet()
|
491 |
// équivalent spécifique de ajouterHrefAutreProjet()
|
516 |
$valeurs_requises = implode(',', array_keys($criteres_requete));
|
492 |
$valeurs_requises = implode(',', array_keys($criteres_requete));
|
517 |
// en vérité, nous ne supportons ceci ici que pour nvjfl et non n'importe quel url_service
|
Line 493... |
Line 518... |
493 |
$url = Config::get('url_service').'/ontologies/'.$valeurs_requises;
|
518 |
$url = Config::get('url_service').'/ontologies/'.$valeurs_requises;
|
494 |
$val = $this->consulterHref($url);
|
519 |
$val = $this->consulterHref($url);
|
Line 500... |
Line 525... |
500 |
$k = key($criteres_requete);
|
525 |
$k = key($criteres_requete);
|
501 |
$criteres_requete[$k] = $val;
|
526 |
$criteres_requete[$k] = $val;
|
502 |
return;
|
527 |
return;
|
503 |
}
|
528 |
}
|
Line 504... |
Line 529... |
504 |
|
529 |
|
- |
|
530 |
// subtilité, cette affectation modifie par conséquent les valeurs dans
|
505 |
// subtilité, cette affectation modifie par conséquent $resultats[X]['_result_ontologies' . RES_VAL_SEP . 'nvjfl']
|
531 |
// $resultats[X][SPE_INDEX_NVJFL]
|
506 |
// dont la référence pointe toujours sur $v
|
532 |
// dont la référence pointe toujours sur $v
|
507 |
foreach($val as $k => $v) $criteres_requete[$k] = $val->$k;
|
533 |
foreach($val as $k => $v) $criteres_requete[$k] = $val->$k;
|
Line 508... |
Line 534... |
508 |
}
|
534 |
}
|
509 |
|
535 |
|
- |
|
536 |
/* Fonction finale du tryptique: réordonne les valeurs obtenues auprès du web-service
|
510 |
/* Fonction finale du tryptique: réordonne les valeurs obtenues auprès du web-service
|
537 |
NVJFL en adéquation avec les champs attendus en sortie.
|
- |
|
538 |
Dès l'indexation des critères, nous avons associé une (ou plusieurs) référence(s) du
|
- |
|
539 |
tableau de résultats vers le tableau de retour des ontologies à l'aide d'un index
|
- |
|
540 |
particulier l'index SPE_INDEX_NVJFL qui contient comme élément(s)
|
511 |
NVJFL en adéquation avec les champs attendus en sortie. Pour ce faire, $champs_infos
|
541 |
un ou plusieurs ontologies (les indexes de self::$champ_infos) qui elles-mêmes contiennent
|
- |
|
542 |
une ou plusieurs valeurs représentant les valeurs recherchées appartement à cette ontologies.
|
- |
|
543 |
Celui-ci est supprimé après avoir été correctement copié. */
|
- |
|
544 |
/**
|
- |
|
545 |
* @param array in/out $resultats: tous les résultats
|
512 |
est nécessaire. D'autre part, l'index spécifique '_result_ontologies' . RES_VAL_SEP . 'nvjfl'
|
546 |
* @param array in $critere: tableau des ontologies:valeur demandées, de la forme [ numStatut:1, genreNombre:11, ... ]
|
513 |
est supprimé après avoir été correctement copié. */
|
- |
|
514 |
static function NvjflOntologieCombine(&$resultats, $champs_infos) {
|
547 |
*/
|
515 |
extract($champs_infos);
|
548 |
static function NvjflOntologieCombine(&$resultats, $criteres) {
|
- |
|
549 |
foreach($resultats as &$resultat) {
|
- |
|
550 |
if(!array_key_exists(SPE_INDEX_NVJFL, $resultat)) continue;
|
- |
|
551 |
|
- |
|
552 |
/* Note: la complétude d'un résultat peut dépendre de plusieurs ontologies différentes,
|
- |
|
553 |
d'où cette boucle. Cependant une seule valeur sera demandé pour cette ontologie, c'est pourquoi
|
- |
|
554 |
$resultat[SPE_INDEX_NVJFL][$onto_name], s'il existe, ne contiendra toujours qu'un seul élément.
|
- |
|
555 |
Puisque par définition un résultat contenant des valeurs d'ontologie n'aura jamais qu'un seul et unique
|
- |
|
556 |
attribut num_genre (ou num_statut, ou autre) */
|
- |
|
557 |
foreach(self::$onto_multi_support as $onto_name) {
|
- |
|
558 |
/* $onto_name est un nom d'ontologie (l'une des clefs, parmi conseil_emploi et genre,
|
- |
|
559 |
cf la boucle sur $champs_sup dans NvjflOntologieIndex()
|
- |
|
560 |
de cet extract() nous n'utilisons que $intitule et $nom */
|
516 |
foreach($resultats as &$resultat) {
|
561 |
extract(self::$champ_infos[$onto_name]);
|
517 |
if(!array_key_exists('_result_ontologies' . RES_VAL_SEP . 'nvjfl', $resultat)) continue;
|
562 |
|
- |
|
563 |
// equivalent de l'affectation finale de chercherSignificationCode()
|
- |
|
564 |
// (utilisé lors de recherches d'ontologies en mono-critère)
|
- |
|
565 |
// XXX: PHP-5.3 pas de récupération d'attribut sur fonction
|
- |
|
566 |
$r = current($resultat[SPE_INDEX_NVJFL][$onto_name]);
|
- |
|
567 |
$resultat[$intitule] = $r->$nom;
|
518 |
// equivalent de chercher signification
|
568 |
|
- |
|
569 |
// XXX: certes nous pourrions nous contenter du unset() final
|
- |
|
570 |
unset($resultat[SPE_INDEX_NVJFL][$onto_name]);
|
519 |
$resultat[$intitule] = $resultat['_result_ontologies' . RES_VAL_SEP . 'nvjfl']->$nom;
|
571 |
}
|
520 |
unset($resultat['_result_ontologies' . RES_VAL_SEP . 'nvjfl']);
|
572 |
unset($resultat[SPE_INDEX_NVJFL]);
|
Line 521... |
Line 573... |
521 |
}
|
573 |
}
|
522 |
}
|
574 |
}
|
Line 527... |
Line 579... |
527 |
* @param array $ligne_resultat
|
579 |
* @param array $ligne_resultat
|
528 |
*
|
580 |
*
|
529 |
* @return array la ligne modifiée
|
581 |
* @return array la ligne modifiée
|
530 |
*/
|
582 |
*/
|
531 |
public function ajouterChampsOntologieLigneResultat($ligne_resultat) {
|
583 |
public function ajouterChampsOntologieLigneResultat($ligne_resultat) {
|
532 |
foreach($this->champ_infos as $cle => $champs_supplementaires) {
|
584 |
foreach(self::$champ_infos as $cle => $champs_supplementaires) {
|
533 |
if(!in_array($cle, $this->champs_supp)) continue;
|
585 |
if(!in_array($cle, $this->champs_supp)) continue;
|
534 |
// extrait, depuis un élément de $champ_infos:
|
586 |
// extrait, depuis un élément de $champ_infos:
|
535 |
// $service, $ressource, $projet, $nom, $intitule, $bdd_champ
|
587 |
// $service, $ressource, $projet, $nom, $intitule, $bdd_champ
|
536 |
extract($champs_supplementaires);
|
588 |
extract($champs_supplementaires);
|
537 |
$valeur_recherche = $ligne_resultat[$bdd_champ];
|
589 |
$valeur_recherche = $ligne_resultat[$bdd_champ];
|
Line 636... |
Line 688... |
636 |
$this->table_retour[$champ] = $valeur;
|
688 |
$this->table_retour[$champ] = $valeur;
|
637 |
}
|
689 |
}
|
638 |
}
|
690 |
}
|
Line 639... |
Line 691... |
639 |
|
691 |
|
640 |
public function afficherPointCode($nomChamp, $langue, $num_nom, $valeur) {
|
692 |
public function afficherPointCode($nomChamp, $langue, $num_nom, $valeur) {
|
641 |
if (isset($this->champ_infos[$nomChamp])) {
|
693 |
if (isset(self::$champ_infos[$nomChamp])) {
|
642 |
extract($this->champ_infos[$nomChamp]);
|
694 |
extract(self::$champ_infos[$nomChamp]);
|
Line 643... |
Line 695... |
643 |
}
|
695 |
}
|
644 |
|
696 |
|
645 |
if ($this->retour_format == 'max') {
|
697 |
if ($this->retour_format == 'max') {
|
Line 721... |
Line 773... |
721 |
}
|
773 |
}
|
Line 722... |
Line 774... |
722 |
|
774 |
|
723 |
public function afficherPoint($champ, $valeur, $langue, $num_nom) {
|
775 |
public function afficherPoint($champ, $valeur, $langue, $num_nom) {
|
724 |
preg_match('/^(.*)\.code$/', $champ, $match);
|
776 |
preg_match('/^(.*)\.code$/', $champ, $match);
|
725 |
$champ = $match[1];
|
777 |
$champ = $match[1];
|
726 |
if (isset($this->champ_infos[$champ])) {
|
778 |
if (isset(self::$champ_infos[$champ])) {
|
727 |
extract($this->champ_infos[$champ]);
|
779 |
extract(self::$champ_infos[$champ]);
|
728 |
$url = $this->ajouterHrefAutreProjet($service, $ressource, $valeur, $projet);
|
780 |
$url = $this->ajouterHrefAutreProjet($service, $ressource, $valeur, $projet);
|
729 |
$projet .= '.';
|
781 |
$projet .= '.';
|
Line 730... |
Line 782... |
730 |
}
|
782 |
}
|