Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Antispam/Service.php
Строк: 123
<?php
namespace ConcreteCoreAntispam;

use 
Config;
use 
Core;
use 
Group;
use 
Loader;
use 
Log;
use 
Page;
use 
User;
use 
UserInfo;

class 
Service
{

    
/**
     * @var bool|mixed
     */
    
protected $controller false;

    public function 
__construct()
    {

        
$library Library::getActive();
        if (
is_object($library)) {
            
$this->controller $library->getController();
        }
    }

    
/**
     * @return Group|null
     */
    
public function getWhitelistGroup()
    {
        return 
Group::getByID(Config::get('concrete.spam.whitelist_group'));
    }

    
/**
     * Report some content with the poster's information to the AntiSpam service
     * @param string $content
     * @param UserInfo $ui
     * @param string $ip
     * @param string $ua
     * @param array $additionalArgs
     */
    
public function report($content$author$email$ip$ua$additionalArgs = array())
    {
        
$args['content'] = $content;
        
$args['author'] = $author;
        
$args['author_email'] = $email;
        
$args['ip_address'] = $ip;
        
$args['user_agent'] = $ua;

        foreach (
$additionalArgs as $key => $value) {
            
$args[$key] = $value;
        }
        if (
method_exists($this->controller'report')) {
            
$this->controller->report($args);
        }

        
$u = new User();
        
Log::info(t('Content %s (author %s, %s) flagged as spam by user %s',
            
$content,
            
$author,
            
$email,
            
$u->getUserName()
        ));
    }

    
/**
     * @param string $content
     * @param string $type
     * @param array $additionalArgs
     * @param bool $user
     * @return bool
     * @throws Exception
     */
    
public function check($content$type$additionalArgs = array(), $user false)
    {
        if (
$this->controller) {
            if (!
$user) {
                
$user = new User;
            }
            
$wlg $this->getWhitelistGroup();
            if (
$wlg instanceof Group && $user->inGroup($wlg)) {
                
// Never spam if user is in the whitelist
                
return true;
            }

            
/** @var ConcreteCorePermissionIPService $iph */
            
$iph Core::make('helper/validation/ip');
            
$ip $iph->getRequestIP();
            
$args['ip_address'] = ($ip === false)?(''):($ip->getIp($ip::FORMAT_IP_STRING));
            
$args['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
            
$args['content'] = $content;
            foreach (
$additionalArgs as $key => $value) {
                
$args[$key] = $value;
            }
            if (isset(
$args['user']) && is_object($args['user'])) {
                
$u $args['user'];
            } else {
                
$u = new User();
            }
            if (!isset(
$args['email']) && $u->isRegistered()) {
                
$ui UserInfo::getByID($u->getUserID());
                
$args['email'] = $ui->getUserEmail();
            }
            
$r $this->controller->check($args);
            if (
$r) {
                return 
true;
            } else {
                
$logText '';
                
$c Page::getCurrentPage();
                if (
is_object($c)) {
                    
$logText .= t('URL: %s'Loader::helper('navigation')->getLinkToCollection($ctrue));
                    
$logText .= "n";
                }
                if (
$u->isRegistered()) {
                    
$logText .= t('User: %s (ID %s)'$u->getUserName(), $u->getUserID());
                    
$logText .= "n";
                }
                
$logText .= t('Type: %s'Loader::helper('text')->unhandle($type));
                
$logText .= "n";
                foreach (
$args as $key => $value) {
                    
$logText .= Loader::helper('text')->unhandle($key) . ': ' $value "n";
                }

                if (
Config::get('concrete.log.spam')) {
                    
Log::addEntry($logTextt('spam'));
                }
                if (
Config::get('concrete.spam.notify_email') != '') {
                    
$mh Loader::helper('mail');
                    
$mh->to(Config::get('concrete.spam.notify_email'));
                    
$mh->addParameter('content'$logText);
                    
$mh->addParameter('siteName'Config::get('concrete.site'));
                    
$mh->load('spam_detected');
                    
$mh->sendMail();
                }
                return 
false;
            }
        } else {
            return 
true// return true if it passes the test
        
}
    }

    
/**
     * @param $nm
     * @param $args
     * @return mixed
     */
    
public function __call($nm$args)
    {
        if (
method_exists($this->controller$nm)) {
            return 
call_user_func_array(array($this->controller$nm), $args);
        }
    }

}
Онлайн: 1
Реклама