ModuleTopic

Package application.modules.topic
Inheritance class ModuleTopic » Module » LsObject
Since 1.0
Source Code /application/classes/modules/topic/Topic.class.php
Модуль для работы с топиками

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
aTopicTypes array Список типов топика ModuleTopic
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oMapperTopic ModuleTopic_MapperTopic Объект маппера ModuleTopic
oUserCurrent ModuleUser_EntityUser|null Объект текущего пользователя ModuleTopic

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AddFavouriteTopic() Добавляет топик в избранное ModuleTopic
AddTopic() Добавляет топик ModuleTopic
AddTopicTag() Добавление тега к топику ModuleTopic
AddTopicType() Добавляет новый тип топика в БД ModuleTopic
AttachBehavior() Присоединяет поведение к объекту LsObject
DeleteFavouriteTopic() Удаляет топик из избранного ModuleTopic
DeleteFavouriteTopicByArrayId() Удаляет топики из избранного по списку ModuleTopic
DeleteTopic() Удаляет топик. ModuleTopic
DeleteTopicAdditionalData() Удаляет свзяанные с топика данные ModuleTopic
DeleteTopicContentByTopicId() Удаление контента топика по его номеру ModuleTopic
DeleteTopicReadByArrayId() Удаляет записи о чтении записей по списку идентификаторов ModuleTopic
DeleteTopicTagsByTopicId() Удаляет теги у топика ModuleTopic
DeleteTopicType() Удаляет тип топика из БД ModuleTopic
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetCountDraftTopicsByUserId() Количество черновиков у пользователя ModuleTopic
GetCountTopicsByBlogNew() Получает число новых топиков из блога ModuleTopic
GetCountTopicsByFilter() Количество топиков по фильтру ModuleTopic
GetCountTopicsCollectiveNew() Получает число новых топиков в коллективных блогах ModuleTopic
GetCountTopicsFavouriteByUserId() Возвращает число топиков в избранном ModuleTopic
GetCountTopicsPersonalByUser() Возвращает количество топиков которые создал юзер ModuleTopic
GetCountTopicsPersonalNew() Получает число новых топиков в персональных блогах ModuleTopic
GetFavouriteTopic() Получает привязку топика к ибранному(добавлен ли топик в избранное у юзера) ModuleTopic
GetFavouriteTopicsByArray() Получить список избранного по списку айдишников ModuleTopic
GetFavouriteTopicsByArraySolid() Получить список избранного по списку айдишников, но используя единый кеш ModuleTopic
GetLastTopicsByUserId() Возвращает список последних топиков пользователя, опубликованных не более чем $iTimeLimit секунд назад ModuleTopic
GetOpenTopicTags() Получает список тегов из топиков открытых блогов (open,personal) ModuleTopic
GetTopicById() Получить топик по айдишнику ModuleTopic
GetTopicItemsByArrayId() Алиас для корректной работы ORM ModuleTopic
GetTopicRead() Получаем дату прочтения топика юзером ModuleTopic
GetTopicTags() Получает список тегов топиков ModuleTopic
GetTopicTagsByLike() Получает список тегов по первым буквам тега ModuleTopic
GetTopicType() Возвращает объект типа топика, поиск только среди активных типов ModuleTopic
GetTopicTypeByCode() Возвращает объект типа топика по его коду ModuleTopic
GetTopicTypeById() Возвращает объект типа топика по его ID ModuleTopic
GetTopicTypeItems() ModuleTopic
GetTopicTypes() Возвращает список типов топика, возвращаются только активные типы ModuleTopic
GetTopicUnique() Получает топик по уникальному хешу(текст топика) ModuleTopic
GetTopicsAdditionalData() Получает дополнительные данные(объекты) для топиков по их ID ModuleTopic
GetTopicsByArrayId() Получить список топиков по списку айдишников ModuleTopic
GetTopicsByArrayIdSolid() Получить список топиков по списку айдишников, но используя единый кеш ModuleTopic
GetTopicsByBlog() Список топиков из блога ModuleTopic
GetTopicsByBlogId() Получает список топиков из указанного блога ModuleTopic
GetTopicsByFilter() Список топиков по фильтру ModuleTopic
GetTopicsByTag() Получает список топиков по тегу ModuleTopic
GetTopicsCollective() Список топиков из коллективных блогов ModuleTopic
GetTopicsDiscussed() Получает список ВСЕХ обсуждаемых топиков ModuleTopic
GetTopicsFavouriteByUserId() Получает список топиков из избранного ModuleTopic
GetTopicsGood() Получает список хороших топиков для вывода на главную страницу(из всех блогов, как коллективных так и персональных) ModuleTopic
GetTopicsLast() Получает заданое число последних топиков ModuleTopic
GetTopicsNew() Получает список новых топиков, ограничение новизны по дате из конфига ModuleTopic
GetTopicsNewAll() Получает список ВСЕХ новых топиков ModuleTopic
GetTopicsPersonal() список топиков из персональных блогов ModuleTopic
GetTopicsPersonalByUser() Получает список топиков по юзеру ModuleTopic
GetTopicsRatingByDate() Получает топики по рейтингу и дате ModuleTopic
GetTopicsReadByArray() Получить список просмотром/чтения топиков по списку айдишников ModuleTopic
GetTopicsReadByArraySolid() Получить список просмотром/чтения топиков по списку айдишников, но используя единый кеш ModuleTopic
GetTopicsTop() Получает список ВСЕХ рейтинговых топиков ModuleTopic
Init() Инициализация ModuleTopic
IsAllowTopicType() Проверяет разрешен ли данный тип топика ModuleTopic
MoveTopics() Перемещает топики в другой блог ModuleTopic
MoveTopicsByArrayId() Перемещает топики в другой блог ModuleTopic
Parser() Парсинг текста с учетом конкретного топика ModuleTopic
RecalculateFavourite() Пересчитывает счетчик избранных топиков ModuleTopic
RecalculateVote() Пересчитывает счетчики голосований ModuleTopic
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
SendNotifyTopicNew() Рассылает уведомления о новом топике подписчикам блога ModuleTopic
SetFavouriteTopicPublish() Устанавливает переданный параметр публикации таргета (топика) ModuleTopic
SetInit() Помечает модуль как инициализированный Module
SetTopicRead() Обновляем/устанавливаем дату прочтения топика, если читаем его первый раз то добавляем ModuleTopic
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateTopic() Обновляет топик ModuleTopic
UpdateTopicByType() ModuleTopic
UpdateTopicContent() Обновляет контент топика в БД (таблица topic_content) ModuleTopic
UpdateTopicType() Обновляет тип топика в БД ModuleTopic
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
increaseTopicCountComment() Увеличивает у топика число комментов ModuleTopic
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject

Property Details

aTopicTypes property
protected array $aTopicTypes;

Список типов топика

oMapperTopic property
protected ModuleTopic_MapperTopic $oMapperTopic;

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

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

Объект текущего пользователя

Method Details

AddFavouriteTopic() method
public bool AddFavouriteTopic(ModuleFavourite_EntityFavourite $oFavouriteTopic)
$oFavouriteTopic ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1323 (show)
public function AddFavouriteTopic(ModuleFavourite_EntityFavourite $oFavouriteTopic)
{
    return 
$this->Favourite_AddFavourite($oFavouriteTopic);
}

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

AddTopic() method
public ModuleTopic_EntityTopic|bool AddTopic(ModuleTopic_EntityTopic $oTopic)
$oTopic ModuleTopic_EntityTopic Объект топика
{return} ModuleTopic_EntityTopic|bool
Source Code: /application/classes/modules/topic/Topic.class.php#208 (show)
public function AddTopic(ModuleTopic_EntityTopic $oTopic)
{
    if (
$sId $this->oMapperTopic->AddTopic($oTopic)) {
        
$oTopic->setId($sId);
        if (
$oTopic->getPublish() and $oTopic->getTags()) {
            
$aTags explode(','$oTopic->getTags());
            foreach (
$aTags as $sTag) {
                
$oTag Engine::GetEntity('Topic_TopicTag');
                
$oTag->setTopicId($oTopic->getId());
                
$oTag->setUserId($oTopic->getUserId());
                
$oTag->setBlogId($oTopic->getBlogId());
                
$oTag->setText($sTag);
                
$this->AddTopicTag($oTag);
            }
        }
        
/**
         * Обновляем дополнительные поля
         * Здесь важный момент - перед сохранением топика всегда нужно вызывать валидацию полей $this->Property_ValidateEntityPropertiesCheck($oTopic);
         * т.к. она подготавливает данные полей для сохранений
         * Валидация вызывается автоматически при вызове $oTopic->_Validate();
         */
        
$this->Property_UpdatePropertiesValue($oTopic->getPropertiesObject(), $oTopic);
        
//чистим зависимые кеши
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array(
                
'topic_new',
                
"topic_update_user_{$oTopic->getUserId()}",
                
"topic_new_blog_{$oTopic->getBlogId()}"
            
));
        return 
$oTopic;
    }
    return 
