ModuleFavourite

Package modules.favourite
Inheritance class ModuleFavourite » Module » LsObject
Since 1.0
Source Code /classes/modules/favourite/Favourite.class.php
Модуль для работы с избранным

Protected Properties

Hide inherited properties

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

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddFavourite() Добавляет таргет в избранное ModuleFavourite
DeleteFavourite() Удаляет таргет из избранного ModuleFavourite
DeleteFavouriteByTargetId() Удаляет избранное по списку идентификаторов таргетов ModuleFavourite
DeleteTagByTarget() Удаление тегов по таргету ModuleFavourite
GetCountFavouriteOpenCommentsByUserId() Возвращает число комментариев к открытым блогам в избранном по ID пользователя ModuleFavourite
GetCountFavouriteOpenTopicsByUserId() Возвращает число топиков в открытых блогах из избранного по ID пользователя ModuleFavourite
GetCountFavouritesByUserId() Возвращает число таргетов определенного типа в избранном по ID пользователя ModuleFavourite
GetFavourite() Получает информацию о том, найден ли таргет в избранном или нет ModuleFavourite
GetFavouriteOpenCommentsByUserId() Получает список комментариев к записям открытых блогов ModuleFavourite
GetFavouriteOpenTopicsByUserId() Получает список топиков из открытых блогов ModuleFavourite
GetFavouritesByArray() Получить список избранного по списку айдишников ModuleFavourite
GetFavouritesByArraySolid() Получить список избранного по списку айдишников, но используя единый кеш ModuleFavourite
GetFavouritesByUserId() Получает список таргетов из избранного ModuleFavourite
GetGroupTags() Возвращает наиболее часто используемые теги ModuleFavourite
GetTags() Возвращает список тегов по фильтру ModuleFavourite
GetTagsTarget() Возвращает список тегов для объекта избранного ModuleFavourite
GetTagsTargetTopic() Возвращает список тегов для топика, название метода формируется автоматически из GetTagsTarget() ModuleFavourite
Init() Инициализация ModuleFavourite
SetFavouriteTags() Устанавливает список тегов для избранного ModuleFavourite
SetFavouriteTargetPublish() Меняет параметры публикации у таргета ModuleFavourite
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateFavourite() Обновляет запись об избранном ModuleFavourite
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

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

Property Details

oMapper property
protected ModuleFavourite_MapperFavourite $oMapper;

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

Method Details

AddFavourite() method
public bool AddFavourite(ModuleFavourite_EntityFavourite $oFavourite)
$oFavourite ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /classes/modules/favourite/Favourite.class.php#303 (show)
public function AddFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
    if (!
$oFavourite->getTags()) {
        
$oFavourite->setTags('');
    }
    
$this->SetFavouriteTags($oFavourite);
    
//чистим зависимые кеши
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$oFavourite->getTargetType()}_change_user_{$oFavourite->getUserId()}"));
    
$this->Cache_Delete("favourite_{$oFavourite->getTargetType()}_{$oFavourite->getTargetId()}_{$oFavourite->getUserId()}");
    return 
$this->oMapper->AddFavourite($oFavourite);
}

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

DeleteFavourite() method
public bool DeleteFavourite(ModuleFavourite_EntityFavourite $oFavourite)
$oFavourite ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /classes/modules/favourite/Favourite.class.php#371 (show)
public function DeleteFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
    
$this->SetFavouriteTags($oFavourite,false);
    
//чистим зависимые кеши
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$oFavourite->getTargetType()}_change_user_{$oFavourite->getUserId()}"));
    
$this->Cache_Delete("favourite_{$oFavourite->getTargetType()}_{$oFavourite->getTargetId()}_{$oFavourite->getUserId()}");
    return 
$this->oMapper->DeleteFavourite($oFavourite);
}

Удаляет таргет из избранного

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

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

DeleteTagByTarget() method
public bool DeleteTagByTarget(array $aTargetId, string $sTargetType)
$aTargetId array Список ID владельцев
$sTargetType string Тип владельца
{return} bool
Source Code: /classes/modules/favourite/Favourite.class.php#415 (show)
public function DeleteTagByTarget($aTargetId,$sTargetType) {
    return 
$this->oMapper->DeleteTagByTarget($aTargetId,$sTargetType);
}

