Compare commits

...
Sign in to create a new pull request.

19 commits
master ... AIPB

Author SHA1 Message Date
cy_altern
53849dd670 Feat : ajustements menu Espace membres + ordre d'affichage 2025-05-13 16:34:56 +02:00
cy_altern
48f883148e Chore : compat 4.* 2024-09-22 01:02:19 +02:00
cy_altern
d159c678cf Feat : réactivation des boutons Admin SPIP. Ajout du tri par date inverse si pas de tang pour Actualités, Agenda et Séminaires 2024-03-26 16:51:57 +01:00
cy_altern
cd702576ed Fix : dans la page des brouillons les liens sur les blocs articles doivent ouvrir l'article en édition 2024-03-24 23:36:20 +01:00
cy_altern
f930dad01d Fix : passage des fichiers de polices Cabin en majuscules 2024-03-24 19:09:54 +01:00
cy_altern
6515fec0d1 Fix : passage des fichiers de polices Cabin en majuscules 2024-03-24 19:08:24 +01:00
cy_altern
c45827e51a Fix : accorder l'unité de poids de Bigform (Ko) avec celle configurée dans Bigup (Mo) 2024-03-24 18:58:03 +01:00
cy_altern
826c97f418 Fix : remplacement des limites de taille de fichiers en dur dans le traiter du bigform de la page d'édition des articles et remplacement par la récup des options configurées dans bigup. Actualisation du fichier PHP du CVT des inscriptions pour compatibilité SPIP 4.2 (TODO : passer sur le plugin mot_de_pass_des_linscription + un pipline Gamumail pour l'envoi de la notif) 2024-03-24 18:36:05 +01:00
cy_altern
3e7879fc8c Fix : correction de tous les appels à count() sur une variable non définie pour compatibilité PHP 8. Passage en SPIP 4.2. TODO : passer les scss de Bootstrap 4.0 (LESS) à SCSSPHP 2024-03-23 11:52:16 +01:00
4431d1da0d correction : les photos ne marchaient plus pour les articles !! 2021-01-01 14:50:17 +01:00
5631406dc7 correction de l'affichage des vignettes, en lien avec commit précédent 2020-12-31 00:22:36 +01:00
edd1a327c5 Chaque groupe a désormais sa propre image. On peut chosir l'image de bannière de la ville parmi les images uploadées dans un groupe. 2020-12-31 00:11:52 +01:00
6259d76399 corrections du parcours de connexion, en lien avec le commit précédent 2020-12-20 16:42:48 +01:00
2c9d15d959 correction du texte en lien avec commit précédent 2020-12-20 15:46:39 +01:00
eb1ce93610 correction CSS, avec le commit précédent 2020-12-20 15:24:19 +01:00
e2a09959ab corrections du parcours d'inscription / login 2020-12-20 15:18:51 +01:00
ac4f408415 on range les rubriques du menu dans l'ordre choisi 2020-12-11 18:56:44 +01:00
360207c285 on retire la ligne de connexion sur le formulaire_forum (car on est forcément connecté si on arrive là, et que cela perturbe les utilisateurs) 2020-12-11 18:56:15 +01:00
4c22337ec4 On va mettre une balise h1 sur la page principale, tant qu'à faire... et enlever le mode debug... 2020-12-11 18:55:20 +01:00
38 changed files with 595 additions and 229 deletions

View file

@ -0,0 +1,53 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
// mettre une photo en banniere (credit = une)
function action_choisir_banniere_dist(){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
$Targs = explode('-', $arg);
$id_document = intval($Targs[0]);
$id_article = intval($Targs[1]);
if (!$id_document OR !$id_article)
return false;
// il faut être auteur pour mettre à la Une
include_spip('inc/autoriser');
if (! autoriser("creer","article")) {
return false;
}
// On récupère tous les id_article de la même ville
$ville = sql_getfetsel('surtitre','spip_articles','id_article='.$id_article);
$where0 = array(
"surtitre='$ville'",
'id_secteur='. lire_config('balint/id_rub_groupes')
);
$groupes = sql_allfetsel('id_article','spip_articles',$where0);
$Tid_groupes = array_column($groupes,'id_article');
foreach($Tid_groupes as $id_groupe){
// récupérer les docs attachés à l'article
$where = array(
'id_objet='.$id_groupe,
'objet="article"',
'extension IN ("jpg","png","gif")',
);
$res = sql_allfetsel('spip_documents_liens.id_document', array('spip_documents_liens','spip_documents'), $where);
$Tid_docs = array_column($res,'id_document');
// virer la bannière actuelle
sql_updateq('spip_documents', array('credits' => ''),'id_document IN ('.join(',',$Tid_docs).')');
}
// mettre en bannière la photo choisie
sql_updateq('spip_documents', array('credits' => 'une'),'id_document = '.$id_document);
// Cache
include_spip('inc/invalideur');
suivre_invalideur("id='id_article/$id_article'");
}

View file