false;
}

Добавляет топик

AddTopicTag() method
public int AddTopicTag(ModuleTopic_EntityTopicTag $oTopicTag)
$oTopicTag ModuleTopic_EntityTopicTag Объект тега топика
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#247 (show)
public function AddTopicTag(ModuleTopic_EntityTopicTag $oTopicTag)
{
    return 
$this->oMapperTopic->AddTopicTag($oTopicTag);
}

Добавление тега к топику

AddTopicType() method
public ModuleTopic_EntityTopicType|bool AddTopicType(ModuleTopic_EntityTopicType $oType)
$oType ModuleTopic_EntityTopicType
{return} ModuleTopic_EntityTopicType|bool
Source Code: /application/classes/modules/topic/Topic.class.php#1707 (show)
public function AddTopicType($oType)
{
    if (
$sId $this->oMapperTopic->AddTopicType($oType)) {
        
$oType->setId($sId);
        
//чистим зависимые кеши
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_type_new'));
        
/**
         * Регистрируем новый тип в дополнительных полях
         * todo: fix lang text
         */
        
$this->Property_CreateTargetType('topic_' $oType->getCode(),
            array(
'entity' => 'ModuleTopic_EntityTopic''name' => 'Топик - ' $oType->getName()), true);
        return 
$oType;
    }
    return 
false;
}

Добавляет новый тип топика в БД

DeleteFavouriteTopic() method
public bool DeleteFavouriteTopic(ModuleFavourite_EntityFavourite $oFavouriteTopic)
$oFavouriteTopic ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1334 (show)
public function DeleteFavouriteTopic(ModuleFavourite_EntityFavourite $oFavouriteTopic)
{
    return 
$this->Favourite_DeleteFavourite($oFavouriteTopic);
}

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

DeleteFavouriteTopicByArrayId() method
public bool DeleteFavouriteTopicByArrayId(array $aTopicId)
$aTopicId array Список ID топиков
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1357 (show)
public function DeleteFavouriteTopicByArrayId($aTopicId)
{
    return 
$this->Favourite_DeleteFavouriteByTargetId($aTopicId'topic');
}

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

DeleteTopic() method
public bool DeleteTopic(ModuleTopic_EntityTopic|int $oTopicId)
$oTopicId ModuleTopic_EntityTopic|int Объект топика или ID
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#270 (show)
public function DeleteTopic($oTopicId)
{
    if (
$oTopicId instanceof ModuleTopic_EntityTopic) {
        
$sTopicId $oTopicId->getId();
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
            array(
"topic_update_user_{$oTopicId->getUserId()}"));
    } else {
        
$sTopicId $oTopicId;
    }
    
/**
     * Удаляем дополнительные поля
     */
    
$this->Property_RemovePropertiesValue(($oTopicId instanceof ModuleTopic_EntityTopic) ? $oTopicId $this->GetTopicById($oTopicId));
    
/**
     * Чистим зависимые кеши
     */
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_update'));
    
$this->Cache_Delete("topic_{$sTopicId}");
    
/**
     * Если топик успешно удален, удаляем связанные данные
     */
    
if ($this->oMapperTopic->DeleteTopic($sTopicId)) {
        return 
$this->DeleteTopicAdditionalData($sTopicId);
    }

    return 
false;
}

Удаляет топик. Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)

DeleteTopicAdditionalData() method
public bool DeleteTopicAdditionalData(int $iTopicId)
$iTopicId int ID топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#304 (show)
public function DeleteTopicAdditionalData($iTopicId)
{
    
/**
     * Чистим зависимые кеши
     */
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_update'));
    
$this->Cache_Delete("topic_{$iTopicId}");
    
/**
     * Удаляем контент топика
     */
    
$this->DeleteTopicContentByTopicId($iTopicId);
    
/**
     * Удаляем медиа данные топика
     */
    
$this->Media_RemoveTarget('topic'$iTopicIdtrue);
    
/**
     * Удаляем комментарии к топику.
     * При удалении комментариев они удаляются из избранного,прямого эфира и голоса за них
     */
    
$this->Comment_DeleteCommentByTargetId($iTopicId'topic');
    
/**
     * Удаляем топик из избранного
     */
    
$this->DeleteFavouriteTopicByArrayId($iTopicId);
    
/**
     * Удаляем топик из прочитанного
     */
    
$this->DeleteTopicReadByArrayId($iTopicId);
    
/**
     * Удаляем голосование к топику
     */
    
$this->Vote_DeleteVoteByTarget($iTopicId'topic');
    
/**
     * Удаляем теги
     */
    
$this->DeleteTopicTagsByTopicId($iTopicId);
    return 
true;
}

Удаляет свзяанные с топика данные

DeleteTopicContentByTopicId() method
public bool DeleteTopicContentByTopicId(int $iTopicId)
$iTopicId int ID топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#431 (show)
public function DeleteTopicContentByTopicId($iTopicId)
{
    return 
$this->oMapperTopic->DeleteTopicContentByTopicId($iTopicId);
}

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

DeleteTopicReadByArrayId() method
public bool DeleteTopicReadByArrayId(array|int $aTopicId)
$aTopicId array|int Список ID топиков
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1422 (show)
public function DeleteTopicReadByArrayId($aTopicId)
{
    if (!
is_array($aTopicId)) {
        
$aTopicId = array($aTopicId);
    }
    return 
$this->oMapperTopic->DeleteTopicReadByArrayId($aTopicId);
}

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

DeleteTopicTagsByTopicId() method
public bool DeleteTopicTagsByTopicId(int $sTopicId)
$sTopicId int ID топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#258 (show)
public function DeleteTopicTagsByTopicId($sTopicId)
{
    return 
$this->oMapperTopic->DeleteTopicTagsByTopicId($sTopicId);
}

Удаляет теги у топика

DeleteTopicType() method
public bool DeleteTopicType($sTypeId $sTypeId)
$sTypeId $sTypeId
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1753 (show)
public function DeleteTopicType($sTypeId)
{
    return 
$this->oMapperTopic->DeleteTopicType($sTypeId);
}

Удаляет тип топика из БД

GetCountDraftTopicsByUserId() method
public int GetCountDraftTopicsByUserId(int $iUserId)
$iUserId int ID пользователя
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#634 (show)
public function GetCountDraftTopicsByUserId($iUserId)
{
    return 
$this->GetCountTopicsByFilter(array(
        
'user_id'       => $iUserId,
        
'topic_publish' => 0
    
));
}

Количество черновиков у пользователя

GetCountTopicsByBlogNew() method
public int GetCountTopicsByBlogNew(ModuleBlog_EntityBlog $oBlog)
$oBlog ModuleBlog_EntityBlog Объект блога
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#1192 (show)
public function GetCountTopicsByBlogNew($oBlog)
{
    
$sDate date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
    
$aFilter = array(
        
'topic_publish' => 1,
        
'blog_id'       => $oBlog->getId(),
        
'topic_new'     => $sDate,

    );
    return 
$this->GetCountTopicsByFilter($aFilter);
}

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

GetCountTopicsByFilter() method
public int GetCountTopicsByFilter(array $aFilter)
$aFilter array Фильтр
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#618 (show)
public function GetCountTopicsByFilter($aFilter)
{
    
$s serialize($aFilter);
    if (
false === ($data $this->Cache_Get("topic_count_{$s}"))) {
        
$data $this->oMapperTopic->GetCountTopics($aFilter);
        
$this->Cache_Set($data"topic_count_{$s}", array('topic_update''topic_new'), 60 60 24 1);
    }
    return 
$data;
}

