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
This commit is contained in:
parent
b8cba88e47
commit
d3f0f337da
8 changed files with 111 additions and 29 deletions
|
@ -28,12 +28,12 @@ function balint_upgrade($nom_meta_base_version, $version_cible) {
|
|||
$maj = array();
|
||||
|
||||
$maj['create'] = array(
|
||||
array('maj_tables', array('spip_articles')),
|
||||
array('maj_tables', array('spip_articles','spip_auteurs_liens')),
|
||||
array('config_prive')
|
||||
);
|
||||
|
||||
$maj['1.0.7'] = array(
|
||||
array('maj_tables', array('spip_articles')),
|
||||
$maj['1.0.12'] = array(
|
||||
array('maj_tables', array('spip_articles','spip_auteurs_liens')),
|
||||
array('config_prive')
|
||||
);
|
||||
|
||||
|
|
|
@ -118,6 +118,24 @@ function autoriser_article_lire($faire, $type, $id, $qui, $opt) {
|
|||
|
||||
function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
|
||||
|
||||
// Si l'article est un groupe, il faut être auteur et avoir le role "admin"
|
||||
if ($opt AND in_array('groupe',$opt)){
|
||||
$where = array(
|
||||
'id_objet='.intval($id),
|
||||
'objet="article"',
|
||||
'id_auteur =' . $qui['id_auteur']
|
||||
);
|
||||
$role = sql_getfetsel('role','spip_auteurs_liens',$where);
|
||||
if (in_array($qui['id_auteur'],auteurs_objet('article',$id)) AND $role == "admin"){
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return in_array($qui['statut'], array('0minirezo'));
|
||||
}
|
||||
}
|
||||
|
||||
// Sinon, seuls les auteurs et les admins peuvent le modifier
|
||||
else{
|
||||
if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){
|
||||
return true;
|
||||
}
|
||||
|
@ -125,6 +143,7 @@ function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
|
|||
return in_array($qui['statut'], array('0minirezo'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function autoriser_article_rediger($faire, $type, $id, $qui, $opt) {
|
||||
// Si le membre est rédacteur, il doit être animateur d'au moins un groupe
|
||||
|
@ -158,7 +177,9 @@ function autoriser_sujet_editer($faire, $type, $id, $qui, $opt) {
|
|||
}
|
||||
|
||||
function autoriser_forum_voir($faire, $type, $id, $qui, $opt) {
|
||||
$id_auteur = $qui['id_auteur'];
|
||||
return in_array($qui['statut'], array('0minirezo','1comite'));
|
||||
|
||||
/* $id_auteur = $qui['id_auteur'];
|
||||
// Il faut être au moins membre
|
||||
if ($qui['statut']=='1comite'){
|
||||
// si le forum est privé, il faut être membre du bureau
|
||||
|
@ -178,4 +199,5 @@ function autoriser_forum_voir($faire, $type, $id, $qui, $opt) {
|
|||
if ($qui['statut']=='0minirezo'){
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -16,6 +16,13 @@ function balint_declarer_tables_principales($tables_principales){
|
|||
return $tables_principales;
|
||||
}
|
||||
|
||||
function balint_declarer_tables_auxiliaires($tables_auxiliaires){
|
||||
|
||||
$tables_auxiliaires['spip_auteurs_liens']['field']['role'] = "text DEFAULT '' NOT NULL";
|
||||
|
||||
return $tables_auxiliaires;
|
||||
}
|
||||
|
||||
function balint_declarer_champs_extras($champs = array()) {
|
||||
$champs['spip_groupes_mots']['grigri'] = array(
|
||||
'saisie' => 'input',//Type du champ (voir plugin Saisies)
|
||||
|
@ -78,6 +85,21 @@ function balint_declarer_champs_extras($champs = array()) {
|
|||
'modifier' => array('auteur' => '0minirezo')),//Seuls les admins peuvent modifier
|
||||
),
|
||||
);
|
||||
$champs['spip_auteurs']['telephone'] = array(
|
||||
'saisie' => 'input',//Type du champ (voir plugin Saisies)
|
||||
'options' => array(
|
||||
'nom' => 'telephone',
|
||||
'label' => 'Téléphone',
|
||||
'sql' => "varchar(30) NOT NULL DEFAULT ''",
|
||||
'defaut' => '',// Valeur par défaut
|
||||
'restrictions'=>array(
|
||||
'voir' => array('auteur' => ''),
|
||||
'modifier' => array('auteur' => 'ominirezo','1comite')
|
||||
)
|
||||
|
||||
),
|
||||
);
|
||||
|
||||
/*
|
||||
$champs['spip_auteurs']['bureau'] = array(
|
||||
'saisie' => 'case',//Type du champ (voir plugin Saisies)
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<tr>
|
||||
<th scope="col">Nom</th>
|
||||
<th scope="col">Statut</th>
|
||||
<th scope="col">Bureau</th>
|
||||
[(#REM)<th scope="col">Bureau</th>]
|
||||
<th scope="col">Animateur</th>
|
||||
<th scope="col">Email</th>
|
||||
<th scope="col">Téléphone</th>
|
||||
|
@ -19,7 +19,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<BOUCLE_auteurs(AUTEURS){tous}{webmestre=non}{par nom}>
|
||||
<BOUCLE_auteurs(AUTEURS){tous}{par nom}>
|
||||
|
||||
<tr class="ligne-auteurs">
|
||||
<td class="cellule-tableau">#NOM</td>
|
||||
|
@ -28,13 +28,13 @@
|
|||
[(#STATUT|=={1comite}|oui) Membre]
|
||||
[(#STATUT|=={6forum}|oui) Inscrit]
|
||||
</td>
|
||||
<td class="cellule-tableau">
|
||||
[(#REM)<td class="cellule-tableau">
|
||||
<INCLURE{fond=inclure/toggle_param,env,objet=auteur,id_objet=#ID_AUTEUR,param=bureau,ajax}>
|
||||
</td>
|
||||
</td>]
|
||||
<td class="cellule-tableau">
|
||||
<BOUCLE_groupes(ARTICLES){id_secteur=#CONFIG{balint/id_rub_groupes}}{id_auteur=#ID_AUTEUR}>
|
||||
[(#REM) On affiche les villes dont on est animateur de groupe, ou le pays si on animateur de gps ponctuels]
|
||||
[(#SURTITRE|sinon{#INFO_TITRE{rubrique,#ID_RUBRIQUE}}|unique)]
|
||||
#TITRE
|
||||
</BOUCLE_groupes>
|
||||
</td>
|
||||
<td class="cellule-tableau">#EMAIL</td>
|
||||
|
|
|
@ -101,18 +101,30 @@
|
|||
<div class="col-lg-3">
|
||||
|
||||
[(#SET{T_id_auteurs, #ENV{T_id_auteurs}|sinon{#ARRAY}})]
|
||||
[(#SET{T_id_admins, #ENV{T_id_admins}|sinon{#ARRAY}})]
|
||||
|
||||
<fieldset>
|
||||
<legend><i class="fas fa-users"></i> Responsables</legend>
|
||||
<label for="auteurs">Animateurs du groupe</label>
|
||||
<legend><i class="fas fa-users"></i> Membres</legend>
|
||||
<label for="auteurs">Membres du groupe</label>
|
||||
<select id="auteurs" name="Tauteurs[]" class="chosen" multiple>
|
||||
<option value=""> </option>
|
||||
<BOUCLE_auteurs(AUTEURS){tous}{par nom}{webmestre != oui}>
|
||||
<BOUCLE_auteurs(AUTEURS){tous}{statut IN '0minirezo','1comite'}{par nom}>
|
||||
<option value="#ID_AUTEUR" [(#ID_AUTEUR|in_array{#GET{T_id_auteurs}}|oui) selected]>#NOM</option>
|
||||
</BOUCLE_auteurs>
|
||||
</select>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend><i class="fas fa-star"></i> Admins</legend>
|
||||
<label for="admins">Animateurs du groupe</label>
|
||||
<select id="admins" name="Tadmins[]" class="chosen" multiple>
|
||||
<option value=""> </option>
|
||||
<BOUCLE_admins(AUTEURS){tous}{statut IN '0minirezo','1comite'}{par nom}{id_auteur in #GET{T_id_auteurs}}>
|
||||
<option value="#ID_AUTEUR" [(#ID_AUTEUR|in_array{#GET{T_id_admins}}|oui) selected]>#NOM</option>
|
||||
</BOUCLE_admins>
|
||||
</select>
|
||||
</fieldset>
|
||||
|
||||
<div class="boutons text-center">
|
||||
<button type="submit" class="submit btn">
|
||||
<i class="fas fa-save"></i> Enregistrer</a>
|
||||
|
|
|
@ -32,16 +32,27 @@ function formulaires_editer_groupe_charger_dist($id_article=0, $redirect=''){
|
|||
|
||||
$valeurs = sql_fetsel('*', 'spip_articles', 'id_article='.intval($id_article));
|
||||
|
||||
$where = array(
|
||||
// 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"'
|
||||
);
|
||||
$res = sql_allfetsel('id_auteur','spip_auteurs_liens',$where);
|
||||
$res2 = sql_allfetsel('id_auteur','spip_auteurs_liens',$where2);
|
||||
$valeurs['T_id_admins'] = array_column($res2,'id_auteur');
|
||||
|
||||
$valeurs['T_id_auteurs'] = array_column($res,'id_auteur');
|
||||
}
|
||||
else {
|
||||
$valeurs['T_id_auteurs'] = array();
|
||||
$valeurs['T_id_admins'] = array();
|
||||
$valeurs['id_article'] = -1 * intval(session_get('id_auteur'));
|
||||
}
|
||||
|
||||
|
@ -128,11 +139,13 @@ function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
|
|||
include_spip('action/editer_liens');
|
||||
$where = array(
|
||||
'id_objet='.intval($id_article),
|
||||
'objet="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);
|
||||
|
@ -142,6 +155,16 @@ function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
|
|||
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');
|
||||
|
@ -235,7 +258,7 @@ function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
|
|||
$retour['message_ok'] = "Le groupe est bien enregistré.";
|
||||
|
||||
// on redirige vers la ville
|
||||
$retour['redirect'] = "spip.php?page=groupes&id_article=$id_article";
|
||||
//$retour['redirect'] = "spip.php?page=groupes&id_article=$id_article";
|
||||
|
||||
|
||||
$bigform = charger_fonction('bigform_traiter','inc');
|
||||
|
|
|
@ -5,16 +5,19 @@
|
|||
[(#REM) S'il s'agit de la page d'un groupe :]
|
||||
<BOUCLE_groupe(ARTICLES){id_article=#ENV{id_article}}{par rang}>
|
||||
|
||||
[(#AUTORISER{modifier, article, #ID_ARTICLE})
|
||||
<?php
|
||||
include_spip('inc/autoriser');
|
||||
if (autoriser('modifier','article', #ID_ARTICLE,$GLOBALS['visiteur_session']['id_auteur'], array('groupe'))){ ?>
|
||||
<a class="btn" href="#URL_PAGE{editer_groupe,id_article=#ID_ARTICLE }"><i class="fas fa-edit"></i> Mettre à jour le groupe</a>
|
||||
]
|
||||
<?php } ?>
|
||||
|
||||
[<h3 class="h4">(#TITRE)</h3>]
|
||||
|
||||
<strong>Responsables</strong>
|
||||
<BOUCLE_auteurs(AUTEURS){id_article=#ID_ARTICLE}>
|
||||
<div>#NOM
|
||||
<strong>Contact</strong>
|
||||
<BOUCLE_auteurs(AUTEURS){id_article=#ID_ARTICLE}{role=admin}>
|
||||
<div>
|
||||
[(#EMAIL|ou{#TELEPHONE}|oui)
|
||||
<a href="[(#URL_PAGE{contacter_auteur}|parametre_url{id_auteur,#ID_AUTEUR})]" class="mediabox"> (contact)</a>
|
||||
<a href="[(#URL_PAGE{contacter_auteur}|parametre_url{id_auteur,#ID_AUTEUR})]" class="mediabox">#NOM</a>
|
||||
]
|
||||
</div>
|
||||
</BOUCLE_auteurs>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
compatibilite="[3.1.7;3.3.*]"
|
||||
logo="img/fede_64.jpg"
|
||||
documentation=""
|
||||
schema="1.0.7"
|
||||
schema="1.0.12"
|
||||
>
|
||||
|
||||
<nom>Squelette Fédé</nom>
|
||||
|
|
Loading…
Add table
Reference in a new issue