mise à jour pour compat 4.2

master
jcvilleneuve 2 months ago
parent e38512ec63
commit 503ca9e67d

@ -10,27 +10,6 @@
[(#ENV{editable})
[(#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>]
<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})" />]
@ -52,7 +31,7 @@
<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>]
[(#REM) value vide : pas de titre imposé]
[(#REM) value vide : pas de titre imposé]
<input type="text" class="text" name="titre" id="titre" value="" size="60" />
</div>
]
@ -81,7 +60,7 @@
<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" />
<input type="text" class="text url" name="url_site" id="url_site" style="text-align: left;" dir="ltr" size="40" placeholder="https://" value="[(#ENV{url_site})]" autocapitalize="off" autocorrect="off" />
</div>
</div>
</fieldset>
@ -101,9 +80,9 @@
<: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>]
[<label for="ajouter_document"><:forum:extensions_autorisees:> (#ENV{formats_documents_forum}|is_array|?{#ENV{formats_documents_forum}|implode{', '},#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{', '},''})"] />
accept="(#ENV{formats_documents_forum}|is_array|?{#ENV{formats_documents_forum}|implode{', '},''})"] />
</div>
</div>
</div></fieldset>
@ -120,10 +99,30 @@
<input type="text" class="text" name="nobot" id="nobot_forum" value="#ENV{nobot}" size="10" />
</p>
]
<p class="boutons"><input type="submit" class="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="submit" name="envoyer_message" value="<:forum:forum_envoyer:>" />]</p>
<p class="boutons"><input type="submit" class="btn submit noscroll" 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>

@ -1,16 +1,16 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* SPIP, Système de publication pour l'internet *
* *
* Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* Copyright © avec tendresse depuis 2001 *
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) {
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -37,7 +37,7 @@ function formulaires_forum_identifier_dist(
$afficher_previsu,
$retour
) {
return array($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe);
return [$objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe];
}
@ -84,22 +84,22 @@ function formulaires_forum_charger_dist(
$primary = id_table_objet($objet);
// table a laquelle sont associes les mots :
if ($GLOBALS['meta']["mots_cles_forums"] != "oui") {
if ($GLOBALS['meta']['mots_cles_forums'] != 'oui') {
$table = '';
} else {
$table = table_objet($objet);
}
// exiger l'authentification des posteurs pour les forums sur abo
if ($accepter_forum == "abo") {
if (!isset($GLOBALS["visiteur_session"]['statut']) or !$GLOBALS["visiteur_session"]['statut']) {
return array(
if ($accepter_forum == 'abo') {
if (!isset($GLOBALS['visiteur_session']['statut']) or !$GLOBALS['visiteur_session']['statut']) {
return [
'action' => '', #ne sert pas dans ce cas, on la vide pour mutualiser le cache
'editable' => false,
'login_forum_abo' => ' ',
'inscription' => generer_url_public('identifiants', 'lang=' . $GLOBALS['spip_lang']),
'oubli' => generer_url_public('spip_pass', 'lang=' . $GLOBALS['spip_lang'], true),
);
];
}
}
@ -110,14 +110,14 @@ function formulaires_forum_charger_dist(
// Donc ne pas changer la valeur de ce tableau entre le calcul de
// la signature et la fabrication des Hidden
// Faire attention aussi a 0 != ''
$ids = array();
$ids = [];
$ids[$primary] = ($x = intval($id_objet)) ? $x : '';
$ids['id_objet'] = ($x = intval($id_objet)) ? $x : '';
$ids['objet'] = $objet;
$ids['id_forum'] = ($x = intval($id_forum)) ? $x : '';
// par défaut, on force la prévisualisation du message avant de le poster
if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']["forums_forcer_previsu"] == "non")) {
if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']['forums_forcer_previsu'] == 'non')) {
$forcer_previsu = 'non';
} else {
$forcer_previsu = 'oui';
@ -134,7 +134,7 @@ function formulaires_forum_charger_dist(
}
// pour les hidden
$script_hidden = "";
$script_hidden = '';
foreach ($ids as $id => $v) {
$script_hidden .= "<input type='hidden' name='$id' value='$v' />";
}
@ -152,29 +152,29 @@ function formulaires_forum_charger_dist(
// Valeurs par defaut du formulaire
// si le formulaire a ete sauvegarde, restituer les valeurs de session
$vals = array(
$vals = [
'titre' => $titre,
'texte' => '',
'nom_site' => '',
'url_site' => 'http://'
);
'url_site' => ''
];
return array_merge($vals, array(
return array_merge($vals, [
'modere' => (($accepter_forum != 'pri') ? '' : ' '),
'table' => $table,
'config' => array('afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre'] != 'non' ? ' ' : '')),
'config' => ['afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre'] != 'non' ? ' ' : '')],
'_hidden' => $script_hidden, # pour les variables hidden qui seront inserees dans le form et dans le form de previsu
'cle_ajouter_document' => $cle,
'formats_documents_forum' => trim($GLOBALS['meta']['formats_documents_forum']) == '*' ? _T('forum:extensions_autorisees_toutes') : forum_documents_acceptes(),
'ajouter_document' => isset($_FILES['ajouter_document']['name']) ? $_FILES['ajouter_document']['name'] : '',
'ajouter_document' => $_FILES['ajouter_document']['name'] ?? '',
'nobot' => ($cle ? _request($cle) : _request('nobot')),
'ajouter_groupe' => $ajouter_groupe,
'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : [$ajouter_mot]),
'forcer_previsu' => $forcer_previsu,
'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond
'_sign' => implode('_', $ids),
'_autosave_id' => $ids,
));
]);
}
@ -188,15 +188,16 @@ function formulaires_forum_charger_dist(
* Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment
* si $forcer_previsu = 'non')
*
* https://code.spip.net/@forum_fichier_tmp
*
* @param $arg
* @return int
*/
function forum_fichier_tmp($arg) {
# astuce : mt_rand pour autoriser les hits simultanes
while (($alea = time() + @mt_rand()) + intval($arg)
and @file_exists($f = _DIR_TMP . "forum_$alea.lck")) {
$f = null;
# astuce : random_int pour autoriser les hits simultanes
while (
($alea = time() + random_int(0, mt_getrandmax())) + intval($arg)
and @file_exists($f = _DIR_TMP . "forum_$alea.lck")
) {
};
spip_touch($f);
@ -204,7 +205,8 @@ function forum_fichier_tmp($arg) {
if ($dh = opendir(_DIR_TMP)) {
while (($file = @readdir($dh)) !== false) {
if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
if (
preg_match('/^forum_([0-9]+)\.lck$/', $file)
and (time() - @filemtime(_DIR_TMP . $file) > 4 * 3600)
) {
spip_unlink(_DIR_TMP . $file);
@ -240,20 +242,21 @@ function formulaires_forum_verifier_dist(
$forcer_previsu,
$retour
) {
$meta = null;
include_spip('inc/acces');
include_spip('inc/texte');
include_spip('inc/session');
include_spip('base/abstract_sql');
// par défaut, on force la prévisualisation du message avant de le poster
if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']["forums_forcer_previsu"] == "non")) {
if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']['forums_forcer_previsu'] == 'non')) {
$forcer_previsu = 'non';
} else {
$forcer_previsu = 'oui';
}
$erreurs = array();
$doc = array();
$erreurs = [];
$doc = [];
// desactiver id_rubrique si un id_article ou autre existe dans le contexte
// if ($id_article OR $id_breve OR $id_forum OR $id_syndic)
@ -262,10 +265,10 @@ function formulaires_forum_verifier_dist(
// stocker un eventuel document dans un espace temporaire
// portant la cle du formulaire ; et ses metadonnees avec
if (isset($_FILES['ajouter_document'])
if (
isset($_FILES['ajouter_document'])
and $_FILES['ajouter_document']['tmp_name']
) {
$acceptes = forum_documents_acceptes();
if (
// si on a poste un $_FILES mais que l'option n'est pas active : cas produit par les bots qui spamment automatiquement
@ -279,7 +282,7 @@ function formulaires_forum_verifier_dist(
unset($_FILES['ajouter_document']);
} else {
if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) {
session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));
session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(random_int(0, mt_getrandmax()))));
}
$tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
@ -287,10 +290,10 @@ function formulaires_forum_verifier_dist(
include_spip('inc/joindre_document');
include_spip('action/ajouter_documents');
list($extension, $doc['name']) = fixer_extension_document($doc);
[$extension, $doc['name']] = fixer_extension_document($doc);
if (!in_array($extension, $acceptes)) {
$erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes)));
$erreurs['document_forum'] = _T('public:formats_acceptes', ['formats' => join(', ', $acceptes)]);
} else {
include_spip('inc/getdocument');
if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) {
@ -312,7 +315,8 @@ function formulaires_forum_verifier_dist(
}
}
} // restaurer/supprimer le document eventuellement uploade au tour precedent
elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document'])
elseif (
isset($GLOBALS['visiteur_session']['tmp_forum_document'])
and $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']
and file_exists($tmp . '.bin')
) {
@ -326,30 +330,38 @@ function formulaires_forum_verifier_dist(
}
$min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10);
if (strlen($texte = _request('texte')) < $min_length
if (
strlen($texte = _request('texte')) < $min_length
and !$ajouter_mot and $GLOBALS['meta']['forums_texte'] == 'oui'
) {
$erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini',
array('min' => $min_length));
} elseif (defined('_FORUM_LONGUEUR_MAXI')
$erreurs['texte'] = _T(
$min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini',
['min' => $min_length]
);
} elseif (
defined('_FORUM_LONGUEUR_MAXI')
and _FORUM_LONGUEUR_MAXI > 0
and strlen($texte) > _FORUM_LONGUEUR_MAXI
) {
$erreurs['texte'] = _T('forum:forum_attention_trop_caracteres',
array(
$erreurs['texte'] = _T(
'forum:forum_attention_trop_caracteres',
[
'compte' => strlen($texte),
'max' => _FORUM_LONGUEUR_MAXI
));
]
);
}
if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) {
$erreurs['erreur_message'] = _T('forum:forum_message_trop_long');
} else {
// Ne pas autoriser d'envoi hacke si forum sur abonnement
if (controler_forum($objet, $id_objet) == 'abo'
if (
controler_forum($objet, $id_objet) == 'abo'
and !test_espace_prive()
) {
if (!isset($GLOBALS['visiteur_session'])
if (
!isset($GLOBALS['visiteur_session'])
or !isset($GLOBALS['visiteur_session']['statut'])
) {
$erreurs['erreur_message'] = _T('forum_non_inscrit');
@ -359,7 +371,8 @@ function formulaires_forum_verifier_dist(
}
}
if (strlen($titre = _request('titre')) < 3
if (
strlen($titre = _request('titre')) < 3
and $GLOBALS['meta']['forums_titre'] == 'oui'
) {
$erreurs['titre'] = _T('forum:forum_attention_trois_caracteres');
@ -367,9 +380,17 @@ function formulaires_forum_verifier_dist(
if (!count($erreurs) and !_request('confirmer_previsu_forum')) {
if (!_request('envoyer_message') or $forcer_previsu <> 'non') {
$previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'),
$previsu = inclure_previsu(
$texte,
$titre,
_request('url_site'),
_request('nom_site'),
_request('ajouter_mot'),
$doc,
$objet, $id_objet, $id_forum);
$objet,
$id_objet,
$id_forum
);
$erreurs['previsu'] = $previsu;
$erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique
}
@ -377,7 +398,8 @@ function formulaires_forum_verifier_dist(
// Si forum avec previsu sans bon hash de securite, echec
if (!count($erreurs)) {
if (!test_espace_prive()
if (
!test_espace_prive()
and $forcer_previsu <> 'non'
and forum_insert_noprevisu()
) {
@ -397,7 +419,7 @@ function formulaires_forum_verifier_dist(
function forum_documents_acceptes() {
$formats = trim($GLOBALS['meta']['formats_documents_forum']);
if (!$formats) {
return array();
return [];
}
if ($formats !== '*') {
$formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats));
@ -414,8 +436,6 @@ function forum_documents_acceptes() {
/**
* Preparer la previsu d'un message de forum
*
* https://code.spip.net/@inclure_previsu
*
* @param string $texte
* @param string $titre
* @param string $url_site
@ -448,41 +468,44 @@ function inclure_previsu(
// comme on voit c'est complique... y a peut-etre plus simple ?
// recuperer les filtres eventuels de 'mes_fonctions.php' sur les balises
include_spip('public/parametrer');
$tmptexte = "";
$evaltexte = isset($table_des_traitements['TEXTE']['forums'])
? $table_des_traitements['TEXTE']['forums']
: $table_des_traitements['TEXTE'][0];
$tmptexte = '';
$evaltexte = $table_des_traitements['TEXTE']['forums'] ?? $table_des_traitements['TEXTE'][0];
$evaltexte = '$tmptexte = ' . str_replace('%s', '$texte', $evaltexte) . ';';
// evaluer...
// [fixme]
// $connect et $Pile ne sont pas definis ici :/
// mais font souvent partie des variables appelees par les traitements
$connect = "";
$Pile = array(0 => array());
$connect = '';
$Pile = [0 => []];
eval($evaltexte);
// supprimer les <form> de la previsualisation
// (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
return preg_replace("@<(/?)form\b@ism",
return preg_replace(
"@<(/?)form\b@ism",
'<\1div',
inclure_balise_dynamique(array(
inclure_balise_dynamique(
[
'formulaires/inc-forum_previsu',
0,
array(
[
'titre' => safehtml(typo($titre)),
'texte' => $tmptexte,
'notes' => safehtml(calculer_notes()),
'url_site' => vider_url($url_site),
'nom_site' => safehtml(typo($nom_site)),
'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : [$ajouter_mot]),
'ajouter_document' => $doc,
#'erreur' => $erreur, // non definie ?
'bouton' => $bouton,
'objet' => $objet,
'id_objet' => $id_objet,
'id_forum' => $id_forum
)
), false));
]
],
false
)
);
}
@ -517,13 +540,14 @@ function formulaires_forum_traiter_dist(
// Antispam basique :
// si l'input invisible a ete renseigne, ca ne peut etre qu'un bot
if (strlen(_request(_request('cle_ajouter_document')))) {
if (strlen(_request(_request('cle_ajouter_document')) ?? '')) {
tracer_erreur_forum('champ interdit (nobot) rempli');
return array('message_erreur' => _T('forum:erreur_enregistrement_message'));
return ['message_erreur' => _T('forum:erreur_enregistrement_message')];
}
if (defined('_FORUM_AUTORISER_POST_ID_FORUM')
if (
defined('_FORUM_AUTORISER_POST_ID_FORUM')
and _FORUM_AUTORISER_POST_ID_FORUM
and _request('id_forum')
) {
@ -551,13 +575,13 @@ function formulaires_forum_traiter_dist(
} else {
$thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse);
spip_log('id_thread=' . $thread['id_thread'], 'forum');
$retour = generer_url_entite($thread['id_thread'], 'forum');
$retour = generer_objet_url($thread['id_thread'], 'forum');
}
}
$res = array('redirect' => $retour, 'id_forum' => $id_reponse);
$res = ['redirect' => $retour, 'id_forum' => $id_reponse];
} else {
$res = array('message_erreur' => _T('forum:erreur_enregistrement_message'));
$res = ['message_erreur' => _T('forum:erreur_enregistrement_message')];
}
return $res;

Loading…
Cancel
Save