Количество топиков по фильтру

GetCountTopicsCollectiveNew() method
public int GetCountTopicsCollectiveNew()
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#1083 (show)
public function GetCountTopicsCollectiveNew()
{
    
$sDate date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
    
$aFilter = array(
        
'blog_type'     => array(
            
'open',
        ),
        
'topic_publish' => 1,
        
'topic_new'     => $sDate,
    );
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    return 
$this->GetCountTopicsByFilter($aFilter);
}

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

GetCountTopicsFavouriteByUserId() method
public int GetCountTopicsFavouriteByUserId(int $sUserId)
$sUserId int ID пользователя
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#577 (show)
public function GetCountTopicsFavouriteByUserId($sUserId)
{
    
$aCloseTopics = array();
    return (
$this->oUserCurrent && $sUserId == $this->oUserCurrent->getId())
        ? 
$this->Favourite_GetCountFavouritesByUserId($sUserId'topic'$aCloseTopics)
        : 
$this->Favourite_GetCountFavouriteOpenTopicsByUserId($sUserId);
}

Возвращает число топиков в избранном

GetCountTopicsPersonalByUser() method
public array GetCountTopicsPersonalByUser(int $sUserId, int $iPublish)
$sUserId int ID пользователя
$iPublish int Флаг публикации топика
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#968 (show)
public function GetCountTopicsPersonalByUser($sUserId$iPublish)
{
    
$aFilter = array(
        
'topic_publish' => $iPublish,
        
'user_id'       => $sUserId,
        
'blog_type'     => array('open''personal'),
    );
    
/**
     * Если пользователь смотрит свой профиль, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $this->oUserCurrent->getId() == $sUserId) {
        
$aFilter['blog_type'][] = 'close';
    }
    
$s serialize($aFilter);
    if (
false === ($data $this->Cache_Get("topic_count_user_{$s}"))) {
        
$data $this->oMapperTopic->GetCountTopics($aFilter);
        
$this->Cache_Set($data"topic_count_user_{$s}", array("topic_update_user_{$sUserId}"), 60 60 24);
    }
    return 
$data;
}

Возвращает количество топиков которые создал юзер

GetCountTopicsPersonalNew() method
public int GetCountTopicsPersonalNew()
{return} int
Source Code: /application/classes/modules/topic/Topic.class.php#922 (show)
public function GetCountTopicsPersonalNew()
{
    
$sDate date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
        ),
        
'topic_publish' => 1,
        
'topic_new'     => $sDate,
    );
    return 
$this->GetCountTopicsByFilter($aFilter);
}

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

GetFavouriteTopic() method
public ModuleFavourite_EntityFavourite GetFavouriteTopic(int $sTopicId, int $sUserId)
$sTopicId int ID топика
$sUserId int ID пользователя
{return} ModuleFavourite_EntityFavourite
Source Code: /application/classes/modules/topic/Topic.class.php#1288 (show)
public function GetFavouriteTopic($sTopicId$sUserId)
{
    return 
$this->Favourite_GetFavourite($sTopicId'topic'$sUserId);
}

Получает привязку топика к ибранному(добавлен ли топик в избранное у юзера)

GetFavouriteTopicsByArray() method
public array GetFavouriteTopicsByArray(array $aTopicId, int $sUserId)
$aTopicId array Список ID топиков
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1300 (show)
public function GetFavouriteTopicsByArray($aTopicId$sUserId)
{
    return 
$this->Favourite_GetFavouritesByArray($aTopicId'topic'$sUserId);
}

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

GetFavouriteTopicsByArraySolid() method
public array GetFavouriteTopicsByArraySolid(array $aTopicId, int $sUserId)
$aTopicId array Список ID топиков
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1312 (show)
public function GetFavouriteTopicsByArraySolid($aTopicId$sUserId)
{
    return 
$this->Favourite_GetFavouritesByArraySolid($aTopicId'topic'$sUserId);
}

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

GetLastTopicsByUserId() method
public array GetLastTopicsByUserId(int $sUserId, int $iTimeLimit, int $iCountLimit=1, array $aAllowData=array ( ))
$sUserId int ID пользователя
$iTimeLimit int Число секунд
$iCountLimit int Количество
$aAllowData array Список типов данных для подгрузки в топики
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1572 (show)
public function GetLastTopicsByUserId($sUserId$iTimeLimit$iCountLimit 1$aAllowData = array())
{
    
$aFilter = array(
        
'topic_publish' => 1,
        
'user_id'       => $sUserId,
        
'topic_new'     => date("Y-m-d H:i:s"time() - $iTimeLimit),
    );
    
$aTopics $this->GetTopicsByFilter($aFilter1$iCountLimit$aAllowData);

    return 
$aTopics;
}

Возвращает список последних топиков пользователя, опубликованных не более чем $iTimeLimit секунд назад

GetOpenTopicTags() method
public array GetOpenTopicTags(int $iLimit, int|null $iUserId=NULL)
$iLimit int Количество
$iUserId int|null ID пользователя, чью теги получаем
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1258 (show)
public function GetOpenTopicTags($iLimit$iUserId null)
{
    if (
false === ($data $this->Cache_Get("tag_{$iLimit}_{$iUserId}_open"))) {
        
$data $this->oMapperTopic->GetOpenTopicTags($iLimit$iUserId);
        
$this->Cache_Set($data"tag_{$iLimit}_{$iUserId}_open", array('topic_update''topic_new'),
            
60 60 24 3);
    }
    return 
$data;
}

Получает список тегов из топиков открытых блогов (open,personal)

GetTopicById() method
public ModuleTopic_EntityTopic|null GetTopicById(int $sId)
$sId int ID топика
{return} ModuleTopic_EntityTopic|null
Source Code: /application/classes/modules/topic/Topic.class.php#442 (show)
public function GetTopicById($sId)
{
    if (!
is_numeric($sId)) {
        return 
null;
    }
    
$aTopics $this->GetTopicsAdditionalData($sId);
    if (isset(
$aTopics[$sId])) {
        return 
$aTopics[$sId];
    }
    return 
null;
}

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

GetTopicItemsByArrayId() method
public array GetTopicItemsByArrayId(array $aTopocId)
$aTopocId array Список ID топиков
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1655 (show)
public function GetTopicItemsByArrayId($aTopocId)
{
    return 
$this->GetTopicsByArrayId($aTopocId);
}

Алиас для корректной работы ORM

GetTopicRead() method
public ModuleTopic_EntityTopicRead|null GetTopicRead(int $sTopicId, int $sUserId)
$sTopicId int ID топика
$sUserId int ID пользователя
{return} ModuleTopic_EntityTopicRead|null
Source Code: /application/classes/modules/topic/Topic.class.php#1407 (show)
public function GetTopicRead($sTopicId$sUserId)
{
    
$data $this->GetTopicsReadByArray($sTopicId$sUserId);
    if (isset(
$data[$sTopicId])) {
        return 
$data[$sTopicId];
    }
    return 
null;
}

Получаем дату прочтения топика юзером

GetTopicTags() method
public array GetTopicTags(int $iLimit, array $aExcludeTopic=array ( ))
$iLimit int Количество
$aExcludeTopic array Список ID топиков для исключения
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1241 (show)
public function GetTopicTags($iLimit$aExcludeTopic = array())
{
    
$s serialize($aExcludeTopic);
    if (
false === ($data $this->Cache_Get("tag_{$iLimit}_{$s}"))) {
        
$data $this->oMapperTopic->GetTopicTags($iLimit$aExcludeTopic);
        
$this->Cache_Set($data"tag_{$iLimit}_{$s}", array('topic_update''topic_new'), 60 60 24 3);
    }
    return 
$data;
}

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

GetTopicTagsByLike() method
public bool GetTopicTagsByLike(string $sTag, int $iLimit)
$sTag string Тэг
$iLimit int Количество
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1369 (show)
public function GetTopicTagsByLike($sTag$iLimit)
{
    if (
false === ($data $this->Cache_Get("tag_like_{$sTag}_{$iLimit}"))) {
        
$data $this->oMapperTopic->GetTopicTagsByLike($sTag$iLimit);
        
$this->Cache_Set($data"tag_like_{$sTag}_{$iLimit}", array("topic_update""topic_new"), 60 60 24 3);
    }
    return 
$data;
}

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

GetTopicType() method
public null GetTopicType(string $sType)
$sType string
{return} null
Source Code: /application/classes/modules/topic/Topic.class.php#86 (show)
public function GetTopicType($sType)
{
    return isset(
$this->aTopicTypes[$sType]) ? $this->aTopicTypes[$sType] : null;
}

Возвращает объект типа топика, поиск только среди активных типов

GetTopicTypeByCode() method
public ModuleTopic_EntityTopicType|null GetTopicTypeByCode(string $sCode)
$sCode string
{return} ModuleTopic_EntityTopicType|null
Source Code: /application/classes/modules/topic/Topic.class.php#1683 (show)
public function GetTopicTypeByCode($sCode)
{
    return 
$this->oMapperTopic->GetTopicTypeByCode($sCode);
}

Возвращает объект типа топика по его коду

GetTopicTypeById() method
public ModuleTopic_EntityTopicType|null GetTopicTypeById(int $iId)
$iId int
{return} ModuleTopic_EntityTopicType|null
Source Code: /application/classes/modules/topic/Topic.class.php#1695 (show)
public function GetTopicTypeById($iId)
{
    return 
$this->oMapperTopic->GetTopicTypeById($iId);
}

Возвращает объект типа топика по его ID

GetTopicTypeItems() method
public mixed GetTopicTypeItems(array $aFilter=array ( ))
$aFilter array
{return} mixed
Source Code: /application/classes/modules/topic/Topic.class.php#1729 (show)
public function GetTopicTypeItems($aFilter = array())
{
    return 
$this->oMapperTopic->GetTopicTypeItems($aFilter);
}

GetTopicTypes() method
public array GetTopicTypes(bool $bOnlyCode=false)
$bOnlyCode bool Вернуть только коды типов
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#74 (show)
public function GetTopicTypes($bOnlyCode false)
{
    return 
$bOnlyCode array_keys($this->aTopicTypes) : $this->aTopicTypes;
}

Возвращает список типов топика, возвращаются только активные типы

GetTopicUnique() method
public ModuleTopic_EntityTopic|null GetTopicUnique(int $sUserId, string $sHash)
$sUserId int
$sHash string
{return} ModuleTopic_EntityTopic|null
Source Code: /application/classes/modules/topic/Topic.class.php#1533 (show)
public function GetTopicUnique($sUserId$sHash)
{
    
$sId $this->oMapperTopic->GetTopicUnique($sUserId$sHash);
    return 
$this->GetTopicById($sId);
}

Получает топик по уникальному хешу(текст топика)

GetTopicsAdditionalData() method
public array GetTopicsAdditionalData(array $aTopicId, array|null $aAllowData=NULL)
$aTopicId array Список ID топиков
$aAllowData array|null Список типов дополнительных данных, которые нужно подключать к топикам
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#109 (show)
public function GetTopicsAdditionalData($aTopicId$aAllowData null)
{
    if (
is_null($aAllowData)) {
        
$aAllowData = array(
            
'user' => array(),
            
'blog' => array('owner' => array(), 'relation_user'),
            
'vote',
            
'favourite',
            
'comment_new',
            
'properties'
        
);
    }
    
func_array_simpleflip($aAllowData);
    if (!
is_array($aTopicId)) {
        
$aTopicId = array($aTopicId);
    }
    
/**
     * Получаем "голые" топики
     */
    
$aTopics $this->GetTopicsByArrayId($aTopicId);
    
/**
     * Формируем ID дополнительных данных, которые нужно получить
     */
    
$aUserId = array();
    
$aBlogId = array();
    foreach (
$aTopics as $oTopic) {
        if (isset(
$aAllowData['user'])) {
            
$aUserId[] = $oTopic->getUserId();
        }
        if (isset(
$aAllowData['blog'])) {
            
$aBlogId[] = $oTopic->getBlogId();
        }
    }
    
/**
     * Получаем дополнительные данные
     */
    
$aTopicsVote = array();
    
$aFavouriteTopics = array();
    
$aTopicsRead = array();
    
$aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId,
        
$aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId);
    
