Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 3075 → Rev 3076

/branches/v2.27-secateur/jrest/bibliotheque/Cel.php
95,7 → 95,11
 
protected function protegerTableau(Array $tableau) {
foreach ($tableau as $id => $val) {
$tableau[$id] = Cel::db()->proteger($val);
if ($val === null) {
$tableau[$id] = 'NULL';
} else {
$tableau[$id] = Cel::db()->proteger($val);
}
}
return $tableau;
}
593,9 → 597,9
}
public function formaterZoneGeoEtCodePourAffichage($obs) {
$code_lieu = self::convertirCodeZoneGeoVersCodeInsee($obs['ce_zone_geo']);
if(empty($code_lieu) && !empty($obs['pays'])) {
$code_lieu = $obs['pays'];
$code_lieu = self::convertirCodeZoneGeoVersCodeInsee($obs['ce_zone_geo']);
if(empty($code_lieu) && !empty($obs['pays'])) {
$code_lieu = $obs['pays'];
}
if(!empty(trim($obs['zone_geo'])) && !empty(trim($code_lieu))) {
/branches/v2.27-secateur/jrest/services/CelWidgetSaisie.php
86,7 → 86,7
$obsAAjouter['nom_utilisateur'] = $nom;
$obsAAjouter['ordre'] = $ordreObs;
 
$obsAAjouter['nom_sel'] = $obs['nom_sel'];
$obsAAjouter['nom_sel'] = isset($obs['nom_sel']) ? $obs['nom_sel'] : null;
$obsAAjouter['nom_sel_nn'] = isset($obs['num_nom_sel']) ? $obs['num_nom_sel'] : null;
$obsAAjouter['nom_ret'] = isset($obs['nom_ret']) ? $obs['nom_ret'] : null;
$obsAAjouter['nom_ret_nn'] = isset($obs['num_nom_ret']) ? $obs['num_nom_ret'] : null;
135,6 → 135,10
"\n=\n", $_SERVER);
}
 
// Tentative d'enrichissement des données taxonomiques
// @TODO attention aux perfs, aux timeouts de WS etc.
$this->enrichirDonneesTaxonomiques($obsAAjouter);
 
$observations[$ordreObs] = array(
'obs' => $this->protegerTableau($obsAAjouter),
'img' => $imgAAjouter);
247,6 → 251,124
exit;
}
 
/**
* Si les données taxonomiques sont incomplètes dans $obs
* (clefs 'nom_sel_nn', 'nom_sel', 'nom_referentiel', 'nom_ret_nn',
* 'nom_ret', 'famille'), tente d'en récupérer un maximum à l'aide des
* services eFlore, à condition que soient mentionnés au moins :
* - un nom de référentiel
* - un nom_sel_nn OU un nom_sel
*/
protected function enrichirDonneesTaxonomiques(&$obs) {
// sans référentiel, on ne peut rien faire
if (! empty($obs['nom_referentiel'])) {
// copies locales pour ne pas abimer les donénes d'entrée
$nn = $obs['nom_sel_nn'];
$ref = $obs['nom_referentiel'];
$ns = $obs['nom_sel'];
$nr = $obs['nom_ret'];
$nnr = $obs['nom_ret_nn'];
$fam = $obs['famille'];
$nt = $obs['nt'];
 
// si j'ai un nn, tentative de retrouver le nnr, le nom_sel,
// le nom_ret et la famille, s'ils ne sont pas déjà présents (on
// pourrait les écraser systématiquement mais l'appel au service
// dégrade les perfs)
if ((! empty($nn) && is_numeric($nn))
// omission du test sur 'nom_ret' car le service eFlore noms ne le retourne que sans auteur (pas bon)
&& (empty($ns) || empty($nnr) || empty($nt) || empty($fam) /*|| empty($nr)*/)) {
// go
$this->enrichirDonneesTaxonomiquesParNN($ref, $nn, $obs);
} else {
// si j'ai un nom complet, avec un peu de bol il sera dans le référentiel
if ((! empty($ns))
&& (empty($nn) || empty($nnr) || empty($nt) || empty($fam) /*|| empty($nr)*/)) {
// go
$this->enrichirDonneesTaxonomiquesParNS($ref, $ns, $obs);
}
} // sinon fuque
 
}
}
 
