On crée un deuxième forum.

On normalise les éléments du forum pour qu'il transmette l'id du forum en paramètre, notamment pour la création et la redirection dans le bon forum.
On ajoute des fonctions d'autorisation pour qu'un créateur de sujet puisse le modifier tant qu'il n'a pas de réponse.
On modifie les autorisations pour le formulaire editer_auteur, afin qu'un simple inscrit (6forum) puisse éditer son profil aussi !
This commit is contained in:
Pierre 2020-03-11 03:30:23 +01:00
parent 5bf7ac58a5
commit 9c42e9cc24
20 changed files with 176 additions and 71 deletions

View file

@ -19,8 +19,8 @@ function action_supprimer_sujet_dist(){
suivre_invalideur("id='id_article/$id_article'"); suivre_invalideur("id='id_article/$id_article'");
} }
// redirection sur l'accueil // redirection
$retour = 'spip.php?page=forum_discussion'; $retour = _request('redirect');
include_spip('inc/headers'); include_spip('inc/headers');
redirige_par_entete($retour); redirige_par_entete($retour);
} }

View file

@ -20,6 +20,82 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function balint_autoriser() { function balint_autoriser() {
} }
function autoriser_auteur_modifier($faire, $type, $id, $qui, $opt) {
// Ni admin ni redacteur => non
if (!in_array($qui['statut'], array('0minirezo', '1comite', '6forum'))) {
return false;
}
// Un redacteur peut modifier ses propres donnees mais ni son login/email
// ni son statut (qui sont le cas echeant passes comme option)
if (in_array($qui['statut'], array('1comite','6forum'))) {
if (!empty($opt['webmestre'])) {
return false;
} elseif (
!empty($opt['statut'])
or !empty($opt['restreintes'])
or !empty($opt['email'])
) {
return false;
} elseif ($id == $qui['id_auteur']) {
return true;
} else {
return false;
}
}
// Un admin restreint peut modifier/creer un auteur non-admin mais il
// n'a le droit ni de le promouvoir admin, ni de changer les rubriques
if ($qui['restreint']) {
if (isset($opt['webmestre']) and $opt['webmestre']) {
return false;
} elseif ((isset($opt['statut']) and ($opt['statut'] == '0minirezo'))
or (isset($opt['restreintes']) and $opt['restreintes'])
) {
return false;
} else {
if ($id == $qui['id_auteur']) {
if (isset($opt['statut']) and $opt['statut']) {
return false;
} else {
return true;
}
} else {
if ($id_auteur = intval($id)) {
$t = sql_fetsel('statut', 'spip_auteurs', "id_auteur=$id_auteur");
if ($t and $t['statut'] != '0minirezo') {
return true;
} else {
return false;
}
} // id = 0 => creation
else {
return true;
}
}
}
}
// Un admin complet fait ce qu'il veut
// sauf se degrader
if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) {
return false;
} elseif (isset($opt['webmestre'])
and $opt['webmestre']
and (defined('_ID_WEBMESTRES')
or !autoriser('webmestre'))) {
// et toucher au statut webmestre si il ne l'est pas lui meme
// ou si les webmestres sont fixes par constante (securite)
return false;
} // et modifier un webmestre si il ne l'est pas lui meme
elseif (intval($id) and autoriser('webmestre', '', 0, $id) and !autoriser('webmestre')) {
return false;
} else {
return true;
}
}
function autoriser_article_modifier($faire, $type, $id, $qui, $opt) { function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){ if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){
@ -30,3 +106,24 @@ function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
} }
} }
function autoriser_sujet_creer($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo','1comite','6forum'));
}
function autoriser_sujet_supprimer($faire, $type, $id, $qui, $opt) {
// Si le sujet a eu au moins une réponse, on ne peut plus le supprimer
if (sql_fetsel('*','spip_forum',"id_objet=$id AND objet='article'")){
return false;
}
// Sinon, seul les admins et l'auteur peuvent le supprimer
else{
if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){
return true;
}
else{
return in_array($qui['statut'], array('0minirezo'));
}
}
}

View file