$aBlogs = isset($aAllowData['blog']) && is_array($aAllowData['blog']) ? $this->Blog_GetBlogsAdditionalData($aBlogId,
        
$aAllowData['blog']) : $this->Blog_GetBlogsAdditionalData($aBlogId);
    if (isset(
$aAllowData['vote']) and $this->oUserCurrent) {
        
$aTopicsVote $this->Vote_GetVoteByArray($aTopicId'topic'$this->oUserCurrent->getId());
    }
    if (isset(
$aAllowData['favourite']) and $this->oUserCurrent) {
        
$aFavouriteTopics $this->GetFavouriteTopicsByArray($aTopicId$this->oUserCurrent->getId());
    }
    if (isset(
$aAllowData['comment_new']) and $this->oUserCurrent) {
        
$aTopicsRead $this->GetTopicsReadByArray($aTopicId$this->oUserCurrent->getId());
    }
    
/**
     * Добавляем данные к результату - списку топиков
     */
    
foreach ($aTopics as $oTopic) {
        if (isset(
$aUsers[$oTopic->getUserId()])) {
            
$oTopic->setUser($aUsers[$oTopic->getUserId()]);
        } else {
            
$oTopic->setUser(null); // или $oTopic->setUser(new ModuleUser_EntityUser());
        
}
        if (isset(
$aBlogs[$oTopic->getBlogId()])) {
            
$oTopic->setBlog($aBlogs[$oTopic->getBlogId()]);
        } else {
            
$oTopic->setBlog(null); // или $oTopic->setBlog(new ModuleBlog_EntityBlog());
        
}
        if (isset(
$aTopicsVote[$oTopic->getId()])) {
            
$oTopic->setVote($aTopicsVote[$oTopic->getId()]);
        } else {
            
$oTopic->setVote(null);
        }
        if (isset(
$aFavouriteTopics[$oTopic->getId()])) {
            
$oTopic->setFavourite($aFavouriteTopics[$oTopic->getId()]);
        } else {
            
$oTopic->setFavourite(null);
        }
        if (isset(
$aTopicsRead[$oTopic->getId()])) {
            
$oTopic->setCountCommentNew($oTopic->getCountComment() - $aTopicsRead[$oTopic->getId()]->getCommentCountLast());
            
$oTopic->setDateRead($aTopicsRead[$oTopic->getId()]->getDateRead());
        } else {
            
$oTopic->setCountCommentNew(0);
            
$oTopic->setDateRead(date("Y-m-d H:i:s"));
        }
    }
    
/**
     * Цепляем дополнительные поля
     */
    
if (isset($aAllowData['properties'])) {
        
$this->Property_RewriteGetItemsByFilter($aTopics, array('#properties' => true));
    }
    return 
$aTopics;
}

Получает дополнительные данные(объекты) для топиков по их ID

GetTopicsByArrayId() method
public array GetTopicsByArrayId(array $aTopicId)
$aTopicId array Список ID топиков
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#460 (show)
public function GetTopicsByArrayId($aTopicId)
{
    if (!
$aTopicId) {
        return array();
    }
    if (
Config::Get('sys.cache.solid')) {
        return 
$this->GetTopicsByArrayIdSolid($aTopicId);
    }

    if (!
is_array($aTopicId)) {
        
$aTopicId = array($aTopicId);
    }
    
$aTopicId array_unique($aTopicId);
    
$aTopics = array();
    
$aTopicIdNotNeedQuery = array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys func_build_cache_keys($aTopicId'topic_');
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey) {
            if (
array_key_exists($sKey$data)) {
                if (
$data[$sKey]) {
                    
$aTopics[$data[$sKey]->getId()] = $data[$sKey];
                } else {
                    
$aTopicIdNotNeedQuery[] = $sValue;
                }
            }
        }
    }
    
/**
     * Смотрим каких топиков не было в кеше и делаем запрос в БД
     */
    
$aTopicIdNeedQuery array_diff($aTopicIdarray_keys($aTopics));
    
