ModuleFavourite
Package | modules.favourite |
---|---|
Inheritance | class ModuleFavourite » Module » LsObject |
Since | 1.0 |
Source Code | /classes/modules/favourite/Favourite.class.php |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oEngine | Engine | Объект ядра | Module |
oMapper | ModuleFavourite_MapperFavourite | Объект маппера | ModuleFavourite |
Public Methods
Method | Description | Defined 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
Method | Description | Defined By |
---|---|---|
__clone() | Блокируем копирование/клонирование объекта | Module |
Property Details
Объект маппера
Method Details
public bool AddFavourite(ModuleFavourite_EntityFavourite $oFavourite)
| ||
$oFavourite | ModuleFavourite_EntityFavourite | Объект избранного |
{return} | bool |
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);
}
Добавляет таргет в избранное
public bool DeleteFavourite(ModuleFavourite_EntityFavourite $oFavourite)
| ||
$oFavourite | ModuleFavourite_EntityFavourite | Объект избранного |
{return} | bool |
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);
}
Удаляет таргет из избранного
public bool DeleteFavouriteByTargetId(array|int $aTargetId, string $sTargetType)
| ||
$aTargetId | array|int | Список ID владельцев |
$sTargetType | string | Тип владельца |
{return} | bool |
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);
}
Удаляет избранное по списку идентификаторов таргетов
public bool DeleteTagByTarget(array $aTargetId, string $sTargetType)
| ||
$aTargetId | array | Список ID владельцев |
$sTargetType | string | Тип владельца |
{return} | bool |
public function DeleteTagByTarget($aTargetId,$sTargetType) {
return $this->oMapper->DeleteTagByTarget($aTargetId,$sTargetType);
}
Удаление тегов по таргету
public array GetCountFavouriteOpenCommentsByUserId(int $sUserId)
| ||
$sUserId | int | ID пользователя |
{return} | array |
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 пользователя
public array GetCountFavouriteOpenTopicsByUserId(string $sUserId)
| ||
$sUserId | string | ID пользователя |
{return} | array |
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 пользователя
public array GetCountFavouritesByUserId(int $sUserId, string $sTargetType, array $aExcludeTarget=array (
))
| ||
$sUserId | int | ID пользователя |
$sTargetType | string | Тип владельца |
$aExcludeTarget | array | Список ID владельцев для исклчения |
{return} | array |
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 пользователя
public ModuleFavourite_EntityFavourite|null GetFavourite(int $sTargetId, string $sTargetType, int $sUserId)
| ||
$sTargetId | int | ID владельца |
$sTargetType | string | Тип владельца |
$sUserId | int | ID пользователя |
{return} | ModuleFavourite_EntityFavourite|null |
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;
}
Получает информацию о том, найден ли таргет в избранном или нет
public array GetFavouriteOpenCommentsByUserId(int $sUserId, int $iCurrPage, int $iPerPage)
| ||
$sUserId | int | ID пользователя |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
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;
}
Получает список комментариев к записям открытых блогов из избранного указанного пользователя
public array GetFavouriteOpenTopicsByUserId(int $sUserId, int $iCurrPage, int $iPerPage)
| ||
$sUserId | int | ID пользователя |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
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;
}
Получает список топиков из открытых блогов из избранного указанного пользователя
public array GetFavouritesByArray(array $aTargetId, string $sTargetType, int $sUserId)
| ||
$aTargetId | array | Список ID владельцев |
$sTargetType | string | Тип владельца |
$sUserId | int | ID пользователя |
{return} | array |
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;
}
Получить список избранного по списку айдишников
public array GetFavouritesByArraySolid(array $aTargetId, string $sTargetType, int $sUserId)
| ||
$aTargetId | array | Список ID владельцев |
$sTargetType | string | Тип владельца |
$sUserId | int | ID пользователя |
{return} | array |
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;
}
Получить список избранного по списку айдишников, но используя единый кеш
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 |
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;
}
Получает список таргетов из избранного
public array GetGroupTags(int $iUserId, string $sTargetType, bool $bIsUser, int $iLimit)
| ||
$iUserId | int | ID пользователя |
$sTargetType | string | Тип владельца |
$bIsUser | bool | Возвращает все теги ли только пользовательские |
$iLimit | int | Количество элементов |
{return} | array |
public function GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit) {
return $this->oMapper->GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit);
}
Возвращает наиболее часто используемые теги
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) |
public function GetTags($aFilter,$aOrder,$iCurrPage,$iPerPage) {
return array('collection'=>$this->oMapper->GetTags($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}
Возвращает список тегов по фильтру
public bool|array GetTagsTarget(string $sTargetType, int $iTargetId)
| ||
$sTargetType | string | Тип владельца |
$iTargetId | int | ID владельца |
{return} | bool|array |
public function GetTagsTarget($sTargetType,$iTargetId) {
$sMethod = 'GetTagsTarget'.func_camelize($sTargetType);
if (method_exists($this,$sMethod)) {
return $this->$sMethod($iTargetId);
}
return false;
}
Возвращает список тегов для объекта избранного
public bool|array GetTagsTargetTopic(int $iTargetId)
| ||
$iTargetId | int | ID владельца |
{return} | bool|array |
public function GetTagsTargetTopic($iTargetId) {
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
return $oTopic->getTagsArray();
}
return false;
}
Возвращает список тегов для топика, название метода формируется автоматически из GetTagsTarget()
See Also
public void Init()
|
public function Init() {
$this->oMapper=Engine::GetMapper(__CLASS__);
}
Инициализация
public void SetFavouriteTags(ModuleFavourite_EntityFavourite $oFavourite, bool $bAddNew=true)
| ||
$oFavourite | ModuleFavourite_EntityFavourite | Объект избранного |
$bAddNew | bool | Добавлять новые теги или нет |
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);
}
}
}
Устанавливает список тегов для избранного
public bool SetFavouriteTargetPublish(array|int $aTargetId, string $sTargetType, int $iPublish)
| ||
$aTargetId | array|int | Список ID владельцев |
$sTargetType | string | Тип владельца |
$iPublish | int | Флаг публикации |
{return} | bool |
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);
}
Меняет параметры публикации у таргета
public bool UpdateFavourite(ModuleFavourite_EntityFavourite $oFavourite)
| ||
$oFavourite | ModuleFavourite_EntityFavourite | Объект избранного |
{return} | bool |
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);
}
Обновляет запись об избранном