ModuleVote

Package modules.vote
Inheritance class ModuleVote » Module » LsObject
Since 1.0
Source Code /classes/modules/vote/Vote.class.php
Модуль для работы с голосованиями

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module
oMapper ModuleVote_MapperVote Объект маппера ModuleVote

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddVote() Добавляет голосование ModuleVote
DeleteVoteByTarget() Удаляет голосование из базы по списку идентификаторов таргета ModuleVote
GetVote() Получает голосование ModuleVote
GetVoteByArray() Получить список голосований по списку айдишников ModuleVote
GetVoteByArraySolid() Получить список голосований по списку айдишников, но используя единый кеш ModuleVote
Init() Инициализация ModuleVote
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module

Property Details

oMapper property
protected ModuleVote_MapperVote $oMapper;

Объект маппера

Method Details

AddVote() method
public bool AddVote(ModuleVote_EntityVote $oVote)
$oVote ModuleVote_EntityVote Объект голосования
{return} bool
Source Code: /classes/modules/vote/Vote.class.php#45 (show)
public function AddVote(ModuleVote_EntityVote $oVote) {
    if (!
$oVote->getIp()) {
        
$oVote->setIp(func_getIp());
    }
    if (
$this->oMapper->AddVote($oVote)) {
        
$this->Cache_Delete("vote_{$oVote->getTargetType()}_{$oVote->getTargetId()}_{$oVote->getVoterId()}");
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("vote_update_{$oVote->getTargetType()}_{$oVote->getVoterId()}"));
        return 
true;
    }
    return 
false;
}

Добавляет голосование

DeleteVoteByTarget() method
public bool DeleteVoteByTarget(array|int $aTargetId, string $sTargetType)
$aTargetId array|int Список ID владельцев
$sTargetType string Тип владельца
{return} bool
Source Code: /classes/modules/vote/Vote.class.php#174 (show)
public function DeleteVoteByTarget($aTargetId$sTargetType) {
    if (!
is_array($aTargetId)) $aTargetId=array($aTargetId);
    
$aTargetId=array_unique($aTargetId);
    
/**
     * Чистим зависимые кеши
     */
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("vote_update_{$sTargetType}"));
    return 
$this->oMapper->DeleteVoteByTarget($aTargetId,$sTargetType);
}

Удаляет голосование из базы по списку идентификаторов таргета

GetVote() method
public ModuleVote_EntityVote|null GetVote(int $sTargetId, string $sTargetType, int $sUserId)
$sTargetId int ID владельца
$sTargetType string Тип владельца
$sUserId int ID пользователя
{return} ModuleVote_EntityVote|null
Source Code: /classes/modules/vote/Vote.class.php#64 (show)
public function GetVote($sTargetId,$sTargetType,$sUserId) {
    
$data=$this->GetVoteByArray($sTargetId,$sTargetType,$sUserId);
    if (isset(
$data[$sTargetId])) {
        return 
$data[$sTargetId];
    }
    return 
null;
}

Получает голосование

GetVoteByArray() method
public array GetVoteByArray(array $aTargetId, string $sTargetType, int $sUserId)
$aTargetId array Список ID владельцев
$sTargetType string Тип владельца
$sUserId int ID пользователя
{return} array
Source Code: /classes/modules/vote/Vote.class.php#79 (show)
public function GetVoteByArray($aTargetId,$sTargetType,$sUserId) {
    if (!
$aTargetId) {
        return array();
    }
    if (
Config::Get('sys.cache.solid')) {
        return 
$this->GetVoteByArraySolid($aTargetId,$sTargetType,$sUserId);
    }
    if (!
is_array($aTargetId)) {
        
$aTargetId=array($aTargetId);
    }
    
$aTargetId=array_unique($aTargetId);
    
$aVote=array();
    
$aIdNotNeedQuery=array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys=func_build_cache_keys($aTargetId,"vote_{$sTargetType}_",'_'.$sUserId);
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey ) {
            if (
array_key_exists($sKey,$data)) {
                if (
$data[$sKey]) {
                    
$aVote[$data[$sKey]->getTargetId()]=$data[$sKey];
                } else {
                    
$aIdNotNeedQuery[]=$sValue;
                }
            }
        }
    }
    
/**
     * Смотрим каких топиков не было в кеше и делаем запрос в БД
     */
    
$aIdNeedQuery=array_diff($aTargetId,array_keys($aVote));
    
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
    
$aIdNeedStore=$aIdNeedQuery;
    if (
$data $this->oMapper->GetVoteByArray($aIdNeedQuery,$sTargetType,$sUserId)) {
        foreach (
$data as $oVote) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aVote[$oVote->getTargetId()]=$oVote;
            
$this->Cache_Set($oVote"vote_{$oVote->getTargetType()}_{$oVote->getTargetId()}_{$oVote->getVoterId()}", array(), 60*60*24*7);
            
$aIdNeedStore=array_diff($aIdNeedStore,array($oVote->getTargetId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aIdNeedStore as $sId) {
        
$this->Cache_Set(null"vote_{$sTargetType}_{$sId}_{$sUserId}", array(), 60*60*24*7);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aVote=func_array_sort_by_keys($aVote,$aTargetId);
    return 
$aVote;
}

Получить список голосований по списку айдишников

GetVoteByArraySolid() method
public array GetVoteByArraySolid(array $aTargetId, string $sTargetType, int $sUserId)
$aTargetId array Список ID владельцев
$sTargetType string Тип владельца
$sUserId int ID пользователя
{return} array
Source Code: /classes/modules/vote/Vote.class.php#146 (show)
public function GetVoteByArraySolid($aTargetId,$sTargetType,$sUserId) {
    if (!
is_array($aTargetId)) {
        
$aTargetId=array($aTargetId);
    }
    
$aTargetId=array_unique($aTargetId);
    
$aVote=array();
    
$s=join(',',$aTargetId);
    if (
false === ($data $this->Cache_Get("vote_{$sTargetType}_{$sUserId}_id_{$s}"))) {
        
$data $this->oMapper->GetVoteByArray($aTargetId,$sTargetType,$sUserId);
        foreach (
$data as $oVote) {
            
$aVote[$oVote->getTargetId()]=$oVote;
        }
        
$this->Cache_Set(
            
$aVote"vote_{$sTargetType}_{$sUserId}_id_{$s}",
            array(
"vote_update_{$sTargetType}_{$sUserId}","vote_update_{$sTargetType}"),
            
60*60*24*1
        
);
        return 
$aVote;
    }
    return 
$data;
}

Получить список голосований по списку айдишников, но используя единый кеш

Init() method
public void Init()
Source Code: /classes/modules/vote/Vote.class.php#36 (show)
public function Init() {
    
$this->oMapper=Engine::GetMapper(__CLASS__);
}

Инициализация