$aTopicIdNeedQuery array_diff($aTopicIdNeedQuery$aTopicIdNotNeedQuery);
    
$aTopicIdNeedStore $aTopicIdNeedQuery;
    if (
$data $this->oMapperTopic->GetTopicsByArrayId($aTopicIdNeedQuery)) {
        foreach (
$data as $oTopic) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aTopics[$oTopic->getId()] = $oTopic;
            
$this->Cache_Set($oTopic"topic_{$oTopic->getId()}", array(), 60 60 24 4);
            
$aTopicIdNeedStore array_diff($aTopicIdNeedStore, array($oTopic->getId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aTopicIdNeedStore as $sId) {
        
$this->Cache_Set(null"topic_{$sId}", array(), 60 60 24 4);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aTopics func_array_sort_by_keys($aTopics$aTopicId);
    return 
$aTopics;
}

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

GetTopicsByArrayIdSolid() method
public array GetTopicsByArrayIdSolid(array $aTopicId)
$aTopicId array Список ID топиков
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#528 (show)
public function GetTopicsByArrayIdSolid($aTopicId)
{
    if (!
is_array($aTopicId)) {
        
$aTopicId = array($aTopicId);
    }
    
$aTopicId array_unique($aTopicId);
    
$aTopics = array();
    
$s join(','$aTopicId);
    if (
false === ($data $this->Cache_Get("topic_id_{$s}"))) {
        
$data $this->oMapperTopic->GetTopicsByArrayId($aTopicId);
        foreach (
$data as $oTopic) {
            
$aTopics[$oTopic->getId()] = $oTopic;
        }
        
$this->Cache_Set($aTopics"topic_id_{$s}", array("topic_update"), 60 60 24 1);
        return 
$aTopics;
    }
    return 
$data;
}

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

GetTopicsByBlog() method
public array GetTopicsByBlog(ModuleBlog_EntityBlog $oBlog, int $iPage, int $iPerPage, string $sShowType='good', string $sPeriod=NULL)
$oBlog ModuleBlog_EntityBlog Объект блога
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$sShowType string Тип выборки топиков
$sPeriod string Период в виде секунд или конкретной даты
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1142 (show)
public function GetTopicsByBlog($oBlog$iPage$iPerPage$sShowType 'good'$sPeriod null)
{
    if (
is_numeric($sPeriod)) {
        
// количество последних секунд
        
$sPeriod date("Y-m-d H:00:00"time() - $sPeriod);
    }
    
$aFilter = array(
        
'topic_publish' => 1,
        
'blog_id'       => $oBlog->getId(),
    );
    if (
$sPeriod) {
        
$aFilter['topic_date_more'] = $sPeriod;
    }
    switch (
$sShowType) {
        case 
'good':
            
$aFilter['topic_rating'] = array(
                
'value' => Config::Get('module.blog.collective_good'),
                
'type'  => 'top',
            );
            break;
        case 
'bad':
            
$aFilter['topic_rating'] = array(
                
'value' => Config::Get('module.blog.collective_good'),
                
'type'  => 'down',
            );
            break;
        case 
'new':
            
$aFilter['topic_new'] = date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
            break;
        case 
'newall':
            
// нет доп фильтра
            
break;
        case 
'discussed':
            
$aFilter['order'] = array('t.topic_count_comment desc''t.topic_id desc');
            break;
        case 
'top':
            
$aFilter['order'] = array('t.topic_rating desc''t.topic_id desc');
            break;
        default:
            break;
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Список топиков из блога

GetTopicsByBlogId() method
public array GetTopicsByBlogId(int $iBlogId, int $iPage=1, int $iPerPage=20, array $aAllowData=array ( ), bool $bIdsOnly=true)
$iBlogId int ID блога
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$aAllowData array Список типов данных для подгрузки в топики
$bIdsOnly bool Возвращать только ID или список объектов
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1000 (show)
public function GetTopicsByBlogId($iBlogId$iPage 1$iPerPage 20$aAllowData = array(), $bIdsOnly true)
{
    
$aFilter = array('blog_id' => $iBlogId);

    if (!
$aTopics $this->GetTopicsByFilter($aFilter$iPage$iPerPage$aAllowData)) {
        return array();
    }

    return (
$bIdsOnly)
        ? 
array_keys($aTopics['collection'])
        : 
$aTopics;
}

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

GetTopicsByFilter() method
public array('collection'=>array,'count'=>int) GetTopicsByFilter(array $aFilter, int $iPage=1, int $iPerPage=10, array|null $aAllowData=NULL)
$aFilter array Фильтр
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$aAllowData array|null Список типов данных для подгрузки в топики
{return} array('collection'=>array,'count'=>int)
Source Code: /application/classes/modules/topic/Topic.class.php#594 (show)
public function GetTopicsByFilter($aFilter$iPage 1$iPerPage 10$aAllowData null)
{
    if (!
is_numeric($iPage) or $iPage <= 0) {
        
$iPage 1;
    }
    
$s serialize($aFilter);
    if (
false === ($data $this->Cache_Get("topic_filter_{$s}_{$iPage}_{$iPerPage}"))) {
        
$data = array(
            
'collection' => $this->oMapperTopic->GetTopics($aFilter$iCount$iPage$iPerPage),
            
'count'      => $iCount
        
);
        
$this->Cache_Set($data"topic_filter_{$s}_{$iPage}_{$iPerPage}", array('topic_update''topic_new'),
            
60 60 24 3);
    }
    
$data['collection'] = $this->GetTopicsAdditionalData($data['collection'], $aAllowData);
    return 
$data;
}

Список топиков по фильтру

GetTopicsByTag() method
public array GetTopicsByTag(string $sTag, int $iPage, int $iPerPage, bool $bAddAccessible=true)
$sTag string Тег
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$bAddAccessible bool Указывает на необходимость добавить в выдачу топики, из блогов доступных пользователю. При указании false, в выдачу будут переданы только топики из общедоступных блогов.
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1215 (show)
public function GetTopicsByTag($sTag$iPage$iPerPage$bAddAccessible true)
{
    
$aCloseBlogs = ($this->oUserCurrent && $bAddAccessible)
        ? 
$this->Blog_GetInaccessibleBlogsByUser($this->oUserCurrent)
        : 
$this->Blog_GetInaccessibleBlogsByUser();

    
$s serialize($aCloseBlogs);
    if (
false === ($data $this->Cache_Get("topic_tag_{$sTag}_{$iPage}_{$iPerPage}_{$s}"))) {
        
$data = array(
            
'collection' => $this->oMapperTopic->GetTopicsByTag($sTag$aCloseBlogs$iCount$iPage$iPerPage),
            
'count'      => $iCount
        
);
        
$this->Cache_Set($data"topic_tag_{$sTag}_{$iPage}_{$iPerPage}_{$s}", array('topic_update''topic_new'),
            
60 60 24 2);
    }
    
$data['collection'] = $this->GetTopicsAdditionalData($data['collection']);
    return 
$data;
}

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

GetTopicsCollective() method
public array GetTopicsCollective(int $iPage, int $iPerPage, string $sShowType='good', string $sPeriod=NULL)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$sShowType string Тип выборки топиков
$sPeriod string Период в виде секунд или конкретной даты
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1022 (show)
public function GetTopicsCollective($iPage$iPerPage$sShowType 'good'$sPeriod null)
{
    if (
is_numeric($sPeriod)) {
        
// количество последних секунд
        
$sPeriod date("Y-m-d H:00:00"time() - $sPeriod);
    }
    
$aFilter = array(
        
'blog_type'     => array(
            
'open',
        ),
        
'topic_publish' => 1,
    );
    if (
$sPeriod) {
        
$aFilter['topic_date_more'] = $sPeriod;
    }
    switch (
$sShowType) {
        case 
'good':
            
$aFilter['topic_rating'] = array(
                
'value' => Config::Get('module.blog.collective_good'),
                
'type'  => 'top',
            );
            break;
        case 
'bad':
            
$aFilter['topic_rating'] = array(
                
'value' => Config::Get('module.blog.collective_good'),
                
'type'  => 'down',
            );
            break;
        case 
'new':
            
$aFilter['topic_new'] = date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
            break;
        case 
'newall':
            
// нет доп фильтра
            
break;
        case 
'discussed':
            
$aFilter['order'] = array('t.topic_count_comment desc''t.topic_id desc');
            break;
        case 
'top':
            
$aFilter['order'] = array('t.topic_rating desc''t.topic_id desc');
            break;
        default:
            break;
    }
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Список топиков из коллективных блогов

GetTopicsDiscussed() method
public array GetTopicsDiscussed(int $iPage, int $iPerPage, int|string $sPeriod=NULL, bool $bAddAccessible=true)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$sPeriod int|string Период в виде секунд или конкретной даты
$bAddAccessible bool Указывает на необходимость добавить в выдачу топики, из блогов доступных пользователю. При указании false, в выдачу будут переданы только топики из общедоступных блогов.
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#757 (show)
public function GetTopicsDiscussed($iPage$iPerPage$sPeriod null$bAddAccessible true)
{
    if (
is_numeric($sPeriod)) {
        
// количество последних секунд
        
$sPeriod date("Y-m-d H:00:00"time() - $sPeriod);
    }

    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
            
'open',
        ),
        
'topic_publish' => 1
    
);
    if (
$sPeriod) {
        
$aFilter['topic_date_more'] = $sPeriod;
    }
    
$aFilter['order'] = ' t.topic_count_comment desc, t.topic_id desc ';
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $bAddAccessible) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Получает список ВСЕХ обсуждаемых топиков

GetTopicsFavouriteByUserId() method
public array('collection'=>array,'count'=>int) GetTopicsFavouriteByUserId(int $sUserId, int $iCurrPage, int $iPerPage)
$sUserId int ID пользователя
$iCurrPage int Номер текущей страницы
$iPerPage int Количество элементов на страницу
{return} array('collection'=>array,'count'=>int)
Source Code: /application/classes/modules/topic/Topic.class.php#555 (show)
public function GetTopicsFavouriteByUserId($sUserId$iCurrPage$iPerPage)
{
    
$aCloseTopics = array();
    
/**
     * Получаем список идентификаторов избранных записей
     */
    
$data = ($this->oUserCurrent && $sUserId == $this->oUserCurrent->getId())
        ? 
$this->Favourite_GetFavouritesByUserId($sUserId'topic'$iCurrPage$iPerPage$aCloseTopics)
        : 
$this->Favourite_GetFavouriteOpenTopicsByUserId($sUserId$iCurrPage$iPerPage);
    
/**
     * Получаем записи по переданому массиву айдишников
     */
    
$data['collection'] = $this->GetTopicsAdditionalData($data['collection']);
    return 
$data;
}

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

GetTopicsGood() method
public array GetTopicsGood(int $iPage, int $iPerPage, bool $bAddAccessible=true)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$bAddAccessible bool Указывает на необходимость добавить в выдачу топики, из блогов доступных пользователю. При указании false, в выдачу будут переданы только топики из общедоступных блогов.
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#652 (show)
public function GetTopicsGood($iPage$iPerPage$bAddAccessible true)
{
    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
            
'open'
        
),
        
'topic_publish' => 1,
        
'topic_rating'  => array(
            
'value'         => Config::Get('module.blog.index_good'),
            
'type'          => 'top',
            
'publish_index' => 1,
        )
    );
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $bAddAccessible) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }

    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

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