Удаление тегов по таргету

GetCountFavouriteOpenCommentsByUserId() method
public array GetCountFavouriteOpenCommentsByUserId(int $sUserId)
$sUserId int ID пользователя
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#234 (show)
public function GetCountFavouriteOpenCommentsByUserId($sUserId) {
    if (
false === ($data $this->Cache_Get("comment_count_favourite_user_{$sUserId}_open"))) {
        
$data $this->oMapper->GetCountFavouriteOpenCommentsByUserId($sUserId);
        
$this->Cache_Set(
            
$data,
            
"comment_count_favourite_user_{$sUserId}_open",
            array(
                
"favourite_comment_change",
                
"favourite_comment_change_user_{$sUserId}"
            
),
            
60*60*24*1
        
);
    }
    return 
$data;
}

Возвращает число комментариев к открытым блогам в избранном по ID пользователя

GetCountFavouriteOpenTopicsByUserId() method
public array GetCountFavouriteOpenTopicsByUserId(string $sUserId)
$sUserId string ID пользователя
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#282 (show)
public function GetCountFavouriteOpenTopicsByUserId($sUserId) {
    if (
false === ($data $this->Cache_Get("topic_count_favourite_user_{$sUserId}_open"))) {
        
$data $this->oMapper->GetCountFavouriteOpenTopicsByUserId($sUserId);
        
$this->Cache_Set(
            
$data,
            
"topic_count_favourite_user_{$sUserId}_open",
            array(
                
"favourite_topic_change",
                
"favourite_topic_change_user_{$sUserId}"
            
),
            
60*60*24*1
        
);
    }
    return 
$data;
}

Возвращает число топиков в открытых блогах из избранного по ID пользователя

GetCountFavouritesByUserId() method
public array GetCountFavouritesByUserId(int $sUserId, string $sTargetType, array $aExcludeTarget=array ( ))
$sUserId int ID пользователя
$sTargetType string Тип владельца
$aExcludeTarget array Список ID владельцев для исклчения
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#185 (show)
public function GetCountFavouritesByUserId($sUserId,$sTargetType,$aExcludeTarget=array()) {
    
$s=serialize($aExcludeTarget);
    if (
false === ($data $this->Cache_Get("{$sTargetType}_count_favourite_user_{$sUserId}_{$s}"))) {
        
$data $this->oMapper->GetCountFavouritesByUserId($sUserId,$sTargetType,$aExcludeTarget);
        
$this->Cache_Set(
            
$data,
            
"{$sTargetType}_count_favourite_user_{$sUserId}_{$s}",
            array(
                
"favourite_{$sTargetType}_change",
                
"favourite_{$sTargetType}_change_user_{$sUserId}"
            
),
            
60*60*24*1
        
);
    }
    return 
$data;
}

Возвращает число таргетов определенного типа в избранном по ID пользователя

GetFavourite() method
public ModuleFavourite_EntityFavourite|null GetFavourite(int $sTargetId, string $sTargetType, int $sUserId)
$sTargetId int ID владельца
$sTargetType string Тип владельца
$sUserId int ID пользователя
{return} ModuleFavourite_EntityFavourite|null
Source Code: /classes/modules/favourite/Favourite.class.php#47 (show)
public function GetFavourite($sTargetId,$sTargetType,$sUserId) {
    if (!
is_numeric($sTargetId) or !is_string($sTargetType)) {
        return 
null;
    }
    
$data=$this->GetFavouritesByArray($sTargetId,$sTargetType,$sUserId);
    return (isset(
$data[$sTargetId]))
        ? 
$data[$sTargetId]
        : 
null;
}

Получает информацию о том, найден ли таргет в избранном или нет

