Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2538 → Rev 2535

/trunk/jrest/bibliotheque/RechercheInfosZoneGeo.php
File deleted
\ No newline at end of file
/trunk/jrest/bibliotheque/FormateurGroupeColonne.php
150,8 → 150,6
'importable' => FALSE)),
'nom_referentiel' => self::GenColInfo(Array('abbrev' => 'nom_referentiel',
'nom' => 'Referentiel taxonomique')),
'pays' => self::GenColInfo(Array('abbrev' => 'pays',
'nom' => 'Pays')),
'zone_geo' => self::GenColInfo(Array('abbrev' => 'zone_geo',
'nom' => 'Commune')),
'ce_zone_geo' => self::GenColInfo(Array('abbrev' => 'ce_zone_geo',
/trunk/jrest/bibliotheque/RechercheObservation.php
225,18 → 225,6
}
$sous_requete .= ' AND ' ;
break;
case 'pays':
if ($valeur == "NULL") {
$sous_requete .= "(pays IS NULL OR pays = '')";
} else {
$pays_t = explode(',', $valeur);
foreach($pays_t as &$pays) {
$pays = Cel::db()->proteger($pays);
}
$sous_requete .= '(pays IN ('.implode(',', $pays_t).')) ';
}
$sous_requete .= ' AND ' ;
break;
case 'departement':
if ($valeur == "NULL") {
$sous_requete .= "(ce_zone_geo IS NULL OR ce_zone_geo = '')";
/trunk/jrest/bibliotheque/GestionObservation.php
57,7 → 57,7
}
 
$this->ajoutInfoUtilisateurARequete($parametres);
$this->formaterParametresObservation($parametres);
self::formaterParametresObservation($parametres);
 
$requete_insertion_observation = 'INSERT INTO cel_obs ';
$sous_requete_colonnes = $this->traiterParametresObservationEtConstruireSousRequeteAjout($parametres);
140,7 → 140,7
// uniquement en cas de nom_sel présent
$this->traiterEspece($parametres);
}
$this->formaterParametresObservation($parametres);
self::formaterParametresObservation($parametres);
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
$champ_maj[] = "date_modification = NOW()";
$clauseSet = implode(', ', $champ_maj);
163,7 → 163,7
/**
* @return nombre d'observations mises à jour, ou FALSE en cas de problème
*/
public function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) {
static function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) {
// nous pouvons aussi retirer 'ce_utilisateur' (== $utilisateur) qui sera dans la clause WHERE
$exclusions = ['nom_sel_nn', 'nom_sel', 'nom_ret_nn', 'nom_referentiel', 'ce_utilisateur'];
$parametres = array_diff_key($parametres, array_flip($exclusions));
174,7 → 174,7
create_function('$e','return strpos($e, "(Valeurs multiples)") === false;'));
 
// modifie $parametres par référence
$this->formaterParametresObservation($parametres);
self::formaterParametresObservation($parametres);
 
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
$nbreUpdate = count($champ_maj);
214,7 → 214,7
$parametres = array_merge($parametresDefaut, $parametres);
 