GetTopicsLast() method
public array GetTopicsLast(int $iCount)
$iCount int Количество
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#836 (show)
public function GetTopicsLast($iCount)
{
    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
            
'open',
        ),
        
'topic_publish' => 1,
    );
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    
$aReturn $this->GetTopicsByFilter($aFilter1$iCount);
    if (isset(
$aReturn['collection'])) {
        return 
$aReturn['collection'];
    }
    return 
false;
}

Получает заданое число последних топиков

GetTopicsNew() method
public array GetTopicsNew(int $iPage, int $iPerPage, bool $bAddAccessible=true)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$bAddAccessible bool Указывает на необходимость добавить в выдачу топики, из блогов доступных пользователю. При указании false, в выдачу будут переданы только топики из общедоступных блогов.
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#690 (show)
public function GetTopicsNew($iPage$iPerPage$bAddAccessible true)
{
    
$sDate date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
            
'open',
        ),
        
'topic_publish' => 1,
        
'topic_new'     => $sDate,
    );
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $bAddAccessible) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Получает список новых топиков, ограничение новизны по дате из конфига

GetTopicsNewAll() method
public array GetTopicsNewAll(int $iPage, int $iPerPage, bool $bAddAccessible=true)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$bAddAccessible bool Указывает на необходимость добавить в выдачу топики, из блогов доступных пользователю. При указании false, в выдачу будут переданы только топики из общедоступных блогов.
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#724 (show)
public function GetTopicsNewAll($iPage$iPerPage$bAddAccessible true)
{
    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
            
'open',
        ),
        
'topic_publish' => 1,
    );
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $bAddAccessible) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Получает список ВСЕХ новых топиков

GetTopicsPersonal() method
public array GetTopicsPersonal(int $iPage, int $iPerPage, string $sShowType='good', string|int $sPeriod=NULL)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$sShowType string Тип выборки топиков
$sPeriod string|int Период в виде секунд или конкретной даты
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#871 (show)
public function GetTopicsPersonal($iPage$iPerPage$sShowType 'good'$sPeriod null)
{
    if (
is_numeric($sPeriod)) {
        
// количество последних секунд
        
$sPeriod date("Y-m-d H:00:00"time() - $sPeriod);
    }
    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
        ),
        
'topic_publish' => 1,
    );
    if (
$sPeriod) {
        
$aFilter['topic_date_more'] = $sPeriod;
    }
    switch (
$sShowType) {
        case 
'good':
            
$aFilter['topic_rating'] = array(
                
'value' => Config::Get('module.blog.personal_good'),
                
'type'  => 'top',
            );
            break;
        case 
'bad':
            
$aFilter['topic_rating'] = array(
                
'value' => Config::Get('module.blog.personal_good'),
                
'type'  => 'down',
            );
            break;
        case 
'new':
            
$aFilter['topic_new'] = date("Y-m-d H:00:00"time() - Config::Get('module.topic.new_time'));
            break;
        case 
'newall':
            
// нет доп фильтра
            
break;
        case 
'discussed':
            
$aFilter['order'] = array('t.topic_count_comment desc''t.topic_id desc');
            break;
        case 
'top':
            
$aFilter['order'] = array('t.topic_rating desc''t.topic_id desc');
            break;
        default:
            break;
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

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

GetTopicsPersonalByUser() method
public array GetTopicsPersonalByUser(int $sUserId, int $iPublish, int $iPage, int $iPerPage)
$sUserId int ID пользователя
$iPublish int Флаг публикации топика
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#944 (show)
public function GetTopicsPersonalByUser($sUserId$iPublish$iPage$iPerPage)
{
    
$aFilter = array(
        
'topic_publish' => $iPublish,
        
'user_id'       => $sUserId,
        
'blog_type'     => array('open''personal'),
    );
    
/**
     * Если пользователь смотрит свой профиль, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $this->oUserCurrent->getId() == $sUserId) {
        
$aFilter['blog_type'][] = 'close';
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Получает список топиков по юзеру

GetTopicsRatingByDate() method
public array GetTopicsRatingByDate(string $sDate, int $iLimit=20)
$sDate string Дата
$iLimit int Количество
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1113 (show)
public function GetTopicsRatingByDate($sDate$iLimit 20)
{
    
/**
     * Получаем список блогов, топики которых нужно исключить из выдачи
     */
    
$aCloseBlogs = ($this->oUserCurrent)
        ? 
$this->Blog_GetInaccessibleBlogsByUser($this->oUserCurrent)
        : 
$this->Blog_GetInaccessibleBlogsByUser();

    
$s serialize($aCloseBlogs);

    if (
false === ($data $this->Cache_Get("topic_rating_{$sDate}_{$iLimit}_{$s}"))) {
        
$data $this->oMapperTopic->GetTopicsRatingByDate($sDate$iLimit$aCloseBlogs);
        
$this->Cache_Set($data"topic_rating_{$sDate}_{$iLimit}_{$s}", array('topic_update'), 60 60 24 2);
    }
    
$data $this->GetTopicsAdditionalData($data);
    return 
$data;
}

Получает топики по рейтингу и дате

GetTopicsReadByArray() method
public array GetTopicsReadByArray(array $aTopicId, int $sUserId)
$aTopicId array Список ID топиков
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1437 (show)
public function GetTopicsReadByArray($aTopicId$sUserId)
{
    if (!
$aTopicId) {
        return array();
    }
    if (
Config::Get('sys.cache.solid')) {
        return 
$this->GetTopicsReadByArraySolid($aTopicId$sUserId);
    }
    if (!
is_array($aTopicId)) {
        
$aTopicId = array($aTopicId);
    }
    
$aTopicId array_unique($aTopicId);
    
$aTopicsRead = array();
    
$aTopicIdNotNeedQuery = array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys func_build_cache_keys($aTopicId'topic_read_''_' $sUserId);
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey) {
            if (
array_key_exists($sKey$data)) {
                if (
$data[$sKey]) {
                    
$aTopicsRead[$data[$sKey]->getTopicId()] = $data[$sKey];
                } else {
                    
$aTopicIdNotNeedQuery[] = $sValue;
                }
            }
        }
    }
    
