You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
6.1 KiB
227 lines
6.1 KiB
<?php
|
|
|
|
|
|
|
|
/**
|
|
* Pluriels, singulier ou zéro...
|
|
*
|
|
* Les items sont à indiquer comme pour la fonction _T() sous la forme :
|
|
* "module:chaine"
|
|
*
|
|
* Cherchera chaine_zero, chaine_un, chaine_nb en fonction de $nb.
|
|
*
|
|
* @example
|
|
* ```
|
|
* [(#NB|forum_pluraliser{forum:sujets})]
|
|
* [(#NB|forum_pluraliser{#LISTE{forum:sujets_zero,forum:sujets_un,forum:sujets_nb}})]
|
|
* ```
|
|
*
|
|
* @param int $nb : le nombre
|
|
* @param string|array $chaine
|
|
* - string : radical de l'item de langue, sera complété par _zero, _un, _nb
|
|
* - array : couples {0 => module:chaine_zero, 1 => module:chaine_un, 2 => module:chaine_nb}
|
|
*
|
|
* @param array $vars : Les autres variables nécessaires aux chaines de langues (facultatif)
|
|
* @return string : la chaine de langue finale en utilisant la fonction _T()
|
|
*/
|
|
function forum_pluraliser($nb, $chaine, $vars = array()) {
|
|
$nb = intval($nb);
|
|
|
|
if (!is_array($vars)) {
|
|
$vars = array();
|
|
}
|
|
|
|
if (!is_array($chaine)) {
|
|
$chaine = array(
|
|
$chaine . '_zero',
|
|
$chaine . '_un',
|
|
$chaine . '_nb',
|
|
);
|
|
}
|
|
|
|
$vars['nb'] = $nb;
|
|
if ($nb > 1) {
|
|
return _T($chaine[2], $vars);
|
|
} elseif ($nb == 1) {
|
|
return _T($chaine[1], $vars);
|
|
} else {
|
|
return _T($chaine[0], $vars);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retourne la classe CSS de la catégorie (article)
|
|
*
|
|
* Prend le premier chiffre du numéro de titre
|
|
*
|
|
* @param int $id_article
|
|
* @return string classe css tel que 'c1'
|
|
*/
|
|
function forum_css_couleur($id_article) {
|
|
static $articles = null;
|
|
if (is_null($articles)) {
|
|
$articles = forum_titre_categorie('', true);
|
|
$articles = array_map(
|
|
function($i) {
|
|
return substr(intval(recuperer_numero($i)), 0, 1);
|
|
},
|
|
$articles
|
|
);
|
|
}
|
|
if (isset($articles[$id_article])) {
|
|
return 'c' . $articles[$id_article];
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Retourne le titre de la catégorie (article)
|
|
*
|
|
* @param int $id_article
|
|
* @param bool $getall : true pour retourner la liste id_article => titre
|
|
* @return string titre
|
|
*/
|
|
function forum_titre_categorie($id_article, $getall = false) {
|
|
static $articles = null;
|
|
if (is_null($articles)) {
|
|
$articles = sql_allfetsel('id_article, titre', 'spip_articles');
|
|
$articles = array_column($articles, 'titre', 'id_article');
|
|
}
|
|
if ($getall) {
|
|
return $articles;
|
|
}
|
|
if (isset($articles[$id_article])) {
|
|
return supprimer_numero(typo($articles[$id_article]));
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Retourne la classe CSS du groupe de mot
|
|
*
|
|
* @param int $id_groupe_mot
|
|
* @return string classe css tel que 'c1'
|
|
*/
|
|
function forum_css_couleur_groupe($id_groupe_mot) {
|
|
static $groupes = array(
|
|
3 => 1,
|
|
4 => 2,
|
|
5 => 3,
|
|
6 => 4,
|
|
7 => 0, // admin (résolu, cloturé)
|
|
);
|
|
if (isset($groupes[$id_groupe_mot])) {
|
|
return 'c' . $groupes[$id_groupe_mot];
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Compile le critère `{resolus}`
|
|
*
|
|
* Ce critère test si un message fils possède le mot clé résolu (1332)
|
|
*
|
|
* @example
|
|
* ```
|
|
* <BOUCLE_(FORUMS){resolus}> ...
|
|
* ```
|
|
*
|
|
* @param string $idb Identifiant de la boucle
|
|
* @param array $boucles AST du squelette
|
|
* @param Critere $crit Paramètres du critère dans cette boucle
|
|
* @return void
|
|
*/
|
|
function critere_FORUMS_resolus_dist($idb, &$boucles, $crit) {
|
|
$boucle = &$boucles[$idb];
|
|
|
|
$id_parent = isset($GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent']) ?
|
|
$GLOBALS['exceptions_des_tables'][$boucle->id_table]['id_parent'] :
|
|
'id_parent';
|
|
|
|
$id_table = $boucle->id_table;
|
|
$id_mot = 1332;
|
|
|
|
$boucle->from['resolus'] = 'spip_forum';
|
|
$boucle->join["resolus"] = array("'$id_table'", "'$id_parent'", "'id_forum'", "'resolus.statut='.sql_quote('publie')");
|
|
$boucle->from['mots_liens'] = 'spip_mots_liens';
|
|
$boucle->join["mots_liens"] = array("'resolus'", "'id_objet'", "'id_forum'", "'mots_liens.id_mot=$id_mot AND mots_liens.objet ='.sql_quote('forum')");
|
|
$boucle->select[] = "mots_liens.id_mot AS id_mot";
|
|
}
|
|
|
|
function forum_date_diff_jours($date1, $date2) {
|
|
$d1 = new DateTime($date1);
|
|
$d2 = new DateTime($date2);
|
|
$difference = $d1->diff($d2);
|
|
return $difference->days;
|
|
}
|
|
|
|
/**
|
|
* Échapper les balises HTML d’un contenu, sauf pour les balises `<code>`
|
|
* dont le contenu est déjà échappé.
|
|
*
|
|
* @param $texte
|
|
* @return mixed|string
|
|
*/
|
|
function echapper_tags_hors_code($texte) {
|
|
$regex = ',<code[^>]*>(.*)</code>,UimsS';
|
|
$echappements = [];
|
|
if (preg_match_all($regex, $texte, $codes, PREG_SET_ORDER)) {
|
|
foreach ($codes as $i => $code) {
|
|
$cle = '%%%' . $i . '%%%';
|
|
$texte = str_replace($code[0], $cle, $texte);
|
|
$echappements[$cle] = $code[0];
|
|
}
|
|
}
|
|
$texte = echapper_tags($texte);
|
|
if (count($echappements)) {
|
|
$texte = str_replace(array_keys($echappements), array_values($echappements), $texte);
|
|
}
|
|
return $texte;
|
|
}
|
|
|
|
/**
|
|
* Lors de l’édition d’un auteur, invalider le cache
|
|
*
|
|
* @param array $flux
|
|
* @return array
|
|
*/
|
|
function galactic_forum_post_edition($flux) {
|
|
if (
|
|
!empty($flux['args']['table'])
|
|
and !empty($flux['args']['action'])
|
|
and !empty($flux['args']['id_objet'])
|
|
and $flux['args']['table'] == 'spip_auteurs'
|
|
and $flux['args']['action'] == 'modifier'
|
|
) {
|
|
$id_auteur = $flux['args']['id_objet'];
|
|
include_spip('inc/invalideur');
|
|
suivre_invalideur("id='id_auteur/a$id_auteur'");
|
|
}
|
|
return $flux;
|
|
}
|
|
|
|
|
|
// moderer les messages depuis l'espace public
|
|
// ne supprime pas le message ni le fil mais les passe en 'off'
|
|
// on peut toujours les revalider dans l'espace prive
|
|
function invalider_forum($id_forum, $r = '') {
|
|
include_spip("inc/securiser_action");
|
|
list($id_auteur, $pass) = caracteriser_auteur();
|
|
$arg = "$id_forum";
|
|
$hash = _action_auteur("instituer_forum-$arg-off", $id_auteur, $pass, 'alea_ephemere');
|
|
$r = rawurlencode(_request('redirect'));
|
|
return generer_url_action('instituer_forum', "arg=$arg-off&hash=$hash&redirect=$r");
|
|
include_spip('inc/invalideur');
|
|
suivre_invalideur("id='id_forum/a$id_article'");
|
|
}
|
|
|
|
function spam_forum($id_forum, $r = '') {
|
|
include_spip("inc/securiser_action");
|
|
list($id_auteur, $pass) = caracteriser_auteur();
|
|
$arg = "$id_forum";
|
|
$hash = _action_auteur("instituer_forum-$arg-spam", $id_auteur, $pass, 'alea_ephemere');
|
|
$r = rawurlencode(_request('redirect'));
|
|
return generer_url_action('instituer_forum', "arg=$arg-spam&hash=$hash&redirect=$r");
|
|
include_spip('inc/invalideur');
|
|
suivre_invalideur("id='id_forum/a$id_article'");
|
|
}
|