$this->traiterEspece($parametres);
$this->formaterParametresObservation($parametres);
self::formaterParametresObservation($parametres);
 
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
$champ_maj[] = 'date_modification = NOW()';
462,13 → 462,12
* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
* @return $parametres le tableau modifié selon ce qu'il contenait
*/
public function formaterParametresObservation(&$parametres) {
static function formaterParametresObservation(&$parametres) {
// Pour empecher que des numéros de département de 1 à 9 soient saisis sans 0
// TODO: décider quoi faire pour les zones géo plus générales
if (isset($parametres['ce_zone_geo'])) {
if ($parametres['ce_zone_geo'] == 'null' || trim($parametres['ce_zone_geo']) == "" || !is_numeric($parametres['ce_zone_geo'])) {
if ($parametres['ce_zone_geo'] == 'null' || trim($parametres['ce_zone_geo']) == "") {
$parametres['ce_zone_geo'] = "";
$parametres['pays'] = '';
} else {
if (strlen($parametres['ce_zone_geo']) == 4) {
$parametres['ce_zone_geo'] = '0'.$parametres['ce_zone_geo'];
479,32 → 478,9
} else {
$parametres['ce_zone_geo'] = 'INSEE-C:'. $parametres['ce_zone_geo'];
}
$parametres['pays'] = 'FR';
}
} else {
$parametres['pays'] = '';
}
 
// TODO: Fusionner cette partie et la partie du dessus en une fonction qui complete toutes les infos
// géo, quand on sera riche et qu'on aura du temps
if(empty($parametres['pays']) && !empty($parametres['latitude']) && !empty($parametres['longitude'])) {
$recherche_pays = new RechercheInfosZoneGeo($this->config);
$infos_pays = $recherche_pays->obtenirInfosPourCoordonnees($parametres);
if($infos_pays['type'] == 'france') {
$parametres['pays'] = 'FR';
// Ajout d'infos supplémentaires si jamais on a pas de ce zone geo ou de zone geo
if(empty($parametres['ce_zone_geo'])) {
$parametres['ce_zone_geo'] = 'INSEE-C:'.$infos_pays['code_insee'];
}
if(empty($parametres['zone_geo'])) {
$parametres['zone_geo'] = $infos_pays['nom'];
}
} else {
$parametres['pays'] = $infos_pays['code_pays'];
}
}
 
// TODO : voir si l'on peut utiliser un des fonctions de la classe cel
if (isset($parametres['date_observation']) && $parametres['date_observation'] != 'null') {
//TODO: prendre en compte des dates incomplètes ?
/trunk/jrest/jrest.ini.php.defaut
85,9 → 85,6
format_CXS = 100_100
format_CRXS = 100_100
 
url_service_geo_local = http://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune
url_service_geo_mondial = http://api.tela-botanica.org/service:eflore:0.1/osm/zone-admin
 
commande_script_images = "/usr/local/php/5.5/bin/php /home/apitela/www/scripts/cel/cli.php generationimages -a genererMinaturesPourId -id %s &";
 
[database_cel]
/trunk/jrest/services/CoordSearch.php
17,14 → 17,20
*/
class CoordSearch extends Cel {
 
private $adresse_service_mondial = null;
private $adresse_service_geonames = null;
private $adresse_service_local = null;
 
private $nom_service_geocoding = null;
private $nom_service_reverse_geocoding = null;
 
public function __construct($config) {
parent::__construct($config);
 
$this->adresse_service_mondial = $this->config['cel']['url_service_geo_mondial'];
$this->adresse_service_geonames = $this->config['cel']['url_service_geo_geonames'];
$this->adresse_service_local = $this->config['cel']['url_service_geo_local'];
 
$this->nom_service_geocoding = $this->config['cel']['nom_service_geocoding_geonames'];
$this->nom_service_reverse_geocoding = $this->config['cel']['nom_service_reverse_geocoding_geonames'];
}
 
/**
46,7 → 52,7
$informations_communes = $this->effectuerRequeteReverseGeocodingCartoOsm($params['lat'], $params['lon']);
 
if (!$informations_communes) {
$informations_communes = $this->effectuerRequeteReverseGeocodingMondiale($params['lat'], $params['lon']);
$informations_communes = $this->effectuerRequeteReverseGeocodingGeonames($params['lat'], $params['lon']);
}
 
$header = 'Content-Type: application/json; charset=UTF-8';
54,7 → 60,7
} elseif ($this->estUneRequeteGeocoding($params)) {
$informations_coord = $this->chercherCentroideCommuneBdd($params['commune'],$params['code_postal']);
if (!$informations_coord) {
$informations_coord = $this->effectuerRequeteGeocodingMondiale($params['commune'],$params['code_postal'],$params['code_pays']);
$informations_coord = $this->effectuerRequeteGeocodingGeonames($params['commune'],$params['code_postal'],$params['code_pays']);
}
 
$header = 'Content-Type: application/json; charset=UTF-8';
107,6 → 113,35
return (is_a($retour, 'stdClass') && property_exists($retour, 'nom') && property_exists($retour, 'codeINSEE'));
}
 
private function effectuerRequeteReverseGeocodingGeonames($lat, $lon) {
$url = $this->adresse_service_geonames.
$this->nom_service_reverse_geocoding.
'?lat='.urlencode($lat).'&lng='.urlencode($lon).
'&style=full';
$infos_commune_json = @file_get_contents($url);
$objet_retour = json_decode($infos_commune_json);
 
$retour = false;
if ($this->estUnRetourReverseGeocodingGeonamesValide($objet_retour)) {
$retour = array(
'nom' => $objet_retour->geonames[0]->adminName4,
'code_insee' => $objet_retour->geonames[0]->adminCode4);
}
return $retour;
}
 
private function estUnRetourReverseGeocodingGeonamesValide($retour) {
$valide = false;
if (is_a($retour, 'stdClass') && property_exists($retour, 'geonames')
&& is_array($retour->geonames) && count($retour->geonames) > 0) {
$objet_resultats = $retour->geonames[0];
if (property_exists($objet_resultats, 'adminName4') && property_exists($objet_resultats, 'adminCode2')) {
$valide = true;
}
}
return $valide;
}
 
private function chercherCentroideCommuneBdd($commune, $departement) {
$commune_formatee = str_replace(array(' ', '-'), '_', $commune);
if (strlen($departement) > 2) {
142,28 → 177,37
$lat_long['lng'] = str_replace(',','.',$convertisseur->Long());
return $lat_long;
}
private function effectuerRequeteReverseGeocodingMondiale($lat, $lon) {
$url = $this->adresse_service_mondial.'?lat='.$lat.'&lon='.$lon;
// Pour limiter par niveau ajouter ce qui suit à la requête :
//.'&niveau=2,3,4';
$res = json_decode(file_get_contents($url), true);
$code = "";
$localite = "";
if(!empty($res)) {
$infos_pays = $res[min(array_keys($res))];
$infos_localite = $res[max(array_keys($res))];
$localite = $infos_localite['intitule'];
if(!empty($infos_pays['codeIso31661'])) {
$code = $infos_pays['codeIso31661'];
} elseif(!empty($infos_pays['codeIso31662'])) {
$code = substr($infos_pays['codeIso31662'], 0, 2);
 
private function effectuerRequeteGeocodingGeonames($commune, $code_postal, $code_pays) {
$url = $this->adresse_service_geonames.
$this->nom_service_geocoding.
'?placename_startsWith='.urlencode($commune).
(($code_postal != '*') ? '&postalcode_startsWith='.urlencode($code_postal) : '').
'&country='.urlencode($code_pays).'&maxRows=10';
$coord_json = @file_get_contents($url);
$objet_retour = json_decode($coord_json);
 
$retour = false;
if ($this->estUnRetourGeocodingGeonamesValide($objet_retour)) {
$retour = array(
'lat' => $objet_retour->postalCodes[0]->lat,
'lng' => $objet_retour->postalCodes[0]->lng,
'nom' => $objet_retour->postalCodes[0]->placeName,
'code_insee' => $objet_retour->postalCodes[0]->postalCode
);
}
return $retour;
}
 
private function estUnRetourGeocodingGeonamesValide($retour) {
$valide = false;
if (is_a($retour, 'stdClass') && property_exists($retour, 'postalCodes')
&& is_array($retour->postalCodes) && count($retour->postalCodes) > 0) {
$objet_resultats = $retour->postalCodes[0];
if (property_exists($objet_resultats, 'lat') && property_exists($objet_resultats, 'lng')) {
$valide = true;
}
}
 
return array('nom' => $localite, 'code_insee' => $code);
return $valide;
}
}
/trunk/jrest/services/InventoryObservationList.php
89,7 → 89,7
}
 
// cas de mise à jour de multiples observations:
$ret = $gestionnaire_observation->modifierMultiplesObservation($uid[0], $obs, $pairs);
$ret = GestionObservation::modifierMultiplesObservation($uid[0], $obs, $pairs);
if ($ret === false) {
return false; // JRest::badRequest();
}
/trunk/jrest/services/ImportXLS.php
92,7 → 92,6
'nt',
'famille',
'nom_referentiel',
'pays',
'zone_geo',
'ce_zone_geo',
'date_observation',
566,7 → 565,6
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL);
self::traiterLocalisation($ligne, $localisation);
//TODO: le jour où c'est efficace, traiter le pays à l'import
 
// $transmission est utilisé pour date_transmission
// XXX: @ contre "Undefined index"
587,7 → 585,6
 
"nom_referentiel" => $referentiel,
 
"pays" => $ligne[C_PAYS],
"zone_geo" => $localisation[C_ZONE_GEO],
"ce_zone_geo" => $localisation[C_CE_ZONE_GEO],
 
/trunk/jrest/services/CelWidgetExport.php
38,7 → 38,6
'id_utilisateur' => 'ce_utilisateur',
'utilisateur' => 'courriel_utilisateur',
'courriel_utilisateur' => 'courriel_utilisateur',
'pays' => 'pays',
'commune' => 'zone_geo',
'zone_geo' => 'zone_geo',
'dept' => 'departement',