ModuleSubscribe

Package application.modules.subscribe
Inheritance class ModuleSubscribe » Module » LsObject
Since 1.0
Source Code /application/classes/modules/subscribe/Subscribe.class.php
Модуль Subscribe - подписки пользователей

Protected Properties

Hide inherited properties

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

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AddSubscribe() Добавляет подписку в БД ModuleSubscribe
AddSubscribeSimple() Создает подписку, если уже есть, то возвращает существующую ModuleSubscribe
AddTargetType() Добавляет в разрешенные новый тип ModuleSubscribe
AttachBehavior() Присоединяет поведение к объекту LsObject
ChangeSubscribeMail() Смена емайла в подписках ModuleSubscribe
CheckTarget() Проверка объекта подписки ModuleSubscribe
CheckTargetTopicNewComment() Проверка объекта подписки с типом "topic_new_comment" ModuleSubscribe
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetSubscribeByKey() Возвращает подписку по ключу ModuleSubscribe
GetSubscribeByTargetAndMail() Возвращает подписку по объекту подписки и емайлу ModuleSubscribe
GetSubscribes() Возвращает список подписок по фильтру ModuleSubscribe
GetTargetTypes() Возвращает список типов объектов ModuleSubscribe
GetUrlTarget() Возвращает URL страницы с объектом подписки ModuleSubscribe
GetUrlTargetTopicNewComment() Возвращает URL на страницы объекта подписки с типом "topic_new_comment" ModuleSubscribe
Init() Инициализация ModuleSubscribe
IsAllowTargetForGuest() Проверка на подписку для гостей ModuleSubscribe
IsAllowTargetType() Проверяет разрешен ли данный тип в подписке ModuleSubscribe
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
Send() Производит отправку писем по подписчикам подписки ModuleSubscribe
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
UpdateSubscribe() Обновление подписки ModuleSubscribe
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

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

Property Details

aTargetTypes property
protected array $aTargetTypes;

Список доступных объектов подписок с параметрами На данный момент допустим параметр allow_for_guest=>1 - указывает на возможность создавать подписку для гостя

oMapper property
protected ModuleSubscribe_MapperSubscribe $oMapper;

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

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

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

Method Details

AddSubscribe() method
public ModuleSubscribe_EntitySubscribe|bool AddSubscribe(ModuleSubscribe_EntitySubscribe $oSubscribe)
$oSubscribe ModuleSubscribe_EntitySubscribe Объект подписки
{return} ModuleSubscribe_EntitySubscribe|bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#155 (show)
public function AddSubscribe($oSubscribe)
{
    if (
$sId $this->oMapper->AddSubscribe($oSubscribe)) {
        
$oSubscribe->setId($sId);
        return 
$oSubscribe;
    }
    return 
false;
}

Добавляет подписку в БД

AddSubscribeSimple() method
public ModuleSubscribe_EntitySubscribe|bool AddSubscribeSimple(string $sTargetType, string $sTargetId, string $sMail, $sUserId=NULL)
$sTargetType string Тип
$sTargetId string ID владельца
$sMail string Емайл
$sUserId
{return} ModuleSubscribe_EntitySubscribe|bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#172 (show)
public function AddSubscribeSimple($sTargetType$sTargetId$sMail$sUserId null)
{
    if (!
$sMail) {
        return 
false;
    }
    if (!(
$oSubscribe $this->Subscribe_GetSubscribeByTargetAndMail($sTargetType$sTargetId$sMail))) {
        
$oSubscribe Engine::GetEntity('Subscribe');
        
$oSubscribe->setTargetType($sTargetType);
        
$oSubscribe->setTargetId($sTargetId);
        
$oSubscribe->setMail($sMail);
        
$oSubscribe->setDateAdd(date("Y-m-d H:i:s"));
        
$oSubscribe->setKey(func_generator(32));
        
$oSubscribe->setIp(func_getIp());
        
$oSubscribe->setStatus(1);
        
/**
         * Если только для авторизованных, то добавляем user_id
         */
        
if ($sUserId and !$this->IsAllowTargetForGuest($sTargetType)) {
            
$oSubscribe->setUserId($sUserId);
        }
        
$this->Subscribe_AddSubscribe($oSubscribe);
    }
    return 
$oSubscribe;
}