/**
* Enrichit le tableau $obs destiné à être inséré dans le BDD, en
* interrogeant le service eFlore/noms par référentiel + nom scientifique
* avec auteur
*/
protected function enrichirDonneesTaxonomiquesParNS($ref, $ns, &$obs) {
$url_nom = $this->config['eflore']['url_service_nom'];
$url_nom = str_replace('{referentiel}', $ref, $url_nom);
$url_nom .= '?recherche=etendue&ns.structure=au&masque=' . urlencode($ns);
// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
// @TODO mettre du cURL à l'occase
$infos_nom = @file_get_contents($url_nom);
if ($infos_nom != NULL) {
try {
$infos_nom = json_decode($infos_nom, true);
if (count($infos_nom['resultat']) > 0) {
$nn_trouve = null;
$ret_trouve = false;
// on prend le nom avec auteur correspondant exactement;
// s'il y en a plusieurs on prend le premier qui est retenu
foreach($infos_nom['resultat'] as $n => $nom) {
if (! $ret_trouve) {
if ($nom['nom_sci_complet'] == $ns) {
if ($nn_trouve == null || $nom['retenu'] == 'true') {
$nn_trouve = $n;
$ret_trouve = ($nom['retenu'] == 'true');
}
}
}
}
if ($nn_trouve != null) {
// gagné !
$obs['nom_sel_nn'] = $nn_trouve;
// et maintenant on recolle ce qu'on peut à partir du nn
$this->enrichirDonneesTaxonomiquesParNN($ref, $nn_trouve, $obs);
}
}
} catch(Exception $e) {
// échec silencieux
}
}
}
 
/**
* Enrichit le tableau $obs destiné à être inséré dans le BDD, en
* interrogeant le service eFlore/noms par référentiel + nn
*/
protected function enrichirDonneesTaxonomiquesParNN($ref, $nn, &$obs) {
$url_nom = $this->config['eflore']['url_service_nom'];
$url_nom = str_replace('{referentiel}', $ref, $url_nom);
$url_nom .= '/' . $nn;
// un horrible @ car les erreurs de file_get_contents() ne sont pas try/catchables
// @TODO mettre du cURL à l'occase
$infos_nom = @file_get_contents($url_nom);
if ($infos_nom != NULL) {
try {
$infos_nom = json_decode($infos_nom, true);
// une fois qu'on a les infos, on écrase tout
if ($infos_nom['nom_complet'] != null) {
$obs['nom_sel'] = $infos_nom['nom_complet'];
}
if ($infos_nom['nom_retenu.id'] != null) {
$obs['nom_ret_nn'] = $infos_nom['nom_retenu.id'];
}
if ($infos_nom['num_taxonomique'] != null) {
$obs['nt'] = $infos_nom['num_taxonomique'];
}
// manque le nom_ret retourné sans auteur (insatisfaisant)
if ($infos_nom['famille'] != null) {
$obs['famille'] = $infos_nom['famille'];
}
} catch(Exception $e) {
// échec silencieux
}
}
}
 
private function traiterProjetTags() {
if (strpos($this->projet, ',') === false) {
$this->projetTags = array('Projets coopératifs>'.$this->projet);
/branches/v2.27-secateur/jrest/services
Property changes:
Modified: svn:mergeinfo
Merged /trunk/jrest/services:r3069-3073
/branches/v2.27-secateur/jrest
Property changes:
Modified: svn:mergeinfo
Merged /trunk/jrest:r3069-3073
/branches/v2.27-secateur/doc/bdd/2017-03-20_suppression_cel_utilisateurs/suppression_cel_utilisateurs.sql
4,6 → 4,9
ALTER TABLE cel_utilisateurs_infos ADD COLUMN prenom VARCHAR(32) AFTER id_utilisateur;
ALTER TABLE cel_utilisateurs_infos ADD COLUMN intitule VARCHAR(128) AFTER id_utilisateur;
 
-- index pour les perfs
ALTER TABLE cel_utilisateurs_infos ADD INDEX courriel(courriel);
 
-- recollage des prénoms, noms, courriels, tant qu'on a encore l'ancien annuaire sous le coude
UPDATE cel_utilisateurs_infos SET prenom = (SELECT U_SURNAME FROM tela_prod_v4.annuaire_tela WHERE U_ID = id_utilisateur);
UPDATE cel_utilisateurs_infos SET nom = (SELECT U_NAME FROM tela_prod_v4.annuaire_tela WHERE U_ID = id_utilisateur);
/branches/v2.27-secateur/.
Property changes:
Modified: svn:mergeinfo
Merged /trunk:r3069-3073