File "verifier_formulaire_forum.php"
Full path: /home/argothem/www/organecyberpresse/plugins/auto/nospam/v3.0.0/nospam/verifier_formulaire_forum.php
File size: 5.35 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Plugin No-SPAM
* (c) 2008-2019 Cedric Morin Yterium&Nursit
* Licence GPL
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Verification supplementaire antispam sur le formulaire_forum
*
* @param array $flux
* @return array
*/
function nospam_verifier_formulaire_forum_dist($flux){
$form = $flux['args']['form'];
if (!isset($flux['data']['texte'])
AND $GLOBALS['meta']['forums_texte'] == 'oui'){
$texte = _request('texte');
include_spip("inc/nospam");
// regarder si il y a du contenu en dehors des liens !
$caracteres = nospam_compter_caracteres_utiles($texte);
$min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10);
if ($caracteres < $min_length){
$flux['data']['texte'] = _T('forum:forum_attention_dix_caracteres');
}
// regarder si il y a du contenu cache
if (!isset($flux['data']['texte'])){
$infos = nospam_analyser_spams($texte);
if (isset($infos['contenu_cache']) AND $infos['contenu_cache']){
$flux['data']['texte'] = _T('nospam:erreur_attributs_html_interdits');
}
}
// regarder si il y a des liens deja references par des spammeurs
if (!isset($flux['data']['texte'])
AND isset($infos['liens'])
AND count($infos['liens'])){
if ($h = nospam_rechercher_presence_liens_spammes($infos['liens'],_SPAM_URL_MAX_OCCURENCES,'spip_forum',array('texte'))){
spip_log("Refus message de forum qui contient un lien vers $h","nospam");
$flux['data']['texte'] = _T('nospam:erreur_url_deja_spammee');
}
}
// on prend en compte la checkbox de confirmation
// si le flag en session est bien leve
if (_request('notabuse')){
session_start();
if ($_SESSION['notabuse_check']){
unset($_SESSION['notabuse_check']);
$_SESSION['notabuse_checked'] = true;
// on leve une globale pour la fin de ce hit, a toute fin utile (puisque plus rien en $_SESSION)
$GLOBALS['notabuse_checked'] = true;
}
}
if (!count($flux['data'])){
if (nospam_check_ip_status($GLOBALS['ip'])!=='ok'){
session_start();
if (!empty($_SESSION['notabuse_checked'])) {
// ok on retire de la session le check qui ne sert qu'une fois
unset($_SESSION['notabuse_checked']);
// et on laisse passer
} else {
$flux['data']['texte'] = _T('nospam:info_ip_suspecte')."<br />
<span class='choix'>
<input type='checkbox' name='notabuse' value='1' id='notabuse'/> <label for='notabuse'>"
._T('nospam:label_message_licite')."</label>
</span>";
$_SESSION['notabuse_check'] = true;
spip_log("notabuse_check sur IP ".$GLOBALS['ip'],"nospam");
}
}
}
// si il y a une erreur, pas de previsu, on reste bloque a la premiere etape
if (isset($flux['data']['texte'])){
unset($flux['data']['previsu']);
}
// sinon, si on est au moment du post final (confirmation apres previsu => pas de previsu ni d'erreur)
// on calcule la "popuparlite de post"
elseif(!count($flux['data'])) {
$now = $_SERVER['REQUEST_TIME'];
// calculer la "popularite" des POST forums et forums avec liens
if (!isset($GLOBALS['meta']['nospam_pop_forum_post'])) $GLOBALS['meta']['nospam_pop_forum_post'] = 0;
if (!isset($GLOBALS['meta']['nospam_pop_forum_postwlink'])) $GLOBALS['meta']['nospam_pop_forum_postwlink'] = 0;
if (!isset($GLOBALS['meta']['nospam_pop_date'])) $GLOBALS['meta']['nospam_pop_date'] = date('Y-m-d H:i:s',$now);
$duree = max($now-strtotime($GLOBALS['meta']['nospam_pop_date']),1);
list($a,$b) = nospam_popularite_constantes($duree);
spip_log("Pop forum : $duree, $a, $b","nospam");
// decrementer
if ($duree>1800){
$GLOBALS['meta']['nospam_pop_date'] = date('Y-m-d H:i:s',$now);
$GLOBALS['meta']['nospam_pop_forum_post'] = round(floatval($GLOBALS['meta']['nospam_pop_forum_post'])*$a,2);
$GLOBALS['meta']['nospam_pop_forum_postwlink'] = round(floatval($GLOBALS['meta']['nospam_pop_forum_postwlink'])*$a,2);
spip_log("Pop Decremente : ".$GLOBALS['meta']['nospam_pop_forum_post'].", ".$GLOBALS['meta']['nospam_pop_forum_postwlink'],"nospam");
}
// incrementer
$GLOBALS['meta']['nospam_pop_forum_post']=round(floatval($GLOBALS['meta']['nospam_pop_forum_post'])+$b,2);
if (isset($infos['liens']) AND count($infos['liens'])){
$GLOBALS['meta']['nospam_pop_forum_postwlink']=round(floatval($GLOBALS['meta']['nospam_pop_forum_postwlink'])+$b,2);
}
ecrire_meta("nospam_pop_forum_post",$GLOBALS['meta']['nospam_pop_forum_post']);
ecrire_meta("nospam_pop_forum_postwlink",$GLOBALS['meta']['nospam_pop_forum_postwlink']);
ecrire_meta("nospam_pop_date",$GLOBALS['meta']['nospam_pop_date']);
spip_log("Pop Incremente : ".$GLOBALS['meta']['nospam_pop_forum_post'].", ".$GLOBALS['meta']['nospam_pop_forum_postwlink'],"nospam");
}
}
return $flux;
}
//
// Popularite, modele logarithmique
//
function nospam_popularite_constantes($duree){
// duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
$demivie = 0.5;
// periode de reference en jours
$periode = 1;
// $a est le coefficient d'amortissement depuis la derniere mesure
$a = pow(2, - $duree / ($demivie * 24 * 3600));
// $b est la constante multiplicative permettant d'avoir
// une visite par jour (periode de reference) = un point de popularite
// (en regime stationnaire)
// or, magie des maths, ca vaut log(2) * duree journee/demi-vie
// si la demi-vie n'est pas trop proche de la seconde ;)
$b = log(2) * $periode / $demivie;
return array($a,$b);
}