ModuleTalk

Package application.modules.talk
Inheritance class ModuleTalk » Module » LsObject
Since 1.0
Source Code /application/classes/modules/talk/Talk.class.php
Модуль разговоров(почта)

Protected Properties

Hide inherited properties

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

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AddFavouriteTalk() Добавляет письмо в избранное ModuleTalk
AddTalk() Добавляет новую тему разговора ModuleTalk
AddTalkUser() Добавляет юзера к разговору(теме) ModuleTalk
AddUserArrayToBlacklist() Добавление пользователя в блеклист по списку идентификаторов ModuleTalk
AddUserToBlacklist() Добавление пользователя в блеклист по переданному идентификатору ModuleTalk
AttachBehavior() Присоединяет поведение к объекту LsObject
DeleteFavouriteTalk() Удаляет письмо из избранного ModuleTalk
DeleteTalk() Удаление письма из БД ModuleTalk
DeleteTalkUserByArray() Удаляет юзера из разговора ModuleTalk
DeleteUserFromBlacklist() Удаляем пользователя из блеклиста ModuleTalk
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetBlacklistByTargetId() Возвращает пользователей, у которых данный занесен в Blacklist ModuleTalk
GetBlacklistByUserId() Получает информацию о пользователях, занесенных в блеклист ModuleTalk
GetCountTalkNew() Получает число новых тем и комментов где есть юзер ModuleTalk
GetCountTalksFavouriteByUserId() Возвращает число писем в избранном ModuleTalk
GetFavouriteTalk() Получает привязку письма к ибранному(добавлено ли письмо в избранное у юзера) ModuleTalk
GetFavouriteTalkByArray() Получить список избранного по списку айдишников ModuleTalk
GetFavouriteTalksByArraySolid() Получить список избранного по списку айдишников, но используя единый кеш ModuleTalk
GetLastTalksByUserId() Возвращает список последних инбоксов пользователя, ModuleTalk
GetTalkById() Получает тему разговора по айдишнику ModuleTalk
GetTalkUser() Есть ли юзер в этом разговоре ModuleTalk
GetTalkUsersByArray() Получить список отношений разговор-юзер по списку айдишников ModuleTalk
GetTalkUsersByTalkId() Возвращает массив пользователей, участвующих в разговоре ModuleTalk
GetTalksAdditionalData() Получает дополнительные данные(объекты) для разговоров по их ID ModuleTalk
GetTalksByArrayId() Получить список разговоров по списку айдишников ModuleTalk
GetTalksByArrayIdSolid() Получить список разговоров по списку айдишников, используя общий кеш ModuleTalk
GetTalksByFilter() Получить все темы разговора по фильтру ModuleTalk
GetTalksByUserId() Получить все темы разговора где есть юзер ModuleTalk
GetTalksFavouriteByUserId() Получает список писем из избранного пользователя ModuleTalk
GetUsersTalk() Получает список юзеров в теме разговора ModuleTalk
Init() Инициализация ModuleTalk
MarkReadTalkUserByArray() Помечает разговоры как прочитанные ModuleTalk
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
SendTalk() Формирует и отправляет личное сообщение ModuleTalk
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateTalk() Обновление разговора ModuleTalk
UpdateTalkUser() Обновляет связку разговор-юзер ModuleTalk
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
increaseCountCommentNew() Увеличивает число новых комментов у юзеров ModuleTalk
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

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

Property Details

oMapper property
protected ModuleTalk_MapperTalk $oMapper;

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

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

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

Method Details

AddFavouriteTalk() method
public bool AddFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite)
$oFavourite ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#764 (show)
public function AddFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite)
{
    return (
$oFavourite->getTargetType() == 'talk')
        ? 
$this->Favourite_AddFavourite($oFavourite)
        : 
false;
}

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

AddTalk() method
public ModuleTalk_EntityTalk|bool AddTalk(ModuleTalk_EntityTalk $oTalk)
$oTalk ModuleTalk_EntityTalk Объект сообщения
{return} ModuleTalk_EntityTalk|bool
Source Code: /application/classes/modules/talk/Talk.class.php#137 (show)
public function AddTalk(ModuleTalk_EntityTalk $oTalk)
{
    if (
$sId $this->oMapper->AddTalk($oTalk)) {
        
$oTalk->setId($sId);
        
//чистим зависимые кеши
        
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
            array(
'talk_new'"talk_new_user_{$oTalk->getUserId()}"));
        return 
$oTalk;
    }
    return 
false;
}

Добавляет новую тему разговора

