Index: units/helpers/spam_helper.php =================================================================== --- units/helpers/spam_helper.php (revision 14768) +++ units/helpers/spam_helper.php (working copy) @@ -17,47 +17,58 @@ class SpamHelper extends kHelper { /** - * Table name where spam control information is keeped + * Table name where spam control information is kept * * @var string + * @access protected */ - var $TableName; + protected $TableName; /** - * RecourceId field of current item + * ResourceId field of current item * * @var int + * @access protected */ - var $ResourceId = 0; + protected $ResourceId = 0; /** * ResourceId from all items in list * * @var Array + * @access protected */ - var $ListResourceIDs = Array (); + protected $ListResourceIDs = Array (); /** * Type of information to put into spam control * * @var string + * @access protected */ - var $DataType = ''; + protected $DataType = ''; /** * Default spam control record expiration * * @var int + * @access protected */ - var $Expiration = 0; + protected $Expiration = 0; - var $ExpirationCache = Array (); + /** + * Items expiration cache (for faster access) + * + * @var array + * @access protected + */ + protected $ExpirationCache = Array (); public function __construct() { parent::__construct(); - $this->TableName = TABLE_PREFIX.'SpamControl'; + $this->TableName = TABLE_PREFIX . 'SpamControl'; } /** @@ -67,14 +78,15 @@ * @param string $data_type * @param int $expiration * @param Array $list_resource_ids + * @access public */ - function InitHelper($resource_id, $data_type, $expiration, $list_resource_ids = Array ()) + public function InitHelper($resource_id, $data_type, $expiration, $list_resource_ids = Array ()) { $this->DataType = $data_type; $this->ResourceId = $resource_id; $this->ListResourceIDs = $list_resource_ids ? $list_resource_ids : Array ($resource_id); - if (preg_match('/(.*):(.*)/', $expiration, $regs)) { + if ( preg_match('/(.*):(.*)/', $expiration, $regs) ) { $delay_value = $this->Application->ConfigValue($regs[1]); $delay_interval = $this->Application->ConfigValue($regs[2]); $expiration = $delay_value * $delay_interval; @@ -89,22 +101,23 @@ * @param bool $as_array return result as array, not string * * @return string + * @access protected */ - function GetKeyClause($as_array = false) + protected function GetKeyClause($as_array = false) { $user_id = $this->Application->RecallVar('user_id'); - if ($user_id == 0) { + if ( $user_id == 0 ) { $user_id = USER_GUEST; } $keys = Array ( - 'IPaddress' => $_SERVER['REMOTE_ADDR'], - 'PortalUserId' => $user_id, - 'DataType' => $this->DataType, + 'IPaddress' => $_SERVER['REMOTE_ADDR'], + 'PortalUserId' => $user_id, + 'DataType' => $this->DataType, ); - if ($as_array) { + if ( $as_array ) { $keys['ItemResourceId'] = $this->ResourceId; return $keys; @@ -123,32 +136,38 @@ /** * Allows to add current item in spam control * + * @return void + * @access public */ - function AddToSpamControl() + public function AddToSpamControl() { $fields_hash = $this->GetKeyClause(true); $fields_hash['Expire'] = $this->Expiration; $this->Conn->doInsert($fields_hash, $this->TableName); - if (!array_key_exists($this->DataType, $this->ExpirationCache)) { - $this->ExpirationCache[$this->DataType][$this->ResourceId] = $this->Expiration; + // create empty expiration cache for given data type in case, when InSpamControl method wasn't called + if ( !isset($this->ExpirationCache[$this->DataType]) ) { + $this->ExpirationCache[$this->DataType] = Array (); } + + $this->ExpirationCache[$this->DataType][$this->ResourceId] = $this->Expiration; } /** * Allows to check if current item is in spam control * * @return bool + * @access public */ - function InSpamControl() + public function InSpamControl() { - if (!array_key_exists($this->DataType, $this->ExpirationCache)) { + if ( !array_key_exists($this->DataType, $this->ExpirationCache) ) { $key_clause = $this->GetKeyClause(); $sql = 'SELECT Expire, ItemResourceId - FROM '.$this->TableName.' - WHERE '.$key_clause; + FROM ' . $this->TableName . ' + WHERE ' . $key_clause; $this->ExpirationCache[$this->DataType] = $this->Conn->GetCol($sql, 'ItemResourceId'); } else { @@ -158,10 +177,10 @@ $cache =& $this->ExpirationCache[$this->DataType]; $expires = array_key_exists($this->ResourceId, $cache) ? $cache[$this->ResourceId] : false; - if ($expires && $expires < adodb_mktime()) { + if ( $expires && $expires < adodb_mktime() ) { // spam control record is expired - $sql = 'DELETE FROM '.$this->TableName.' - WHERE '.$key_clause; + $sql = 'DELETE FROM ' . $this->TableName . ' + WHERE ' . $key_clause; $this->Conn->Query($sql); return false; }