ModuleSubscribe
Package | application.modules.subscribe |
---|---|
Inheritance | class ModuleSubscribe » Module » LsObject |
Since | 1.0 |
Source Code | /application/classes/modules/subscribe/Subscribe.class.php |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aTargetTypes | array | Список доступных объектов подписок с параметрами | ModuleSubscribe |
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oMapper | ModuleSubscribe_MapperSubscribe | Объект маппера | ModuleSubscribe |
oUserCurrent | ModuleUser_EntityUser|null | Объект текущего пользователя | ModuleSubscribe |
Public Methods
Method | Description | Defined 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
Method | Description | Defined By |
---|---|---|
PrepareBehaviors() | Инициализация поведений | LsObject |
Property Details
Список доступных объектов подписок с параметрами На данный момент допустим параметр allow_for_guest=>1 - указывает на возможность создавать подписку для гостя
Объект маппера
Объект текущего пользователя
Method Details
public ModuleSubscribe_EntitySubscribe|bool AddSubscribe(ModuleSubscribe_EntitySubscribe $oSubscribe)
| ||
$oSubscribe | ModuleSubscribe_EntitySubscribe | Объект подписки |
{return} | ModuleSubscribe_EntitySubscribe|bool |
public function AddSubscribe($oSubscribe)
{
if ($sId = $this->oMapper->AddSubscribe($oSubscribe)) {
$oSubscribe->setId($sId);
return $oSubscribe;
}
return false;
}
Добавляет подписку в БД
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 |
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;
}
Создает подписку, если уже есть, то возвращает существующую
public bool AddTargetType(string $sTargetType, array $aParams=array (
))
| ||
$sTargetType | string | Тип |
$aParams | array | Параметры |
{return} | bool |
public function AddTargetType($sTargetType, $aParams = array())
{
if (!array_key_exists($sTargetType, $this->aTargetTypes)) {
$this->aTargetTypes[$sTargetType] = $aParams;
return true;
}
return false;
}
Добавляет в разрешенные новый тип
public int ChangeSubscribeMail(string $sMailOld, string $sMailNew, int|null $iUserId=NULL)
| ||
$sMailOld | string | Старый емайл |
$sMailNew | string | Новый емайл |
$iUserId | int|null | Id пользователя |
{return} | int |
public function ChangeSubscribeMail($sMailOld, $sMailNew, $iUserId = null)
{
return $this->oMapper->ChangeSubscribeMail($sMailOld, $sMailNew, $iUserId);
}
Смена емайла в подписках
public bool CheckTarget(string $sTargetType, int $iTargetId, int $iStatus=NULL)
| ||
$sTargetType | string | Тип |
$iTargetId | int | ID владельца |
$iStatus | int | Статус подписки |
{return} | bool |
public function CheckTarget($sTargetType, $iTargetId, $iStatus = null)
{
$sMethod = 'CheckTarget' . func_camelize($sTargetType);
if (method_exists($this, $sMethod)) {
return $this->$sMethod($iTargetId, $iStatus);
}
return false;
}
Проверка объекта подписки
public bool CheckTargetTopicNewComment(int $iTargetId, int $iStatus)
| ||
$iTargetId | int | ID владельца |
$iStatus | int | Статус |
{return} | bool |
public function CheckTargetTopicNewComment($iTargetId, $iStatus)
{
if ($oTopic = $this->Topic_GetTopicById($iTargetId)) {
/**
* Топик может быть в закрытом блоге, поэтому необходимо разрешить подписку только если пользователь в нем состоит, или является автором блога
* Отписываться разрешаем с любого топика
*/
if ($iStatus == 1 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" Название метода формируется автоматически
public ModuleSubscribe_EntitySubscribe|null GetSubscribeByKey(string $sKey)
| ||
$sKey | string | Ключ |
{return} | ModuleSubscribe_EntitySubscribe|null |
public function GetSubscribeByKey($sKey)
{
$aRes = $this->GetSubscribes(array('key' => $sKey), array(), 1, 1);
if (isset($aRes['collection'][0])) {
return $aRes['collection'][0];
}
return null;
}
Возвращает подписку по ключу
public ModuleSubscribe_EntitySubscribe|null GetSubscribeByTargetAndMail(string $sTargetType, int $iTargetId, string $sMail)
| ||
$sTargetType | string | Тип |
$iTargetId | int | ID владельца |
$sMail | string | Емайл |
{return} | ModuleSubscribe_EntitySubscribe|null |
public function GetSubscribeByTargetAndMail($sTargetType, $iTargetId, $sMail)
{
$aRes = $this->GetSubscribes(array('target_type' => $sTargetType, 'target_id' => $iTargetId, 'mail' => $sMail),
array(), 1, 1);
if (isset($aRes['collection'][0])) {
return $aRes['collection'][0];
}
return null;
}
Возвращает подписку по объекту подписки и емайлу
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) |
public function GetSubscribes($aFilter, $aOrder, $iCurrPage, $iPerPage)
{
return array(
'collection' => $this->oMapper->GetSubscribes($aFilter, $aOrder, $iCount, $iCurrPage, $iPerPage),
'count' => $iCount
);
}
Возвращает список подписок по фильтру
public array GetTargetTypes()
| ||
{return} | array |
public function GetTargetTypes()
{
return $this->aTargetTypes;
}
Возвращает список типов объектов
public bool GetUrlTarget(string $sTargetType, int $iTargetId)
| ||
$sTargetType | string | Тип |
$iTargetId | int | ID владельца |
{return} | bool |
public function GetUrlTarget($sTargetType, $iTargetId)
{
$sMethod = 'GetUrlTarget' . func_camelize($sTargetType);
if (method_exists($this, $sMethod)) {
return $this->$sMethod($iTargetId);
}
return false;
}
Возвращает URL страницы с объектом подписки Актуально при переходе по ссылки с отпиской от рассылки и последующим редиректом
public string|bool GetUrlTargetTopicNewComment(int $iTargetId)
| ||
$iTargetId | int | ID топика |
{return} | string|bool |
public function GetUrlTargetTopicNewComment($iTargetId)
{
if ($oTopic = $this->Topic_GetTopicById($iTargetId) and $oTopic->getPublish()) {
return $oTopic->getUrl();
}
return false;
}
Возвращает URL на страницы объекта подписки с типом "topic_new_comment" Название метода формируется автоматически
public void Init()
|
public function Init()
{
$this->oMapper = Engine::GetMapper(__CLASS__);
$this->oUserCurrent = $this->User_GetUserCurrent();
}
Инициализация
public bool IsAllowTargetForGuest(string $sTargetType)
| ||
$sTargetType | string | Тип |
{return} | bool |
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;
}
Проверка на подписку для гостей
public bool IsAllowTargetType(string $sTargetType)
| ||
$sTargetType | string | Тип |
{return} | bool |
public function IsAllowTargetType($sTargetType)
{
return in_array($sTargetType, array_keys($this->aTargetTypes));
}
Проверяет разрешен ли данный тип в подписке
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 | Название или класс плагина для корректной отправки |
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(), $iPage, 20);
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(), $iPage, 20);
}
}
Производит отправку писем по подписчикам подписки
public int UpdateSubscribe(ModuleSubscribe_EntitySubscribe $oSubscribe)
| ||
$oSubscribe | ModuleSubscribe_EntitySubscribe | Объект подписки |
{return} | int |
public function UpdateSubscribe($oSubscribe)
{
return $this->oMapper->UpdateSubscribe($oSubscribe);
}
Обновление подписки