AddTalkUser() method
public bool AddTalkUser(ModuleTalk_EntityTalkUser $oTalkUser)
$oTalkUser ModuleTalk_EntityTalkUser Объект связи пользователя и сообщения(разговора)
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#426 (show)
public function AddTalkUser(ModuleTalk_EntityTalkUser $oTalkUser)
{
    
$this->Cache_Delete("talk_{$oTalkUser->getTalkId()}");
    
$this->Cache_Clean(
        
Zend_Cache::CLEANING_MODE_MATCHING_TAG,
        array(
            
"update_talk_user_{$oTalkUser->getTalkId()}"
        
)
    );
    return 
$this->oMapper->AddTalkUser($oTalkUser);
}

Добавляет юзера к разговору(теме)

AddUserArrayToBlacklist() method
public bool AddUserArrayToBlacklist(array $aTargetId, int $sUserId)
$aTargetId array Список ID пользователей, которых добавляем в блэклист
$sUserId int ID пользователя
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#826 (show)
public function AddUserArrayToBlacklist($aTargetId$sUserId)
{
    foreach ((array)
$aTargetId as $oUser) {
        
$aUsersId[] = $oUser instanceof ModuleUser_EntityUser $oUser->getId() : (int)$oUser;
    }
    return 
$this->oMapper->AddUserArrayToBlacklist($aUsersId$sUserId);
}

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

AddUserToBlacklist() method
public bool AddUserToBlacklist(int $sTargetId, int $sUserId)
$sTargetId int ID пользователя, которого добавляем в блэклист
$sUserId int ID пользователя
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#814 (show)
public function AddUserToBlacklist($sTargetId$sUserId)
{
    return 
$this->oMapper->AddUserToBlacklist($sTargetId$sUserId);
}

Добавление пользователя в блеклист по переданному идентификатору

DeleteFavouriteTalk() method
public bool DeleteFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite)
$oFavourite ModuleFavourite_EntityFavourite Объект избранного
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#777 (show)
public function DeleteFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite)
{
    return (
$oFavourite->getTargetType() == 'talk')
        ? 
$this->Favourite_DeleteFavourite($oFavourite)
        : 
false;
}

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

DeleteTalk() method
public void DeleteTalk(int $iTalkId)
$iTalkId int ID разговора
Source Code: /application/classes/modules/talk/Talk.class.php#871 (show)
public function DeleteTalk($iTalkId)
{
    
$this->oMapper->deleteTalk($iTalkId);
    
/**
     * Удаляем комментарии к письму.
     * При удалении комментариев они удаляются из избранного,прямого эфира и голоса за них
     */
    
$this->Comment_DeleteCommentByTargetId($iTalkId'talk');
    
/**
     * Удаляем медиа данные
     */
    
$this->Media_RemoveTarget('talk'$iTalkIdtrue);
}

Удаление письма из БД

DeleteTalkUserByArray() method
public bool DeleteTalkUserByArray(array $aTalkId, int $sUserId, int $iActive=2)
$aTalkId array Список ID сообщений
$sUserId int ID пользователя
$iActive int Статус связи
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#471 (show)
public function DeleteTalkUserByArray($aTalkId$sUserId$iActive self::TALK_USER_DELETE_BY_SELF)
{
    if (!
is_array($aTalkId)) {
        
$aTalkId = array($aTalkId);
    }
    
// Удаляем для каждого отметку избранного
    
foreach ($aTalkId as $sTalkId) {
        
$this->DeleteFavouriteTalk(
            
Engine::GetEntity('Favourite',
                array(
                    
'target_id'   => (string)$sTalkId,
                    
'target_type' => 'talk',
                    
'user_id'     => $sUserId
                
)
            )
        );
    }
    
// Нужно почистить зависимые кеши
    
foreach ($aTalkId as $sTalkId) {
        
$sTalkId = (string)$sTalkId;
        
$this->Cache_Clean(
            
Zend_Cache::CLEANING_MODE_MATCHING_TAG,
            array(
"update_talk_user_{$sTalkId}")
        );
    }
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("update_talk_user"));
    
$ret $this->oMapper->DeleteTalkUserByArray($aTalkId$sUserId$iActive);

    
// Удаляем пустые беседы, если в них нет пользователей
    
foreach ($aTalkId as $sTalkId) {
        
$sTalkId = (string)$sTalkId;
        if (!
count($this->GetUsersTalk($sTalkId, array(self::TALK_USER_ACTIVE)))) {
            
$this->DeleteTalk($sTalkId);
        }
    }
    return 
