You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

214 lines
5.5 KiB

<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/autoriser');
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 [false, _L('echec')];
}
}
$err = gis_modifier($id_gis);
return [$id_gis,$err];
}
/**
* Fonction d'insertion d'un gis vide
*
* @deprecated Utiliser objet_inserer()
* @see objet_inserer()
*
* @return int|bool $id_gis : l'identifiant numérique du point ou false en cas de non création
*/
function gis_inserer($set = null) {
$champs = is_array($set) ? $set : [];
// Envoyer aux plugins
$champs = pipeline('pre_insertion', [
'args' => [
'table' => 'spip_gis',
],
'data' => $champs
]);
$id_gis = sql_insertq('spip_gis', $champs);
pipeline(
'post_insertion',
[
'args' => [
'table' => 'spip_gis',
'id_objet' => $id_gis
],
'data' => $champs
]
);
return $id_gis;
}
/**
* 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
* https://code.spip.net/@articles_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) {
include_spip('inc/modifier');
include_spip('inc/filtres');
$c = collecter_requests(
// white list
objet_info('gis', 'champs_editables'),
// black list
['id_objet','objet'],
// donnees eventuellement fournies
$set
);
if (isset($c['lon'])) {
if ($c['lon'] > 180) {
while ($c['lon'] > 180) {
$c['lon'] = $c['lon'] - 360;
}
} 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) {
$c['lat'] = $c['lat'] - 180;
}
} elseif ($c['lat'] <= -90) {
while ($c['lat'] <= -90) {
$c['lat'] = $c['lat'] + 180;
}
}
}
if (
$err = objet_modifier_champs('gis', $id_gis, [
//'nonvide' => array('nom' => _T('info_sans_titre')),
'data' => $set,
'invalideur' => "id='gis/$id_gis'",
], $c)
) {
return $err;
}
// lier a un parent ?
$c = collecter_requests(['id_objet', 'objet'], [], $set);
if (isset($c['id_objet']) and intval($c['id_objet']) and isset($c['objet']) and $c['objet']) {
gis_associer($id_gis, [$c['objet'] => $c['id_objet']]);
}
return $err;
}
/**
* Associer un point géolocalisé a des objets listes sous forme
* array($objet=>$id_objets,...)
* $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
*
* on peut passer optionnellement une qualification du (des) lien(s) qui sera
* alors appliquee dans la foulee.
* En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
*
* @param int $id_gis
* @param array $objets
* @param array $qualif
* @return string
*/
function gis_associer($id_gis, $objets, $qualif = null) {
include_spip('action/editer_liens');
$res = objet_associer(['gis' => $id_gis], $objets, $qualif);
include_spip('inc/invalideur');
suivre_invalideur("id='gis/$id_gis'");
return $res;
}
/**
* Dissocier un point géolocalisé des objets listes sous forme
* array($objet=>$id_objets,...)
* $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
*
* un * pour $id_auteur,$objet,$id_objet permet de traiter par lot
*
* @param int $id_gis
* @param array $objets
* @return string
*/
function gis_dissocier($id_gis, $objets) {
include_spip('action/editer_liens');
$res = objet_dissocier(['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));
$id_gis = 0;
include_spip('inc/invalideur');
suivre_invalideur("id='gis/$id_gis'");
return $id_gis;
}
return false;
}
/**
* Délier un point géolocalisé d'un objet SPIP
*
* @deprecated Utiliser gis_dissocier()
* @see gis_dissocier()
*
* @param int $id_gis identifiant numérique du point
* @param string $objet Le type de l'objet à lier
* @param int $id_objet L'identifiant numérique de l'objet lié
*
* @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) {
return gis_dissocier($id_gis, [$objet => $id_objet]);
}
/**
* Lier un point géolocalisé à un objet SPIP
*
* @deprecated Utiliser gis_associer()
* @see gis_associer()
*
* @param int $id_gis identifiant numérique du point
* @param string $objet Le type de l'objet à lier
* @param int $id_objet L'identifiant numérique de l'objet lié
*
* @return bool : true si la liaison s'est bien passée, false à l'inverse
*/
function lier_gis($id_gis, $objet, $id_objet) {
return gis_associer($id_gis, [$objet => $id_objet]);
}