mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-26 03:30:48 +03:00
Перенос модуля Notify из приложения в фреймворк
This commit is contained in:
parent
6b7f622042
commit
bd2c5522b4
|
@ -1,226 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* LiveStreet CMS
|
||||
* Copyright © 2013 OOO "ЛС-СОФТ"
|
||||
*
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreetcms.com
|
||||
* Contact e-mail: office@livestreetcms.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* @link http://www.livestreetcms.com
|
||||
* @copyright 2013 OOO "ЛС-СОФТ"
|
||||
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Модуль рассылок уведомлений пользователям
|
||||
*
|
||||
* @package application.modules.notify
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleNotify extends Module
|
||||
{
|
||||
/**
|
||||
* Статусы степени обработки заданий отложенной публикации в базе данных
|
||||
*/
|
||||
const NOTIFY_TASK_STATUS_NULL = 1;
|
||||
/**
|
||||
* Объект локального вьювера для рендеринга сообщений
|
||||
*
|
||||
* @var ModuleViewer
|
||||
*/
|
||||
protected $oViewerLocal = null;
|
||||
/**
|
||||
* Массив заданий на удаленную публикацию
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aTask = array();
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleNotify_MapperNotify
|
||||
*/
|
||||
protected $oMapper = null;
|
||||
|
||||
/**
|
||||
* Префикс шаблонов
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $sPrefix = '';
|
||||
|
||||
/**
|
||||
* Название директории с шаблономи
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $sDir = '';
|
||||
|
||||
/**
|
||||
* Инициализация модуля
|
||||
* Создаём локальный экземпляр модуля Viewer
|
||||
* Момент довольно спорный, но позволяет избавить основной шаблон от мусора уведомлений
|
||||
*
|
||||
*/
|
||||
public function Init()
|
||||
{
|
||||
$this->oViewerLocal = $this->Viewer_GetLocalViewer();
|
||||
$this->oMapper = Engine::GetMapper(__CLASS__);
|
||||
$this->sDir = Config::Get('module.notify.dir');
|
||||
$this->sPrefix = Config::Get('module.notify.prefix');
|
||||
}
|
||||
|
||||
/**
|
||||
* Универсальный метод отправки уведомлений на email
|
||||
*
|
||||
* @param ModuleUser_EntityUser|string $oUserTo Кому отправляем (пользователь или email)
|
||||
* @param string $sTemplate Шаблон для отправки
|
||||
* @param string $sSubject Тема письма
|
||||
* @param array $aAssign Ассоциативный массив для загрузки переменных в шаблон письма
|
||||
* @param string|null $sPluginName Плагин из которого происходит отправка
|
||||
* @param bool $bForceSend Отправлять сразу, даже при опции module.notify.delayed = true
|
||||
*/
|
||||
public function Send($oUserTo, $sTemplate, $sSubject, $aAssign = array(), $sPluginName = null, $bForceSend = false)
|
||||
{
|
||||
if ($oUserTo instanceof ModuleUser_EntityUser) {
|
||||
$sMail = $oUserTo->getMail();
|
||||
$sName = $oUserTo->getLogin();
|
||||
} else {
|
||||
$sMail = $oUserTo;
|
||||
$sName = '';
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
foreach ($aAssign as $k => $v) {
|
||||
$this->oViewerLocal->Assign($k, $v);
|
||||
}
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody = $this->oViewerLocal->Fetch($this->GetTemplatePath($sTemplate, $sPluginName));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if (Config::Get('module.notify.delayed') and !$bForceSend) {
|
||||
$oNotifyTask = Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $sMail,
|
||||
'user_login' => $sName,
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $sSubject,
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if (Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($sMail, $sName);
|
||||
$this->Mail_SetSubject($sSubject);
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* При завершении работы модуля проверяем наличие
|
||||
* отложенных заданий в массиве и при необходимости
|
||||
* передаем их в меппер
|
||||
*/
|
||||
public function Shutdown()
|
||||
{
|
||||
if (!empty($this->aTask) && Config::Get('module.notify.delayed')) {
|
||||
$this->oMapper->AddTaskArray($this->aTask);
|
||||
$this->aTask = array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает массив заданий на публикацию из базы с указанным количественным ограничением (выборка FIFO)
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetTasksDelayed($iLimit = 10)
|
||||
{
|
||||
return ($aResult = $this->oMapper->GetTasks($iLimit))
|
||||
? $aResult
|
||||
: array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет на e-mail
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oTask Объект задания на отправку
|
||||
*/
|
||||
public function SendTask($oTask)
|
||||
{
|
||||
$this->Mail_SetAdress($oTask->getUserMail(), $oTask->getUserLogin());
|
||||
$this->Mail_SetSubject($oTask->getNotifySubject());
|
||||
$this->Mail_SetBody($oTask->getNotifyText());
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет отложенное Notify-задание из базы
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oTask Объект задания на отправку
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTask($oTask)
|
||||
{
|
||||
return $this->oMapper->DeleteTask($oTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет отложенные Notify-задания по списку идентификаторов
|
||||
*
|
||||
* @param array $aArrayId Список ID заданий на отправку
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTaskByArrayId($aArrayId)
|
||||
{
|
||||
return $this->oMapper->DeleteTaskByArrayId($aArrayId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает путь к шаблону по переданному имени
|
||||
*
|
||||
* @param string $sName Название шаблона
|
||||
* @param string $sPluginName Название или класс плагина
|
||||
* @return string
|
||||
*/
|
||||
public function GetTemplatePath($sName, $sPluginName = null)
|
||||
{
|
||||
$sName = $this->sPrefix ? $this->sPrefix . '.' . $sName : $sName;
|
||||
if ($sPluginName) {
|
||||
$sPluginName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui', $sPluginName, $aMatches)
|
||||
? strtolower($aMatches[1])
|
||||
: strtolower($sPluginName);
|
||||
|
||||
return Plugin::GetTemplatePath($sPluginName) . $this->sDir . '/' . $sName;
|
||||
} else {
|
||||
return $this->sDir . '/' . $sName;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,170 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* LiveStreet CMS
|
||||
* Copyright © 2013 OOO "ЛС-СОФТ"
|
||||
*
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreetcms.com
|
||||
* Contact e-mail: office@livestreetcms.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* @link http://www.livestreetcms.com
|
||||
* @copyright 2013 OOO "ЛС-СОФТ"
|
||||
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности задания на отправку емайла
|
||||
*
|
||||
* @package application.modules.notify
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleNotify_EntityTask extends Entity
|
||||
{
|
||||
/**
|
||||
* Возвращает ID задания
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTaskId()
|
||||
{
|
||||
return $this->_getDataOne('notify_task_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает емайл
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserMail()
|
||||
{
|
||||
return $this->_getDataOne('user_mail');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает логин пользователя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserLogin()
|
||||
{
|
||||
return $this->_getDataOne('user_login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает текст сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getNotifyText()
|
||||
{
|
||||
return $this->_getDataOne('notify_text');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает дату создания сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateCreated()
|
||||
{
|
||||
return $this->_getDataOne('date_created');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает статус отправки
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTaskStatus()
|
||||
{
|
||||
return $this->_getDataOne('notify_task_status');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает тему сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getNotifySubject()
|
||||
{
|
||||
return $this->_getDataOne('notify_subject');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID задания
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTaskId($data)
|
||||
{
|
||||
$this->_aData['notify_task_id'] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает емайл
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserMail($data)
|
||||
{
|
||||
$this->_aData['user_mail'] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает логин
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserLogin($data)
|
||||
{
|
||||
$this->_aData['user_login'] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает текст уведомления
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setNotifyText($data)
|
||||
{
|
||||
$this->_aData['notify_text'] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает дату создания задания
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateCreated($data)
|
||||
{
|
||||
$this->_aData['date_created'] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает статус задания
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTaskStatus($data)
|
||||
{
|
||||
$this->_aData['notify_task_status'] = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает тему сообщения
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setNotifySubject($data)
|
||||
{
|
||||
$this->_aData['notify_subject'] = $data;
|
||||
}
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* LiveStreet CMS
|
||||
* Copyright © 2013 OOO "ЛС-СОФТ"
|
||||
*
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreetcms.com
|
||||
* Contact e-mail: office@livestreetcms.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* ------------------------------------------------------
|
||||
*
|
||||
* @link http://www.livestreetcms.com
|
||||
* @copyright 2013 OOO "ЛС-СОФТ"
|
||||
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package application.modules.notify
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleNotify_MapperNotify extends Mapper
|
||||
{
|
||||
/**
|
||||
* Добавляет задание
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oNotifyTask Объект задания
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTask(ModuleNotify_EntityTask $oNotifyTask)
|
||||
{
|
||||
$sql = "
|
||||
INSERT INTO " . Config::Get('db.table.notify_task') . "
|
||||
( user_login, user_mail, notify_subject, notify_text, date_created, notify_task_status )
|
||||
VALUES
|
||||
( ?, ?, ?, ?, ?, ?d )
|
||||
";
|
||||
|
||||
if ($this->oDb->query(
|
||||
$sql,
|
||||
$oNotifyTask->getUserLogin(),
|
||||
$oNotifyTask->getUserMail(),
|
||||
$oNotifyTask->getNotifySubject(),
|
||||
$oNotifyTask->getNotifyText(),
|
||||
$oNotifyTask->getDateCreated(),
|
||||
$oNotifyTask->getTaskStatus()
|
||||
) === 0
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет задания списком
|
||||
*
|
||||
* @param array $aTasks Список объектов заданий
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTaskArray($aTasks)
|
||||
{
|
||||
if (!is_array($aTasks) && count($aTasks) == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$aValues = array();
|
||||
foreach ($aTasks as $oTask) {
|
||||
$aValues[] = "(" . implode(',',
|
||||
array(
|
||||
$this->oDb->escape($oTask->getUserLogin()),
|
||||
$this->oDb->escape($oTask->getUserMail()),
|
||||
$this->oDb->escape($oTask->getNotifySubject()),
|
||||
$this->oDb->escape($oTask->getNotifyText()),
|
||||
$this->oDb->escape($oTask->getDateCreated()),
|
||||
$this->oDb->escape($oTask->getTaskStatus())
|
||||
)
|
||||
) . ")";
|
||||
}
|
||||
$sql = "
|
||||
INSERT INTO " . Config::Get('db.table.notify_task') . "
|
||||
( user_login, user_mail, notify_subject, notify_text, date_created, notify_task_status )
|
||||
VALUES
|
||||
" . implode(', ', $aValues);
|
||||
|
||||
return $this->oDb->query($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет задание
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oNotifyTask Объект задания
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTask(ModuleNotify_EntityTask $oNotifyTask)
|
||||
{
|
||||
$sql = "
|
||||
DELETE FROM " . Config::Get('db.table.notify_task') . "
|
||||
WHERE
|
||||
notify_task_id = ?d
|
||||
";
|
||||
$res = $this->oDb->query($sql, $oNotifyTask->getTaskId());
|
||||
return $this->IsSuccessful($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет отложенные Notify-задания по списку идентификаторов
|
||||
*
|
||||
* @param array $aTaskId Список ID заданий на отправку
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTaskByArrayId($aTaskId)
|
||||
{
|
||||
$sql = "
|
||||
DELETE FROM " . Config::Get('db.table.notify_task') . "
|
||||
WHERE
|
||||
notify_task_id IN(?a)
|
||||
";
|
||||
$res = $this->oDb->query($sql, $aTaskId);
|
||||
return $this->IsSuccessful($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает массив заданий на публикацию из базы с указанным количественным ограничением (выборка FIFO)
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetTasks($iLimit)
|
||||
{
|
||||
$sql = "SELECT *
|
||||
FROM " . Config::Get('db.table.notify_task') . "
|
||||
ORDER BY date_created ASC
|
||||
LIMIT ?d";
|
||||
$aTasks = array();
|
||||
if ($aRows = $this->oDb->select($sql, $iLimit)) {
|
||||
foreach ($aRows as $aTask) {
|
||||
$aTasks[] = Engine::GetEntity('Notify_Task', $aTask);
|
||||
}
|
||||
}
|
||||
return $aTasks;
|
||||
}
|
||||
}
|
|
@ -1 +1 @@
|
|||
Subproject commit 0bad3dd2d8a6228c64a4332da43e6b6ea49b068a
|
||||
Subproject commit 952284f79ba2566595f090161e4119d59b4882db
|
Loading…
Reference in a new issue