$ret;
}

Удаляет юзера из разговора

DeleteUserFromBlacklist() method
public bool DeleteUserFromBlacklist(int $sTargetId, int $sUserId)
$sTargetId int ID пользователя, которого удаляем из блэклиста
$sUserId int ID пользователя
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#841 (show)
public function DeleteUserFromBlacklist($sTargetId$sUserId)
{
    return 
$this->oMapper->DeleteUserFromBlacklist($sTargetId$sUserId);
}

Удаляем пользователя из блеклиста

GetBlacklistByTargetId() method
public array GetBlacklistByTargetId(int $sUserId)
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#802 (show)
public function GetBlacklistByTargetId($sUserId)
{
    return 
$this->oMapper->GetBlacklistByTargetId($sUserId);
}

Возвращает пользователей, у которых данный занесен в Blacklist

GetBlacklistByUserId() method
public array GetBlacklistByUserId(int $sUserId)
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#790 (show)
public function GetBlacklistByUserId($sUserId)
{
    
$data $this->oMapper->GetBlacklistByUserId($sUserId);
    return 
$this->User_GetUsersAdditionalData($data);
}

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

GetCountTalkNew() method
public int GetCountTalkNew(int $sUserId)
$sUserId int ID пользователя
{return} int
Source Code: /application/classes/modules/talk/Talk.class.php#604 (show)
public function GetCountTalkNew($sUserId)
{
    if (
false === ($data $this->Cache_Get("talk_count_all_new_user_{$sUserId}"))) {
        
$data $this->oMapper->GetCountCommentNew($sUserId) + $this->oMapper->GetCountTalkNew($sUserId);
        
$this->Cache_Set($data"talk_count_all_new_user_{$sUserId}",
            array(
"talk_new""update_talk_user""talk_read_user_{$sUserId}"), 60 60 24);
    }
    return 
$data;
}

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

GetCountTalksFavouriteByUserId() method
public int GetCountTalksFavouriteByUserId(int $sUserId)
$sUserId int ID пользователя
{return} int
Source Code: /application/classes/modules/talk/Talk.class.php#753 (show)
public function GetCountTalksFavouriteByUserId($sUserId)
{
    return 
$this->Favourite_GetCountFavouritesByUserId($sUserId'talk');
}

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

GetFavouriteTalk() method
public ModuleFavourite_EntityFavourite|null GetFavouriteTalk(int $sTalkId, int $sUserId)
$sTalkId int ID разговора
$sUserId int ID пользователя
{return} ModuleFavourite_EntityFavourite|null
Source Code: /application/classes/modules/talk/Talk.class.php#688 (show)
public function GetFavouriteTalk($sTalkId$sUserId)
{
    return 
$this->Favourite_GetFavourite($sTalkId'talk'$sUserId);
}

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

GetFavouriteTalkByArray() method
public array GetFavouriteTalkByArray(array $aTalkId, int $sUserId)
$aTalkId array Список ID разговоров
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#700 (show)
public function GetFavouriteTalkByArray($aTalkId$sUserId)
{
    return 
$this->Favourite_GetFavouritesByArray($aTalkId'talk'$sUserId);
}

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

GetFavouriteTalksByArraySolid() method
public array GetFavouriteTalksByArraySolid(array $aTalkId, int $sUserId)
$aTalkId array Список ID разговоров
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#712 (show)
public function GetFavouriteTalksByArraySolid($aTalkId$sUserId)
{
    return 
$this->Favourite_GetFavouritesByArraySolid($aTalkId'talk'$sUserId);
}

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

GetLastTalksByUserId() method
public array GetLastTalksByUserId(int $sUserId, int $iTimeLimit, int $iCountLimit=1)
$sUserId int ID пользователя
$iTimeLimit int Количество секунд
$iCountLimit int Количество
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#855 (show)
public function GetLastTalksByUserId($sUserId$iTimeLimit$iCountLimit 1)
{
    
$aFilter = array(
        
'sender_id' => $sUserId,
        
'date_min'  => date("Y-m-d H:i:s"time() - $iTimeLimit),
    );
    
$aTalks $this->GetTalksByFilter($aFilter1$iCountLimit);

    return 
$aTalks;
}

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