GetFavouriteOpenCommentsByUserId() method
public array GetFavouriteOpenCommentsByUserId(int $sUserId, int $iCurrPage, int $iPerPage)
$sUserId int ID пользователя
$iCurrPage int Номер страницы
$iPerPage int Количество элементов на страницу
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#210 (show)
public function GetFavouriteOpenCommentsByUserId($sUserId,$iCurrPage,$iPerPage) {
    if (
false === ($data $this->Cache_Get("comment_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open"))) {
        
$data = array(
            
'collection' => $this->oMapper->GetFavouriteOpenCommentsByUserId($sUserId,$iCount,$iCurrPage,$iPerPage),
            
'count'      => $iCount
        
);
        
$this->Cache_Set(
            
$data,
            
"comment_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open",
            array(
                
"favourite_comment_change",
                
"favourite_comment_change_user_{$sUserId}"
            
),
            
60*60*24*1
        
);
    }
    return 
$data;
}

Получает список комментариев к записям открытых блогов из избранного указанного пользователя

GetFavouriteOpenTopicsByUserId() method
public array GetFavouriteOpenTopicsByUserId(int $sUserId, int $iCurrPage, int $iPerPage)
$sUserId int ID пользователя
$iCurrPage int Номер страницы
$iPerPage int Количество элементов на страницу
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#258 (show)
public function GetFavouriteOpenTopicsByUserId($sUserId,$iCurrPage,$iPerPage) {
    if (
false === ($data $this->Cache_Get("topic_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open"))) {
        
$data = array(
            
'collection' => $this->oMapper->GetFavouriteOpenTopicsByUserId($sUserId,$iCount,$iCurrPage,$iPerPage),
            
'count'      => $iCount
        
);
        
$this->Cache_Set(
            
$data,
            
"topic_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open",
            array(
                
"favourite_topic_change",
                
"favourite_topic_change_user_{$sUserId}"
            
),
            
60*60*24*1
        
);
    }
    return 
$data;
}

Получает список топиков из открытых блогов из избранного указанного пользователя

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

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

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

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

GetFavouritesByUserId() method
public array GetFavouritesByUserId(int $sUserId, string $sTargetType, int $iCurrPage, int $iPerPage, array $aExcludeTarget=array ( ))
$sUserId int ID пользователя
$sTargetType string Тип владельца
$iCurrPage int Номер страницы
$iPerPage int Количество элементов на страницу
$aExcludeTarget array Список ID владельцев для исклчения
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#158 (show)
public function GetFavouritesByUserId($sUserId,$sTargetType,$iCurrPage,$iPerPage,$aExcludeTarget=array()) {
    
$s=serialize($aExcludeTarget);
    if (
false === ($data $this->Cache_Get("{$sTargetType}_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_{$s}"))) {
        
$data = array(
            
'collection' => $this->oMapper->GetFavouritesByUserId($sUserId,$sTargetType,$iCount,$iCurrPage,$iPerPage,$aExcludeTarget),
            
'count'      => $iCount
        
);
        
$this->Cache_Set(
            
$data,
            
"{$sTargetType}_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_{$s}",
            array(
                
"favourite_{$sTargetType}_change",
                
"favourite_{$sTargetType}_change_user_{$sUserId}"
            
),
            
60*60*24*1
        
);
    }
    return 
$data;
}

Получает список таргетов из избранного

GetGroupTags() method
public array GetGroupTags(int $iUserId, string $sTargetType, bool $bIsUser, int $iLimit)
$iUserId int ID пользователя
$sTargetType string Тип владельца
$bIsUser bool Возвращает все теги ли только пользовательские
$iLimit int Количество элементов
{return} array
Source Code: /classes/modules/favourite/Favourite.class.php#441 (show)
public function GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit) {
    return 
$this->oMapper->GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit);
}

Возвращает наиболее часто используемые теги

