Browse Source

PSR SPIP

svn/root/tags/v4.47.18
kent1@arscenic.info 7 years ago
parent
commit
6ba9d75208
  1. 132
      action/editer_gis.php
  2. 19
      action/editer_lien_gis.php
  3. 35
      action/gis_geocoder_rechercher.php
  4. 46
      action/kml_infos.php
  5. 18
      action/supprimer_gis.php
  6. 51
      crud/gis.php

132
action/editer_gis.php

@ -1,19 +1,22 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/autoriser');
function action_editer_gis_dist($arg=null) {
if (is_null($arg)){
function action_editer_gis_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// si id_gis n'est pas un nombre, c'est une creation
if (!$id_gis = intval($arg)) {
if (!autoriser('creer','gis') or !$id_gis = gis_inserer())
return array(false,_L('echec'));
if (!autoriser('creer', 'gis') or !$id_gis = gis_inserer()) {
return array(false, _L('echec'));
}
}
$err = gis_modifier($id_gis);
return array($id_gis,$err);
@ -21,12 +24,12 @@ function action_editer_gis_dist($arg=null) {
/**
* Fonction d'insertion d'un gis vide
*
*
* @return int/false $id_gis : l'identifiant numérique du point ou false en cas de non création
*/
function gis_inserer() {
$champs = array();
// Envoyer aux plugins
$champs = pipeline('pre_insertion', array(
'args' => array(
@ -34,10 +37,11 @@ function gis_inserer() {
),
'data' => $champs
));
$id_gis = sql_insertq("spip_gis", $champs);
pipeline('post_insertion',
$id_gis = sql_insertq('spip_gis', $champs);
pipeline(
'post_insertion',
array(
'args' => array(
'table' => 'spip_gis',
@ -50,66 +54,61 @@ function gis_inserer() {
}
/**
* Enregistrer certaines modifications d'un gis
*
* @param int $id_gis : l'identifiant numérique du point
* @param array $c : un array des valeurs à mettre en base (par défaut false, on récupère les valeurs passées en dans le POST)
*/
/**
* Enregistrer certaines modifications d'un gis
*
* Appelle toutes les fonctions de modification d'un point gis
* $err est de la forme chaine de langue ou vide si pas d'erreur
* http://doc.spip.org/@articles_set
*
* @param $id_gis
* @param null $set
* @param int $id_gis l'identifiant numérique du point
* @param null/array $set un array des valeurs à mettre en base (par défaut false, on récupère les valeurs passées en dans le POST)
* @return string
*/
function gis_modifier($id_gis, $set=null) {
function gis_modifier($id_gis, $set = null) {
include_spip('inc/modifier');
include_spip('inc/filtres');
$c = collecter_requests(
// white list
objet_info('gis','champs_editables'),
objet_info('gis', 'champs_editables'),
// black list
array('id_objet','objet'),
// donnees eventuellement fournies
$set
);
if(isset($c['lon'])){
if($c['lon'] > 180){
while($c['lon'] > 180){
if (isset($c['lon'])) {
if ($c['lon'] > 180) {
while ($c['lon'] > 180) {
$c['lon'] = $c['lon'] - 360;
}
}else if($c['lon'] <= -180){
while($c['lon'] <= -180){
} elseif ($c['lon'] <= -180) {
while ($c['lon'] <= -180) {
$c['lon'] = $c['lon'] + 360;
}
}
}
if(isset($c['lat'])){
if($c['lat'] > 90){
while($c['lat'] > 90){
if (isset($c['lat'])) {
if ($c['lat'] > 90) {
while ($c['lat'] > 90) {
$c['lat'] = $c['lat'] - 180;
}
}else if($c['lat'] <= -90){
while($c['lat'] <= -90){
} elseif ($c['lat'] <= -90) {
while ($c['lat'] <= -90) {
$c['lat'] = $c['lat'] + 180;
}
}
}
if ($err = objet_modifier_champs('gis', $id_gis,
array(
if ($err = objet_modifier_champs('gis', $id_gis, array(
//'nonvide' => array('nom' => _T('info_sans_titre')),
'data' => $set,
'invalideur' => "id='gis/$id_gis'",
),
$c))
), $c)) {
return $err;
}
// lier a un parent ?
$c = collecter_requests(array('id_objet', 'objet'),array(),$set);
if (isset($c['id_objet']) AND intval($c['id_objet']) AND isset($c['objet']) AND $c['objet']) {
$c = collecter_requests(array('id_objet', 'objet'), array(), $set);
if (isset($c['id_objet']) and intval($c['id_objet']) and isset($c['objet']) and $c['objet']) {
lier_gis($id_gis, $c['objet'], $c['id_objet']);
}
@ -131,7 +130,7 @@ function gis_modifier($id_gis, $set=null) {
* @param array $qualif
* @return string
*/
function gis_associer($id_gis,$objets, $qualif = null){
function gis_associer($id_gis, $objets, $qualif = null) {
include_spip('action/editer_liens');
$res = objet_associer(array('gis'=>$id_gis), $objets, $qualif);
include_spip('inc/invalideur');
@ -150,27 +149,25 @@ function gis_associer($id_gis,$objets, $qualif = null){
* @param array $objets
* @return string
*/
function gis_dissocier($id_gis,$objets){
function gis_dissocier($id_gis, $objets) {
include_spip('action/editer_liens');
$res = objet_dissocier(array('gis'=>$id_gis), $objets);
$res = objet_dissocier(array('gis' => $id_gis), $objets);
include_spip('inc/invalideur');
suivre_invalideur("id='gis/$id_gis'");
return $res;
}
/**
* Supprimer définitivement un point géolocalisé
*
*
* @param int $id_gis identifiant numérique du point
* @return int|false 0 si réussite, false dans le cas ou le point n'existe pas
*/
function gis_supprimer($id_gis){
$valide = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id_gis));
if($valide && autoriser('supprimer','gis',$valide)){
sql_delete("spip_gis_liens", "id_gis=".intval($id_gis));
sql_delete("spip_gis", "id_gis=".intval($id_gis));
function gis_supprimer($id_gis) {
$valide = sql_getfetsel('id_gis', 'spip_gis', 'id_gis=' . intval($id_gis));
if ($valide && autoriser('supprimer', 'gis', $valide)) {
sql_delete('spip_gis_liens', 'id_gis=' . intval($id_gis));
sql_delete('spip_gis', 'id_gis=' . intval($id_gis));
$id_gis = 0;
include_spip('inc/invalideur');
suivre_invalideur("id='id_gis/$id_gis'");
@ -179,7 +176,6 @@ function gis_supprimer($id_gis){
return false;
}
/**
* Délier un point géolocalisé d'un objet SPIP
*
@ -189,13 +185,13 @@ function gis_supprimer($id_gis){
*
* @return bool : true si la suppression de la liaison s'est bien passée, false à l'inverse
*/
function delier_gis($id_gis, $objet, $id_objet){
function delier_gis($id_gis, $objet, $id_objet) {
//$objet = objet_type($objet);
if ($id_objet AND $id_gis
AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
AND autoriser('delier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
if ($id_objet and $id_gis
and preg_match('/^[a-z0-9_]+$/i', $objet) # securite
and autoriser('delier', 'gis', $id_gis, $GLOBALS['visiteur_session'], array('objet' => $objet,'id_objet'=>$id_objet))
) {
gis_dissocier($id_gis,array($objet=>$id_objet));
gis_dissocier($id_gis, array($objet => $id_objet));
return true;
}
return false;
@ -210,21 +206,25 @@ function delier_gis($id_gis, $objet, $id_objet){
*
* @return bool : true si la liaison s'est bien passée, false à l'inverse
*/
function lier_gis($id_gis, $objet, $id_objet){
function lier_gis($id_gis, $objet, $id_objet) {
//$objet = objet_type($objet);
if ($id_objet AND $id_gis
AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
AND !sql_getfetsel("id_gis", "spip_gis_liens", "id_gis=$id_gis AND id_objet=$id_objet AND objet=".sql_quote($objet))
AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))
if ($id_objet and $id_gis
and preg_match('/^[a-z0-9_]+$/i', $objet) # securite
and !sql_getfetsel('id_gis', 'spip_gis_liens', "id_gis=$id_gis AND id_objet=$id_objet AND objet=".sql_quote($objet))
and autoriser('lier', 'gis', $id_gis, $GLOBALS['visiteur_session'], array('objet' => $objet,'id_objet'=>$id_objet))
) {
gis_associer($id_gis,array($objet=>$id_objet));
gis_associer($id_gis, array($objet=>$id_objet));
return true;
}
return false;
}
function insert_gis() {return gis_inserer();}
function revisions_gis($id_gis, $c=false) {return gis_modifier($id_gis,$c);}
function supprimer_gis($id_gis){return gis_supprimer($id_gis);}
?>
function insert_gis() {
return gis_inserer();
}
function revisions_gis($id_gis, $c = false) {
return gis_modifier($id_gis, $c);
}
function supprimer_gis($id_gis) {
return gis_supprimer($id_gis);
}

19
action/editer_lien_gis.php

@ -1,21 +1,22 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_editer_lien_gis_dist(){
function action_editer_lien_gis_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
list($action,$id_gis, $objet, $id_objet) = explode('/',$arg);
list($action,$id_gis, $objet, $id_objet) = explode('/', $arg);
include_spip('inc/autoriser');
if (intval($id_gis) AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet))){
if (intval($id_gis) and autoriser('lier', 'gis', $id_gis, $GLOBALS['visiteur_session'], array('objet' => $objet,'id_objet'=>$id_objet))) {
include_spip('action/editer_gis');
if ($action == 'lier')
if ($action == 'lier') {
lier_gis($id_gis, $objet, $id_objet);
elseif ($action == 'delier')
} elseif ($action == 'delier') {
delier_gis($id_gis, $objet, $id_objet);
}
}
}
?>

35
action/gis_geocoder_rechercher.php

@ -1,46 +1,47 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip("inc/distant");
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/distant');
/**
* Proxy vers le service Nomatim d'OpenStreetMap.
*
* Cette fonction permet de transmettre une requete auprès du service
* de recherche d'adresse d'OpenStreetMap (Nomatim).
*
*
* Seuls les arguments spécifiques à Nomatim sont transmis.
*/
function action_gis_geocoder_rechercher_dist() {
include_spip("inc/modifier");
include_spip('inc/modifier');
$mode = _request("mode");
if(!$mode || !in_array($mode, array("search", "reverse")))
$mode = _request('mode');
if (!$mode || !in_array($mode, array('search', 'reverse'))) {
return;
}
/* On filtre les arguments à renvoyer à Nomatim (liste blanche) */
$arguments = collecter_requests(array("json_callback", "format", "q", "limit", "addressdetails", "accept-language", "lat", "lon"), array());
$arguments = collecter_requests(array('json_callback', 'format', 'q', 'limit', 'addressdetails', 'accept-language', 'lat', 'lon'), array());
$geocoder = defined('_GIS_GEOCODER') ? _GIS_GEOCODER : 'nominatim';
if(!empty($arguments) && in_array($geocoder,array('photon','nominatim'))) {
if (!empty($arguments) && in_array($geocoder, array('photon','nominatim'))) {
header('Content-Type: application/json; charset=UTF-8');
if($geocoder == 'photon'){
if(isset($arguments['accept-language'])){
if ($geocoder == 'photon') {
if (isset($arguments['accept-language'])) {
$arguments['lang'] = $arguments['accept-language'];
unset($arguments['accept-language']);
}
if($mode == 'search'){
if ($mode == 'search') {
$mode = 'api/';
}else{
} else {
$mode = 'reverse';
}
$url = 'http://photon.komoot.de/';
}
else{
} else {
$url = 'http://nominatim.openstreetmap.org/';
}
$url = defined('_GIS_GEOCODER_URL') ? _GIS_GEOCODER_URL : $url;
$data = recuperer_page("{$url}{$mode}?" . http_build_query($arguments));
echo $data;

46
action/kml_infos.php

@ -1,61 +1,61 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/charsets'); # pour le nom de fichier
include_spip('inc/actions');
function action_kml_infos_dist(){
function action_kml_infos_dist() {
global $redirect;
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(-?)(\d+)\W(\w+)\W?(\d*)\W?(\d*)$,", $arg, $r)){
spip_log("action_kml_infos_dist incompris: " . $arg);
if (!preg_match(',^(-?)(\d+)\W(\w+)\W?(\d*)\W?(\d*)$,', $arg, $r)) {
spip_log('action_kml_infos_dist incompris: ' . $arg);
$redirect = urldecode(_request('redirect'));
return;
}
else{
} else {
action_kml_infos_post($r);
}
}
function action_kml_infos_post($r){
function action_kml_infos_post($r) {
list(, $sign, $id_objet, $objet, $id_document, $suite) = $r;
if(intval($id_document)){
$recuperer_info = charger_fonction('kml_infos','inc');
if (intval($id_document)) {
$recuperer_info = charger_fonction('kml_infos', 'inc');
$infos = $recuperer_info($id_document);
if($infos){
if ($infos) {
include_spip('inc/documents');
$fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document));
if(is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])){
$fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document='.intval($id_document));
if (is_numeric($latitude = $infos['latitude']) and is_numeric($longitude = $infos['longitude'])) {
$c = array(
'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier),
'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'")){
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
revisions_gis($id_gis,$c);
spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis");
}
else{
revisions_gis($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 = insert_gis();
revisions_gis($id_gis,$c);
revisions_gis($id_gis, $c);
lier_gis($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");
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){
if (count($infos) > 0) {
include_spip('action/editer_document');
document_modifier($id_document, $infos);
}
@ -64,5 +64,3 @@ function action_kml_infos_post($r){
$redirect = urldecode(_request('redirect'));
return $redirect;
}
?>

18
action/supprimer_gis.php

@ -1,19 +1,19 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_supprimer_gis_dist() {
function action_supprimer_gis_dist(){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
list($id_gis) = preg_split(',[^0-9],',$arg);
list($id_gis) = preg_split(',[^0-9],', $arg);
include_spip('inc/autoriser');
if (intval($id_gis) AND autoriser('supprimer','gis',$id_gis)){
include_spip("action/editer_gis");
if (intval($id_gis) and autoriser('supprimer', 'gis', $id_gis)) {
include_spip('action/editer_gis');
supprimer_gis($id_gis);
}
}
?>

51
crud/gis.php

@ -1,6 +1,8 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('action/editer_gis');
@ -11,34 +13,35 @@ include_spip('action/editer_gis');
/**
* Create :
* Crée un point géolocalisé
*
*
* @param $dummy
* @param array $set : Le contenu des champs à mettre en base
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé
*/
function crud_gis_create_dist($dummy,$set=null){
if (autoriser('voir','gis') && $id = gis_inserer())
$err = gis_modifier($id,$set);
else
$err = _T('crud:erreur_creation',array('objet'=>'gis'));
return array('success'=>($err && strlen($err)>0)?false:true,'message'=>$err,'result'=>array('id'=>$id));
function crud_gis_create_dist($dummy, $set = null) {
if (autoriser('voir', 'gis') and $id = gis_inserer()) {
$err = gis_modifier($id, $set);
} else {
$err = _T('crud:erreur_creation', array('objet' => 'gis'));
}
return array('success' => ($err and strlen($err) > 0) ? false : true, 'message' => $err, 'result' => array('id' => $id));
}
/**
* Update :
* Met à jour un point géolocalisé
*
*
* @param $dummy
* @param array $set : Le contenu des champs à mettre en base
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé
*/
function crud_gis_update_dist($id,$set=null){
$id_gis = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id));
if(!$id_gis){
$err = _T('gis:erreur_gis_inconnu',array('id'=>$id));
}else if(autoriser('modifier','gis',$id)){
$err = gis_modifier($id,$set);
}else{
function crud_gis_update_dist($id, $set = null) {
$id_gis = sql_getfetsel('id_gis', 'spip_gis', 'id_gis=' . intval($id));
if (!$id_gis) {
$err = _T('gis:erreur_gis_inconnu', array('id'=>$id));
} elseif (autoriser('modifier', 'gis', $id)) {
$err = gis_modifier($id, $set);
} else {
$err = _L('update error');
}
return array('success'=>($err && strlen($err)>0)?false:true,'message'=>$err,'result'=>array('id'=>$id));
@ -47,16 +50,14 @@ function crud_gis_update_dist($id,$set=null){
/**
* Delete :
* Supprime un point géolocalisé
*
*
* @param $dummy
* @param int $id : L'identifiant numérique du point à supprimer
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id supprimé
* @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id supprimé
*/
function crud_gis_delete_dist($id){
if(autoriser('supprimer','gis',$id)){
function crud_gis_delete_dist($id) {
if (autoriser('supprimer', 'gis', $id)) {
$err = gis_supprimer($id);
}
return array('success'=>is_numeric($err)?true:false,'message'=>$err,'result'=>array('id'=>$id));
return array('success' => is_numeric($err) ? true : false, 'message' => $err, 'result' => array('id' => $id));
}
?>
Loading…
Cancel
Save