GetTalkById() method
public ModuleTalk_EntityTalk|null GetTalkById(int $sId)
$sId int ID сообщения
{return} ModuleTalk_EntityTalk|null
Source Code: /application/classes/modules/talk/Talk.class.php#403 (show)
public function GetTalkById($sId)
{
    if (!
is_numeric($sId)) {
        return 
null;
    }
    
$aTalks $this->GetTalksAdditionalData($sId);
    if (isset(
$aTalks[$sId])) {
        
$aResult $this->GetTalkUsersByTalkId($sId);
        foreach ((array)
$aResult as $oTalkUser) {
            
$aTalkUsers[$oTalkUser->getUserId()] = $oTalkUser;
        }
        
$aTalks[$sId]->setTalkUsers($aTalkUsers);
        return 
$aTalks[$sId];
    }
    return 
null;
}

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

GetTalkUser() method
public ModuleTalk_EntityTalkUser|null GetTalkUser(int $sTalkId, int $sUserId)
$sTalkId int ID разговора
$sUserId int ID пользователя
{return} ModuleTalk_EntityTalkUser|null
Source Code: /application/classes/modules/talk/Talk.class.php#516 (show)
public function GetTalkUser($sTalkId$sUserId)
{
    
$aTalkUser $this->GetTalkUsersByArray($sTalkId$sUserId);
    if (isset(
$aTalkUser[$sTalkId])) {
        return 
$aTalkUser[$sTalkId];
    }
    return 
null;
}

Есть ли юзер в этом разговоре

GetTalkUsersByArray() method
public array GetTalkUsersByArray(array $aTalkId, int $sUserId)
$aTalkId array Список ID сообщений
$sUserId int ID пользователя
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#341 (show)
public function GetTalkUsersByArray($aTalkId$sUserId)
{
    if (!
is_array($aTalkId)) {
        
$aTalkId = array($aTalkId);
    }
    
$aTalkId array_unique($aTalkId);
    
$aTalkUsers = array();
    
$aTalkIdNotNeedQuery = array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys func_build_cache_keys($aTalkId'talk_user_''_' $sUserId);
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey) {
            if (
array_key_exists($sKey$data)) {
                if (
$data[$sKey]) {
                    
$aTalkUsers[$data[$sKey]->getTalkId()] = $data[$sKey];
                } else {
                    
$aTalkIdNotNeedQuery[] = $sValue;
                }
            }
        }
    }
    
/**
     * Смотрим чего не было в кеше и делаем запрос в БД
     */
    
$aTalkIdNeedQuery array_diff($aTalkIdarray_keys($aTalkUsers));
    
$aTalkIdNeedQuery array_diff($aTalkIdNeedQuery$aTalkIdNotNeedQuery);
    
