[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / nospam / nospam_pipelines.php
index 611acaa..47bd62e 100644 (file)
@@ -19,7 +19,7 @@ if (!defined('_SPAM_ENCRYPT_NAME')) define('_SPAM_ENCRYPT_NAME',false);
 function nospam_lister_formulaires() {
        if (!isset($GLOBALS['formulaires_no_spam']))
                $GLOBALS['formulaires_no_spam'] = array();
-       $formulaires = array_merge($GLOBALS['formulaires_no_spam'], array('forum', 'ecrire_auteur', 'signature'));
+       $formulaires = array_merge($GLOBALS['formulaires_no_spam'], array('inscription','forum', 'ecrire_auteur', 'signature', 'recommander','newsletter_subscribe','newsletter_unsubscribe'));
        return pipeline('nospam_lister_formulaires', $formulaires);
 }
 
@@ -67,16 +67,17 @@ function nospam_inserer_nobot(&$texte){
        if ((false === strpos($texte, 'name="email_nobot"'))
                AND (false !== $pos = strpos($texte, '</form>'))
        ) {
-               // essayer de s'inserer au hasard entre 2 li du form
-               if (preg_match_all(",<li\b[^>]*class=['\"]editer[^>]*,ims",$texte,$m)
-                 AND $p = strpos($texte,$m[0][rand(0,count($m[0])-1)])){
-                       $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => '','div'=>'li'));
+               // essayer de s'inserer au hasard entre 2 div/li du form
+               if (preg_match_all(",<(div|li)\b[^>]*class=['\"]editer[^>]*,ims",$texte,$m)
+                       AND $i = rand(0,count($m[0])-1)
+                 AND $p = strpos($texte,$m[0][$i])){
+                       $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => '','div'=>$m[1][$i]));
                        $texte = substr_replace($texte, $nobot, $p, 0);
                }
-               // et sinon a la fin
+               // et sinon a la fin juste avant la(les) balise(s) </form>
                else {
                        $nobot = recuperer_fond("inclure/nobot", array('email_nobot' => ''));
-                       $texte = substr_replace($texte, $nobot, $pos, 0);
+                       $texte = str_replace('</form>', $nobot . '</form>', $texte);
                }
        }
        if (_SPAM_ENCRYPT_NAME){
@@ -170,9 +171,13 @@ function nospam_formulaire_charger($flux) {
        ) {
                include_spip("inc/nospam");
                $jeton = creer_jeton($form);
+               if (!isset($flux['data']['_hidden'])) {
+                       $flux['data']['_hidden'] = "";
+               }
                $flux['data']['_hidden'] .= "<input type='hidden' name='_jeton' value='$jeton' />";
 
                if (_SPAM_ENCRYPT_NAME){
+                       $flux['data']['_hidden'] .= "<input type='hidden' name='_encrypt' value='1' />";
                        // recuperer les autosave encryptes si possible
                        if (is_array($flux['data'])
                          AND isset($flux['data']['_autosave_id'])
@@ -221,7 +226,7 @@ function nospam_formulaire_verifier($flux) {
                // si oui on les decrypte puis on relance la verif complete
                // attention, du coup verifier() est appele 2 fois dans ce cas (peut poser probleme ?)
                // donc on repasse ici une deuxieme fois, et il ne faut pas relancer le decryptage
-               if (_SPAM_ENCRYPT_NAME AND !$deja){
+               if (_request('_encrypt') AND !$deja){
                        $deja = true;
                        $re_verifier = false;
                        foreach($_POST as $k=>$v){
@@ -244,8 +249,14 @@ function nospam_formulaire_verifier($flux) {
                                return $flux;
                        }
                }
+               // si l'encrypt a ete active depuis l'affichage initial de ce form, on rebalance l'erreur technique
+               // pour reforcer un POST
+               if (_SPAM_ENCRYPT_NAME AND !_request('_encrypt')){
+                       spip_log('SPAM_ENCRYPT_NAME active mais _encrypt manquant','nospam');
+                       $flux['data']['message_erreur'] = _T('nospam:erreur_jeton');
+               }
                // le jeton prend en compte l'heure et l'ip de l'internaute
-               if (_request('nobot') // trop facile !
+               elseif (_request('nobot') // trop facile !
                        OR _request('email_nobot')
                        OR (!verifier_jeton($jeton, $form))
                ) {
@@ -571,4 +582,4 @@ function nospam_check_ip_status($ip){
        }
        return "ok";
 }
-?>
\ No newline at end of file
+?>