/**
     * Смотрим каких топиков не было в кеше и делаем запрос в БД
     */
    
$aTopicIdNeedQuery array_diff($aTopicIdarray_keys($aTopicsRead));
    
$aTopicIdNeedQuery array_diff($aTopicIdNeedQuery$aTopicIdNotNeedQuery);
    
$aTopicIdNeedStore $aTopicIdNeedQuery;
    if (
$data $this->oMapperTopic->GetTopicsReadByArray($aTopicIdNeedQuery$sUserId)) {
        foreach (
$data as $oTopicRead) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aTopicsRead[$oTopicRead->getTopicId()] = $oTopicRead;
            
$this->Cache_Set($oTopicRead"topic_read_{$oTopicRead->getTopicId()}_{$oTopicRead->getUserId()}",
                array(), 
60 60 24 4);
            
$aTopicIdNeedStore array_diff($aTopicIdNeedStore, array($oTopicRead->getTopicId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aTopicIdNeedStore as $sId) {
        
$this->Cache_Set(null"topic_read_{$sId}_{$sUserId}", array(), 60 60 24 4);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aTopicsRead func_array_sort_by_keys($aTopicsRead$aTopicId);
    return 
$aTopicsRead;
}

Получить список просмотром/чтения топиков по списку айдишников

GetTopicsReadByArraySolid() method
public array GetTopicsReadByArraySolid(array $aTopicId, int $sUserId)
$aTopicId array Список ID топиков
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#1506 (show)
public function GetTopicsReadByArraySolid($aTopicId$sUserId)
{
    if (!
is_array($aTopicId)) {
        
$aTopicId = array($aTopicId);
    }
    
$aTopicId array_unique($aTopicId);
    
$aTopicsRead = array();
    
$s join(','$aTopicId);
    if (
false === ($data $this->Cache_Get("topic_read_{$sUserId}_id_{$s}"))) {
        
$data $this->oMapperTopic->GetTopicsReadByArray($aTopicId$sUserId);
        foreach (
$data as $oTopicRead) {
            
$aTopicsRead[$oTopicRead->getTopicId()] = $oTopicRead;
        }
        
$this->Cache_Set($aTopicsRead"topic_read_{$sUserId}_id_{$s}", array("topic_read_user_{$sUserId}"),
            
60 60 24 1);
        return 
$aTopicsRead;
    }
    return 
$data;
}

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

GetTopicsTop() method
public array GetTopicsTop(int $iPage, int $iPerPage, int|string $sPeriod=NULL, bool $bAddAccessible=true)
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
$sPeriod int|string Период в виде секунд или конкретной даты
$bAddAccessible bool Указывает на необходимость добавить в выдачу топики, из блогов доступных пользователю. При указании false, в выдачу будут переданы только топики из общедоступных блогов.
{return} array
Source Code: /application/classes/modules/topic/Topic.class.php#799 (show)
public function GetTopicsTop($iPage$iPerPage$sPeriod null$bAddAccessible true)
{
    if (
is_numeric($sPeriod)) {
        
// количество последних секунд
        
$sPeriod date("Y-m-d H:00:00"time() - $sPeriod);
    }

    
$aFilter = array(
        
'blog_type'     => array(
            
'personal',
            
'open',
        ),
        
'topic_publish' => 1
    
);
    if (
$sPeriod) {
        
$aFilter['topic_date_more'] = $sPeriod;
    }
    
$aFilter['order'] = array('t.topic_rating desc''t.topic_id desc');
    
/**
     * Если пользователь авторизирован, то добавляем в выдачу
     * закрытые блоги в которых он состоит
     */
    
if ($this->oUserCurrent && $bAddAccessible) {
        
$aOpenBlogs $this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent);
        if (
count($aOpenBlogs)) {
            
$aFilter['blog_type']['close'] = $aOpenBlogs;
        }
    }
    return 
$this->GetTopicsByFilter($aFilter$iPage$iPerPage);
}

Получает список ВСЕХ рейтинговых топиков

Init() method
public void Init()
Source Code: /application/classes/modules/topic/Topic.class.php#56 (show)
public function Init()
{
    
$this->oMapperTopic Engine::GetMapper(__CLASS__);
    
$this->oUserCurrent $this->User_GetUserCurrent();

    
$aTopicTypeItems $this->GetTopicTypeItems(array('state' => self::TOPIC_TYPE_STATE_ACTIVE));
    foreach (
$aTopicTypeItems as $oTypeItem) {
        
$this->aTopicTypes[$oTypeItem->getCode()] = $oTypeItem;
    }
}

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

IsAllowTopicType() method
public bool IsAllowTopicType(string $sType)
$sType string Тип
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#97 (show)
public function IsAllowTopicType($sType)
{
    return 
array_key_exists($sType$this->aTopicTypes);
}

Проверяет разрешен ли данный тип топика

MoveTopics() method
public bool MoveTopics(int $sBlogId, int $sBlogIdNew)
$sBlogId int ID старого блога
$sBlogIdNew int ID нового блога
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1613 (show)
public function MoveTopics($sBlogId$sBlogIdNew)
{
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
        array(
"topic_update""topic_new_blog_{$sBlogId}""topic_new_blog_{$sBlogIdNew}"));
    if (
$res $this->oMapperTopic->MoveTopics($sBlogId$sBlogIdNew)) {
        
// перемещаем теги
        
$this->oMapperTopic->MoveTopicsTags($sBlogId$sBlogIdNew);
        
// меняем target parent у комментов
        
$this->Comment_MoveTargetParent($sBlogId'topic'$sBlogIdNew);
        
// меняем target parent у комментов в прямом эфире
        
$this->Comment_MoveTargetParentOnline($sBlogId'topic'$sBlogIdNew);
        return 
$res;
    }
    return 
false;
}

Перемещает топики в другой блог

MoveTopicsByArrayId() method
public bool MoveTopicsByArrayId(array $aTopics, int $sBlogId)
$aTopics array Список ID топиков
$sBlogId int ID блога
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1591 (show)
public function MoveTopicsByArrayId($aTopics$sBlogId)
{
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("topic_update""topic_new_blog_{$sBlogId}"));
    if (
$res $this->oMapperTopic->MoveTopicsByArrayId($aTopics$sBlogId)) {
        
// перемещаем теги
        
$this->oMapperTopic->MoveTopicsTagsByArrayId($aTopics$sBlogId);
        
// меняем target parent у комментов
        
$this->Comment_UpdateTargetParentByTargetId($sBlogId'topic'$aTopics);
        
// меняем target parent у комментов в прямом эфире
        
$this->Comment_UpdateTargetParentByTargetIdOnline($sBlogId'topic'$aTopics);
        return 
$res;
    }
    return 
false;
}

Перемещает топики в другой блог

Parser() method
public string Parser(string $sText, ModuleTopic_EntityTopic $oTopic)
$sText string
$oTopic ModuleTopic_EntityTopic
{return} string
Source Code: /application/classes/modules/topic/Topic.class.php#1668 (show)
public function Parser($sText$oTopic)
{
    
$this->Text_AddParams(array('oTopic' => $oTopic));
    
$sResult $this->Text_Parser($sText);
    
$this->Text_RemoveParams(array('oTopic'));
    return 
$sResult;
}