@ -118,10 +118,10 @@ function autoriser_article_lire($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))){
return true;
}
else{
else {
return in_array($qui['statut'], array('0minirezo'));
}
}
@ -148,11 +148,11 @@ function autoriser_sujet_creer($faire, $type, $id, $qui, $opt) {
}
function autoriser_sujet_editer($faire, $type, $id, $qui, $opt) {
// Seul les admins et l'auteur peuvent le supprimer
if(in_array($qui['id_auteur'],auteurs_objet('article',$id))){
// Seul les admins et l'auteur peuvent le supprimer
if (in_array($qui['id_auteur'],auteurs_objet('article',$id))){
return true;
}
else{
else {
return in_array($qui['statut'],array('0minirezo'));
}
}
@ -160,9 +160,9 @@ function autoriser_sujet_editer($faire, $type, $id, $qui, $opt) {
function autoriser_forum_voir($faire, $type, $id, $qui, $opt) {
$id_auteur = $qui['id_auteur'];
// Il faut être au moins membre
if ($qui['statut']=='1comite'){
if ($qui['statut'] == '1comite'){
// si le forum est privé, il faut être membre du bureau
if ($id==lire_config('balint/id_rub_forum_prive')){
if ($id == lire_config('balint/id_rub_forum_prive')){
if (sql_getfetsel('bureau','spip_auteurs',"id_auteur=$id_auteur")=='on'){
return true;
}
@ -178,4 +178,6 @@ function autoriser_forum_voir($faire, $type, $id, $qui, $opt) {
if ($qui['statut']=='0minirezo'){
return true;
}
// si aucun des cas précédents (pas loggué par ex)
return false;
}

View file

@ -14,7 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
function debug_spip(){
/*function debug_spip(){
define('_DEBUG_SLOW_QUERIES', true);
define('_BOUCLE_PROFILER', 5000);
define('_LOG_FILTRE_GRAVITE', 8);
@ -32,7 +32,7 @@ function debug_spip(){
define('_NO_CACHE', -1);
define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
}
}*/
//debug_spip();
if (!isset($GLOBALS['z_blocs']))
@ -48,7 +48,7 @@ if (!isset($GLOBALS['z_blocs']))
// On retire les boutons "Espace privé" et "Recalculer" pour les admins
$GLOBALS['flag_preserver'] = true;
//$GLOBALS['flag_preserver'] = true;
// proteger le #FORMULAIRE_NOUS_CONTACTER
$GLOBALS['formulaires_no_spam'][] = 'nous_contacter';

View file

@ -2,7 +2,7 @@
#SET{mots,#ARRAY}
#SET{id_groupe, #INFO_ID_GROUPE{article,#ENV{id_article}}}
[(#REM On récupère : tous les mots / les mots de la rubrique médiathèque / les mots de la rubrique espace membre )]
[(#REM) On récupère : tous les mots / les mots de la rubrique médiathèque / les mots de la rubrique espace membre ]
<BOUCLE_mots(MOTS){id_article=#ENV{id_article}}>
[(#SET{mots,#GET{mots}|push{#TITRE}})]
[(#TYPE|=={Médiathèque}|oui)

View file

@ -1,17 +1,18 @@
[(#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']) {
?>
?>
<div class="cadre-blanc">
<h1 class="mb-4">Espace membre</h1>
<?php
if (isset($GLOBALS['visiteur_session']['statut']) AND in_array($GLOBALS['visiteur_session']['statut'],array("0minirezo","1comite"))) {
?>
<div class="mb-3">
Vous êtes connecté·e en tant que <a class="boutons" href="[(#URL_PAGE{modifier_auteur})]"><?php echo $GLOBALS['visiteur_session']['nom'] ?></a>.<a href="[(#URL_LOGOUT{#SELF})]"><i class="fa fa-sign-out ml-3" aria-hidden="true"></i> Déconnexion</a>
</div>
<INCLURE{fond=inclure/espace_membre_contenu,env,ajax}>
<?php
}
@ -26,10 +27,10 @@
?>
</div>
<?php
<?php
}
else {
?>
?>
<div class="cadre-blanc">
<h1 class="mb-4">Espace membre</h1>
Cet espace est réservé aux membres de l'association.</br>
@ -45,10 +46,8 @@
[(#FORMULAIRE_INSCRIPTION{'','',#SELF})]
</div>
</div>
<?php
<?php
}
?>
?>
</section>

View file

@ -1,6 +0,0 @@
<div>
<h1>Création d'un compte étudiant</h1>
[(#FORMULAIRE_INSCRIPTION)]
</div>

View file

@ -4,7 +4,7 @@
<B_modifier_auteur>
<div class="row">
<BOUCLE_modifier_auteur(AUTEURS){id_auteur = #SESSION{id_auteur}}{tous}>
<BOUCLE_modifier_auteur(AUTEURS){id_auteur=#SESSION{id_auteur}}{tous}>
<div class="m-auto">
#FORMULAIRE_EDITER_AUTEUR{#ID_AUTEUR,#URL_PAGE{auteur}|parametre_url{id_auteur,#ENV{id_auteur}}}
</div>

View file

@ -1,6 +1,6 @@
<section id="presentation-accueil">
<div class="container">
<h1 class="text-center">[(#CHEMIN{images/Titre-AIPB.png}|inserer_attribut{alt,#NOM_SITE_SPIP}|image_reduire{900,120})]</h1>
<h1 class="text-center">[(#CHEMIN{images/Titre-AIPB.png}|image_reduire{900,120}|inserer_attribut{alt,AIPB - #NOM_SITE_SPIP})]</h1>
<div class="row">
<BOUCLE_presentation(ARTICLES){grigri=presentation_accueil}{0,1}{! par date}>
<div id="images-presentation" class="col-lg">
@ -35,7 +35,7 @@
<aside class="col-lg-3">
<div id="agenda" class="mt-4 mt-lg-0">
<h2 class="h3">Agenda</h2>
<BOUCLE_agenda(ARTICLES){titre_mot=agenda}{par rang}>
<BOUCLE_agenda(ARTICLES){titre_mot=agenda}{par rang}{!par date}>
<div class="agenda-evenement">
<a href="#URL_ARTICLE">
<h3 class="h5">#TITRE</h3>

View file

@ -810,14 +810,14 @@ body{
}
.btn_poubelle{
color: red;
:hover{
color: #ee9e9e;
&:hover{
color: #b30000;
}
}
.btn_une{
color: black;
:hover{
color: grey;
&:hover{
color: black;
}
}
.boutons_actions {
@ -827,18 +827,19 @@ body{
justify-content: space-around;
align-items: center;
background-color: $gris-clair;
i.green {
padding: .6rem;
color: rgb(28, 158, 28);
i {
padding:0 0.6rem;
}
a {
margin: 0;
}
.premier-plan{
color: rgb(28, 158, 28);
display: flex;
flex-direction: row;
align-items: center;
padding: 0.2rem;
font-size: 1rem;
}
}
}

View file

@ -12799,16 +12799,16 @@ body {
color: red;
}
.docs-article .btn_poubelle :hover {
color: #ee9e9e;
.docs-article .btn_poubelle:hover {
color: #b30000;
}
.docs-article .btn_une {
color: black;
color: grey;
}
.docs-article .btn_une :hover {
color: grey;
.docs-article .btn_une:hover {
color: black;
}
.docs-article .boutons_actions {
@ -12824,9 +12824,8 @@ body {
background-color: #f2f2f2;
}
.docs-article .boutons_actions i.green {
padding: .6rem;
color: #1c9e1c;
.docs-article .boutons_actions i {
padding: 0 0.6rem;
}
.docs-article .boutons_actions a {
@ -12834,6 +12833,7 @@ body {
}
.docs-article .boutons_actions .premier-plan {
color: #1c9e1c;
display: -webkit-box;
display: flex;
-webkit-box-orient: horizontal;
@ -12842,6 +12842,7 @@ body {
-webkit-box-align: center;
align-items: center;
padding: 0.2rem;
font-size: 1rem;
}
.titre_img {

View file

@ -164,6 +164,7 @@ function formulaires_editer_auteur_verifier_dist(
$oblis[] = 'new_login';
}
// mais il reste obligatoire si on a rien trouve
$erreurs = [];
$erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis);
if (isset($erreurs['new_login'])) {
$erreurs['login'] = $erreurs['new_login'];

View file

@ -176,8 +176,7 @@ function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
);
$ids_auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', $where);
$ids_auteurs = array_column($ids_auteurs, 'id_auteur');
$Tauteurs = _request('Tauteurs');
$Tauteurs = _request('Tauteurs') ?? [];
if (count($Tauteurs)) {
$associer = array_diff($Tauteurs, $ids_auteurs);
$dissocier = array_diff($ids_auteurs, $Tauteurs);
@ -204,7 +203,7 @@ function formulaires_editer_groupe_traiter_dist($id_article=0, $redirect=''){
$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);
$coches = _request('id_groupe_'.$id_groupe) ?? [];
if (count($coches)) {
$associer = array_diff($coches, $ids_mots);
$dissocier = array_diff($ids_mots, $coches);

View file

@ -161,6 +161,7 @@ function formulaires_editer_membre_verifier_dist(
$oblis[] = 'new_login';
}
// mais il reste obligatoire si on a rien trouve
$erreurs = [];
$erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis);
if (isset($erreurs['new_login'])) {
$erreurs['login'] = $erreurs['new_login'];

View file

@ -95,7 +95,7 @@
<fieldset class="upload_vignette">
<legend><i class="fas fa-paperclip"></i> Images et fichiers</legend>
<label for=""><small>largeur conseillée: entre 1024 et 2048 pixels</small></label>
<div class="ajax">
<div class="ajax les_photos">
<INCLURE{fond=inclure/bigform,env}>
</div>
<INCLURE{fond=inclure/editer_docs_article,env,id_article=#ENV{id_article},ajax=les_photos,type=article}>
@ -119,7 +119,6 @@
]
</div>
<div class="col-lg-3 formulaire-col-droite">
<BOUCLE_doc(DOCUMENTS){id_article}{extension==jpg|png|gif}{statut in prop,prepa,publie}{credits=une}>
<div class="photo-premier-plan">
@ -135,12 +134,12 @@
</select>
</fieldset>
[(#SESSION{statut}|=={0minirezo}|oui)
[(#SESSION{statut}|=={0minirezo}|oui)
[(#VAL{}|setenv{id_auteur})]
]
[(#SESSION{statut}|=={0minirezo}|non)
]
[(#SESSION{statut}|=={0minirezo}|non)
[(#SESSION{id_auteur}|setenv{id_auteur})]
]
]
<fieldset>
<legend><i class="fas fa-globe"></i> Groupe</legend>
@ -194,8 +193,6 @@
</div>
</form>
</div>
<script src="[(#CHEMIN{js/tag_editor.min.js}|timestamp)]" type="text/javascript"></script>

View file

@ -60,7 +60,7 @@ function formulaires_editer_post_charger_dist($id_article=0, $redirect=''){
'L.objet="article"',
'L.id_gis=G.id_gis'
);
$res = sql_fetsel('G.lat, G.lon', $from, $where);
$res = sql_fetsel('G.lat, G.lon', $from, $where) ?? [];
if (count($res)) {
$valeurs['lat'] = $res['lat'];
$valeurs['lon'] = $res['lon'];
@ -102,7 +102,10 @@ function formulaires_editer_post_verifier_dist($id_article=0, $redirect=''){
}
$bigform = charger_fonction('bigform_verifier','inc');
$options = ['mime' => 'tout_mime','taille_max'=>'5000','largeur_max'=>'2048','hauteur_max'=>'2048'];
$taille_max = intval(lire_config('bigup/max_file_size')) * 1000;
$largeur_max = (defined('_IMG_MAX_WIDTH') ? _IMG_MAX_WIDTH : 2048);
$hauteur_max = (defined('_IMG_MAX_HEIGHT') ? _IMG_MAX_HEIGHT : 2048);
$options = ['mime' => 'tout_mime','taille_max'=> $taille_max, 'largeur_max'=> $largeur_max, 'hauteur_max'=> $hauteur_max];
$bigform($options,$erreurs);
return $erreurs;
@ -155,7 +158,7 @@ function formulaires_editer_post_traiter_dist($id_article = 0, $redirect = ''){
);
$ids_auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', $where);
$ids_auteurs = array_column($ids_auteurs, 'id_auteur');
$Tauteurs = _request('Tauteurs');
$Tauteurs = _request('Tauteurs') ?? [];
if (count($Tauteurs)) {
$associer = array_diff($Tauteurs, $ids_auteurs);
$dissocier = array_diff($ids_auteurs, $Tauteurs);
@ -188,8 +191,7 @@ function formulaires_editer_post_traiter_dist($id_article = 0, $redirect = ''){
}
}
$coches = _request('id_emplacements');
$coches = _request('id_emplacements') ?? [];
if (count($coches)){
$associer = array_diff($coches, $T_ids_mots);
$dissocier = array_diff($T_ids_mots, $coches);
@ -265,7 +267,8 @@ function formulaires_editer_post_traiter_dist($id_article = 0, $redirect = ''){
$retour = array();
$retour['message_ok'] = "L'article est bien enregistré.";
if ($new==0){
$redirect .= '&id_article=' . $id_article;
//$redirect .= '&id_article=' . $id_article;
$redirect = parametre_url($redirect, 'id_article', $id_article);
}
$retour['redirect'] = $redirect;

View file

@ -107,8 +107,7 @@ function formulaires_editer_sujet_traiter_dist($id_article = 0, $id_rubrique, $r
);
$ids_auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', $where);
$ids_auteurs = array_column($ids_auteurs, 'id_auteur');
$Tauteurs = _request('Tauteurs');
if (count($Tauteurs)) {
$Tauteurs = _request('Tauteurs') ?? [];
$associer = array_diff($Tauteurs, $ids_auteurs);
$dissocier = array_diff($ids_auteurs, $Tauteurs);

125
formulaires/forum.html Normal file
View file

@ -0,0 +1,125 @@
<div class="formulaire_spip formulaire_forum ajax" id="formulaire_forum">
[<p class="reponse_formulaire reponse_formulaire_ok success">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur error">(#ENV*{message_erreur})</p>]
[(#ENV{login_forum_abo})
<INCLURE{fond=formulaires/inc-login_forum_abo, env} />
]
[(#ENV{editable})
<form action="#ENV{action}#formulaire_forum" method="post" enctype='multipart/form-data'><div>
#ACTION_FORMULAIRE
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[<fieldset class="moderation_info info">
<legend><:forum:bouton_radio_modere_priori:></legend>
<p class="explication">(#ENV{modere})<:forum:forum_info_modere:></p>
</fieldset>]
<fieldset>
<legend><:forum:forum_message:></legend>[
(#CONFIG{forums_titre}|!={non}|non)
<input type="hidden" name="titre" id="titre"[ value="(#ENV{titre})"] />
]<div class="editer-groupe">
[<div class='editer saisie_mots_forum'>(#INCLURE{fond=formulaires/inc-forum_bloc_choix_mots, table=#ENV*{table}, ajouter_mot})</div>]
[(#CONFIG{forums_titre}|!={non}|oui)
<div class='editer saisie_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]'>
<label for="titre"><:forum:forum_titre:> <:info_obligatoire_02:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>]
<input type="text" class="text" name="titre" id="titre"[ value="(#ENV{titre})"] size="60" />
</div>
]
[(#CONFIG{forums_texte}|!={non}|?{
<div class='editer saisie_texte obligatoire[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]'>
<label for='texte'><:forum:forum_texte|typo:> <:info_obligatoire_02:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte})</span>]
[(#ENV**{config}|table_valeur{afficher_barre}|?{<p class='explication'><:info_creation_paragraphe:></p>,<p class="explication forum_saisie_texte_info"><:forum:forum_saisie_texte_info:></p>})]
<textarea name="texte" id="texte" rows="10" cols="60"[(#CONFIG{forums_afficher_barre}|=={non}|oui) class="no_barre"]>[(#ENV{texte})]</textarea>
</div>
})]
</div></fieldset>
[(#CONFIG{forums_urlref}|!={non}|?{
<div class="editer-groupe"><div class='fieldset'>
<fieldset>
<legend><:forum:forum_lien_hyper:></legend>
<p class='explication'><:forum:forum_page_url:></p>
<div class="editer-groupe">
<div class='editer saisie_nom_site[ (#ENV**{erreurs}|table_valeur{nom_site}|oui)erreur]'>
<label for="nom_site"><:forum:forum_titre:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{nom_site})</span>]
<input type="text" class="text" name="nom_site" id="nom_site" size="40" value="[(#ENV{nom_site})]" />
</div>
<div class='editer saisie_url_site[ (#ENV**{erreurs}|table_valeur{url_site}|oui)erreur]'>
<label for="url_site"><:forum:forum_lien_hyper:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{url_site})</span>]
<input type="text" class="text url" name="url_site" id="url_site" style="text-align: left;" dir="ltr" size="40" value="[(#ENV{url_site})]" autocapitalize="off" autocorrect="off" />
</div>
</div>
</fieldset>
</div>
</div>
})]
[
<fieldset>
<legend><:medias:bouton_ajouter_document:></legend>
<div class="editer-groupe">
<div class='editer saisie_document_forum[ (#ENV**{erreurs}|table_valeur{document_forum}|oui)erreur]'>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{document_forum})</span>]
<input type="hidden" name="cle_ajouter_document" value="(#ENV{cle_ajouter_document})" />
[<div id="ajouter_document_up">(#ENV{ajouter_document})
<label for="supprimer_document_ajoute"><input type='checkbox' name='supprimer_document_ajoute' id='supprimer_document_ajoute' />
<:lien_supprimer:></label>
</div>]
<div>
[<label for="ajouter_document"><:forum:extensions_autorisees:> (#ENV{formats_documents_forum}|is_array|?{#ENV{formats_documents_forum}|join{', '},#ENV{formats_documents_forum}})</label>]
<input class='file' type="file" name="ajouter_document" id="ajouter_document"[
accept="(#ENV{formats_documents_forum}|is_array|?{#ENV{formats_documents_forum}|join{', '},''})"] />
</div>
</div>
</div></fieldset>
]
[(#REM) Piege a robots spammeurs, dont on change le nom a chaque fois,
][<p style="display: none;">
<label for="(#ENV{cle_ajouter_document})"><:antispam_champ_vide:></label>
<input type="text" class="text" name="#ENV{cle_ajouter_document}" id="#ENV{cle_ajouter_document}" value="#ENV{#ENV{cle_ajouter_document}}" size="10" />
</p>]
[(#ENV{cle_ajouter_document}|non)
<p style="display: none;">
<label for="nobot_forum"><:antispam_champ_vide:></label>
<input type="text" class="text" name="nobot" id="nobot_forum" value="#ENV{nobot}" size="10" />
</p>
]
<p class="boutons"><input type="submit" class="btn submit" name="previsualiser_message" value="<:forum:forum_voir_avant:>" />[
(#ENV{forcer_previsu}|=={non}|et{#ENV*{erreurs}|table_valeur{previsu}|non}|oui)<input type="submit" class="btn submit" name="envoyer_message" value="<:forum:forum_envoyer:>" />]</p>
</div>
</form>
[(#REM)
Bloc de previsualisation du forum envoye
Si on valide la previsu, on n'envoie pas en ajax car, si le post reussit
il faudra certainement redessiner toute la page pour afficher le nouveau
forum
][<form action="#ENV{action}#formulaire_forum" method="post" class="noajax">
<div>
#ACTION_FORMULAIRE
<input type='hidden' name='titre' value="#ENV{titre}" />
<input type='hidden' name='texte' value="#ENV{texte}" />
<input type='hidden' name='url_site' value="#ENV{url_site}" />
<input type='hidden' name='nom_site' value="#ENV{nom_site}" />
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[(#INCLURE{fond=formulaires/inc-forum_ajouter_mot, ajouter_mot})]
(#ENV**{erreurs}|table_valeur{previsu})
</div>
</form>]
]
</div>

View file

@ -14,8 +14,33 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_inscription_charger_dist($mode = '', $id = 0, $redirect ='') {
global $visiteur_session;
/**
*
* #FORMULAIRE_INSCRIPTION
* #FORMULAIRE_INSCRIPTION{6forum}
* #FORMULAIRE_INSCRIPTION{1comite,#ARRAY{id,#ENV{id_rubrique}}}
*
* Pour rediriger l'utilisateur apres soumission du formulaire vers une page qui lui dit de verifier ses mails par exemple :
* #FORMULAIRE_INSCRIPTION{6forum,'',#URL_PAGE{verifiez-vos-mails}}
*
* Pour rediriger l'utilisateur apres Clic dans le lien du mail de confirmation, pour lui confirmer son inscription par exemple
* #FORMULAIRE_INSCRIPTION{6forum,#ARRAY{redirect,#URL_PAGE{confirmation-inscription}}}
*
* Tout ensemble
* #FORMULAIRE_INSCRIPTION{6forum,#ARRAY{redirect,#URL_PAGE{confirmation-inscription}}, #URL_PAGE{verifiez-vos-mails}}
*
* Syntaxe legacy :
* #FORMULAIRE_INSCRIPTION{1comite,#ENV{id_rubrique}}
*
*
* @param string $mode
* @param array $options
* @param string $retour
* @return array|false
*/
function formulaires_inscription_charger_dist($mode = '', $options = [], $retour = '') {
$id = ($options['id'] ?? 0);
// fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci
// pas de formulaire si le mode est interdit
@ -25,10 +50,11 @@ function formulaires_inscription_charger_dist($mode = '', $id = 0, $redirect =''
}
// pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
if (isset($visiteur_session['statut']) && ($visiteur_session['statut'] <= $mode)) {
if (isset($GLOBALS['visiteur_session']['statut']) and ($GLOBALS['visiteur_session']['statut'] <= $mode)) {
return false;
}
$valeurs = array('nom_inscription' => '', 'mail_inscription' => '', 'id' => $id, '_mode' => $mode);
$valeurs['password'] = '';
@ -37,14 +63,21 @@ function formulaires_inscription_charger_dist($mode = '', $id = 0, $redirect =''
return $valeurs;
}
// Si inscriptions pas autorisees, retourner une chaine d'avertissement
function formulaires_inscription_verifier_dist($mode = '', $id = 0, $redirect ='') {
$erreurs = array();
include_spip('inc/config');
set_request("_upgrade_auteur"); // securite
/**
* Si inscriptions pas autorisees, retourner une chaine d'avertissement
*
* @param string $mode
* @param array $options
* @param string $retour
* @return array
*/
function formulaires_inscription_verifier_dist($mode = '', $options = [], $retour = '') {
set_request('_upgrade_auteur'); // securite
include_spip('inc/filtres');
$erreurs = array();
$id = ($options['id'] ?? 0);
include_spip('inc/autoriser');
if (!autoriser('inscrireauteur', $mode, $id)
@ -54,12 +87,12 @@ function formulaires_inscription_verifier_dist($mode = '', $id = 0, $redirect ='
}
if (!$nom = _request('nom_inscription')) {
$erreurs['nom_inscription'] = _T("info_obligatoire");
$erreurs['nom_inscription'] = _T('info_obligatoire');
} elseif (!nom_acceptable(_request('nom_inscription'))) {
$erreurs['nom_inscription'] = _T("ecrire:info_nom_pas_conforme");
$erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme');
}
if (!$mail = strval(_request('mail_inscription'))) {
$erreurs['mail_inscription'] = _T("info_obligatoire");
$erreurs['mail_inscription'] = _T('info_obligatoire');
}
// compatibilite avec anciennes fonction surchargeables
@ -71,7 +104,7 @@ function formulaires_inscription_verifier_dist($mode = '', $id = 0, $redirect ='
} else {
$f = 'test_inscription_dist';
}
$declaration = $f($mode, $mail, $nom, $id);
$declaration = $f($mode, $mail, $nom, $options);
if (is_string($declaration)) {
$k = (strpos($declaration, 'mail') !== false) ?
'mail_inscription' : 'nom_inscription';
@ -79,23 +112,25 @@ function formulaires_inscription_verifier_dist($mode = '', $id = 0, $redirect ='
} else {
include_spip('base/abstract_sql');
if ($row = sql_fetsel("statut, id_auteur, login, email", "spip_auteurs",
"email=" . sql_quote($declaration['email']))
) {
if (($row['statut'] == '5poubelle') and !$declaration['pass']) // irrecuperable
{
if ($row = sql_fetsel(
'statut, id_auteur, login, email',
'spip_auteurs',
'email=' . sql_quote($declaration['email'])
)) {
if (($row['statut'] == '5poubelle') and empty($declaration['pass'])) {
// irrecuperable
$erreurs['message_erreur'] = _T('form_forum_access_refuse');
} else {
if (($row['statut'] != 'nouveau') and !$declaration['pass']) {
if (($row['statut'] != 'nouveau') and empty($declaration['pass'])) {
if (intval($row['statut']) > intval($mode)) {
set_request("_upgrade_auteur", $row['id_auteur']);
set_request('_upgrade_auteur', $row['id_auteur']);
} else {
// deja inscrit
$erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
}
}
}
spip_log($row['id_auteur'] . " veut se reinscrire");
spip_log($row['id_auteur'] . ' veut se resinscrire');
}
}
}
@ -121,20 +156,34 @@ function formulaires_inscription_verifier_dist($mode = '', $id = 0, $redirect ='
return $erreurs;
}
function formulaires_inscription_traiter_dist($mode = '', $id = 0, $redirect ='') {
/**
* Si inscriptions pas autorisees, retourner une chaine d'avertissement
*
* @param string $mode
* @param array $options
* @param string $retour
* @return array
*/
function formulaires_inscription_traiter_dist($mode = '', array $options = [], $retour = '') {
if ($retour) {
refuser_traiter_formulaire_ajax();
}
include_spip('inc/filtres');
include_spip('inc/autoriser');
$id = ($options['id'] ?? 0);
if (!autoriser('inscrireauteur', $mode, $id)) {
$desc = "rien a faire ici";
$desc = 'rien a faire ici';
} else {
if ($id_auteur = _request('_upgrade_auteur')) {
include_spip("action/editer_auteur");
autoriser_exception("modifier", "auteur", $id_auteur);
autoriser_exception("instituer", "auteur", $id_auteur);
include_spip('action/editer_auteur');
autoriser_exception('modifier', 'auteur', $id_auteur);
autoriser_exception('instituer', 'auteur', $id_auteur);
auteur_modifier($id_auteur, array('statut' => $mode));
autoriser_exception("modifier", "auteur", $id_auteur, false);
autoriser_exception("instituer", "auteur", $id_auteur, false);
autoriser_exception('modifier', 'auteur', $id_auteur, false);
autoriser_exception('instituer', 'auteur', $id_auteur, false);
return array('message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur);
}
@ -148,7 +197,7 @@ function formulaires_inscription_traiter_dist($mode = '', $id = 0, $redirect =''
$mail_destination = sql_getfetsel('email','spip_auteurs',"id_auteur=" . lire_config('balint/id_contact'));
$inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
$desc = $inscrire_auteur($mode, $mail_complet, $nom, array('id' => $id));
$desc = $inscrire_auteur($mode, $mail_complet, $nom, $options);
// AJOUT GAMUZA - BALINT
$msg = "Une personne vient de s'inscrire sur le site de l'AIPB :
@ -195,7 +244,16 @@ function formulaires_inscription_traiter_dist($mode = '', $id = 0, $redirect =''
return array('message_erreur' => $desc);
} // OK
else {
return array('redirect' => $redirect, 'message_ok' => _T('form_forum_identifiant_mail'), 'id_auteur' => $desc['id_auteur']);
$retours = array(
'message_ok' => _T('form_forum_identifiant_mail'),
'id_auteur' => $desc['id_auteur'],
);
// Si on demande à rediriger juste après validation du formulaire
if ($retour) {
$retours['redirect'] = $retour;
}
return $retours;
}
}

View file

@ -1,7 +1,7 @@
<B_a_la_une>
<div class="row liste-articles">
#ANCRE_PAGINATION
<BOUCLE_a_la_une(ARTICLES){titre_mot=Actualités}{par rang}{pagination 3}>
<BOUCLE_a_la_une(ARTICLES){titre_mot=Actualités}{par rang}{!par date}{pagination 3}>
<div class="col-lg-4 mt-4 mt-lg-0">
<INCLURE{fond=inclure/bloc_article, env, id_article}/>
</div>

View file

@ -1,12 +1,13 @@
[(#REM) affichage du bloc d'un article ]
<BOUCLE_art(ARTICLES){id_article = #ENV{id_article}}{statut?}>
<BOUCLE_art(ARTICLES){id_article=#ENV{id_article}}{statut?}>
#SET{url_page,#URL_ARTICLE} [(#STATUT|=={prepa}|oui) #SET{url_page, #URL_PAGE{editer_article, id_article=#ID_ARTICLE}}]
<div class="bloc-article">
<div class="bloc-contenu">
<a href="#URL_ARTICLE" title="Lire l'article">
<a href="#GET{url_page}" title="Lire l'article">
<INCLURE{fond=inclure/photo_article,env,id_article=#ENV{id_article},ajax=recharger_photo}>
</a>
<div class="bloc-textes">
<a href="#URL_ARTICLE" title="Lire l'article">
<a href="#GET{url_page}" title="Lire l'article">
<h4 class="#EDIT{titre}">#TITRE</h4>
</a>
<div class="infos-article">

View file

@ -2,7 +2,7 @@
<B_articles>
<div class="row liste-articles-encadres">
#ANCRE_PAGINATION
<BOUCLE_articles(ARTICLES){statut=prepa}{! par date}{pagination 6}>
<BOUCLE_articles(ARTICLES){statut=prepa}{! par date}{pagination 12}>
<div class="col-lg-4 mt-4 mt-lg-3">
<INCLURE{fond=inclure/bloc_article, env, statut, id_article,evenement=oui}/>
</div>

View file

@ -1,5 +1,5 @@
<div class="row liste-articles-encadres">
[(#REM) On affiche ensuite les groupes réguliers, par ville]
[(#REM) On affiche les groupes réguliers, par ville]
<BOUCLE_villes(ARTICLES){id_rubrique=#ENV{id_rubrique}}{surtitre!=""}{fusion surtitre}>
<div class="col-sm-6 col-lg-3 mt-4 mt-lg-0">
@ -9,7 +9,7 @@
</BOUCLE_villes>
</div>
[(#REM) on affiche un groupe ponctuel pour les pays n'ayant pas de groupe régulier]
[(#REM) on affiche ensuite un groupe ponctuel pour les pays n'ayant pas de groupe régulier]
<BOUCLE_ponctuel(ARTICLES){id_rubrique=#ENV{id_rubrique}}{surtitre=""}{0,1}>
<div class="bloc-groupe col mt-4">
[<h3 class="h4 #EDIT{titre}">(#TITRE|sinon{"Groupes ponctuels"})</h3>]

View file

@ -14,17 +14,40 @@
[<div class="titre_img #EDIT{titre}">(#TITRE|sinon{[(#SESSION{statut}|=={0minirezo}|oui)<i>Double cliquez pour ajouter un titre</i>]})</div>]
<div class="boutons_actions">
[(#INFO_ID_SECTEUR{article,#ENV{id_article}}|=={#CONFIG{balint/id_rub_groupes}}|oui)
<div class="premier-plan">
[(#TYPE_DOCUMENT|in_array{#LISTE{JPEG,PNG,GIF}}|oui)
[(#CREDITS*|=={une}|?{
<i class="fas fa-check green"></i> Au premier plan
<i class="fas fa-flag green"></i> Bannière pour [(#INFO_SURTITRE{article, #ID_ARTICLE})]
,
<a class="btn btn_une" href="[(#URL_ACTION_AUTEUR{promouvoir_photo, [(#ID_DOCUMENT)][-(#ENV{id_article})],#SELF})]" title="Mettre en première photo">
<i class="fas fa-check"></i> Mettre au premier plan
<a class="btn btn_une" href="[(#URL_ACTION_AUTEUR{choisir_banniere, [(#ID_DOCUMENT)][-(#ENV{id_article})],#SELF})]" title="Mettre en première photo">
<i class="fas fa-flag"></i> Bannière pour [(#INFO_SURTITRE{article, #ID_ARTICLE})]
</a>
})]
]
</div>
<div class="premier-plan">
[(#TYPE_DOCUMENT|in_array{#LISTE{JPEG,PNG,GIF}}|oui)
[(#COMPTEUR_BOUCLE|=={#TOTAL_BOUCLE}|oui)
<i class="fas fa-picture-o green"></i> Photo du groupe
]
]
</div>
]
[(#INFO_ID_SECTEUR{article,#ENV{id_article}}|=={#CONFIG{balint/id_rub_articles}}|oui)
<div class="premier-plan">
[(#TYPE_DOCUMENT|in_array{#LISTE{JPEG,PNG,GIF}}|oui)
[(#CREDITS*|=={une}|?{
<i class="fas fa-star green"></i> Au premier plan [(#INFO_SURTITRE{article, #ID_ARTICLE})]
,
<a class="btn btn_une" href="[(#URL_ACTION_AUTEUR{promouvoir_photo, [(#ID_DOCUMENT)][-(#ENV{id_article})],#SELF})]" title="Mettre en première photo">
<i class="fas fa-star"></i> Mettre au premier plan
</a>
})]
]
</div>
]
<a class="btn btn_poubelle" href="[(#URL_ACTION_AUTEUR{supprimer_photo, [(#ID_DOCUMENT)][-(#ENV{id_article})],#SELF})]" title="Supprimer la photo">
<i class="fas fa-trash red"></i> Supprimer
</a>

View file

@ -5,11 +5,9 @@
<div class="page-groupes">
<div class="w-100">
<INCLURE{fond=inclure/menu-espace_membre,env}>
[(#ENV{rub_forum}|non)
[(#REM) ENV{rub_forum}|non)
<INCLURE{fond=inclure/bouton_ordre,env,ordre=#ENV{ordre,ASC},objet=mot}>
]
[(#ENV{rub_forum}|oui)
@ -26,7 +24,7 @@
<B_articles>
<div class="row liste-articles">
#ANCRE_PAGINATION
<BOUCLE_articles(ARTICLES){id_mot=#ENV{id_mot}}{par rang}{inverse #GET{tri}}{par date}{inverse #GET{tri}}{pagination 8}{si #ENV{rub_forum}|non}>
<BOUCLE_articles(ARTICLES){id_mot=#ENV{id_mot}}{!par date}{pagination 8}{si #ENV{rub_forum}|non}>
<div class="col-lg-3 mt-4 mt-lg-3">
<INCLURE{fond=inclure/bloc_article, env, id_article}/>
</div>

View file

@ -1,9 +1,12 @@
[(#REM) On affiche tous les groupes appartenant à la même Ville]
[(#REM) On récupère l'id_rubrique s'il n'a pas été passé en paramètre]
[(#ENV{id_rubrique,#INFO_ID_RUBRIQUE{article,#ENV{id_article}}}|setenv{id_rubrique})]
[(#REM) On affiche tous les groupes appartenant à la même Ville]
#SET{ville,#INFO_SURTITRE{article,#ENV{id_article}}}
[(#REM) On récupère les id de tous les groupes de la ville pour les actualités et les images]
[(#SET{groupes,#ARRAY})]
<BOUCLE_groupes(ARTICLES){surtitre = #GET{ville}}{id_secteur=#CONFIG{balint/id_rub_groupes}}>
[(#SET{groupes,#GET{groupes}|push{#ID_ARTICLE}})]
</BOUCLE_groupes>
@ -11,7 +14,7 @@
<a href="[(#URL_PAGE{groupes,id_rubrique=#ENV{id_rubrique}})]" class="ajax"><i class="fas fa-arrow-circle-left"></i> Retour</a>
<div class="banniere-ville mt-4 mb-4">
<BOUCLE_banniere(DOCUMENTS){id_article IN #GET{groupes}}{extension==jpg|png|gif}{!par date}{0,1}>
<BOUCLE_banniere(DOCUMENTS){id_article IN #GET{groupes}}{extension==jpg|png|gif}{!par credits}{!par date}{0,1}>
[(#FICHIER|image_recadre{1200:300,-,focus}|image_reduire{1200,300})]
</BOUCLE_banniere>
[(#CHEMIN{img/ville.png}|image_recadre{1200:300,-,focus}|image_reduire{1200,300})]
@ -34,7 +37,15 @@
<a class="btn" href="#URL_PAGE{editer_groupe,id_article=#ID_ARTICLE }"><i class="fas fa-edit"></i> Mettre à jour le groupe</a>
]
<div class="row">
<div class="col-md-8">
<div class="col-md-4">
<BOUCLE_photo(DOCUMENTS){id_article}{extension==jpg|png|gif}{! par date}{0,1}>
<div class="mb-4 mb-lg-0">
[(#FICHIER|image_recadre{400:250,-,focus}|image_reduire{400,250})]
</div>
</BOUCLE_photo>
</div>
<div class="col-md-4">
[<div class="texte"><strong>Adresse :</strong> (#SOUSTITRE)</div>]
[<div class="texte"><strong>Fréquence :</strong> (#DESCRIPTIF|textebrut)</div>]
<div class="texte">#TEXTE</div>

View file

@ -13,7 +13,7 @@
<a class="nav-link ajax nocache" href="[(#URL_PAGE{espace_membre}|parametre_url{id_mot,#ID_MOT})]">#TITRE</a>
</li>
</BOUCLE_menu_membre>
[(#AUTORISER{voir,forum,#CONFIG{balint/id_rub_forum_prive}}|oui)
[(#REM) AUTORISER{voir,forum,#CONFIG{balint/id_rub_forum_prive}}|oui)
<li class="nav-item [(#ENV{rub_forum}|=={#CONFIG{balint/id_rub_forum_prive}}|oui) active]">
<a class="nav-link ajax nocache" href="[(#URL_PAGE{espace_membre}|parametre_url{rub_forum,#CONFIG{balint/id_rub_forum_prive}})]">Échanges entre membres du bureau</a>
</li>

View file

@ -15,7 +15,7 @@
<li class="nav-item dropdown [(#SI_PAGE{seminaires}|oui) active]">
<a class="nav-link dropdown-toggle" href="[(#URL_PAGE{seminaires})]" id="seminairesDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Séminaires</a>
<div class="dropdown-menu" aria-labelledby="seminairesDropdown">
<BOUCLE_menu_seminaires(ARTICLES){titre_mot=seminaires}{par titre}>
<BOUCLE_menu_seminaires(ARTICLES){titre_mot=seminaires}{par rang}>
<a class="dropdown-item" href="[(#URL_ARTICLE)]">#TITRE</a>
</BOUCLE_menu_seminaires>
</div>
@ -56,7 +56,7 @@
<BOUCLE_menu_prive(MOTS){id_groupe=#CONFIG{balint/id_mots_espace_membre}}{par rang}{tout}>
<a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{id_mot,#ID_MOT})]">#TITRE</a>
</BOUCLE_menu_prive>
[(#AUTORISER{voir,forum,#CONFIG{balint/id_rub_forum_prive}}|oui)
[(#REM) AUTORISER{voir,forum,#CONFIG{balint/id_rub_forum_prive}}|oui)
<a class="dropdown-item" href="[(#URL_PAGE{espace_membre}|parametre_url{rub_forum,#CONFIG{balint/id_rub_forum_prive}})]">Échanges entre membres du bureau</a>
]
</div>

View file

@ -1,14 +1,29 @@
#CACHE{0}
[(#ENV{id_article}|=={0}|oui) [(#SESSION{id_auteur}|mult{-1}|setenv{id_article})] ]
[(#REM) On récupère les id de tous les groupes de la ville pour les actualités et les images]
#SET{ville,#INFO_SURTITRE{article,#ENV{id_article}}}
[(#SET{groupes,#ARRAY})]
<BOUCLE_groupes(ARTICLES){surtitre = #GET{ville}}{id_secteur=#CONFIG{balint/id_rub_groupes}}{si #ENV{groupe}|=={oui}}>
[(#SET{groupes,#GET{groupes}|push{#ID_ARTICLE}})]
</BOUCLE_groupes>
<div class="photo-article">
<BOUCLE_test(CONDITION){si #ENV{groupe}|!={oui}}>
<BOUCLE_doc(DOCUMENTS){id_article?}{extension==jpg|png|gif}{statut in prop,prepa,publie}{0,1}{!par credits}{!par id_document}>
[(#FICHIER|balise_img{#TITRE}|image_recadre{720:360,-,focus,transparent}|image_reduire{720,360})]
</BOUCLE_doc>
<div class="txtcenter placeholder">
[(#ENV{groupe}|=={oui}|?{
[(#CHEMIN{img/ville.png}|balise_img{#TITRE}|image_recadre{720:360,+,center,transparent}|image_reduire{720,360})],
[(#CHEMIN{img/journal.png}|balise_img{#TITRE}|image_recadre{720:360,+,center,transparent}|image_reduire{720,360})]
})]
</div>
<//B_doc>
</BOUCLE_test>
<BOUCLE_doc_groupe(DOCUMENTS){id_article IN #GET{groupes}}{extension==jpg|png|gif}{statut in prop,prepa,publie}{0,1}{!par date}{!par id_document}>
[(#FICHIER|balise_img{#TITRE}|image_recadre{720:360,-,focus,transparent}|image_reduire{720,360})]
</BOUCLE_doc_groupe>
<div class="txtcenter placeholder">
[(#CHEMIN{img/ville.png}|balise_img{#TITRE}|image_recadre{720:360,+,center,transparent}|image_reduire{720,360})]
</div>
<//B_doc_groupe>
<//B_test>
</div>

View file

@ -2,7 +2,7 @@
<B_articles>
<div class="row liste-articles-encadres">
#ANCRE_PAGINATION
<BOUCLE_articles(ARTICLES){titre_mot=seminaires}{par rang}{pagination 6}>
<BOUCLE_articles(ARTICLES){titre_mot=seminaires}{par rang}{!par date}{pagination 6}>
<div class="col-lg-4 mt-4 mt-lg-3">
<INCLURE{fond=inclure/bloc_article, env, id_article,evenement=oui}/>
</div>

View file

@ -7,7 +7,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array(
'form_forum_email_deja_enregistre' => 'Un compte existe déjà avec cette adresse email. Connectez-vous avec votre mot de passe habituel, ou bien réinitialisez-le en <a href="http://localhost/balint/spip.php?page=spip_pass">cliquant ici</a>.',
'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée. Veuillez réinitialiser votre mot de passe <a href="' . generer_url_public('spip_pass') . '" class="text-success"><b>en suivant ce lien</b></a>.</br>Avec nos excuses pour ce contretemps.',
'pass_recevoir_mail' => "Un lien de réinitialisation de votre mot de passe vous a été envoyé sur votre adresse email (si celle-ci est valide). Si vous ne le trouvez pas, pensez à vérifiez vos SPAMs."
);

View file

@ -1 +1 @@
<INCLURE{fond=structure,env,type-page=espace_membre,id_forum=#CONFIG{balint/id_rub_forum}} />
<INCLURE{fond=structure,env,type-page=espace_membre,rub_forum=#CONFIG{balint/id_rub_forum}} />

View file

@ -3,7 +3,7 @@
categorie="squelette"
version="1.0.0"
etat="stable"
compatibilite="[3.1.7;3.3.*]"
compatibilite="[4.0.0;4.*]"
logo="img/balint_64.png"
documentation=""
schema="1.0.7"

85
urls/propres.php Normal file
View file

@ -0,0 +1,85 @@
<?php
/**
* Gestion des URLs propres : surcharge (voir @notes pour le pourquoi et le comment)
*/
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
/**
* Retrouve le fond et les paramètres d'une URL propre
* ou produit l'URL propre d'un objet, en fonction des paramètres passés.
*
* @note
* À défaut de pipeline dont on pourrait se servir, on est obligé de surcharger
* la fonction urls_propres_dist pour gérer correctement les URLS des pages.
* Néammoins, une fois le cas des pages évacué, c'est toujours la fonction dist qui est utilisée.
*
* La fonction dist est prévue pour gérer les URLs des objets.
* Pour un objet donné, elle va chercher l'URL la plus récente dans `spip_urls`.
* Or toutes les URLs des pages seraient identifiées comme se rapportant au même objet, avec type='' et id_objet=0,
* et du coup seraient redirigées vers la même URL : celle la plus récente.
*
* On ne serait pas obligé de surcharger on utilisant type=`page` et id_objet=N pour les URLs des pages,
* mais le contexte retourné serait erroné : `id_page = N` au lieu de `page = X`
*
* Valeurs des paramètres quand il s'agit d'une page :
* $i = URL personnalisée
* $entite = ''
*
* @param integer | string
* URL si on veut retourner son fond et ses paramètres
* Numéro d'un objet si on veut retourner son URL propre
* @param string $entite
* Fond si on veut retourner le fond et les paramètres d'une URL
* Type d'un objet si on veut retourner son URL propre
* @param array | string $args
* @param string $ancre
* @return array
* Fond et paramètres d'une URL propre : [contexte],[type],[url_redirect],[fond]
* ou URL décodée de l'objet donné
*/
function urls_propres_decoder_url($i, $entite, $args = '', $ancre = '') {
include_spip('base/abstract_sql');
// 1) Gestion des pages (voir @note)
if (is_string($i) // c'est une URL et pas un id
and strlen($i)
and strpos($i, '/') === false // ce n'est pas une URL arborescente
and !$entite // ce n'est pas l'URL d'un objet
and $url = strtok($i, '?') // retirer les query strings
and $ligne = sql_fetsel('page, url', 'spip_urls', array('url = ' . sql_quote($url), 'page != \'\''))
) {
$fond = $page = $ligne['page'];
// récupérer le contexte
if (is_array($args)){
$contexte = $args;
} else {
$contexte = array();
}
$contexte['page'] = $page;
$retour = array(
$contexte,
$entite,
'',
$fond,
);
// 2) S'il ne s'agit pas d'une page, appel de la fonction dist
} else {
include_spip(_DIR_PLUGIN_URLS.'urls/propres');
$retour = urls_propres_decoder_url_dist($i, $entite, $args, $ancre);
}
return $retour;
}
/**
* include de tout le fichier urls/propres.php du plugin-dist url_etendues
* pour avoir toutes les fonctions que n'a pas la surcharge du plugin urls_pages
*
**/
include_spip('plugins-dist/urls_etendues/urls/propres');