Создает подписку, если уже есть, то возвращает существующую

AddTargetType() method
public bool AddTargetType(string $sTargetType, array $aParams=array ( ))
$sTargetType string Тип
$aParams array Параметры
{return} bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#79 (show)
public function AddTargetType($sTargetType$aParams = array())
{
    if (!
array_key_exists($sTargetType$this->aTargetTypes)) {
        
$this->aTargetTypes[$sTargetType] = $aParams;
        return 
true;
    }
    return 
false;
}

Добавляет в разрешенные новый тип

ChangeSubscribeMail() method
public int ChangeSubscribeMail(string $sMailOld, string $sMailNew, int|null $iUserId=NULL)
$sMailOld string Старый емайл
$sMailNew string Новый емайл
$iUserId int|null Id пользователя
{return} int
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#217 (show)
public function ChangeSubscribeMail($sMailOld$sMailNew$iUserId null)
{
    return 
$this->oMapper->ChangeSubscribeMail($sMailOld$sMailNew$iUserId);
}

Смена емайла в подписках

CheckTarget() method
public bool CheckTarget(string $sTargetType, int $iTargetId, int $iStatus=NULL)
$sTargetType string Тип
$iTargetId int ID владельца
$iStatus int Статус подписки
{return} bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#107 (show)
public function CheckTarget($sTargetType$iTargetId$iStatus null)
{
    
$sMethod 'CheckTarget' func_camelize($sTargetType);
    if (
method_exists($this$sMethod)) {
        return 
$this->$sMethod($iTargetId$iStatus);
    }
    return 
false;
}

Проверка объекта подписки

CheckTargetTopicNewComment() method
public bool CheckTargetTopicNewComment(int $iTargetId, int $iStatus)
$iTargetId int ID владельца
$iStatus int Статус
{return} bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#327 (show)
public function CheckTargetTopicNewComment($iTargetId$iStatus)
{
    if (
$oTopic $this->Topic_GetTopicById($iTargetId)) {
        
/**
         * Топик может быть в закрытом блоге, поэтому необходимо разрешить подписку только если пользователь в нем состоит, или является автором блога
         * Отписываться разрешаем с любого топика
         */
        
if ($iStatus == and $oTopic->getBlog()->getType() == 'close') {
            if (!
$this->oUserCurrent or !($oTopic->getBlog()->getOwnerId() == $this->oUserCurrent->getId() or $this->Blog_GetBlogUserByBlogIdAndUserId($oTopic->getBlogId(),
                        
$this->oUserCurrent->getId()))
            ) {
                return 
false;
            }
        }
        return 
true;
    }
    return 
false;
}

Проверка объекта подписки с типом "topic_new_comment" Название метода формируется автоматически

GetSubscribeByKey() method
public ModuleSubscribe_EntitySubscribe|null GetSubscribeByKey(string $sKey)
$sKey string Ключ
{return} ModuleSubscribe_EntitySubscribe|null
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#263 (show)
public function GetSubscribeByKey($sKey)
{
    
$aRes $this->GetSubscribes(array('key' => $sKey), array(), 11);
    if (isset(
$aRes['collection'][0])) {
        return 
$aRes['collection'][0];
    }
    return 
null;
}

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

GetSubscribeByTargetAndMail() method
public ModuleSubscribe_EntitySubscribe|null GetSubscribeByTargetAndMail(string $sTargetType, int $iTargetId, string $sMail)
$sTargetType string Тип
$iTargetId int ID владельца
$sMail string Емайл
{return} ModuleSubscribe_EntitySubscribe|null
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#247 (show)
public function GetSubscribeByTargetAndMail($sTargetType$iTargetId$sMail)
{
    
$aRes $this->GetSubscribes(array('target_type' => $sTargetType'target_id' => $iTargetId'mail' => $sMail),
        array(), 
11);
    if (isset(
$aRes['collection'][0])) {
        return 
$aRes['collection'][0];
    }
    return 
null;
}