Парсинг текста с учетом конкретного топика

RecalculateFavourite() method
public bool RecalculateFavourite()
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1634 (show)
public function RecalculateFavourite()
{
    return 
$this->oMapperTopic->RecalculateFavourite();
}

Пересчитывает счетчик избранных топиков

RecalculateVote() method
public bool RecalculateVote()
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1644 (show)
public function RecalculateVote()
{
    return 
$this->oMapperTopic->RecalculateVote();
}

Пересчитывает счетчики голосований

SendNotifyTopicNew() method
public void SendNotifyTopicNew(ModuleBlog_EntityBlog $oBlog, ModuleTopic_EntityTopic $oTopic, ModuleUser_EntityUser $oUserTopic)
$oBlog ModuleBlog_EntityBlog Объект блога
$oTopic ModuleTopic_EntityTopic Объект топика
$oUserTopic ModuleUser_EntityUser Объект пользователя
Source Code: /application/classes/modules/topic/Topic.class.php#1546 (show)
public function SendNotifyTopicNew($oBlog$oTopic$oUserTopic)
{
    
$aBlogUsersResult $this->Blog_GetBlogUsersByBlogId($oBlog->getId(), null,
        
null); // нужно постранично пробегаться по всем
    
$aBlogUsers $aBlogUsersResult['collection'];
    foreach (
$aBlogUsers as $oBlogUser) {
        if (
$oBlogUser->getUserId() == $oUserTopic->getId()) {
            continue;
        }
        
$this->Notify_SendTopicNewToSubscribeBlog($oBlogUser->getUser(), $oTopic$oBlog$oUserTopic);
    }
    
//отправляем создателю блога
    
if ($oBlog->getOwnerId() != $oUserTopic->getId()) {
        
$this->Notify_SendTopicNewToSubscribeBlog($oBlog->getOwner(), $oTopic$oBlog$oUserTopic);
    }
}

Рассылает уведомления о новом топике подписчикам блога

SetFavouriteTopicPublish() method
public bool SetFavouriteTopicPublish(int $sTopicId, int $iPublish)
$sTopicId int ID топика
$iPublish int Флаг публикации топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1346 (show)
public function SetFavouriteTopicPublish($sTopicId$iPublish)
{
    return 
$this->Favourite_SetFavouriteTargetPublish($sTopicId'topic'$iPublish);
}

Устанавливает переданный параметр публикации таргета (топика)

SetTopicRead() method
public bool SetTopicRead(ModuleTopic_EntityTopicRead $oTopicRead)
$oTopicRead ModuleTopic_EntityTopicRead Объект факта чтения топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1384 (show)
public function SetTopicRead(ModuleTopic_EntityTopicRead $oTopicRead)
{
    if (
$this->GetTopicRead($oTopicRead->getTopicId(), $oTopicRead->getUserId())) {
        
$this->Cache_Delete("topic_read_{$oTopicRead->getTopicId()}_{$oTopicRead->getUserId()}");
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
            array(
"topic_read_user_{$oTopicRead->getUserId()}"));
        
$this->oMapperTopic->UpdateTopicRead($oTopicRead);
    } else {
        
$this->Cache_Delete("topic_read_{$oTopicRead->getTopicId()}_{$oTopicRead->getUserId()}");
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
            array(
"topic_read_user_{$oTopicRead->getUserId()}"));
        
$this->oMapperTopic->AddTopicRead($oTopicRead);
    }
    return 
true;
}

Обновляем/устанавливаем дату прочтения топика, если читаем его первый раз то добавляем

UpdateTopic() method
public bool UpdateTopic(ModuleTopic_EntityTopic $oTopic)
$oTopic ModuleTopic_EntityTopic Объект топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#349 (show)
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic)
{
    
/**
     * Получаем топик ДО изменения
     */
    
$oTopicOld $this->GetTopicById($oTopic->getId());
    
$oTopic->setDateEdit(date("Y-m-d H:i:s"));
    if (
$this->oMapperTopic->UpdateTopic($oTopic)) {
        
/**
         * Если топик изменил видимость(publish) или локацию (BlogId) или список тегов
         */
        
if (($oTopic->getPublish() != $oTopicOld->getPublish()) || ($oTopic->getBlogId() != $oTopicOld->getBlogId()) || ($oTopic->getTags() != $oTopicOld->getTags())) {
            
/**
             * Обновляем теги
             */
            
$this->DeleteTopicTagsByTopicId($oTopic->getId());
            if (
$oTopic->getPublish() and $oTopic->getTags()) {
                
$aTags explode(','$oTopic->getTags());
                foreach (
$aTags as $sTag) {
                    
$oTag Engine::GetEntity('Topic_TopicTag');
                    
$oTag->setTopicId($oTopic->getId());
                    
$oTag->setUserId($oTopic->getUserId());
                    
$oTag->setBlogId($oTopic->getBlogId());
                    
$oTag->setText($sTag);
                    
$this->AddTopicTag($oTag);
                }
            }
        }
        if (
$oTopic->getPublish() != $oTopicOld->getPublish()) {
            
/**
             * Обновляем избранное
             */
            
$this->SetFavouriteTopicPublish($oTopic->getId(), $oTopic->getPublish());
            
/**
             * Удаляем комментарий топика из прямого эфира
             */
            
if ($oTopic->getPublish() == 0) {
                
$this->Comment_DeleteCommentOnlineByTargetId($oTopic->getId(), 'topic');
            }
            
/**
             * Изменяем видимость комментов
             */
            
$this->Comment_SetCommentsPublish($oTopic->getId(), 'topic'$oTopic->getPublish());
        }
        
/**
         * Обновляем дополнительные поля
         * Здесь важный момент - перед сохранением топика всегда нужно вызывать валидацию полей $this->Property_ValidateEntityPropertiesCheck($oTopic);
         * т.к. она подготавливает данные полей для сохранений
         * Валидация вызывается автоматически при вызове $oTopic->_Validate();
         */
        
$this->Property_UpdatePropertiesValue($oTopic->getPropertiesObject(), $oTopic);
        
//чистим зависимые кеши
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
            array(
'topic_update'"topic_update_user_{$oTopic->getUserId()}"));
        
$this->Cache_Delete("topic_{$oTopic->getId()}");
        return 
true;
    }
    return 
false;
}

Обновляет топик

UpdateTopicByType() method
public void UpdateTopicByType($sType, $sTypeNew)
$sType
$sTypeNew
Source Code: /application/classes/modules/topic/Topic.class.php#1758 (show)
public function UpdateTopicByType($sType$sTypeNew)
{
    
$res $this->oMapperTopic->UpdateTopicByType($sType$sTypeNew);
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("topic_update"));
    return 
$res;
}

UpdateTopicContent() method
public bool UpdateTopicContent(ModuleTopic_EntityTopic $oTopic)
$oTopic ModuleTopic_EntityTopic
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#416 (show)
public function UpdateTopicContent($oTopic)
{
    
$bRes $this->oMapperTopic->UpdateTopicContent($oTopic);
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
        array(
'topic_update'"topic_update_user_{$oTopic->getUserId()}"));
    
$this->Cache_Delete("topic_{$oTopic->getId()}");
    return 
$bRes;
}

Обновляет контент топика в БД (таблица topic_content)

UpdateTopicType() method
public bool UpdateTopicType(ModuleTopic_EntityTopicType $oType)
$oType ModuleTopic_EntityTopicType
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1741 (show)
public function UpdateTopicType($oType)
{
    return 
$this->oMapperTopic->UpdateTopicType($oType);
}

Обновляет тип топика в БД

increaseTopicCountComment() method
public bool increaseTopicCountComment(int $sTopicId)
$sTopicId int ID топика
{return} bool
Source Code: /application/classes/modules/topic/Topic.class.php#1274 (show)
public function increaseTopicCountComment($sTopicId)
{
    
$this->Cache_Delete("topic_{$sTopicId}");
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("topic_update"));
    return 
$this->oMapperTopic->increaseTopicCountComment($sTopicId);
}

Увеличивает у топика число комментов