Вход Регистрация
Файл: upload/include/library/phpfox/spam/spam.class.php
Строк: 149
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * SPAM/Flood Control Class
 * Handles global SPAM & Flood control checks with support for plugins.
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package         Phpfox
 * @version         $Id: spam.class.php 1668 2010-07-12 08:54:32Z Raymond_Benc $
 */
class Phpfox_Spam
{
    
/**
     * Database object
     *
     * @var object
     */
    
private $_oDb null;
    
    
/**
     * Params passed via the check() method
     *
     * @var array
     */
    
private $_aParams = array();    
    
    
/**
     * Class constructor
     */
    
public function __construct()
    {
        
$this->_oDb Phpfox::getLib('database');
    }
    
    
/**
     * Method used to call other private methods which control the spam/flood methods.
     *
     * @param array $aParams Array of params used with spam/flood methods provided.
     * @return mixed Returns data based on the spam/flood method.
     */
    
public function check($aParams = array())
    {
        
// Make sure we have an action
        
if (!isset($aParams['action']))
        {
            return 
Phpfox_Error::trigger('SPAM action not defined.'E_USER_ERROR);
        }
        
        
// Fix the action so we can call a private method
        
$sMethod '_' str_replace('_'''$aParams['action']);
        
        
// Store the params in a private var so we can use within other private methods.
        
$this->_aParams $aParams['params'];
        
        
$this->_aParams['is_spam'] = false;
        
        
// Make sure this action is valid
        
if (!method_exists($this$sMethod))
        {
            return 
Phpfox_Error::trigger('Not a valid SPAM action.'E_USER_ERROR);
        }
        
        
// Return the data our methods provide
        
return call_user_func(array($this$sMethod));
    }    
    
    
/**
     * Gets the time phrase of how long a user must wait before they can repost on the same section.
     *
     * @return string
     */
    
public function getWaitTime()
    {
        
$iTime round(((($this->_aParams['last_time_stamp'] + $this->_aParams['time_stamp']) - PHPFOX_TIME) / 60));        
        
        if (
$iTime <= 1)
        {
            if (
str_replace('-''', (PHPFOX_TIME - ($this->_aParams['last_time_stamp'] + $this->_aParams['time_stamp']))) == '1')
            {
                
$iTime Phpfox::getPhrase('core.try_again_in_1_second');
            }
            else 
            {
                
$sTime Phpfox::getPhrase('core.try_again_in_time_seconds', array('time' => str_replace('-''', (PHPFOX_TIME - ($this->_aParams['last_time_stamp'] + $this->_aParams['time_stamp'])))));
            }
        }
        else 
        {
            
$sTime Phpfox::getPhrase('core.try_again_in_time_minutes', array('time' => $iTime));
        }
        
        return 
$sTime;
    }
        
    
/**
     * SPAM control that checks the last time a user posted an item.
     *
     * Inline Example:
     * <code>
     * Phpfox::getLib('spam')->check(array(
     *                'action' => 'last_post', // The SPAM action
     *                'params' => array(
     *                    'field' => 'time_stamp', // The time stamp field
     *                    'table' => Phpfox::getT('shoutbox'), // Database table we plan to check
     *                    'condition' => 'user_id = ' . Phpfox::getUserId(), // Database WHERE query
     *                    'time_stamp' => Phpfox::getParam('shoutbox.shoutbox_flood_limit') // Seconds
     *                )
     *            )
     *        );
     * </code>
     *
     * @return boolean Returns TRUE if user has posted an item within X seconds, FALSE if they have nothing new posted.
     */
    
private function _lastPost()
    {
        
$iTimeStamp $this->_oDb->select($this->_aParams['field'])
            ->
from($this->_aParams['table'])
            ->
where($this->_aParams['condition'])
            ->
order($this->_aParams['field'] . ' DESC')
            ->
limit('1')
            ->
execute('getField');            
            
        
$this->_aParams['last_time_stamp'] = $iTimeStamp;
                        
        return (((
PHPFOX_TIME $iTimeStamp) < $this->_aParams['time_stamp']) ? true false);        
    }
    
    
/**
     * Check to see if the content being passed is considered as SPAM.
     *
     * @return bool TRUE is spam, FALSE if it isn't.
     */
    
private function _isSpam()
    {
        if (
Phpfox::getUserParam('core.is_spam_free'))
        {
            return 
false;
        }
        
        if (!
Phpfox::getParam('core.enable_spam_check'))
        {
            return 
false;
        }
        
        if (
Phpfox::isUser() && Phpfox::getUserBy('total_spam') > Phpfox::getParam('core.auto_deny_items'))
        {
            
$this->_aParams['is_spam'] = true;
            
            return 
true;
        }
        
        
$sUrl Phpfox::getParam('core.akismet_url');
        
$sPassword Phpfox::getParam('core.akismet_password');
        
        if (empty(
$sUrl) || empty($sPassword))
        {
            return 
false;
        }
        
        
$sAkismet PHPFOX_DIR_LIB 'akismet' PHPFOX_DS 'Akismet.class.php';
        if (
file_exists($sAkismet))
        {
            require_once(
$sAkismet);
    
            
$oAkismet = new Akismet($sUrl$sPassword);
    
            if (
Phpfox::isUser())
            {
                
$oAkismet->setCommentAuthor(Phpfox::getUserBy('full_name'));
                
$oAkismet->setCommentAuthorEmail(Phpfox::getUserBy('email'));
            }
            else 
            {
                if (isset(
$this->_aParams['user']))
                {
                    
$oAkismet->setCommentAuthor($this->_aParams['user']);
                }
                
                if (isset(
$this->_aParams['email']))
                {
                    
$oAkismet->setCommentAuthorEmail($this->_aParams['email']);
                }
            }
            
            if (isset(
$this->_aParams['url']))
            {
                
$oAkismet->setCommentAuthorURL($this->_aParams['url']);
            }
            
            if (isset(
$this->_aParams['link']))
            {
                
$oAkismet->setPermalink($this->_aParams['link']);
            }
            
            if (isset(
$this->_aParams['content']))
            {
                
$oAkismet->setCommentContent($this->_aParams['content']);
            }        
    
            if ((
$this->_aParams['is_spam'] = $oAkismet->isCommentSpam()) === true)
            {
                
Phpfox::getLib('database')->updateCounter('user''total_spam''user_id'Phpfox::getUserId());                
            }
                
            return 
$this->_aParams['is_spam'];
        }
        
        return 
false;
    }    
    
    
/**
     * If a call is made to an unknown method attempt to connect
     * it to a specific plug-in with the same name thus allowing 
     * plug-in developers the ability to extend classes.
     *
     * @param string $sMethod is the name of the method
     * @param array $aArguments is the array of arguments of being passed
     */
    
public function __call($sMethod$aArguments)
    {
        
/**
         * Check if such a plug-in exists and if it does call it.
         */
        
if (($sPlugin Phpfox_Plugin::get('spam_methods')) !== false)
        {
            eval(
$sPlugin);
            return;
        }
            
        
/**
         * No method or plug-in found we must throw a error.
         */
        
Phpfox_Error::trigger('Call to undefined method ' __CLASS__ '::' $sMethod '()'E_USER_ERROR);
    }    
}

?>
Онлайн: 0
Реклама