$aTalkIdNeedStore $aTalkIdNeedQuery;
    if (
$data $this->oMapper->GetTalkUserByArray($aTalkIdNeedQuery$sUserId)) {
        foreach (
$data as $oTalkUser) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aTalkUsers[$oTalkUser->getTalkId()] = $oTalkUser;
            
$this->Cache_Set($oTalkUser"talk_user_{$oTalkUser->getTalkId()}_{$oTalkUser->getUserId()}",
                array(
"update_talk_user_{$oTalkUser->getTalkId()}"), 60 60 24 4);
            
$aTalkIdNeedStore array_diff($aTalkIdNeedStore, array($oTalkUser->getTalkId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aTalkIdNeedStore as $sId) {
        
$this->Cache_Set(null"talk_user_{$sId}_{$sUserId}", array("update_talk_user_{$sId}"), 60 60 24 4);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aTalkUsers func_array_sort_by_keys($aTalkUsers$aTalkId);
    return 
$aTalkUsers;
}

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

GetTalkUsersByTalkId() method
public array GetTalkUsersByTalkId(int $sTalkId, $aAllowData=NULL)
$sTalkId int ID разговора
$aAllowData
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#637 (show)
public function GetTalkUsersByTalkId($sTalkId$aAllowData null)
{
    if (
is_null($aAllowData)) {
        
$aAllowData = array('user' => array());
    }
    if (
false === ($aTalkUsers $this->Cache_Get("talk_relation_user_by_talk_id_{$sTalkId}"))) {
        
$aTalkUsers $this->oMapper->GetTalkUsers($sTalkId);
        
$this->Cache_Set($aTalkUsers"talk_relation_user_by_talk_id_{$sTalkId}",
            array(
"update_talk_user_{$sTalkId}"), 60 60 24 1);
    }

    if (
$aTalkUsers) {
        
$aUserId = array();
        foreach (
$aTalkUsers as $oTalkUser) {
            
$aUserId[] = $oTalkUser->getUserId();
        }
        
$aUsers $this->User_GetUsersAdditionalData($aUserId,
            isset(
$aAllowData['user']) && is_array($aAllowData['user']) ? $aAllowData['user'] : null);

        foreach (
$aTalkUsers as $oTalkUser) {
            if (isset(
$aUsers[$oTalkUser->getUserId()])) {
                
$oTalkUser->setUser($aUsers[$oTalkUser->getUserId()]);
            } else {
                
$oTalkUser->setUser(null);
            }
        }
    }
    return 
$aTalkUsers;
}

Возвращает массив пользователей, участвующих в разговоре

GetTalksAdditionalData() method
public array GetTalksAdditionalData(array $aTalkId, array|null $aAllowData=NULL)
$aTalkId array Список ID сообщений
$aAllowData array|null Список дополнительных типов подгружаемых в объект
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#168 (show)
public function GetTalksAdditionalData($aTalkId$aAllowData null)
{
    if (
is_null($aAllowData)) {
        
$aAllowData = array('user''talk_user''favourite''comment_last');
    }
    
func_array_simpleflip($aAllowData);
    if (!
is_array($aTalkId)) {
        
$aTalkId = array($aTalkId);
    }
    
/**
     * Получаем "голые" разговоры
     */
    
$aTalks $this->GetTalksByArrayId($aTalkId);
    
/**
     * Формируем ID дополнительных данных, которые нужно получить
     */
    
if (isset($aAllowData['favourite']) and $this->oUserCurrent) {
        
$aFavouriteTalks $this->Favourite_GetFavouritesByArray($aTalkId'talk'$this->oUserCurrent->getId());
    }

    
$aUserId = array();
    
$aCommentLastId = array();
    foreach (
$aTalks as $oTalk) {
        if (isset(
$aAllowData['user'])) {
            
$aUserId[] = $oTalk->getUserId();
        }
        if (isset(
$aAllowData['comment_last']) and $oTalk->getCommentIdLast()) {
            
$aCommentLastId[] = $oTalk->getCommentIdLast();
        }
    }
    
/**
     * Получаем дополнительные данные
     */

    
$aTalkUsers = array();
    
$aCommentLast = array();
    
$aUsers = isset($aAllowData['user']) && is_array($aAllowData['user']) ? $this->User_GetUsersAdditionalData($aUserId,
        
$aAllowData['user']) : $this->User_GetUsersAdditionalData($aUserId);

    if (isset(
$aAllowData['talk_user']) and $this->oUserCurrent) {
        
$aTalkUsers $this->GetTalkUsersByArray($aTalkId$this->oUserCurrent->getId());
    }
    if (isset(
$aAllowData['comment_last'])) {
        
$aCommentLast $this->Comment_GetCommentsAdditionalData($aCommentLastId, array());
    }

    
/**
     * Добавляем данные к результату - списку разговоров
     */
    
foreach ($aTalks as $oTalk) {
        if (isset(
$aUsers[$oTalk->getUserId()])) {
            
$oTalk->setUser($aUsers[$oTalk->getUserId()]);
        } else {
            
$oTalk->setUser(null); // или $oTalk->setUser(new ModuleUser_EntityUser());
        
}

        if (isset(
$aTalkUsers[$oTalk->getId()])) {
            
$oTalk->setTalkUser($aTalkUsers[$oTalk->getId()]);
        } else {
            
$oTalk->setTalkUser(null);
        }

        if (isset(
$aFavouriteTalks[$oTalk->getId()])) {
            
$oTalk->setIsFavourite(true);
        } else {
            
$oTalk->setIsFavourite(false);
        }

        if (
$oTalk->getCommentIdLast() and isset($aCommentLast[$oTalk->getCommentIdLast()])) {
            
$oTalk->setCommentLast($aCommentLast[$oTalk->getCommentIdLast()]);
        } else {
            
$oTalk->setCommentLast(null);
        }
    }
    return 
$aTalks;
}

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

GetTalksByArrayId() method
public array GetTalksByArrayId(array $aTalkId)
$aTalkId array Список ID сообщений
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#251 (show)
public function GetTalksByArrayId($aTalkId)
{
    if (
Config::Get('sys.cache.solid')) {
        return 
$this->GetTalksByArrayIdSolid($aTalkId);
    }
    if (!
is_array($aTalkId)) {
        
$aTalkId = array($aTalkId);
    }
    
$aTalkId array_unique($aTalkId);
    
$aTalks = array();
    
$aTalkIdNotNeedQuery = array();
    
/**
     * Делаем мульти-запрос к кешу
     */
    
$aCacheKeys func_build_cache_keys($aTalkId'talk_');
    if (
false !== ($data $this->Cache_Get($aCacheKeys))) {
        
/**
         * проверяем что досталось из кеша
         */
        
foreach ($aCacheKeys as $sValue => $sKey) {
            if (
array_key_exists($sKey$data)) {
                if (
$data[$sKey]) {
                    
$aTalks[$data[$sKey]->getId()] = $data[$sKey];
                } else {
                    
$aTalkIdNotNeedQuery[] = $sValue;
                }
            }
        }
    }
    
/**
     * Смотрим каких разговоров не было в кеше и делаем запрос в БД
     */
    
$aTalkIdNeedQuery array_diff($aTalkIdarray_keys($aTalks));
    
$aTalkIdNeedQuery array_diff($aTalkIdNeedQuery$aTalkIdNotNeedQuery);
    
$aTalkIdNeedStore $aTalkIdNeedQuery;
    if (
$data $this->oMapper->GetTalksByArrayId($aTalkIdNeedQuery)) {
        foreach (
$data as $oTalk) {
            
/**
             * Добавляем к результату и сохраняем в кеш
             */
            
$aTalks[$oTalk->getId()] = $oTalk;
            
$this->Cache_Set($oTalk"talk_{$oTalk->getId()}", array(), 60 60 24 4);
            
$aTalkIdNeedStore array_diff($aTalkIdNeedStore, array($oTalk->getId()));
        }
    }
    
/**
     * Сохраняем в кеш запросы не вернувшие результата
     */
    
foreach ($aTalkIdNeedStore as $sId) {
        
$this->Cache_Set(null"talk_{$sId}", array(), 60 60 24 4);
    }
    
/**
     * Сортируем результат согласно входящему массиву
     */
    
$aTalks func_array_sort_by_keys($aTalks$aTalkId);
    return 
$aTalks;
}

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

GetTalksByArrayIdSolid() method
public array GetTalksByArrayIdSolid(array $aTalkId)
$aTalkId array Список ID сообщений
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#315 (show)
public function GetTalksByArrayIdSolid($aTalkId)
{
    if (!
is_array($aTalkId)) {
        
$aTalkId = array($aTalkId);
    }
    
$aTalkId array_unique($aTalkId);
    
$aTalks = array();
    
$s join(','$aTalkId);
    if (
false === ($data $this->Cache_Get("talk_id_{$s}"))) {
        
$data $this->oMapper->GetTalksByArrayId($aTalkId);
        foreach (
$data as $oTalk) {
            
$aTalks[$oTalk->getId()] = $oTalk;
        }
        
$this->Cache_Set($aTalks"talk_id_{$s}", array("update_talk_user""talk_new"), 60 60 24 1);
        return 
$aTalks;
    }
    return 
$data;
}

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

GetTalksByFilter() method
public array('collection'=>array,'count'=>int) GetTalksByFilter(array $aFilter, int $iPage, int $iPerPage)
$aFilter array Фильтр
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
{return} array('collection'=>array,'count'=>int)
Source Code: /application/classes/modules/talk/Talk.class.php#562 (show)
public function GetTalksByFilter($aFilter$iPage$iPerPage)
{
    
$data = array(
        
'collection' => $this->oMapper->GetTalksByFilter($aFilter$iCount$iPage$iPerPage),
        
'count'      => $iCount
    
);
    
$aTalks $this->GetTalksAdditionalData($data['collection']);
    
/**
     * Добавляем данные об участниках разговора
     */
    
foreach ($aTalks as $oTalk) {
        
$aResult $this->GetTalkUsersByTalkId($oTalk->getId());
        
$aTalkUsers = array();
        foreach ((array)
$aResult as $oTalkUser) {
            
$aTalkUsers[$oTalkUser->getUserId()] = $oTalkUser;
        }
        
$oTalk->setTalkUsers($aTalkUsers);
    }
    
$data['collection'] = $aTalks;
    return 
$data;
}

Получить все темы разговора по фильтру

GetTalksByUserId() method
public array('collection'=>array,'count'=>int) GetTalksByUserId(int $sUserId, int $iPage, int $iPerPage)
$sUserId int ID пользователя
$iPage int Номер страницы
$iPerPage int Количество элементов на страницу
{return} array('collection'=>array,'count'=>int)
Source Code: /application/classes/modules/talk/Talk.class.php#533 (show)
public function GetTalksByUserId($sUserId$iPage$iPerPage)
{
    
$data = array(
        
'collection' => $this->oMapper->GetTalksByUserId($sUserId$iCount$iPage$iPerPage),
        
'count'      => $iCount
    
);
    
$aTalks $this->GetTalksAdditionalData($data['collection']);
    
/**
     * Добавляем данные об участниках разговора
     */
    
foreach ($aTalks as $oTalk) {
        
$aResult $this->GetTalkUsersByTalkId($oTalk->getId());
        foreach ((array)
$aResult as $oTalkUser) {
            
$aTalkUsers[$oTalkUser->getUserId()] = $oTalkUser;
        }
        
$oTalk->setTalkUsers($aTalkUsers);
    }
    
$data['collection'] = $aTalks;
    return 
$data;
}

Получить все темы разговора где есть юзер

GetTalksFavouriteByUserId() method
public array('collection'=>array,'count'=>int) GetTalksFavouriteByUserId(int $sUserId, int $iCurrPage, int $iPerPage)
$sUserId int ID пользователя
$iCurrPage int Номер текущей страницы
$iPerPage int Количество элементов на страницу
{return} array('collection'=>array,'count'=>int)
Source Code: /application/classes/modules/talk/Talk.class.php#725 (show)
public function GetTalksFavouriteByUserId($sUserId$iCurrPage$iPerPage)
{
    
// Получаем список идентификаторов избранных комментов
    
$data $this->Favourite_GetFavouritesByUserId($sUserId'talk'$iCurrPage$iPerPage);
    
// Получаем комменты по переданому массиву айдишников
    
$aTalks $this->GetTalksAdditionalData($data['collection']);

    
/**
     * Добавляем данные об участниках разговора
     */
    
foreach ($aTalks as $oTalk) {
        
$aResult $this->GetTalkUsersByTalkId($oTalk->getId());
        
$aTalkUsers = array();
        foreach ((array)
$aResult as $oTalkUser) {
            
$aTalkUsers[$oTalkUser->getUserId()] = $oTalkUser;
        }
        
$oTalk->setTalkUsers($aTalkUsers);
    }
    
$data['collection'] = $aTalks;
    return 
$data;
}

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

GetUsersTalk() method
public array GetUsersTalk(int $sTalkId, array $aActive=array ( ))
$sTalkId int ID разговора
$aActive array Список статусов
{return} array
Source Code: /application/classes/modules/talk/Talk.class.php#621 (show)
public function GetUsersTalk($sTalkId$aActive = array())
{
    if (!
is_array($aActive)) {
        
$aActive = array($aActive);
    }

    
$data $this->oMapper->GetUsersTalk($sTalkId$aActive);
    return 
$this->User_GetUsersAdditionalData($data);
}

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

Init() method
public void Init()
Source Code: /application/classes/modules/talk/Talk.class.php#61 (show)
public function Init()
{
    
$this->oMapper Engine::GetMapper(__CLASS__);
    
$this->oUserCurrent $this->User_GetUserCurrent();
}

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

MarkReadTalkUserByArray() method
public void MarkReadTalkUserByArray(array $aTalkId, int $iUserId)
$aTalkId array Список ID сообщений
$iUserId int ID пользователя
Source Code: /application/classes/modules/talk/Talk.class.php#444 (show)
public function MarkReadTalkUserByArray($aTalkId$iUserId)
{
    if (!
is_array($aTalkId)) {
        
$aTalkId = array($aTalkId);
    }
    foreach (
$aTalkId as $sTalkId) {
        if (
$oTalk $this->Talk_GetTalkById((string)$sTalkId)) {
            if (
$oTalkUser $this->Talk_GetTalkUser($oTalk->getId(), $iUserId)) {
                
$oTalkUser->setDateLast(date("Y-m-d H:i:s"));
                if (
$oTalk->getCommentIdLast()) {
                    
$oTalkUser->setCommentIdLast($oTalk->getCommentIdLast());
                }
                
$oTalkUser->setCommentCountNew(0);
                
$this->Talk_UpdateTalkUser($oTalkUser);
            }
        }
    }
}

Помечает разговоры как прочитанные

SendTalk() method
public ModuleTalk_EntityTalk|bool SendTalk(string $sTitle, string $sText, int|ModuleUser_EntityUser $oUserFrom, array|int|ModuleUser_EntityUser $aUserTo, bool $bSendNotify=true, bool $bUseBlacklist=true)
$sTitle string Заголовок сообщения
$sText string Текст сообщения
$oUserFrom int|ModuleUser_EntityUser Пользователь от которого отправляем
$aUserTo array|int|ModuleUser_EntityUser Пользователь которому отправляем
$bSendNotify bool Отправлять или нет уведомление на емайл
$bUseBlacklist bool Исклюать или нет пользователей из блэклиста
{return} ModuleTalk_EntityTalk|bool
Source Code: /application/classes/modules/talk/Talk.class.php#78 (show)
public function SendTalk($sTitle$sText$oUserFrom$aUserTo$bSendNotify true$bUseBlacklist true)
{
    
$iUserIdFrom $oUserFrom instanceof ModuleUser_EntityUser $oUserFrom->getId() : (int)$oUserFrom;
    if (!
is_array($aUserTo)) {
        
$aUserTo = array($aUserTo);
    }
    
$aUserIdTo = array($iUserIdFrom);
    if (
$bUseBlacklist) {
        
$aUserInBlacklist $this->GetBlacklistByTargetId($iUserIdFrom);
    }

    foreach (
$aUserTo as $oUserTo) {
        
$sUserIdTo $oUserTo instanceof ModuleUser_EntityUser $oUserTo->getId() : (int)$oUserTo;
        if (!
$bUseBlacklist || !in_array($sUserIdTo$aUserInBlacklist)) {
            
$aUserIdTo[] = $sUserIdTo;
        }
    }
    
$aUserIdTo array_unique($aUserIdTo);
    if (!empty(
$aUserIdTo)) {
        
$oTalk Engine::GetEntity('Talk');
        
$oTalk->setUserId($iUserIdFrom);
        
$oTalk->setTitle($sTitle);
        
$oTalk->setText($sText);
        
$oTalk->setDate(date("Y-m-d H:i:s"));
        
$oTalk->setDateLast(date("Y-m-d H:i:s"));
        
$oTalk->setUserIdLast($oTalk->getUserId());
        
$oTalk->setUserIp(func_getIp());
        if (
$oTalk $this->AddTalk($oTalk)) {
            foreach (
$aUserIdTo as $iUserId) {
                
$oTalkUser Engine::GetEntity('Talk_TalkUser');
                
$oTalkUser->setTalkId($oTalk->getId());
                
$oTalkUser->setUserId($iUserId);
                if (
$iUserId == $iUserIdFrom) {
                    
$oTalkUser->setDateLast(date("Y-m-d H:i:s"));
                } else {
                    
$oTalkUser->setDateLast(null);
                }
                
$this->AddTalkUser($oTalkUser);

                if (
$bSendNotify) {
                    if (
$iUserId != $iUserIdFrom) {
                        
$oUserFrom $this->User_GetUserById($iUserIdFrom);
                        
$oUserToMail $this->User_GetUserById($iUserId);
                        
$this->Notify_SendTalkNew($oUserToMail$oUserFrom$oTalk);
                    }
                }
            }
            return 
$oTalk;
        }
    }
    return 
false;
}

Формирует и отправляет личное сообщение

UpdateTalk() method
public int UpdateTalk(ModuleTalk_EntityTalk $oTalk)
$oTalk ModuleTalk_EntityTalk Объект сообщения
{return} int
Source Code: /application/classes/modules/talk/Talk.class.php#155 (show)
public function UpdateTalk(ModuleTalk_EntityTalk $oTalk)
{
    
$this->Cache_Delete("talk_{$oTalk->getId()}");
    return 
$this->oMapper->UpdateTalk($oTalk);
}

Обновление разговора

UpdateTalkUser() method
public bool UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser)
$oTalkUser ModuleTalk_EntityTalkUser Объект связи пользователя с разговором
{return} bool
Source Code: /application/classes/modules/talk/Talk.class.php#590 (show)
public function UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser)
{
    
//чистим зависимые кеши
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("talk_read_user_{$oTalkUser->getUserId()}"));
    
$this->Cache_Delete("talk_user_{$oTalkUser->getTalkId()}_{$oTalkUser->getUserId()}");
    return 
$this->oMapper->UpdateTalkUser($oTalkUser);
}

Обновляет связку разговор-юзер

increaseCountCommentNew() method
public int increaseCountCommentNew(int $sTalkId, array $aExcludeId=NULL)
$sTalkId int ID разговора
$aExcludeId array Список ID пользователей для исключения
{return} int
Source Code: /application/classes/modules/talk/Talk.class.php#674 (show)
public function increaseCountCommentNew($sTalkId$aExcludeId null)
{
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("update_talk_user_{$sTalkId}"));
    
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("update_talk_user"));
    return 
$this->oMapper->increaseCountCommentNew($sTalkId$aExcludeId);
}

Увеличивает число новых комментов у юзеров