Browse Source

cleanup gis_post_edition()

déplacer le code qui agit sur les documents dans la partie qui cibles les extensions souhaitées, ainsi on corrige pas mal d'erreurs du type "Variable $xxx might not be defined."
pull/41/head
b_b 6 months ago committed by Gitea
parent
commit
65b8191487
  1. 274
      gis_pipelines.php

274
gis_pipelines.php

@ -103,163 +103,137 @@ function gis_post_edition($flux) {
if (!is_array($config)) {
$config = [];
}
include_spip('inc/documents');
$fichier = get_spip_doc($document['fichier']);
$id_document = $document['id_document'];
}
if ($document['extension'] == 'jpg') {
// on recupere les coords definies dans les exif du document s'il y en a
if (function_exists('exif_read_data') and $exifs = @exif_read_data($fichier, 'GPS')) {
if (!function_exists('dms_to_dec')) {
include_spip('gis_fonctions');
}
spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier", 'gis');
if ($document['extension'] == 'jpg') {
// on recupere les coords definies dans les exif du document s'il y en a
if (function_exists('exif_read_data') and $exifs = @exif_read_data($fichier, 'GPS')) {
if (!function_exists('dms_to_dec')) {
include_spip('gis_fonctions');
}
spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier", 'gis');
$LatDeg = explode('/', $exifs['GPSLatitude'][0]);
$intLatDeg = $LatDeg[0] / ($LatDeg[1] ? $LatDeg[1] : 1);
$LatDeg = explode('/', $exifs['GPSLatitude'][0]);
$intLatDeg = $LatDeg[0] / ($LatDeg[1] ? $LatDeg[1] : 1);
$LatMin = explode('/', $exifs['GPSLatitude'][1]);
$intLatMin = $LatMin[0] / ($LatMin[1] ? $LatMin[1] : 1);
$LatMin = explode('/', $exifs['GPSLatitude'][1]);
$intLatMin = $LatMin[0] / ($LatMin[1] ? $LatMin[1] : 1);
$LatSec = explode('/', $exifs['GPSLatitude'][2]);
$intLatSec = $LatSec[0] / ($LatSec[1] ? $LatSec[1] : 1);
$LatSec = explode('/', $exifs['GPSLatitude'][2]);
$intLatSec = $LatSec[0] / ($LatSec[1] ? $LatSec[1] : 1);
$LongDeg = explode('/', $exifs['GPSLongitude'][0]);
$intLongDeg = $LongDeg[0] / ($LongDeg[1] ? $LongDeg[1] : 1);
$LongDeg = explode('/', $exifs['GPSLongitude'][0]);
$intLongDeg = $LongDeg[0] / ($LongDeg[1] ? $LongDeg[1] : 1);
$LongMin = explode('/', $exifs['GPSLongitude'][1]);
$intLongMin = $LongMin[0] / ($LongMin[1] ? $LongMin[1] : 1);
$LongMin = explode('/', $exifs['GPSLongitude'][1]);
$intLongMin = $LongMin[0] / ($LongMin[1] ? $LongMin[1] : 1);
$LongSec = explode('/', $exifs['GPSLongitude'][2]);
$intLongSec = $LongSec[0] / ($LongSec[1] ? $LongSec[1] : 1);
$LongSec = explode('/', $exifs['GPSLongitude'][2]);
$intLongSec = $LongSec[0] / ($LongSec[1] ? $LongSec[1] : 1);
// round to 5 = approximately 1 meter accuracy
if (is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec)) {
$latitude = round(dms_to_dec($exifs['GPSLatitudeRef'], $intLatDeg, $intLatMin, $intLatSec), 5);
}
// round to 5 = approximately 1 meter accuracy
if (is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec)) {
$latitude = round(dms_to_dec($exifs['GPSLatitudeRef'], $intLatDeg, $intLatMin, $intLatSec), 5);
}
if (is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec)) {
$longitude = round(dms_to_dec($exifs['GPSLongitudeRef'], $intLongDeg, $intLongMin, $intLongSec), 5);
}
if ($config['geocoder'] == 'on') {
include_spip('inc/gis_geocode');
$json = gis_geocode_request('reverse', [
'format' => 'json',
'addressdetails' => 1,
'accept-language' => $GLOBALS['meta']['langue_site'],
'lat' => $latitude,
'lon' => $longitude
]);
$geocoder = json_decode($json, true);
if (is_array($geocoder)) {
$pays = $geocoder['address']['country'];
$code_pays = $geocoder['address']['country_code'];
$region = $geocoder['address']['state'];
if ($geocoder['address']['city']) {
$ville = $geocoder['address']['city'];
} elseif ($geocoder['address']['town']) {
$ville = $geocoder['address']['town'];
} elseif ($geocoder['address']['village']) {
$ville = $geocoder['address']['village'];
if (is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec)) {
$longitude = round(dms_to_dec($exifs['GPSLongitudeRef'], $intLongDeg, $intLongMin, $intLongSec), 5);
}
if ($config['geocoder'] == 'on') {
include_spip('inc/gis_geocode');
$json = gis_geocode_request('reverse', [
'format' => 'json',
'addressdetails' => 1,
'accept-language' => $GLOBALS['meta']['langue_site'],
'lat' => $latitude,
'lon' => $longitude
]);
$geocoder = json_decode($json, true);
if (is_array($geocoder)) {
$pays = $geocoder['address']['country'];
$code_pays = $geocoder['address']['country_code'];
$region = $geocoder['address']['state'];
if ($geocoder['address']['city']) {
$ville = $geocoder['address']['city'];
} elseif ($geocoder['address']['town']) {
$ville = $geocoder['address']['town'];
} elseif ($geocoder['address']['village']) {
$ville = $geocoder['address']['village'];
}
$code_postal = $geocoder['address']['postcode'];
$adresse = $geocoder['address']['road'];
}
$code_postal = $geocoder['address']['postcode'];
$adresse = $geocoder['address']['road'];
}
}
} elseif (file_exists($fichier)) {
include_spip('inc/iptc');
} elseif (file_exists($fichier)) {
include_spip('inc/iptc');
$er = new class_IPTC($fichier);
$iptc = $er->fct_lireIPTC();
$codesiptc = $er->h_codesIptc;
$string_recherche = '';
$er = new class_IPTC($fichier);
$iptc = $er->fct_lireIPTC();
$codesiptc = $er->h_codesIptc;
$string_recherche = '';
if ($iptc && is_array($iptc)) {
if ($iptc['city']) {
$string_recherche .= $iptc['city'] . ', ';
}
if ($iptc['provinceState']) {
$string_recherche .= $iptc['provinceState'] . ', ';
}
if ($iptc['country']) {
$string_recherche .= $iptc['country'];
if ($iptc && is_array($iptc)) {
if ($iptc['city']) {
$string_recherche .= $iptc['city'] . ', ';
}
if ($iptc['provinceState']) {
$string_recherche .= $iptc['provinceState'] . ', ';
}
if ($iptc['country']) {
$string_recherche .= $iptc['country'];
}
}
}
if (strlen($string_recherche)) {
include_spip('inc/gis_geocode');
$json = gis_geocode_request('search', [
'format' => 'json',
'addressdetails' => 1,
'limit' => 1,
'accept-language' => $GLOBALS['meta']['langue_site'],
'q' => $string_recherche
]);
$geocoder = json_decode($json, true);
if (is_array($geocoder[0])) {
$latitude = $geocoder[0]['lat'];
$longitude = $geocoder[0]['lon'];
if ($config['adresse'] == 'on') {
$pays = $geocoder[0]['address']['country'];
$code_pays = $geocoder[0]['address']['country_code'];
$region = $geocoder[0]['address']['state'];
if ($geocoder[0]['address']['city']) {
$ville = $geocoder[0]['address']['city'];
} elseif ($geocoder[0]['address']['town']) {
$ville = $geocoder[0]['address']['town'];
} elseif ($geocoder[0]['address']['village']) {
$ville = $geocoder[0]['address']['village'];
if (strlen($string_recherche)) {
include_spip('inc/gis_geocode');
$json = gis_geocode_request('search', [
'format' => 'json',
'addressdetails' => 1,
'limit' => 1,
'accept-language' => $GLOBALS['meta']['langue_site'],
'q' => $string_recherche
]);
$geocoder = json_decode($json, true);
if (is_array($geocoder[0])) {
$latitude = $geocoder[0]['lat'];
$longitude = $geocoder[0]['lon'];
if ($config['adresse'] == 'on') {
$pays = $geocoder[0]['address']['country'];
$code_pays = $geocoder[0]['address']['country_code'];
$region = $geocoder[0]['address']['state'];
if ($geocoder[0]['address']['city']) {
$ville = $geocoder[0]['address']['city'];
} elseif ($geocoder[0]['address']['town']) {
$ville = $geocoder[0]['address']['town'];
} elseif ($geocoder[0]['address']['village']) {
$ville = $geocoder[0]['address']['village'];
}
}
}
}
}
}
if ((isset($latitude) && is_numeric($latitude)) && (isset($longitude) && is_numeric($longitude))) {
$c = [
'titre' => basename($fichier),
'lat' => $latitude,
'lon' => $longitude,
'zoom' => $config['zoom'] ? $config['zoom'] : '4',
'adresse' => $adresse,
'code_postal' => $code_postal,
'ville' => $ville,
'region' => $region,
'pays' => $pays,
'code_pays' => $code_pays
];
if (defined('_DIR_PLUGIN_GISGEOM')) {
$geojson = '{"type":"Point","coordinates":[' . $longitude . ',' . $latitude . ']}';
set_request('geojson', $geojson);
}
include_spip('action/editer_gis');
if ($id_gis = sql_getfetsel('G.id_gis', 'spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis', 'T.id_objet=' . intval($id_document) . " AND T.objet='document'")) {
// Des coordonnées sont déjà définies pour ce document => on les update
gis_modifier($id_gis, $c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
} else {
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = gis_inserer();
gis_modifier($id_gis, $c);
gis_associer($id_gis, ['document' => $id_document]);
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
}
}
} elseif (in_array($document['extension'], ['kml','kmz','gpx'])) {
$recuperer_info = charger_fonction('kml_infos', 'inc');
$infos = $recuperer_info($document['id_document']);
if ($infos) {
if (is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])) {
if ((isset($latitude) && is_numeric($latitude)) && (isset($longitude) && is_numeric($longitude))) {
$c = [
'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier),
'descriptif' => $infos['descriptif'],
'titre' => basename($fichier),
'lat' => $latitude,
'lon' => $longitude,
'zoom' => $config['zoom'] ? $config['zoom'] : '4'
'zoom' => $config['zoom'] ? $config['zoom'] : '4',
'adresse' => $adresse,
'code_postal' => $code_postal,
'ville' => $ville,
'region' => $region,
'pays' => $pays,
'code_pays' => $code_pays
];
if (defined('_DIR_PLUGIN_GISGEOM')) {
$geojson = '{"type":"Point","coordinates":[' . $longitude . ',' . $latitude . ']}';
set_request('geojson', $geojson);
}
include_spip('action/editer_gis');
if ($id_gis = sql_getfetsel('G.id_gis', 'spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis', 'T.id_objet=' . intval($id_document) . " AND T.objet='document'")) {
@ -274,11 +248,39 @@ function gis_post_edition($flux) {
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
}
}
unset($infos['longitude']);
unset($infos['latitude']);
if (count($infos) > 0) {
include_spip('action/editer_document');
document_modifier($id_document, $infos);
} elseif (in_array($document['extension'], ['kml','kmz','gpx'])) {
$recuperer_info = charger_fonction('kml_infos', 'inc');
$infos = $recuperer_info($document['id_document']);
if ($infos) {
if (is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])) {
$c = [
'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier),
'descriptif' => $infos['descriptif'],
'lat' => $latitude,
'lon' => $longitude,
'zoom' => $config['zoom'] ? $config['zoom'] : '4'
];
include_spip('action/editer_gis');
if ($id_gis = sql_getfetsel('G.id_gis', 'spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis', 'T.id_objet=' . intval($id_document) . " AND T.objet='document'")) {
// Des coordonnées sont déjà définies pour ce document => on les update
gis_modifier($id_gis, $c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
} else {
// Aucune coordonnée n'est définie pour ce document => on les crées
$id_gis = gis_inserer();
gis_modifier($id_gis, $c);
gis_associer($id_gis, ['document' => $id_document]);
spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis", 'gis');
}
}
unset($infos['longitude']);
unset($infos['latitude']);
if (count($infos) > 0) {
include_spip('action/editer_document');
document_modifier($id_document, $infos);
}
}
}
}

Loading…
Cancel
Save