F-d-ration_de_groupes/formulaires/editer_groupe.php
Pierre d3f0f337da Ajout d'un role "admin" pour les membres (auteurs) d'un article de type groupe :
* ajout d'un champ à la table de jointure auteurs_liens
* en même temps, ajout d'un champ "telephone" à la table auteurs
* mise à jour du formulaire d'édition d'un groupe et de ses membres / admins
* mise à jour des autorisations de modifier le groupe
2020-12-01 16:56:47 +01:00

269 lines
8 KiB
PHP

<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
function formulaires_editer_groupe_charger_dist($id_article=0, $redirect=''){
$erreurs = array();
include_spip('inc/autoriser');
if (! autoriser("creer","article")) {
$erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire.";
return $erreurs;
}
// Pour récupérer les champs renseignés en cas d'erreur
$titre = _request('titre');
$texte = _request('texte');
$soustitre = _request('soustitre');
$descriptif = _request('descriptif');
$valeurs = array();
$valeurs['titre'] = $titre;
$valeurs['texte'] = $texte;
$valeurs['soustitre'] = $soustitre;
$valeurs['descriptif'] = $descriptif;
$valeurs['statut'] = $statut;
if (intval($id_article)) {
if (! autoriser("modifier","article", $id_article)) {
$erreurs['message_erreur'] = "Vous n'êtes pas autorisé à modifier cet article.";
return $erreurs;
}
$valeurs = sql_fetsel('*', 'spip_articles', 'id_article='.intval($id_article));
// Liste des membres
$where1 = array(
'id_objet='.intval($id_article),
'objet="article"'
);
$res1 = sql_allfetsel('id_auteur','spip_auteurs_liens',$where1);
$valeurs['T_id_auteurs'] = array_column($res1,'id_auteur');
// Liste des admins
$where2 = array(
'id_objet='.intval($id_article),
'objet="article"',
'role="admin"'
);
$res2 = sql_allfetsel('id_auteur','spip_auteurs_liens',$where2);
$valeurs['T_id_admins'] = array_column($res2,'id_auteur');
}
else {
$valeurs['T_id_auteurs'] = array();
$valeurs['T_id_admins'] = array();
$valeurs['id_article'] = -1 * intval(session_get('id_auteur'));
}
$valeurs['_bigup_rechercher_fichiers'] = true;
return $valeurs;
}
function formulaires_editer_groupe_verifier_dist($id_article=0, $redirect=''){
$erreurs = array();
include_spip('inc/autoriser');
if (! autoriser("creer","article")) {
$erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire.";
return $erreurs;
}
if (intval($id_article)) {
if (! autoriser("modifier","article", $id_article)) {
$erreurs['message_erreur'] = "Vous n'êtes pas autorisé à modifier cet article.";
return $erreurs;
}
}
if (!lire_config('balint/id_rub_groupes')){
$erreurs['message_erreur'] = "Problème de configuration du site : veuillez renseigner la rubrique dédiée aux groupes dans les paramètres du plugin.";
return $erreurs;
}
// il faut au minimum titre (nom) pour créer un article
if (_request('titre') == ''){
$erreurs['message_erreur'] = "Il faut obligatoirement un nom pour créer un groupe régulier.";
return $erreurs;
}
$bigform = charger_fonction('bigform_verifier','inc');
$options = ['mime' => 'image_web','taille_max'=>'2000','largeur_max'=>'2048','hauteur_max'=>'2048'];
$bigform($options,$erreurs);
return $erreurs;
}
function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
$new = $id_article;
if (!intval($id_article)) {
$id_rubrique = lire_config('balint/id_rub_groupes');
include_spip('action/editer_article');
$set = array(
'statut' => 'publie'
);
$id_article = article_inserer($id_rubrique,$set);
}
// enregistrement de l'image
if (!intval($new)) {
$where = array(
'objet="article"',
'id_objet='.intval(session_get('id_auteur')) * -1
);
sql_updateq('spip_documents_liens',array('id_objet' => intval($id_article)), $where);
}
$titre=_request('titre');
$soustitre=_request('soustitre');
$texte=_request('texte');
$descriptif=_request('descriptif');
// maj de l'article
$set = array(
'titre' => $titre,
'texte' => $texte,
'soustitre' => $soustitre,
// On affiche le plus récent en premier => on garde la date de mise à jour
'date' => date("Y-m-d H:i:s"),
'descriptif' => $descriptif,
// 'surtitre' => $surtitre
// 'champ_1' => _request('champ_1'),
// 'champ_2' => _request('champ_2'),
// 'chapo' => _request('chapo'),
);
sql_updateq('spip_articles',$set,'id_article='.intval($id_article));
// maj association article -> auteurs
include_spip('action/editer_liens');
$where = array(
'id_objet='.intval($id_article),
'objet="article"'
);
$ids_auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', $where);
$ids_auteurs = array_column($ids_auteurs, 'id_auteur');
$Tauteurs = _request('Tauteurs');
$Tadmins = _request('Tadmins');
if (count($Tauteurs)) {
$associer = array_diff($Tauteurs, $ids_auteurs);
$dissocier = array_diff($ids_auteurs, $Tauteurs);
objet_associer( array('auteur' => $associer),array('article' => intval($id_article) ));
objet_dissocier( array('auteur' => $dissocier) , array('article' =>intval($id_article) ));
}
$liste_admins = implode(',' , $Tadmins);
$where2 = array(
'id_objet='.intval($id_article),
'objet="article"',
'id_auteur IN (' . $liste_admins . ')'
);
sql_updateq('spip_auteurs_liens', array('role' => ''), $where);
sql_updateq('spip_auteurs_liens', array('role' => 'admin'), $where2);
// maj des mots fermes
$T_id_groupe = sql_allfetsel('id_groupe','spip_groupes_mots','grigri!="tags"');
$T_id_groupe = array_column($T_id_groupe,'id_groupe');
foreach ($T_id_groupe as $id_groupe) {
$from = array(
'spip_mots as M',
'spip_mots_liens as L'
);
$where = array(
'L.id_objet='.intval($id_article),
'L.objet="article"',
'L.id_mot=M.id_mot',
'M.id_groupe='.$id_groupe
);
$ids_mots = sql_allfetsel('M.id_mot AS id_mot', $from, $where);
$ids_mots = array_column($ids_mots, 'id_mot');
$coches = _request('id_groupe_'.$id_groupe);
if (count($coches)) {
$associer = array_diff($coches, $ids_mots);
$dissocier = array_diff($ids_mots, $coches);
objet_associer(array('mot' => $associer),array('article' => intval($id_article)));
objet_dissocier(array('mot' => $dissocier), array('article' => intval($id_article)));
}
}
include_spip('action/editer_objet');
// GIS
$lat_def = lire_config('gis/lat');
$lon_def = lire_config('gis/lon');
$lat = _request('lat');
$lon = _request('lon');
// 1. recup id_gis si present
$from = array(
'spip_gis as G',
'spip_gis_liens as L',
'spip_articles as A'
);
$where = array(
'L.id_objet='.intval($id_article),
'L.objet="article"',
'L.id_gis=G.id_gis'
);
$id_gis = sql_getfetsel('G.id_gis', $from, $where);
$set = array(
'titre' => _request('titre'),
'lat' => $lat,
'lon' => $lon,
'zoom' => 15
);
if (!$id_gis) {
$id_gis = sql_insertq('spip_gis',$set);
$set = array(
'id_gis' => $id_gis,
'id_objet' => intval($id_article),
'objet' => 'article'
);
sql_insertq('spip_gis_liens',$set);
} else {
if ($lat !== $lat_def and $lon !== $lon_def) {
objet_modifier('gis', $id_gis, $set);
}
}
// SEO title et description: créer ou mettre à jour, y compris si les valeurs postées sont vides (= vidage du champ)
$id_article = intval($id_article);
$seo_titre = _request('seo_titre');
$set = array('id_objet' => $id_article, 'objet' => 'article', 'meta_name' => 'title', 'meta_content' => $seo_titre);
$where = array("id_objet = $id_article", "objet = 'article'", "meta_name = 'title'");
$res = sql_getfetsel('meta_content', 'spip_seo', $where);
if ((!$res AND $seo_titre != '')
OR ($res != $seo_titre)) {
sql_replace('spip_seo', $set, $where);
}
$seo_descriptif = _request('seo_descriptif');
$set = array('id_objet' => $id_article, 'objet' => 'article', 'meta_name' => 'description', 'meta_content' => $seo_descriptif);
$where = array("id_objet = $id_article", "objet = 'article'", "meta_name = 'description'");
$res = sql_getfetsel('meta_content', 'spip_seo', $where);
if ((!$res AND $seo_descriptif != '')
OR ($res != $seo_descriptif)) {
sql_replace('spip_seo', $set, $where);
}
include_spip('inc/invalideur');
suivre_invalideur("id='id_article/1'");
$retour = array();
$retour['message_ok'] = "Le groupe est bien enregistré.";
// on redirige vers la ville
//$retour['redirect'] = "spip.php?page=groupes&id_article=$id_article";
$bigform = charger_fonction('bigform_traiter','inc');
$bigform($id_article, 'article');
return $retour;
}