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

namespace XF\SubContainer;

use
XF\Container;
use
XF\Entity;

use function
func_get_args;

class
Spam extends AbstractSubContainer
{
    public function
initialize()
    {
       
$container = $this->container;
       
$parent = $this->parent;

       
$container->factory('checker', function($class, array $params, Container $c)
        {
           
$class = \XF::stringToClass($class, '\%s\Spam\%s');
           
$class = $this->extendClass($class);

            return
$c->createObject($class, [$this->app]);
        });

       
$container->set('userChecker', function(Container $c)
        {
           
/** @var \XF\Spam\UserChecker $checker */
           
$checker = $c->create('checker', 'XF:UserChecker');
           
$params = [$checker, $this->app];

           
$providers = $c['userProviders'];
            foreach (
$providers AS $className)
            {
               
$checker->addProvider($c->create('provider', $className, $params));
            }

            return
$checker;
        });

       
$container->set('userSubmitter', function(Container $c) use ($parent)
        {
           
/** @var \XF\Spam\UserChecker $checker */
           
$checker = $c->create('checker', 'XF:UserChecker');
           
$params = [$checker, $this->app];

           
$options = $parent['options'];
            if (
$options->stopForumSpam['submitRejections'] && $options->stopForumSpam['apiKey'])
            {
               
$checker->addProvider($c->create('provider', 'XF:StopForumSpam', $params));
            }

           
$this->app->fire('spam_user_submitter', [$this, $parent, &$checker]);

            return
$checker;
        },
false);

       
$container->set('userProviders', function(Container $c) use ($parent)
        {
           
/** @var \ArrayObject $options */
           
$options = $parent['options'];

           
$providers = [];

           
$sfsEnabled = !empty($options->stopForumSpam['enabled']);

            if (!empty(
$options->registrationCheckDnsBl['check']))
            {
               
$httpBlKey = $options->registrationCheckDnsBl['projectHoneyPotKey'];

                if (!
$sfsEnabled)
                {
                   
$providers[] = 'XF:Tornevall';
                }

                if (
$httpBlKey)
                {
                   
$providers[] = 'XF:ProjectHoneyPot';
                }
            }

            if (
$sfsEnabled)
            {
               
$providers[] = 'XF:StopForumSpam';
            }

            if (!empty(
$options->approveSharedBannedRejectedIp['enabled']))
            {
               
$providers[] = 'XF:BannedUsers';
               
$providers[] = 'XF:RejectedUsers';
            }

           
$providers[] = 'XF:PreRegAction';

           
$this->app->fire('spam_user_providers', [$this, $parent, &$providers]);

            return
$providers;
        },
false);

       
$container->set('contentChecker', function(Container $c)
        {
           
/** @var \XF\Spam\ContentChecker $checker */
           
$checker = $c->create('checker', 'XF:ContentChecker');
           
$params = [$checker, $this->app];

           
$providers = $c['contentProviders'];
            foreach (
$providers AS $className)
            {
               
$checker->addProvider($c->create('provider', $className, $params));
            }

            return
$checker;
        });

       
$container->set('contentSubmitter', function(Container $c) use ($parent)
        {
           
/** @var \XF\Spam\ContentChecker $checker */
           
$checker = $c->create('checker', 'XF:ContentChecker');
           
$params = [$checker, $this->app];

           
$options = $parent['options'];
            if (
$options->akismetKey)
            {
               
$checker->addProvider($c->create('provider', 'XF:Akismet', $params));
            }

           
$this->app->fire('spam_content_submitter', [$this, $parent, &$checker]);

            return
$checker;
        },
false);

       
$container->set('contentHamSubmitter', function(Container $c) use ($parent)
        {
           
/** @var \XF\Spam\ContentChecker $checker */
           
$checker = $c->create('checker', 'XF:ContentChecker');
           
$params = [$checker, $this->app];

           
$options = $parent['options'];
            if (
$options->akismetKey)
            {
               
$checker->addProvider($c->create('provider', 'XF:Akismet', $params));
            }

           
$this->app->fire('spam_content_submitter_ham', [$this, $parent, &$checker]);

            return
$checker;
        },
false);

       
$container->set('contentProviders', function(Container $c) use ($parent)
        {
           
/** @var \ArrayObject $options */
           
$options = $parent['options'];

           
$providers = [];

            if (!empty(
$options->spamPhrases['phrases']))
            {
               
$providers[] = 'XF:SpamPhrases';
            }

            if (
$options->akismetKey)
            {
               
$providers[] = 'XF:Akismet';
            }

           
$this->app->fire('spam_content_providers', [$this, $parent, &$providers]);

            return
$providers;
        },
false);

       
$container->factory('provider', function($class, array $params, Container $c)
        {
           
$class = \XF::stringToClass($class, '\%s\Spam\Checker\%s');
           
$class = $this->extendClass($class);

            return
$c->createObject($class, $params);
        },
false);

       
$container->factory('cleaner', function($userId, array $params, Container $c)
        {
           
$class = $this->extendClass('XF\Spam\Cleaner');

           
array_unshift($params, $this->app);
            return
$c->createObject($class, $params);
        });

       
$container->factory('restorer', function($logId, array $params, Container $c)
        {
           
$class = $this->extendClass('XF\Spam\Restorer');

           
array_unshift($params, $this->app);
            return
$c->createObject($class, $params);
        });
    }

   
/**
     * @param Entity\User $user
     *
     * @return \XF\Spam\Cleaner
     */
   
public function cleaner(Entity\User $user)
    {
       
$arguments = func_get_args();
        unset(
$arguments[0]);
       
array_unshift($arguments, $user);
        return
$this->container->create('cleaner', $user->user_id, $arguments);
    }

   
/**
     * @param Entity\SpamCleanerLog $log
     *
     * @return \XF\Spam\Restorer
     */
   
public function restorer(Entity\SpamCleanerLog $log)
    {
       
$arguments = func_get_args();
        unset(
$arguments[0]);
       
array_unshift($arguments, $log);
        return
$this->container->create('restorer', $log->spam_cleaner_log_id, $arguments);
    }

   
/**
     * @return \XF\Spam\UserChecker
     */
   
public function userChecker()
    {
        return
$this->container['userChecker'];
    }

   
/**
     * @return \XF\Spam\ContentChecker
     */
   
public function contentChecker()
    {
        return
$this->container['contentChecker'];
    }
}