Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Spam/Checker/SpamPhrases.php
<?php

namespace XF\Spam\Checker;

use
XF\Util\Arr;

use function
strlen;

class
SpamPhrases extends AbstractProvider implements ContentCheckerInterface
{
    protected function
getType()
    {
        return
'SpamPhrases';
    }

    public function
check(\XF\Entity\User $user, $message, array $extraParams = [])
    {
       
$option = $this->app()->options()->spamPhrases;
       
$phrases = Arr::stringToArray($option['phrases'], '/\r?\n/');

       
$decision = 'allowed';

        foreach (
$phrases AS $phrase)
        {
           
$phrase = trim($phrase);
            if (!
strlen($phrase))
            {
                continue;
            }

           
$origPhrase = $phrase;

            if (
$phrase[0] != '/')
            {
               
$phrase = preg_quote($phrase, '#');
               
$phrase = str_replace('\\*', '[\w"\'/ \t]*', $phrase);
               
$phrase = '#(?<=\W|^)(' . $phrase . ')(?=\W|$)#iu';
            }
            else
            {
                if (
preg_match('/\W[\s\w]*e[\s\w]*$/', $phrase))
                {
                   
// can't run a /e regex
                   
continue;
                }
            }

            try
            {
                if (
preg_match($phrase, $message))
                {
                   
$decision = $option['action'] == 'moderate' ? 'moderated' : 'denied';

                   
$this->logDetail('spam_phrase_matched_x', [
                       
'phrase' => $origPhrase
                   
]);

                    break;
                }
            }
            catch (\
ErrorException $e) {}
        }

       
$this->logDecision($decision);
    }

    public function
submitSpam($contentType, $contentIds)
    {
        return;
    }

    public function
submitHam($contentType, $contentIds)
    {
        return;
    }
}