@ -12,7 +12,7 @@
[(#ENV{id_article}|oui) [(#ENV{id_article}|oui)
[(#AUTORISER{modifier, article, #ENV{id_article}}|?{ [(#AUTORISER{modifier, article, #ENV{id_article}}|?{
<div class="ajax"> <div class="ajax">
[(#FORMULAIRE_EDITER_SUJET{#ENV{id_article},#URL_PAGE{espace_membre}|parametre_url{forum,oui}})]<br> [(#FORMULAIRE_EDITER_SUJET{#ENV{id_article},#ENV{id_forum},#URL_PAGE{#ENV{url}}|parametre_url{id_forum,#ENV{id_forum}}})]<br>
</div> </div>
, ,
<div class="reponse_formulaire reponse_formulaire_erreur">Votre compte ne fait pas partie des auteurs autorisés à modifier cet article.</div> <div class="reponse_formulaire reponse_formulaire_erreur">Votre compte ne fait pas partie des auteurs autorisés à modifier cet article.</div>
@ -20,7 +20,7 @@
] ]
[(#ENV{id_article}|non) [(#ENV{id_article}|non)
<div class="ajax"> <div class="ajax">
[(#FORMULAIRE_EDITER_SUJET{0,#URL_PAGE{espace_membre}|parametre_url{forum,oui}})] [(#FORMULAIRE_EDITER_SUJET{0,#ENV{id_forum},#URL_PAGE{#ENV{url}}|parametre_url{id_forum,#ENV{id_forum}}})]
</div> </div>
] ]
] ]

View file

@ -1,15 +1,16 @@
[(#REM) On affiche la première rubrique par défaut]
<section id="espace_membre" class="section-top section-bottom container">
<?php <?php
if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) { if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) {
?> ?>
[(#REM) On affiche la première rubrique par défaut]
<section id="espace_membre" class="section-top section-bottom container">
<div class="cadre-blanc"> <div class="cadre-blanc">
<h1 class="mb-4">Espace membre</h1> <h1 class="mb-4">Espace membre</h1>
<INCLURE{fond=inclure/espace_membre_contenu,env,ajax}> <INCLURE{fond=inclure/espace_membre_contenu,env,ajax}>
</div> </div>
</section>
<?php <?php
} }
@ -29,3 +30,6 @@
<?php <?php
} }
?> ?>
</section>

View file

@ -1,24 +1,13 @@
<section class="section-top section-bottom container"> <section class="section-top section-bottom container">
<div class="cadre-blanc">
<h1>Forum</h1>
<?php <?php
if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) { if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) {
?> ?>
<div class="cadre-blanc">
<BOUCLE_intro(ARTICLES){grigri=forum}> <INCLURE{fond=inclure/forum_discussion,env,id_forum=#CONFIG{balint/id_rub_forum},ajax}>
<div class="cadre-gris #EDIT{texte}">
[(#TEXTE|textebrut)]
</div>
</BOUCLE_intro>
<div class="boutons"> </div>
<a class="btn btn_editer" href="#URL_PAGE{editer_sujet}"><i class="fas fa-edit"></i> Démarrer une nouvelle discussion</a>
</div>
<INCLURE{fond=inclure/sujets-forum, env, ajax}>
<?php <?php
} }
@ -39,8 +28,6 @@
} }
?> ?>
</div>
</section> </section>

View file

@ -26,7 +26,7 @@
<td class="cellule-tableau"> <td class="cellule-tableau">
[(#STATUT|=={0minirezo}|oui) Administrateur] [(#STATUT|=={0minirezo}|oui) Administrateur]
[(#STATUT|=={1comite}|oui) Rédacteur] [(#STATUT|=={1comite}|oui) Rédacteur]
[(#STATUT|=={6forum}|oui) Membre] [(#STATUT|=={6forum}|oui) Inscrit]
</td> </td>
<td class="cellule-tableau"> <td class="cellule-tableau">
<BOUCLE_groupes(ARTICLES){id_secteur=#CONFIG{balint/id_rub_groupes}}{id_auteur=#ID_AUTEUR}> <BOUCLE_groupes(ARTICLES){id_secteur=#CONFIG{balint/id_rub_groupes}}{id_auteur=#ID_AUTEUR}>

View file

@ -900,8 +900,8 @@ body{
.sujet-forum{ .sujet-forum{
padding: 1rem 0; padding: 1rem 0;
background: $fond-transparent; background: $fond-transparent;
&:not(:last-of-type){ &:not(:first-of-type){
border-bottom: solid 3px $gris-clair; border-top: solid 3px $gris-clair;
} }
.spip_logo{ .spip_logo{
border-radius: 100%; border-radius: 100%;

View file

@ -12902,8 +12902,8 @@ body {
background: rgba(255, 255, 255, 0.92); background: rgba(255, 255, 255, 0.92);
} }
.sujet-forum:not(:last-of-type) { .sujet-forum:not(:first-of-type) {
border-bottom: solid 3px #f2f2f2; border-top: solid 3px #f2f2f2;
} }
.sujet-forum .spip_logo { .sujet-forum .spip_logo {

View file

@ -43,6 +43,7 @@
#SET{name1,id_rub_articles} #SET{name1,id_rub_articles}
#SET{name2,id_rub_groupes} #SET{name2,id_rub_groupes}
#SET{name3,id_rub_forum} #SET{name3,id_rub_forum}
#SET{name3b,id_rub_forum_prive}
#SET{name4,id_mots_medias} #SET{name4,id_mots_medias}
#SET{name5,id_mots_espace_membre} #SET{name5,id_mots_espace_membre}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name1}}|table_valeur{#GET{name2}}} #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name1}}|table_valeur{#GET{name2}}}
@ -59,10 +60,15 @@
<input type="text" name="#GET{name2}" id="#GET{name2}" value="#ENV{#GET{name2}}"> <input type="text" name="#GET{name2}" id="#GET{name2}" value="#ENV{#GET{name2}}">
</div> </div>
<div class="editer_[(#GET{name3})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <div class="editer_[(#GET{name3})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name3}">ID du secteur du forum</label> <label for="#GET{name3}">ID du secteur du forum public</label>
[<span class="erreur_message">(#GET{erreurs})</span>] [<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" name="#GET{name3}" id="#GET{name3}" value="#ENV{#GET{name3}}"> <input type="text" name="#GET{name3}" id="#GET{name3}" value="#ENV{#GET{name3}}">
</div> </div>
<div class="editer_[(#GET{name3b})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name3b}">ID du secteur du forum privé</label>
[<span class="erreur_message">(#GET{erreurs})</span>]
<input type="text" name="#GET{name3b}" id="#GET{name3b}" value="#ENV{#GET{name3b}}">
</div>
<div class="editer_[(#GET{name4})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <div class="editer_[(#GET{name4})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name4}">ID du groupe de mots de la médiathèque</label> <label for="#GET{name4}">ID du groupe de mots de la médiathèque</label>
[<span class="erreur_message">(#GET{erreurs})</span>] [<span class="erreur_message">(#GET{erreurs})</span>]

View file

@ -14,12 +14,12 @@
<legend><i class="fas fa-pencil"></i> Texte</legend> <legend><i class="fas fa-pencil"></i> Texte</legend>
<div class="titre"> <div class="titre">
<label for="titre">Titre</label> <label for="titre">Titre</label>
<input class="text" type="text" name="titre" value="#ENV{titre}"> <input class="text" type="text" name="titre" value="#ENV{titre}" tabindex='1'>
</div> </div>
<div class="texte"> <div class="texte">
<label for="texte">Texte</label> <label for="texte">Texte</label>
<textarea class="text" type="text" name="texte">#ENV{texte}</textarea> <textarea class="text" type="text" name="texte" tabindex='2'>#ENV{texte}</textarea>
</div> </div>
</fieldset> </fieldset>
@ -36,7 +36,7 @@
<div class="col-lg-3 formulaire-col-droite"> <div class="col-lg-3 formulaire-col-droite">
<div class="boutons text-center"> <div class="boutons text-center">
<button type="submit" class="submit btn"> <button type="submit" class="submit btn" tabindex='3'>
<i class="fas fa-save"></i> Enregistrer</a> <i class="fas fa-save"></i> Enregistrer</a>
</button> </button>
</div> </div>

View file

@ -1,11 +1,11 @@
<?php <?php
if (!defined('_ECRIRE_INC_VERSION')) return; if (!defined('_ECRIRE_INC_VERSION')) return;
function formulaires_editer_sujet_charger_dist($id_article=0, $redirect=''){ function formulaires_editer_sujet_charger_dist($id_article=0, $id_rubrique, $redirect=''){
$erreurs = array(); $erreurs = array();
include_spip('inc/autoriser'); include_spip('inc/autoriser');
if (! autoriser("creer","article")) { if (! autoriser("creer","sujet")) {
$erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire."; $erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire.";
return $erreurs; return $erreurs;
} }
@ -42,11 +42,11 @@ function formulaires_editer_sujet_charger_dist($id_article=0, $redirect=''){
return $valeurs; return $valeurs;
} }
function formulaires_editer_sujet_verifier_dist($id_article=0, $redirect=''){ function formulaires_editer_sujet_verifier_dist($id_article=0, $id_rubrique, $redirect=''){
$erreurs = array(); $erreurs = array();
include_spip('inc/autoriser'); include_spip('inc/autoriser');
if (! autoriser("creer","article")) { if (! autoriser("creer","sujet")) {
$erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire."; $erreurs['message_erreur'] = "Vous devez être connecté pour utiliser ce formulaire.";
return $erreurs; return $erreurs;
} }
@ -71,11 +71,9 @@ function formulaires_editer_sujet_verifier_dist($id_article=0, $redirect=''){
return $erreurs; return $erreurs;
} }
function formulaires_editer_sujet_traiter_dist($id_article = 0, $redirect = ''){ function formulaires_editer_sujet_traiter_dist($id_article = 0, $id_rubrique, $redirect = ''){
$new = $id_article; $new = $id_article;
$id_rubrique = lire_config('balint/id_rub_forum');
if (!intval($id_article)) { if (!intval($id_article)) {
include_spip('action/editer_article'); include_spip('action/editer_article');

View file

@ -141,12 +141,14 @@ function formulaires_inscription_traiter_dist($mode = '', $id = 0) {
// 1. On cree l'auteur en BDD : // 1. On cree l'auteur en BDD :
// statut = 6forum // statut = 6forum
$mode="6forum";
$nom = _request('nom_inscription'); $nom = _request('nom_inscription');
$mail_complet = _request('mail_inscription'); $mail_complet = _request('mail_inscription');
$password = _request('password'); $password = _request('password');
$inscrire_auteur = charger_fonction('inscrire_auteur', 'action'); $inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
$desc = $inscrire_auteur($mode, $mail_complet, $nom, array('id' => $id)); $desc = $inscrire_auteur($mode, $mail_complet, $nom, array('id' => $id));
include_spip('action/editer_auteur'); include_spip('action/editer_auteur');
if ($id_auteur = intval($desc['id_auteur'])){ if ($id_auteur = intval($desc['id_auteur'])){
// On modifie le mot de passe en utilisant les API de SPIP // On modifie le mot de passe en utilisant les API de SPIP
@ -158,8 +160,6 @@ function formulaires_inscription_traiter_dist($mode = '', $id = 0) {
auteur_modifier($id_auteur, $set); auteur_modifier($id_auteur, $set);
} }
// 2. On connecte l'auteur // 2. On connecte l'auteur
// appeler auth_identifier_login qui va : // appeler auth_identifier_login qui va :

View file

@ -1,4 +1,4 @@
<a href="[(#URL_PAGE{espace_membre}|parametre_url{forum,oui})]"><i class="fas fa-arrow-circle-left"></i> Retour</a> <a href="[(#URL_PAGE{#ENV{type-page}}|parametre_url{id_forum,#ENV{id_forum}})]"><i class="fas fa-arrow-circle-left"></i> Retour</a>
<BOUCLE_sujet(ARTICLES){id_article=#ENV{id_article}}> <BOUCLE_sujet(ARTICLES){id_article=#ENV{id_article}}>
<div id="sujet-forum" class="sujet-forum"> <div id="sujet-forum" class="sujet-forum">

View file

@ -1,4 +1,6 @@
<a class="btn btn_supprimer" href="[(#URL_ACTION_AUTEUR{supprimer_sujet,#ENV{id_article}})]" [(#AUTORISER{supprimer, sujet, #ENV{id_article}}|oui)
onclick="if (!confirm('Etes vous certain de vouloir effacer ce sujet ?')) return false;"> <a class="btn btn_supprimer" href="[(#URL_ACTION_AUTEUR{supprimer_sujet,#ENV{id_article},[(#URL_PAGE{#ENV{type-page}}|parametre_url{forum,oui})]})]"
<i class="fas fa-trash"></i> Supprimer onclick="if (!confirm('Etes vous certain de vouloir effacer ce sujet ?')) return false;">
</a> <i class="fas fa-trash"></i> Supprimer
</a>
]

View file

@ -11,11 +11,11 @@
<INCLURE{fond=inclure/menu-espace_membre,env}> <INCLURE{fond=inclure/menu-espace_membre,env}>
<?php if (isset($GLOBALS['visiteur_session']['statut']) AND $GLOBALS['visiteur_session']['statut'] == '0minirezo') { ?> <?php if (isset($GLOBALS['visiteur_session']['statut']) AND $GLOBALS['visiteur_session']['statut'] == '0minirezo') { ?>
[(#ENV{forum}|=={oui}|non) [(#ENV{id_forum}|non)
<INCLURE{fond=inclure/bouton_ordre,env,ordre=#GET{ordre,DESC},objet=mot}> <INCLURE{fond=inclure/bouton_ordre,env,ordre=#GET{ordre,DESC},objet=mot}>
] ]
<?php } ?> <?php } ?>
[(#ENV{forum}|=={oui}|oui) [(#ENV{id_forum}|oui)
[(#ENV{id_article}|oui) [(#ENV{id_article}|oui)
<INCLURE{fond=inclure/article-forum,env}/> <INCLURE{fond=inclure/article-forum,env}/>
] ]
@ -27,7 +27,7 @@
<B_articles> <B_articles>
<div class="row liste-articles"> <div class="row liste-articles">
#ANCRE_PAGINATION #ANCRE_PAGINATION
<BOUCLE_articles(ARTICLES){id_mot=#ENV{id_mot}}{par rang}{inverse #GET{tri}}{par date}{inverse #GET{tri}}{pagination 8}{si #ENV{forum}|!={oui}}> <BOUCLE_articles(ARTICLES){id_mot=#ENV{id_mot}}{par rang}{inverse #GET{tri}}{par date}{inverse #GET{tri}}{pagination 8}{si #ENV{id_forum}|non}>
<div class="col-lg-3 mt-4 mt-lg-3"> <div class="col-lg-3 mt-4 mt-lg-3">
<INCLURE{fond=inclure/bloc_article, env, id_article}/> <INCLURE{fond=inclure/bloc_article, env, id_article}/>
</div> </div>
@ -36,7 +36,7 @@
[<div class="pagination">(#PAGINATION{page_precedent_suivant})</div>] [<div class="pagination">(#PAGINATION{page_precedent_suivant})</div>]
</B_articles> </B_articles>
<div> <div>
[(#ENV{forum}|=={oui}|non) [(#ENV{id_forum}|non)
Il n'y a aucun article à afficher dans cette section pour l'instant. Il n'y a aucun article à afficher dans cette section pour l'instant.
] ]
</div> </div>

View file

@ -1,6 +1,6 @@
<h2>Forum</h2> <BOUCLE_intro(ARTICLES){grigri=forum_#ENV{id_forum}}{si #ENV{id_article}|non}>
<h2 class="#EDIT{titre}">#TITRE</h2>
<BOUCLE_intro(ARTICLES){grigri=forum}{si #ENV{id_article}|non}>
<div class="cadre-gris #EDIT{texte}"> <div class="cadre-gris #EDIT{texte}">
[(#TEXTE|textebrut)] [(#TEXTE|textebrut)]
</div> </div>
@ -8,12 +8,12 @@
[(#ENV{id_article}|non) [(#ENV{id_article}|non)
<div class="boutons"> <div class="boutons">
<a class="btn btn_editer" href="#URL_PAGE{editer_sujet}"><i class="fas fa-edit"></i> Démarrer une nouvelle discussion</a> <a class="btn btn_editer" href="[(#URL_PAGE{editer_sujet}|parametre_url{id_forum,#ENV{id_forum}}|parametre_url{url,#ENV{type-page}})]"><i class="fas fa-edit"></i> Démarrer une nouvelle discussion</a>
</div> </div>
<INCLURE{fond=inclure/sujets-forum, env}> <INCLURE{fond=inclure/sujets-forum,env,url=#ENV{type-page}}>
] ]
[(#ENV{id_article}|oui) [(#ENV{id_article}|oui)
<INCLURE{page=article-forum, env}> <INCLURE{fond=inclure/article-forum,env,url=#ENV{type-page}}>
] ]

View file

@ -5,8 +5,11 @@
</button> </button>
<div class="collapse navbar-collapse" id="liste-groupes"> <div class="collapse navbar-collapse" id="liste-groupes">
<ul class="navbar-nav"> <ul class="navbar-nav">
<li class="nav-item [(#ENV{forum}|=={oui}|oui) active]"> <li class="nav-item [(#ENV{id_forum}|=={#CONFIG{balint/id_rub_forum}}|oui) active]">
<a class="nav-link ajax nocache" href="[(#URL_PAGE{espace_membre}|parametre_url{forum,oui})]">Forum</a> <a class="nav-link ajax nocache" href="[(#URL_PAGE{espace_membre}|parametre_url{id_forum,#CONFIG{balint/id_rub_forum}})]">Forum</a>
</li>
<li class="nav-item [(#ENV{id_forum}|=={#CONFIG{balint/id_rub_forum_prive}}|oui) active]">
<a class="nav-link ajax nocache" href="[(#URL_PAGE{espace_membre}||parametre_url{id_forum,#CONFIG{balint/id_rub_forum_prive}})]">Échanges privés</a>
</li> </li>
<BOUCLE_menu_membre(MOTS){id_groupe = #CONFIG{balint/id_mots_espace_membre}}{par id_mot}{tout}> <BOUCLE_menu_membre(MOTS){id_groupe = #CONFIG{balint/id_mots_espace_membre}}{par id_mot}{tout}>
<li class="nav-item [(#ENV{id_mot}|=={#ID_MOT}|oui) active]"> <li class="nav-item [(#ENV{id_mot}|=={#ID_MOT}|oui) active]">

View file

@ -35,15 +35,23 @@
<a class="nav-link" href="[(#URL_PAGE{association})]">L'association</a> <a class="nav-link" href="[(#URL_PAGE{association})]">L'association</a>
</li> </li>
<?php <?php
if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) { if (isset($GLOBALS['visiteur_session']['statut']) AND $GLOBALS['visiteur_session']['statut']=="6forum") {
?>
<li class="nav-item [(#SI_PAGE{forum_discussion}|oui) active]">
<a class="nav-link" href="[(#URL_PAGE{forum_discussion})]">Forum</a>
</li>
<?php
}
if (isset($GLOBALS['visiteur_session']['statut']) AND in_array($GLOBALS['visiteur_session']['statut'],['0minirezo','1comite'])) {
?> ?>
<li class="nav-item dropdown [(#SI_PAGE{espace_membre}|oui) active]"> <li class="nav-item dropdown [(#SI_PAGE{espace_membre}|oui) active]">
<a class="nav-link dropdown-toggle" href="[(#URL_PAGE{espace_membre})]" id="membresDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Espace membre</a> <a class="nav-link dropdown-toggle" href="[(#URL_PAGE{espace_membre})]" id="membresDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Espace membre</a>
<div class="dropdown-menu" aria-labelledby="membresDropdown"> <div class="dropdown-menu" aria-labelledby="membresDropdown">
<a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{forum,oui})]">Forum</a> <a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{id_forum,#CONFIG{balint/id_rub_forum}})]">Forum</a>
<BOUCLE_menu_prive(MOTS){id_groupe=#CONFIG{balint/id_mots_espace_membre}}{par id_mot}{tout}> <BOUCLE_menu_prive(MOTS){id_groupe=#CONFIG{balint/id_mots_espace_membre}}{par id_mot}{tout}>
<a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{id_mot,#ID_MOT})]">#TITRE</a> <a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{id_mot,#ID_MOT})]">#TITRE</a>
</BOUCLE_menu_prive> </BOUCLE_menu_prive>
<a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{id_forum,#CONFIG{balint/id_rub_forum_prive}})]">Échanges privés</a>
</div> </div>
</li> </li>
<?php } ?> <?php } ?>

View file

@ -1,20 +1,20 @@
<B_sujets> <B_sujets>
#ANCRE_PAGINATION #ANCRE_PAGINATION
<BOUCLE_sujets(ARTICLES){id_secteur=#CONFIG{balint/id_rub_forum}}{!par date}{pagination 10}> <BOUCLE_sujets(ARTICLES){id_secteur=#ENV{id_forum}}{!par date}{pagination 10}>
<div class="sujet-forum row"> <div class="sujet-forum row">
<div class="col-1"> <div class="col-3 col-xl-1">
<BOUCLE_auteur(AUTEURS){id_article}{0,1}> <BOUCLE_auteur(AUTEURS){id_article}{0,1}>
<INCLURE{fond=inclure/avatar_auteur,env,id_auteur=#ID_AUTEUR,taille=mini}> <INCLURE{fond=inclure/avatar_auteur,env,id_auteur=#ID_AUTEUR,taille=mini}>
</BOUCLE_auteur> </BOUCLE_auteur>
</div> </div>
<div class="col-11"> <div class="col-9 col-xl-11">
<a class="titre-sujet ajax nocache" href="[(#URL_PAGE{espace_membre}|parametre_url{id_article,#ID_ARTICLE}|parametre_url{forum,oui}|ancre_url{sujet-forum})]">#TITRE</a> <a class="titre-sujet ajax nocache" href="[(#URL_PAGE{#ENV{url}}|parametre_url{id_article,#ID_ARTICLE}|parametre_url{id_forum,#ENV{id_forum}}|ancre_url{sujet-forum})]">#TITRE</a>
[<div class="resume-sujet">(#TEXTE|couper{150, '...'})</div>] [<div class="resume-sujet">(#TEXTE|couper{150, '...'})</div>]
<div class="infos-sujet mt-2">Démarré par #LESAUTEURS [(#DATE|date_relative)]</div> <div class="infos-sujet mt-2">Démarré par #LESAUTEURS [(#DATE|date_relative)]</div>
<BOUCLE_reponse(FORUMS){id_article}{! par date}{0,1}> <BOUCLE_reponse(FORUMS){id_article}{! par date}{0,1}>
<div class="infos-sujet font-italic">[(#TOTAL_BOUCLE|singulier_ou_pluriel{balint:1_reponse, balint:n_reponses})] | Dernier message de #AUTEUR [(#DATE_HEURE|date_relative)]</div> <div class="infos-sujet font-italic">[(#TOTAL_BOUCLE|singulier_ou_pluriel{balint:1_reponse, balint:n_reponses})] | Dernier message de #AUTEUR [(#DATE_HEURE|date_relative)]</div>
</BOUCLE_reponse> </BOUCLE_reponse>
<a class="d-block mt-2 ajax nocache" href="[(#URL_PAGE{espace_membre,id_article=#ID_ARTICLE}|parametre_url{forum,oui}|ancre_url{sujet-forum})]"><i class="fas fa-edit"></i> Participer à la discussion</a> <a class="d-block mt-2 ajax nocache" href="[(#URL_PAGE{#ENV{url}}|parametre_url{id_article,#ID_ARTICLE}|parametre_url{id_forum,#ENV{id_forum}}|ancre_url{sujet-forum})]"><i class="fas fa-edit"></i> Participer à la discussion</a>
</div> </div>
</div> </div>

View file

@ -12,6 +12,6 @@
<:form_forum_bonjour{nom=#ENV{nom}}:> <:form_forum_bonjour{nom=#ENV{nom}}:>
Vous êtes enregistré sur le site #URL_SITE_SPIP. Vous êtes enregistré sur le site #URL_SITE_SPIP.
Vous pouvez vous y connecter avec votre mot de passe, ou en demandant à redéfinir votre mot de passe. Vous pouvez vous y connecter avec votre mot de passe, ou en demandant à redéfinir votre mot de passe sur la page de connexion.
#FILTRE{supprimer_tags|filtrer_entites|trim} #FILTRE{supprimer_tags|filtrer_entites|trim}