GetTags() method
public array('collection'=>array,'count'=>int) GetTags(array $aFilter, array $aOrder, int $iCurrPage, int $iPerPage)
$aFilter array Фильтр
$aOrder array Сортировка
$iCurrPage int Номер страницы
$iPerPage int Количество элементов на страницу
{return} array('collection'=>array,'count'=>int)
Source Code: /classes/modules/favourite/Favourite.class.php#453 (show)
public function GetTags($aFilter,$aOrder,$iCurrPage,$iPerPage) {
    return array(
'collection'=>$this->oMapper->GetTags($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}

Возвращает список тегов по фильтру

GetTagsTarget() method
public bool|array GetTagsTarget(string $sTargetType, int $iTargetId)
$sTargetType string Тип владельца
$iTargetId int ID владельца
{return} bool|array
Source Code: /classes/modules/favourite/Favourite.class.php#425 (show)
public function GetTagsTarget($sTargetType,$iTargetId) {
    
$sMethod 'GetTagsTarget'.func_camelize($sTargetType);
    if (
method_exists($this,$sMethod)) {
        return 
$this->$sMethod($iTargetId);
    }
    return 
false;
}

Возвращает список тегов для объекта избранного

GetTagsTargetTopic() method
public bool|array GetTagsTargetTopic(int $iTargetId)
$iTargetId int ID владельца
{return} bool|array
Source Code: /classes/modules/favourite/Favourite.class.php#463 (show)
public function GetTagsTargetTopic($iTargetId) {
    if (
$oTopic=$this->Topic_GetTopicById($iTargetId)) {
        return 
$oTopic->getTagsArray();
    }
    return 
false;
}

Возвращает список тегов для топика, название метода формируется автоматически из GetTagsTarget()

See Also

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

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

SetFavouriteTags() method
public void SetFavouriteTags(ModuleFavourite_EntityFavourite $oFavourite, bool $bAddNew=true)
$oFavourite ModuleFavourite_EntityFavourite Объект избранного
$bAddNew bool Добавлять новые теги или нет
Source Code: /classes/modules/favourite/Favourite.class.php#334 (show)
public function SetFavouriteTags($oFavourite,$bAddNew=true) {
    
/**
     * Удаляем все теги
     */
    
$this->oMapper->DeleteTags($oFavourite);
    
/**
     * Добавляем новые
     */
    
if ($bAddNew and $oFavourite->getTags()) {
        
/**
         * Добавляем теги объекта избранного, если есть
         */
        
if ($aTags=$this->GetTagsTarget($oFavourite->getTargetType(),$oFavourite->getTargetId())) {
            foreach(
$aTags as $sTag) {
                
$oTag=Engine::GetEntity('ModuleFavourite_EntityTag',$oFavourite->_getData());
                
$oTag->setText(htmlspecialchars($sTag));
                
$oTag->setIsUser(0);
                
$this->oMapper->AddTag($oTag);
            }
        }
        
/**
         * Добавляем пользовательские теги
         */
        
foreach($oFavourite->getTagsArray() as $sTag) {
            
$oTag=Engine::GetEntity('ModuleFavourite_EntityTag',$oFavourite->_getData());
            
$oTag->setText($sTag); // htmlspecialchars уже используется при установке тегов
            
$oTag->setIsUser(1);
            
$this->oMapper->AddTag($oTag);
        }
    }
}

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

SetFavouriteTargetPublish() method
public bool SetFavouriteTargetPublish(array|int $aTargetId, string $sTargetType, int $iPublish)
$aTargetId array|int Список ID владельцев
$sTargetType string Тип владельца
$iPublish int Флаг публикации
{return} bool
Source Code: /classes/modules/favourite/Favourite.class.php#386 (show)
public function SetFavouriteTargetPublish($aTargetId,$sTargetType,$iPublish) {
    if(!
is_array($aTargetId)) $aTargetId = array($aTargetId);

    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$sTargetType}_change"));
    return 
$this->oMapper->SetFavouriteTargetPublish($aTargetId,$sTargetType,$iPublish);
}

Меняет параметры публикации у таргета

UpdateFavourite() method
public bool UpdateFavourite(ModuleFavourite_EntityFavourite $oFavourite)
$oFavourite ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /classes/modules/favourite/Favourite.class.php#319 (show)
public function UpdateFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
    if (!
$oFavourite->getTags()) {
        
$oFavourite->setTags('');
    }
    
$this->SetFavouriteTags($oFavourite);
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$oFavourite->getTargetType()}_change_user_{$oFavourite->getUserId()}"));
    
$this->Cache_Delete("favourite_{$oFavourite->getTargetType()}_{$oFavourite->getTargetId()}_{$oFavourite->getUserId()}");
    return 
$this->oMapper->UpdateFavourite($oFavourite);
}

Обновляет запись об избранном