Возвращает подписку по объекту подписки и емайлу

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

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

GetTargetTypes() method
public array GetTargetTypes()
{return} array
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#67 (show)
public function GetTargetTypes()
{
    return 
$this->aTargetTypes;
}

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

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

Возвращает URL страницы с объектом подписки Актуально при переходе по ссылки с отпиской от рассылки и последующим редиректом

GetUrlTargetTopicNewComment() method
public string|bool GetUrlTargetTopicNewComment(int $iTargetId)
$iTargetId int ID топика
{return} string|bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#353 (show)
public function GetUrlTargetTopicNewComment($iTargetId)
{
    if (
$oTopic $this->Topic_GetTopicById($iTargetId) and $oTopic->getPublish()) {
        return 
$oTopic->getUrl();
    }
    return 
false;
}

Возвращает URL на страницы объекта подписки с типом "topic_new_comment" Название метода формируется автоматически

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

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

IsAllowTargetForGuest() method
public bool IsAllowTargetForGuest(string $sTargetType)
$sTargetType string Тип
{return} bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#139 (show)
public function IsAllowTargetForGuest($sTargetType)
{
    if (
$this->IsAllowTargetType($sTargetType)) {
        if (isset(
$this->aTargetTypes[$sTargetType]['allow_for_guest']) and $this->aTargetTypes[$sTargetType]['allow_for_guest']) {
            return 
true;
        }
    }
    return 
false;
}

Проверка на подписку для гостей

IsAllowTargetType() method
public bool IsAllowTargetType(string $sTargetType)
$sTargetType string Тип
{return} bool
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#94 (show)
public function IsAllowTargetType($sTargetType)
{
    return 
in_array($sTargetTypearray_keys($this->aTargetTypes));
}

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

Send() method
public void Send(int $sTargetType, int $iTargetId, string $sTemplate, string $sTitle, array $aParams=array ( ), array $aExcludeMail=array ( ), string $sPluginName=NULL)
$sTargetType int Тип объекта подписки
$iTargetId int ID объекта подписки
$sTemplate string Имя шаблона письма, например, notify.mail.tpl
$sTitle string Заголовок письма
$aParams array Параметра для передачи в шаблон письма
$aExcludeMail array Список емайлов на которые НЕ нужно отправлять
$sPluginName string Название или класс плагина для корректной отправки
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#283 (show)
public function Send(
    
$sTargetType,
    
$iTargetId,
    
$sTemplate,
    
$sTitle,
    
$aParams = array(),
    
$aExcludeMail = array(),
    
$sPluginName null
) {
    
$iPage 1;
    
$aSubscribes $this->Subscribe_GetSubscribes(array(
            
'target_type' => $sTargetType,
            
'target_id' => $iTargetId,
            
'status' => 1,
            
'exclude_mail' => $aExcludeMail
        
), array(), $iPage20);
    while (
$aSubscribes['collection']) {
        
$iPage++;
        foreach (
$aSubscribes['collection'] as $oSubscribe) {
            
$aParams['sSubscribeKey'] = $oSubscribe->getKey();
            
$this->Notify_Send(
                
$oSubscribe->getMail(),
                
$sTemplate,
                
$sTitle,
                
$aParams,
                
$sPluginName
            
);
        }
        
$aSubscribes $this->Subscribe_GetSubscribes(array(
                
'target_type' => $sTargetType,
                
'target_id'   => $iTargetId,
                
'status'      => 1
            
), array(), $iPage20);
    }
}

Производит отправку писем по подписчикам подписки

UpdateSubscribe() method
public int UpdateSubscribe(ModuleSubscribe_EntitySubscribe $oSubscribe)
$oSubscribe ModuleSubscribe_EntitySubscribe Объект подписки
{return} int
Source Code: /application/classes/modules/subscribe/Subscribe.class.php#203 (show)
public function UpdateSubscribe($oSubscribe)
{
    return 
$this->oMapper->UpdateSubscribe($oSubscribe);
}

Обновление подписки