1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-19 09:18:18 +03:00

Документация классов

This commit is contained in:
Mzhelskiy Maxim 2012-06-24 14:47:34 +04:00
parent b44e685809
commit d630dd12c7
11 changed files with 618 additions and 361 deletions

View file

@ -18,6 +18,8 @@
/**
* Модуль рассылок уведомлений пользователям
*
* @package modules.notify
* @since 1.0
*/
class ModuleNotify extends Module {
/**
@ -37,11 +39,12 @@ class ModuleNotify extends Module {
*/
protected $aTask=array();
/**
* Меппер
* Объект маппера
*
* @var Mapper_Notify
* @var ModuleNotify_MapperNotify
*/
protected $oMapper=null;
/**
* Инициализация модуля
* Создаём локальный экземпляр модуля Viewer
@ -52,21 +55,21 @@ class ModuleNotify extends Module {
$this->oViewerLocal=$this->Viewer_GetLocalViewer();
$this->oMapper=Engine::GetMapper(__CLASS__);
}
/**
* Отправляет юзеру уведомление о новом комментарии в его топике
*
* @param ModuleUser_EntityUser $oUserTo
* @param ModuleTopic_EntityTopic $oTopic
* @param CommentEntity_TopicComment $oComment
* @param ModuleUser_EntityUser $oUserComment
* @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @param ModuleComment_EntityComment $oComment Объект комментария
* @param ModuleUser_EntityUser $oUserComment Объект пользователя, написавшего комментарий
* @return bool
*/
public function SendCommentNewToAuthorTopic(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment, ModuleUser_EntityUser $oUserComment) {
/**
* Проверяем можно ли юзеру рассылать уведомление
*/
if (!$oUserTo->getSettingsNoticeNewComment()) {
return ;
return false;
}
$this->Send(
$oUserTo,
@ -79,22 +82,23 @@ class ModuleNotify extends Module {
'oUserComment' => $oUserComment,
)
);
return true;
}
/**
* Отправляет юзеру уведомление об ответе на его комментарий
*
* @param ModuleUser_EntityUser $oUserTo
* @param ModuleTopic_EntityTopic $oTopic
* @param CommentEntity_TopicComment $oComment
* @param ModuleUser_EntityUser $oUserComment
* @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @param ModuleComment_EntityComment $oComment Объект комментария
* @param ModuleUser_EntityUser $oUserComment Объект пользователя, написавшего комментарий
* @return bool
*/
public function SendCommentReplyToAuthorParentComment(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment, ModuleUser_EntityUser $oUserComment) {
/**
* Проверяем можно ли юзеру рассылать уведомление
*/
if (!$oUserTo->getSettingsNoticeReplyComment()) {
return ;
return false;
}
$this->Send(
$oUserTo,
@ -107,22 +111,23 @@ class ModuleNotify extends Module {
'oUserComment' => $oUserComment,
)
);
return true;
}
/**
* Отправляет юзеру уведомление о новом топике в блоге, в котором он состоит
*
* @param ModuleUser_EntityUser $oUserTo
* @param ModuleTopic_EntityTopic $oTopic
* @param ModuleBlog_EntityBlog $oBlog
* @param ModuleUser_EntityUser $oUserTopic
* @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @param ModuleUser_EntityUser $oUserTopic Объект пользователя, написавшего топик
* @return bool
*/
public function SendTopicNewToSubscribeBlog(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleBlog_EntityBlog $oBlog, ModuleUser_EntityUser $oUserTopic) {
/**
* Проверяем можно ли юзеру рассылать уведомление
*/
if (!$oUserTo->getSettingsNoticeNewTopic()) {
return ;
return false;
}
$this->Send(
$oUserTo,
@ -135,11 +140,12 @@ class ModuleNotify extends Module {
'oUserTopic' => $oUserTopic,
)
);
return true;
}
/**
* Отправляет уведомление с новым линком активации
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleUser_EntityUser $oUser Объект пользователя
*/
public function SendReactivationCode(ModuleUser_EntityUser $oUser) {
$this->Send(
@ -151,12 +157,11 @@ class ModuleNotify extends Module {
)
);
}
/**
* Отправляет уведомление при регистрации с активацией
*
* @param ModuleUser_EntityUser $oUser
* @param string $sPassword
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @param string $sPassword Пароль пользователя
*/
public function SendRegistrationActivate(ModuleUser_EntityUser $oUser,$sPassword) {
$this->Send(
@ -169,12 +174,11 @@ class ModuleNotify extends Module {
)
);
}
/**
* Отправляет уведомление о регистрации
*
* @param ModuleUser_EntityUser $oUser
* @param string $sPassword
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @param string $sPassword Пароль пользователя
*/
public function SendRegistration(ModuleUser_EntityUser $oUser,$sPassword) {
$this->Send(
@ -187,13 +191,12 @@ class ModuleNotify extends Module {
)
);
}
/**
* Отправляет инвайт
*
* @param ModuleUser_EntityUser $oUserFrom
* @param string $sMailTo
* @param ModuleUser_EntityInvite $oInvite
* @param ModuleUser_EntityUser $oUserFrom Пароль пользователя, который отправляет инвайт
* @param string $sMailTo Емайл на который отправляем инвайт
* @param ModuleUser_EntityInvite $oInvite Объект инвайта
*/
public function SendInvite(ModuleUser_EntityUser $oUserFrom,$sMailTo,ModuleUser_EntityInvite $oInvite) {
$this->Send(
@ -207,20 +210,20 @@ class ModuleNotify extends Module {
)
);
}
/**
* Отправляет уведомление при новом личном сообщении
*
* @param ModuleUser_EntityUser $oUserTo
* @param ModuleUser_EntityUser $oUserFrom
* @param ModuleTalk_EntityTalk $oTalk
* @param ModuleUser_EntityUser $oUserTo Объект пользователя, которому отправляем сообщение
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, который отправляет сообщение
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
* @return bool
*/
public function SendTalkNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom,ModuleTalk_EntityTalk $oTalk) {
/**
* Проверяем можно ли юзеру рассылать уведомление
*/
if (!$oUserTo->getSettingsNoticeNewTalk()) {
return ;
return false;
}
$this->Send(
$oUserTo,
@ -232,14 +235,23 @@ class ModuleNotify extends Module {
'oTalk' => $oTalk,
)
);
return true;
}
/**
* Отправляет уведомление о новом сообщение в личке
*
* @param ModuleUser_EntityUser $oUserTo Объект пользователя, которому отправляем уведомление
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, которыф написал комментарий
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
* @param ModuleComment_EntityComment $oTalkComment Объект комментария
* @return bool
*/
public function SendTalkCommentNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom,ModuleTalk_EntityTalk $oTalk,ModuleComment_EntityComment $oTalkComment) {
/**
* Проверяем можно ли юзеру рассылать уведомление
*/
if (!$oUserTo->getSettingsNoticeNewTalk()) {
return ;
return false;
}
$this->Send(
$oUserTo,
@ -252,20 +264,23 @@ class ModuleNotify extends Module {
'oTalkComment' => $oTalkComment,
)
);
return true;
}
/**
* Отправляет пользователю сообщение о добавлении его в друзья
*
* @param ModuleUser_EntityUser $oUserTo
* @param ModuleUser_EntityUser $oUserFrom
* @param ModuleUser_EntityUser $oUserTo Объект пользователя
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, которого добавляем в друзья
* @param string $sText Текст сообщения
* @param string $sPath URL для подтверждения дружбы
* @return bool
*/
public function SendUserFriendNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom, $sText,$sPath) {
/**
* Проверяем можно ли юзеру рассылать уведомление
*/
if (!$oUserTo->getSettingsNoticeNewFriend()) {
return ;
return false;
}
$this->Send(
$oUserTo,
@ -278,13 +293,15 @@ class ModuleNotify extends Module {
'sPath' => $sPath,
)
);
return true;
}
/**
* Отправляет пользователю сообщение о приглашение его в закрытый блог
*
* @param ModuleUser_EntityUser $oUserTo
* @param ModuleUser_EntityUser $oUserFrom
* @param ModuleUser_EntityUser $oUserTo Объект пользователя, который отправляет приглашение
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, которого приглашаем
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @param $sPath
*/
public function SendBlogUserInvite(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom, ModuleBlog_EntityBlog $oBlog,$sPath) {
$this->Send(
@ -299,12 +316,11 @@ class ModuleNotify extends Module {
)
);
}
/**
* Уведомление при восстановлении пароля
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleUser_EntityReminder $oReminder
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @param ModuleUser_EntityReminder $oReminder объект напоминания пароля
*/
public function SendReminderCode(ModuleUser_EntityUser $oUser,ModuleUser_EntityReminder $oReminder) {
$this->Send(
@ -320,8 +336,8 @@ class ModuleNotify extends Module {
/**
* Уведомление с новым паролем после его восставновления
*
* @param ModuleUser_EntityUser $oUser
* @param unknown_type $sNewPassword
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @param string $sNewPassword Новый пароль
*/
public function SendReminderPassword(ModuleUser_EntityUser $oUser,$sNewPassword) {
$this->Send(
@ -334,13 +350,12 @@ class ModuleNotify extends Module {
)
);
}
/**
* Уведомление при ответе на сообщение на стене
*
* @param ModuleWall_EntityWall $oWallParent
* @param ModuleWall_EntityWall $oWall
* @param ModuleUser_EntityUser $oUserWall
* @param ModuleWall_EntityWall $oWallParent Объект сообщения на стене, на которое отвечаем
* @param ModuleWall_EntityWall $oWall Объект нового сообщения на стене
* @param ModuleUser_EntityUser $oUser Объект пользователя
*/
public function SendWallReply(ModuleWall_EntityWall $oWallParent, ModuleWall_EntityWall $oWall, ModuleUser_EntityUser $oUser) {
$this->Send(
@ -356,12 +371,11 @@ class ModuleNotify extends Module {
)
);
}
/**
* Уведомление о новом сообщение на стене
*
* @param ModuleWall_EntityWall $oWall
* @param ModuleUser_EntityUser $oUser
* @param ModuleWall_EntityWall $oWall Объект нового сообщения на стене
* @param ModuleUser_EntityUser $oUser Объект пользователя
*/
public function SendWallNew(ModuleWall_EntityWall $oWall, ModuleUser_EntityUser $oUser) {
$this->Send(
@ -376,15 +390,14 @@ class ModuleNotify extends Module {
)
);
}
/**
* Универсальный метод отправки уведомлений на email
*
* @param ModuleUser_EntityUser | string $oUserTo - кому отправляем (пользователь или email)
* @param unknown_type $sTemplate - шаблон для отправки
* @param unknown_type $sSubject - тема письма
* @param unknown_type $aAssign - ассоциативный массив для загрузки переменных в шаблон письма
* @param unknown_type $sPluginName - плагин из которого происходит отправка
* @param ModuleUser_EntityUser|string $oUserTo Кому отправляем (пользователь или email)
* @param string $sTemplate Шаблон для отправки
* @param string $sSubject Тема письма
* @param array $aAssign Ассоциативный массив для загрузки переменных в шаблон письма
* @param string|null $sPluginName Плагин из которого происходит отправка
*/
public function Send($oUserTo,$sTemplate,$sSubject,$aAssign=array(),$sPluginName=null) {
if ($oUserTo instanceof ModuleUser_EntityUser) {
@ -437,8 +450,6 @@ class ModuleNotify extends Module {
$this->Mail_Send();
}
}
/**
* При завершении работы модуля проверяем наличие
* отложенных заданий в массиве и при необходимости
@ -450,12 +461,10 @@ class ModuleNotify extends Module {
$this->aTask=array();
}
}
/**
* Получает массив заданий на публикацию из базы
* с указанным количественным ограничением (выборка FIFO)
* Получает массив заданий на публикацию из базы с указанным количественным ограничением (выборка FIFO)
*
* @param int $iLimit
* @param int $iLimit Количество
* @return array
*/
public function GetTasksDelayed($iLimit=10) {
@ -466,7 +475,7 @@ class ModuleNotify extends Module {
/**
* Отправляет на e-mail
*
* @param ModuleNotify_EntityTask $oTask
* @param ModuleNotify_EntityTask $oTask Объект задания на отправку
*/
public function SendTask($oTask) {
$this->Mail_SetAdress($oTask->getUserMail(),$oTask->getUserLogin());
@ -478,7 +487,7 @@ class ModuleNotify extends Module {
/**
* Удаляет отложенное Notify-задание из базы
*
* @param ModuleNotify_EntityTask $oTask
* @param ModuleNotify_EntityTask $oTask Объект задания на отправку
* @return bool
*/
public function DeleteTask($oTask) {
@ -487,18 +496,17 @@ class ModuleNotify extends Module {
/**
* Удаляет отложенные Notify-задания по списку идентификаторов
*
* @param array $aArrayId
* @param array $aArrayId Список ID заданий на отправку
* @return bool
*/
public function DeleteTaskByArrayId($aArrayId) {
return $this->oMapper->DeleteTaskByArrayId($aArrayId);
}
/**
* Возвращает путь к шаблону по переданному имени
*
* @param string $sName
* @param string $sPluginName
* @param string $sName Название шаблона
* @param string $sPluginName Название или класс плагина
* @return string
*/
public function GetTemplatePath($sName,$sPluginName=null) {

View file

@ -15,51 +15,126 @@
---------------------------------------------------------
*/
class ModuleNotify_EntityTask extends Entity
{
public function getTaskId() {
return $this->_getDataOne('notify_task_id');
}
public function getUserMail() {
return $this->_getDataOne('user_mail');
}
public function getUserLogin() {
return $this->_getDataOne('user_login');
}
public function getNotifyText() {
return $this->_getDataOne('notify_text');
}
public function getDateCreated() {
return $this->_getDataOne('date_created');
}
public function getTaskStatus() {
return $this->_getDataOne('notify_task_status');
}
public function getNotifySubject() {
return $this->_getDataOne('notify_subject');
}
public function setTaskId($data) {
$this->_aData['notify_task_id']=$data;
}
public function setUserMail($data) {
$this->_aData['user_mail']=$data;
}
public function setUserLogin($data) {
$this->_aData['user_login']=$data;
}
public function setNotifyText($data) {
$this->_aData['notify_text']=$data;
}
public function setDateCreated($data) {
$this->_aData['date_created']=$data;
}
public function setTaskStatus($data) {
$this->_aData['notify_task_status']=$data;
}
public function setNotifySubject($data) {
$this->_aData['notify_subject']=$data;
}
/**
* Объект сущности задания на отправку емайла
*
* @package 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;
}
}
?>

View file

@ -15,8 +15,19 @@
---------------------------------------------------------
*/
class ModuleNotify_MapperNotify extends Mapper {
/**
* Маппер для работы с БД
*
* @package 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')."
@ -24,7 +35,7 @@ class ModuleNotify_MapperNotify extends Mapper {
VALUES
( ?, ?, ?, ?, ?, ?d )
";
if ($this->oDb->query(
$sql,
$oNotifyTask->getUserLogin(),
@ -32,64 +43,84 @@ class ModuleNotify_MapperNotify extends Mapper {
$oNotifyTask->getNotifySubject(),
$oNotifyTask->getNotifyText(),
$oNotifyTask->getDateCreated(),
$oNotifyTask->getTaskStatus()
$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())
)
$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);
".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
";
";
if ($this->oDb->query($sql,$oNotifyTask->getTaskId())) {
return true;
}
}
return false;
}
/**
* Удаляет отложенные 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)
";
";
if ($this->oDb->query($sql,$aTaskId)) {
return true;
}
}
return false;
}
/**
* Получает массив заданий на публикацию из базы с указанным количественным ограничением (выборка FIFO)
*
* @param int $iLimit Количество
* @return array
*/
public function GetTasks($iLimit) {
$sql = "SELECT *
FROM ".Config::Get('db.table.notify_task')."
@ -100,8 +131,8 @@ class ModuleNotify_MapperNotify extends Mapper {
foreach ($aRows as $aTask) {
$aTasks[]=Engine::GetEntity('Notify_Task',$aTask);
}
}
return $aTasks;
}
return $aTasks;
}
}
?>

View file

@ -16,8 +16,10 @@
*/
/**
* Модуль управления рейтингами и силой
* Модуль управления рейтингами и силой
*
* @package modules.rating
* @since 1.0
*/
class ModuleRating extends Module {
@ -25,14 +27,16 @@ class ModuleRating extends Module {
* Инициализация модуля
*
*/
public function Init() {
public function Init() {
}
/**
* Расчет рейтинга при голосовании за комментарий
*
* @param ModuleUser_EntityUser $oUser
* @param CommentEntity_TopicComment $oComment
* @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
* @param ModuleComment_EntityComment $oComment Объект комментария
* @param int $iValue
* @return int
*/
public function VoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment, $iValue) {
/**
@ -41,7 +45,7 @@ class ModuleRating extends Module {
$oComment->setRating($oComment->getRating()+$iValue);
/**
* Начисляем силу автору коммента, используя логарифмическое распределение
*/
*/
$skill=$oUser->getSkill();
$iMinSize=0.004;
$iMaxSize=0.5;
@ -51,7 +55,7 @@ class ModuleRating extends Module {
$iCountRange=$iMaxCount-$iMinCount;
if ($iCountRange==0) {
$iCountRange=1;
}
}
if ($skill>50 and $skill<200) {
$skill_new=$skill/70;
} elseif ($skill>=200) {
@ -73,9 +77,10 @@ class ModuleRating extends Module {
/**
* Расчет рейтинга и силы при гоосовании за топик
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleTopic_EntityTopic $oTopic
* @param unknown_type $iValue
* @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @param int $iValue
* @return int
*/
public function VoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic, $iValue) {
$skill=$oUser->getSkill();
@ -93,7 +98,7 @@ class ModuleRating extends Module {
$oTopic->setRating($oTopic->getRating()+$iDeltaRating);
/**
* Начисляем силу и рейтинг автору топика, используя логарифмическое распределение
*/
*/
$iMinSize=0.1;
$iMaxSize=8;
$iSizeRange=$iMaxSize-$iMinSize;
@ -102,7 +107,7 @@ class ModuleRating extends Module {
$iCountRange=$iMaxCount-$iMinCount;
if ($iCountRange==0) {
$iCountRange=1;
}
}
if ($skill>50 and $skill<200) {
$skill_new=$skill/70;
} elseif ($skill>=200) {
@ -125,15 +130,16 @@ class ModuleRating extends Module {
/**
* Расчет рейтинга и силы при голосовании за блог
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleBlog_EntityBlog $oBlog
* @param unknown_type $iValue
* @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @param int $iValue
* @return int
*/
public function VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, $iValue) {
public function VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, $iValue) {
/**
* Устанавливаем рейтинг блога, используя логарифмическое распределение
*/
$skill=$oUser->getSkill();
*/
$skill=$oUser->getSkill();
$iMinSize=1.13;
$iMaxSize=15;
$iSizeRange=$iMaxSize-$iMinSize;
@ -142,7 +148,7 @@ class ModuleRating extends Module {
$iCountRange=$iMaxCount-$iMinCount;
if ($iCountRange==0) {
$iCountRange=1;
}
}
if ($skill>50 and $skill<200) {
$skill_new=$skill/20;
} elseif ($skill>=200) {
@ -162,12 +168,13 @@ class ModuleRating extends Module {
*
* @param ModuleUser_EntityUser $oUser
* @param ModuleUser_EntityUser $oUserTarget
* @param unknown_type $iValue
* @param int $iValue
* @return float
*/
public function VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, $iValue) {
public function VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, $iValue) {
/**
* Начисляем силу и рейтинг юзеру, используя логарифмическое распределение
*/
*/
$skill=$oUser->getSkill();
$iMinSize=0.42;
$iMaxSize=3.2;
@ -177,7 +184,7 @@ class ModuleRating extends Module {
$iCountRange=$iMaxCount-$iMinCount;
if ($iCountRange==0) {
$iCountRange=1;
}
}
if ($skill>50 and $skill<200) {
$skill_new=$skill/40;
} elseif ($skill>=200) {
@ -187,14 +194,10 @@ class ModuleRating extends Module {
}
$iDelta=$iMinSize+(log($skill_new+1)-$iMinCount)*($iSizeRange/$iCountRange);
/**
* Сохраняем силу и рейтинг
*/
$iRatingNew=$oUserTarget->getRating()+$iValue*$iDelta;
//$iSkillNew=$oUserTarget->getSkill()+$iValue*$iDelta/3.67;
//$iSkillNew=($iSkillNew<0) ? 0 : $iSkillNew;
//$oUserTarget->setSkill($iSkillNew);
* Определяем новый рейтинг
*/
$iRatingNew=$oUserTarget->getRating()+$iValue*$iDelta;
$oUserTarget->setRating($iRatingNew);
///$this->User_Update($oUserTarget);
return $iValue*$iDelta;
}
}

View file

@ -4,18 +4,27 @@ require_once(Config::Get('path.root.engine').'/lib/external/Sphinx/sphinxapi.php
/**
* Модуль для работы с машиной полнотекстового поиска Sphinx
*
* @package modules.sphinx
* @since 1.0
*/
class ModuleSphinx extends Module {
/**
* Объект сфинкса
*
* @var SphinxClient|null
*/
protected $oSphinx = null;
/**
* Инициализация
*
*/
public function Init() {
public function Init() {
$this->InitSphinx();
}
/**
* Инициализация сфинкса
*/
protected function InitSphinx() {
/**
* Получаем объект Сфинкса(из Сфинкс АПИ)
@ -27,17 +36,13 @@ class ModuleSphinx extends Module {
*/
$this->oSphinx->SetSortMode(SPH_SORT_EXTENDED, "@weight DESC, @id DESc");
}
public function Shutdown() {
}
/**
* Возвращает число найденых элементов в зависимоти от их типа
*
* @param unknown_type $sTerms
* @param unknown_type $sObjType
* @param unknown_type $aExtraFilters
* @return unknown
* @param string $sTerms Поисковый запрос
* @param string $sObjType Тип поиска
* @param array $aExtraFilters Список фильтров
* @return int
*/
public function GetNumResultsByType($sTerms, $sObjType = 'topics', $aExtraFilters){
$aResults = $this->FindContent($sTerms, $sObjType, 1, 1, $aExtraFilters);
@ -46,25 +51,25 @@ class ModuleSphinx extends Module {
/**
* Непосредственно сам поиск
*
* @param unknown_type $sTerms
* @param unknown_type $sObjType
* @param unknown_type $iOffset
* @param unknown_type $iLimit
* @param unknown_type $aExtraFilters
* @return unknown
* @param string $sTerms Поисковый запрос
* @param string $sObjType Тип поиска
* @param int $iOffset Сдвиг элементов
* @param int $iLimit Количество элементов
* @param array $aExtraFilters Список фильтров
* @return array
*/
public function FindContent($sTerms, $sObjType, $iOffset, $iLimit, $aExtraFilters){
/**
* используем кеширование при поиске
*/
$sExtraFilters = serialize($aExtraFilters);
$cacheKey = Config::Get('module.search.entity_prefix')."searchResult_{$sObjType}_{$sTerms}_{$iOffset}_{$iLimit}_{$sExtraFilters}";
$cacheKey = Config::Get('module.search.entity_prefix')."searchResult_{$sObjType}_{$sTerms}_{$iOffset}_{$iLimit}_{$sExtraFilters}";
if (false === ($data = $this->Cache_Get($cacheKey))) {
/**
* Параметры поиска
*/
$this->oSphinx->SetMatchMode(SPH_MATCH_ALL);
$this->oSphinx->SetLimits($iOffset, $iLimit);
$this->oSphinx->SetLimits($iOffset, $iLimit);
/**
* Устанавливаем атрибуты поиска
*/
@ -72,7 +77,7 @@ class ModuleSphinx extends Module {
if(!is_null($aExtraFilters)){
foreach($aExtraFilters AS $sAttribName => $sAttribValue){
$this->oSphinx->SetFilter(
$sAttribName,
$sAttribName,
(is_array($sAttribValue)) ? $sAttribValue : array($sAttribValue)
);
}
@ -82,7 +87,7 @@ class ModuleSphinx extends Module {
*/
if(!is_array($data = $this->oSphinx->Query($sTerms, Config::Get('module.search.entity_prefix').$sObjType.'Index'))) {
return FALSE; // Скорее всего недоступен демон searchd
}
}
/**
* Если результатов нет, то и в кеш писать не стоит...
* хотя тут момент спорный
@ -96,7 +101,7 @@ class ModuleSphinx extends Module {
/**
* Получить ошибку при последнем обращении к поиску
*
* @return unknown
* @return string
*/
public function GetLastError(){
return $this->oSphinx->GetLastError();
@ -104,18 +109,18 @@ class ModuleSphinx extends Module {
/**
* Получаем сниппеты(превью найденых элементов)
*
* @param unknown_type $sText
* @param unknown_type $sIndex
* @param unknown_type $sTerms
* @param unknown_type $before_match
* @param unknown_type $after_match
* @return unknown
* @param string $sText Текст
* @param string $sIndex Название индекса
* @param string $sTerms Поисковый запрос
* @param string $before_match Добавляемый текст перед ключом
* @param string $after_match Добавляемый текст после ключа
* @return array
*/
public function GetSnippet($sText, $sIndex, $sTerms, $before_match, $after_match){
$aReturn = $this->oSphinx->BuildExcerpts(array($sText), Config::Get('module.search.entity_prefix').$sIndex.'Index', $sTerms, array(
'before_match' => $before_match,
'after_match' => $after_match,
)
'before_match' => $before_match,
'after_match' => $after_match,
)
);
return $aReturn[0];
}

View file

@ -18,11 +18,16 @@
/**
* Модуль потока событий на сайте
*
* @package modules.stream
* @since 1.0
*/
class ModuleStream extends Module {
/**
* Объект маппера
*
* @var ModuleStream_MapperStream
*/
protected $oMapper = null;
/**
* Список дефолтных типов событий, они добавляются каждому пользователю при регистрации
*
@ -49,24 +54,25 @@ class ModuleStream extends Module {
'join_blog' => array('related' => 'blog','unique_user'=>true)
);
/**
* Инициализация модуля
*/
public function Init() {
$this->oMapper=Engine::GetMapper(__CLASS__);
}
/**
* Возвращает все типы событий
*
* @return unknown
* @return array
*/
public function getEventTypes() {
return $this->aEventTypes;
}
/**
* Возвращает типы событий с учетом фильтра(доступности)
*
* @param null $aTypes
* @return null|unknown
* @param array|null $aTypes Список типов
* @return array
*/
public function getEventTypesFilter($aTypes=null) {
if (is_null($aTypes)) {
@ -84,9 +90,9 @@ class ModuleStream extends Module {
/**
* Добавляет новый тип события, метод для расширения списка событий плагинами
*
* @param unknown_type $sName
* @param unknown_type $aParams
* @return unknown
* @param string $sName Название типа
* @param array $aParams Параметры
* @return bool
*/
public function AddEventType($sName,$aParams) {
if (!array_key_exists($sName,$this->aEventTypes)) {
@ -98,7 +104,8 @@ class ModuleStream extends Module {
/**
* Проверка допустимого типа событий
*
* @param string $sType
* @param string $sType Тип
* @return bool
*/
public function IsAllowEventType($sType) {
return array_key_exists($sType,$this->aEventTypes);
@ -106,8 +113,8 @@ class ModuleStream extends Module {
/**
* Добавление события в БД
*
* @param unknown_type $oObject
* @return unknown
* @param ModuleStream_EntityEvent $oObject Объект события
* @return ModuleStream_EntityEvent|bool
*/
public function AddEvent($oObject) {
if ($iId=$this->oMapper->AddEvent($oObject)) {
@ -119,8 +126,8 @@ class ModuleStream extends Module {
/**
* Обновление события
*
* @param unknown_type $oObject
* @return unknown
* @param ModuleStream_EntityEvent $oObject Объект события
* @return int
*/
public function UpdateEvent($oObject) {
return $this->oMapper->UpdateEvent($oObject);
@ -128,18 +135,22 @@ class ModuleStream extends Module {
/**
* Получает событие по типу и его ID
*
* @param unknown_type $sEventType
* @param unknown_type $iTargetId
* @return unknown
* @param string $sEventType Тип
* @param int $iTargetId ID владельца события
* @param int|null $iUserId ID пользователя
* @return ModuleStream_EntityEvent
*/
public function GetEventByTarget($sEventType, $iTargetId, $iUserId=null) {
return $this->oMapper->GetEventByTarget($sEventType, $iTargetId, $iUserId);
}
/**
* Запись события в ленту
* @param type $oUser
* @param type $iEventType
* @param type $iTargetId
*
* @param int $iUserId ID пользователя
* @param string $sEventType Тип события
* @param int $iTargetId ID владельца
* @param int $iPublish Статус
* @return bool
*/
public function Write($iUserId, $sEventType, $iTargetId, $iPublish=1) {
$iPublish=(int)$iPublish;
@ -195,9 +206,9 @@ class ModuleStream extends Module {
/**
* Чтение потока пользователя
*
* @param int $iCount
* @param int $iFromId
* @param int $iUserId
* @param int|null $iCount Количество
* @param int|null $iFromId ID события с которого начинать выборку
* @param int|null $iUserId ID пользователя
* @return array
*/
public function Read($iCount=null,$iFromId=null,$iUserId=null) {
@ -219,12 +230,11 @@ class ModuleStream extends Module {
return $this->ReadEvents($aEventTypes,$aUsersList,$iCount,$iFromId);
}
/**
* Чтение всей активности на сайте
*
* @param int $iCount
* @param int $iFromId
* @param int|null $iCount Количество
* @param int|null $iFromId ID события с которого начинать выборку
* @return array
*/
public function ReadAll($iCount=null,$iFromId=null) {
@ -238,8 +248,9 @@ class ModuleStream extends Module {
/**
* Чтение активности конкретного пользователя
*
* @param int $iCount
* @param int $iUserId
* @param int $iUserId ID пользователя
* @param int|null $iCount Количество
* @param int|null $iFromId ID события с которого начинать выборку
* @return array
*/
public function ReadByUserId($iUserId,$iCount=null,$iFromId=null) {
@ -254,11 +265,10 @@ class ModuleStream extends Module {
return $this->ReadEvents($aEventTypes,$aUsersList,$iCount,$iFromId);
}
/**
* Количество событий конкретного пользователя
*
* @param $iUserId
* @param int $iUserId ID пользователя
* @return int
*/
public function GetCountByUserId($iUserId) {
@ -270,11 +280,10 @@ class ModuleStream extends Module {
return $this->oMapper->GetCount($aEventTypes, $iUserId);
}
/**
* Количество событий на которые подписан пользователь
*
* @param $iUserId
* @param int $iUserId ID пользователя
* @return int
*/
public function GetCountByReaderId($iUserId) {
@ -290,7 +299,6 @@ class ModuleStream extends Module {
return $this->oMapper->GetCount($aEventTypes, $aUsersList);
}
/**
* Количество событий на всем сайте
*
@ -305,15 +313,23 @@ class ModuleStream extends Module {
return $this->oMapper->GetCount($aEventTypes, null);
}
/**
* Количество событий для пользователя
*
* @param array $aEventTypes Список типов событий
* @param array|null $aUserId ID пользователя
* @return int
*/
public function GetCount($aEventTypes, $aUserId=null) {
return $this->oMapper->GetCount($aEventTypes, $aUserId);
}
/**
* @param array $aEventTypes
* @param array | null $aUsersList
* @param int $iCount
* @param int $iFromId
* Чтение событий
*
* @param array $aEventTypes Список типов событий
* @param array|null $aUsersList Список пользователей, чьи события читать
* @param int $iCount Количество
* @param int $iFromId ID события с которого начинать выборку
* @return array
*/
public function ReadEvents($aEventTypes,$aUsersList,$iCount=null,$iFromId=null) {
@ -324,7 +340,6 @@ class ModuleStream extends Module {
$aEventTypes=$this->getEventTypesFilter($aEventTypes);
if (!count($aEventTypes)) return array();
/**
* Получаем список событий
*/
@ -384,26 +399,29 @@ class ModuleStream extends Module {
}
return $aEvents;
}
/**
* Получение типов событий, на которые подписан пользователь
* @param type $iUserId
* @return type
*
* @param int $iUserId ID пользователя
* @return array
*/
public function getTypesList($iUserId) {
return $this->oMapper->getTypesList($iUserId);
}
/**
* Получение списка id пользователей, на которых подписан пользователь
* @return type
*
* @param int $iUserId ID пользователя
* @return array
*/
protected function getUsersList($iUserId) {
return $this->oMapper->getUserSubscribes($iUserId);
}
/**
* Получение списка пользователей, на которых подписан пользователь
* @param type $iUserId
* @return type
*
* @param int $iUserId ID пользователя
* @return array
*/
public function getUserSubscribes($iUserId) {
$aIds = $this->oMapper->getUserSubscribes($iUserId);
@ -412,8 +430,8 @@ class ModuleStream extends Module {
/**
* Проверяет подписан ли пользователь на конкретного пользователя
*
* @param $iUserId
* @param $iTargetUserId
* @param $iUserId ID пользователя
* @param $iTargetUserId ID пользователя на которого подписан
* @return bool
*/
public function IsSubscribe($iUserId,$iTargetUserId) {
@ -421,9 +439,10 @@ class ModuleStream extends Module {
}
/**
* Редактирование списка событий, на которые подписан юзер
* @param int $iUserId
* @param string $sType
* @return type
*
* @param int $iUserId ID пользователя
* @param string $sType Тип
* @return bool
*/
public function switchUserEventType($iUserId, $sType) {
if ($this->IsAllowEventType($sType)) {
@ -434,7 +453,7 @@ class ModuleStream extends Module {
/**
* Переключает дефолтный список типов событий у пользователя
*
* @param int $iUserId
* @param int $iUserId ID пользователя
*/
public function switchUserEventDefaultTypes($iUserId) {
foreach($this->aEventDefaultTypes as $sType) {
@ -443,28 +462,27 @@ class ModuleStream extends Module {
}
/**
* Подписать пользователя
* @param type $iUserId Id подписываемого пользователя
* @param type $iSubscribeType Тип подписки (см. константы класса)
* @param type $iTargetId Id цели подписки
*
* @param int $iUserId ID пользователя
* @param int $iTargetUserId ID пользователя на которого подписываем
*/
public function subscribeUser($iUserId, $iTargetUserId) {
return $this->oMapper->subscribeUser($iUserId, $iTargetUserId);
$this->oMapper->subscribeUser($iUserId, $iTargetUserId);
}
/**
* Отписать пользователя
* @param type $iUserId Id подписываемого пользователя
* @param type $iSubscribeType Тип подписки (см. константы класса)
* @param type $iTargetId Id цели подписки
*
* @param int $iUserId ID пользователя
* @param int $iTargetUserId ID пользователя на которого подписываем
*/
public function unsubscribeUser($iUserId, $iTargetUserId) {
return $this->oMapper->unsubscribeUser($iUserId, $iTargetUserId);
$this->oMapper->unsubscribeUser($iUserId, $iTargetUserId);
}
/**
* Получает список записей на стене
*
* @param unknown_type $aIds
* @return unknown
* @param array $aIds Список ID записей на стене
* @return array
*/
protected function loadRelatedWall($aIds) {
return $this->Wall_GetWallAdditionalData($aIds);
@ -472,8 +490,8 @@ class ModuleStream extends Module {
/**
* Получает список топиков
*
* @param unknown_type $aIds
* @return unknown
* @param array $aIds Список ID топиков
* @return array
*/
protected function loadRelatedTopic($aIds) {
return $this->Topic_GetTopicsAdditionalData($aIds);
@ -481,8 +499,8 @@ class ModuleStream extends Module {
/**
* Получает список блогов
*
* @param unknown_type $aIds
* @return unknown
* @param array $aIds Список ID блогов
* @return array
*/
protected function loadRelatedBlog($aIds) {
return $this->Blog_GetBlogsAdditionalData($aIds);
@ -490,8 +508,8 @@ class ModuleStream extends Module {
/**
* Получает список комментариев
*
* @param unknown_type $aIds
* @return unknown
* @param array $aIds Список ID комментариев
* @return array
*/
protected function loadRelatedComment($aIds) {
return $this->Comment_GetCommentsAdditionalData($aIds);
@ -500,8 +518,8 @@ class ModuleStream extends Module {
/**
* Получает список пользователей
*
* @param unknown_type $aIds
* @return unknown
* @param array $aIds Список ID пользователей
* @return array
*/
protected function loadRelatedUser($aIds) {
return $this->User_GetUsersAdditionalData($aIds);

View file

@ -15,6 +15,13 @@
---------------------------------------------------------
*/
/**
* Объект сущности события в активности
*
* @package modules.stream
* @since 1.0
*/
class ModuleStream_EntityEvent extends Entity {
}
?>

View file

@ -15,8 +15,19 @@
---------------------------------------------------------
*/
/**
* Объект маппера для работы с БД
*
* @package modules.stream
* @since 1.0
*/
class ModuleStream_MapperStream extends Mapper {
/**
* Добавление события в БД
*
* @param ModuleStream_EntityEvent $oObject
* @return int|bool
*/
public function AddEvent($oObject) {
$sql = "INSERT INTO ".Config::Get('db.table.stream_event')." SET ?a ";
if ($iId=$this->oDb->query($sql,$oObject->_getData())) {
@ -24,7 +35,14 @@ class ModuleStream_MapperStream extends Mapper {
}
return false;
}
/**
* Получает событие по типу и его ID
*
* @param string $sEventType Тип
* @param int $iTargetId ID владельца события
* @param int|null $iUserId ID пользователя
* @return ModuleStream_EntityEvent
*/
public function GetEventByTarget($sEventType, $iTargetId, $iUserId=null) {
$sql = "SELECT * FROM
".Config::Get('db.table.stream_event')."
@ -34,24 +52,46 @@ class ModuleStream_MapperStream extends Mapper {
}
return null;
}
/**
* Обновление события
*
* @param ModuleStream_EntityEvent $oObject Объект события
* @return int
*/
public function UpdateEvent($oObject) {
$sql = "UPDATE ".Config::Get('db.table.stream_event')." SET ?a WHERE id = ?d ";
return $this->oDb->query($sql,$oObject->_getData(array('publish')),$oObject->getId());
}
/**
* Получение типов событий, на которые подписан пользователь
*
* @param int $iUserId ID пользователя
* @return array
*/
public function getTypesList($iUserId) {
$sql = 'SELECT event_type FROM ' . Config::Get('db.table.stream_user_type') . ' WHERE user_id = ?d';
$aRet = $this->oDb->selectCol($sql, $iUserId);
return $aRet;
}
/**
* Получение списка пользователей, на которых подписан пользователь
*
* @param int $iUserId ID пользователя
* @return array
*/
public function getUserSubscribes($iUserId) {
$sql = 'SELECT target_user_id FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE user_id = ?d';
return $this->oDb->selectCol($sql, $iUserId);
}
/**
* Чтение событий
*
* @param array $aEventTypes Список типов событий
* @param array|null $aUsersList Список пользователей, чьи события читать
* @param int $iCount Количество
* @param int $iFromId ID события с которого начинать выборку
* @return array
*/
public function Read($aEventTypes, $aUsersList, $iCount, $iFromId) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_event'). '
WHERE
@ -70,7 +110,13 @@ class ModuleStream_MapperStream extends Mapper {
}
return $aReturn;
}
/**
* Количество событий для пользователя
*
* @param array $aEventTypes Список типов событий
* @param array|null $aUserId ID пользователя
* @return int
*/
public function GetCount($aEventTypes, $aUserId) {
if (!is_null($aUserId) and !is_array($aUserId)) {
$aUserId=array($aUserId);
@ -85,7 +131,13 @@ class ModuleStream_MapperStream extends Mapper {
}
return 0;
}
/**
* Редактирование списка событий, на которые подписан юзер
*
* @param int $iUserId ID пользователя
* @param string $sEventType Тип
* @return bool
*/
public function switchUserEventType($iUserId, $sEventType) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_user_type') . ' WHERE user_id = ?d AND event_type = ?';
if ($this->oDb->select($sql, $iUserId, $sEventType)) {
@ -95,7 +147,12 @@ class ModuleStream_MapperStream extends Mapper {
}
$this->oDb->query($sql, $iUserId, $sEventType);
}
/**
* Подписать пользователя
*
* @param int $iUserId ID пользователя
* @param int $iTargetUserId ID пользователя на которого подписываем
*/
public function subscribeUser($iUserId, $iTargetUserId) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE
user_id = ?d AND target_user_id = ?d';
@ -105,13 +162,24 @@ class ModuleStream_MapperStream extends Mapper {
$this->oDb->query($sql, $iUserId, $iTargetUserId);
}
}
/**
* Отписать пользователя
*
* @param int $iUserId ID пользователя
* @param int $iTargetUserId ID пользователя на которого подписываем
*/
public function unsubscribeUser($iUserId, $iTargetUserId) {
$sql = 'DELETE FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE
user_id = ?d AND target_user_id = ?d';
$this->oDb->query($sql, $iUserId, $iTargetUserId);
}
/**
* Проверяет подписан ли пользователь на конкретного пользователя
*
* @param $iUserId ID пользователя
* @param $iTargetUserId ID пользователя на которого подписан
* @return bool
*/
public function IsSubscribe($iUserId,$iTargetUserId) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE
user_id = ?d AND target_user_id = ?d LIMIT 0,1';
@ -120,5 +188,4 @@ class ModuleStream_MapperStream extends Mapper {
}
return false;
}
}

View file

@ -18,10 +18,21 @@
/**
* Модуль Subscribe - подписки пользователей
*
* @package modules.subscribe
* @since 1.0
*/
class ModuleSubscribe extends Module {
class ModuleSubscribe extends Module {
/**
* Объект маппера
*
* @var ModuleSubscribe_MapperSubscribe
*/
protected $oMapper;
/**
* Объект текущего пользователя
*
* @var ModuleUser_EntityUser|null
*/
protected $oUserCurrent;
/**
* Список доступных объектов подписок с параметрами
@ -32,26 +43,29 @@ class ModuleSubscribe extends Module {
protected $aTargetTypes=array(
'topic_new_comment' => array(),
);
/**
* Инициализация
*
*/
public function Init() {
public function Init() {
$this->oMapper=Engine::GetMapper(__CLASS__);
$this->oUserCurrent=$this->User_GetUserCurrent();
}
/**
* Возвращает список типов объектов для облаты
* Возвращает список типов объектов
*
* @return array
*/
public function GetTargetTypes() {
return $this->aTargetTypes;
}
/**
* Добавляет в разрешенные новый тип
* @param unknown_type $sTargetType
*
* @param string $sTargetType Тип
* @param array $aParams Параметры
* @return bool
*/
public function AddTargetType($sTargetType,$aParams=array()) {
if (!array_key_exists($sTargetType,$this->aTargetTypes)) {
@ -60,23 +74,22 @@ class ModuleSubscribe extends Module {
}
return false;
}
/**
* Проверяет разрешен ли данный тип в подписке
*
* @param $sTargetType
* @param string $sTargetType Тип
* @return bool
*/
public function IsAllowTargetType($sTargetType) {
return in_array($sTargetType,array_keys($this->aTargetTypes));
}
/**
* Проверка объекта подписки
*
* @param string $sTargetType
* @param int $iTargetId
* @param int $iCheckType
* @param string $sTargetType Тип
* @param int $iTargetId ID владельца
* @param int $iStatus Статус подписки
* @return bool
*/
public function CheckTarget($sTargetType,$iTargetId,$iStatus=null) {
$sMethod = 'CheckTarget'.func_camelize($sTargetType);
@ -85,13 +98,13 @@ class ModuleSubscribe extends Module {
}
return false;
}
/**
* Возвращает URL страницы с объектом подписки
* Актуально при переходе по ссылки с отпиской от рассылки и последующим редиректом
*
* @param string $sTargetType
* @param int $iTargetId
* @param string $sTargetType Тип
* @param int $iTargetId ID владельца
* @return bool
*/
public function GetUrlTarget($sTargetType,$iTargetId) {
$sMethod = 'GetUrlTarget'.func_camelize($sTargetType);
@ -100,11 +113,10 @@ class ModuleSubscribe extends Module {
}
return false;
}
/**
* Проверка на подписку для гостей
*
* @param $sTargetType
* @param string $sTargetType Тип
* @return bool
*/
public function IsAllowTargetForGuest($sTargetType) {
@ -115,12 +127,11 @@ class ModuleSubscribe extends Module {
}
return false;
}
/**
* Добавляет подписку в БД
*
* @param $oSubscribe
* @return ModuleSubscribe_EntitySubscribe | bool
* @param ModuleSubscribe_EntitySubscribe $oSubscribe Объект подписки
* @return ModuleSubscribe_EntitySubscribe|bool
*/
public function AddSubscribe($oSubscribe) {
if ($sId=$this->oMapper->AddSubscribe($oSubscribe)) {
@ -129,13 +140,12 @@ class ModuleSubscribe extends Module {
}
return false;
}
/**
* Создает подписку, если уже есть, то возвращает существующую
*
* @param $sTargetType
* @param $sTargetId
* @param $sMail
* @param string $sTargetType Тип
* @param string $sTargetId ID владельца
* @param string $sMail Емайл
* @return ModuleSubscribe_EntitySubscribe
*/
public function AddSubscribeSimple($sTargetType,$sTargetId,$sMail) {
@ -152,31 +162,34 @@ class ModuleSubscribe extends Module {
}
return $oSubscribe;
}
/**
* Обновление подписки
*
* @param ModuleSubscribe_EntitySubscribe $oSubscribe
* @return int
*/
public function UpdateSubscribe($oSubscribe) {
return $this->oMapper->UpdateSubscribe($oSubscribe);
}
/**
* Возвращает список подписок по фильтру
*
* @param $aFilter
* @param $aOrder
* @param $iCurrPage
* @param $iPerPage
* @return array
* @param array $aFilter Фильтр
* @param array $aOrder Сортировка
* @param int $iCurrPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @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);
}
/**
* Возвращает подписку по объекту подписки и емайлу
*
* @param $sTargetType
* @param $iTargetId
* @param $sMail
* @return ModuleSubscribe_EntitySubscribe
* @param string $sTargetType Тип
* @param int $iTargetId ID владельца
* @param string $sMail Емайл
* @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);
@ -185,12 +198,11 @@ class ModuleSubscribe extends Module {
}
return null;
}
/**
* Возвращает подписку по ключу
*
* @param $sKey
* @return ModuleSubscribe_EntitySubscribe
* @param string $sKey Ключ
* @return ModuleSubscribe_EntitySubscribe|null
*/
public function GetSubscribeByKey($sKey) {
$aRes=$this->GetSubscribes(array('key'=>$sKey),array(),1,1);
@ -199,17 +211,16 @@ class ModuleSubscribe extends Module {
}
return null;
}
/**
* Производит отправку писем по подписчикам подписки
*
* @param $sTargetType Тип объекта подписки
* @param $iTargetId ID объекта подписки
* @param $sTemplate Имя шаблона письма, например, notify.mail.tpl
* @param $sTitle Заголовок письма
* @param int $sTargetType Тип объекта подписки
* @param int $iTargetId ID объекта подписки
* @param string $sTemplate Имя шаблона письма, например, notify.mail.tpl
* @param string $sTitle Заголовок письма
* @param array $aParams Параметра для передачи в шаблон письма
* @param array $aExcludeMail Список емайлов на которые НЕ нужно отправлять
* @param string $sPluginName Название или класс плагина для корректной отправки
*/
public function Send($sTargetType,$iTargetId,$sTemplate,$sTitle,$aParams=array(),$aExcludeMail=array(),$sPluginName=null) {
$iPage=1;
@ -229,14 +240,13 @@ class ModuleSubscribe extends Module {
$aSubscribes=$this->Subscribe_GetSubscribes(array('target_type'=>$sTargetType,'target_id'=>$iTargetId,'status'=>1),array(),$iPage,20);
}
}
/**
* Проверка объекта подписки с типом "topic_new_comment"
* Название метода формируется автоматически
*
* @param int $iTargetId
* @param int $iStatus
* @param int $iTargetId ID владельца
* @param int $iStatus Статус
* @return bool
*/
public function CheckTargetTopicNewComment($iTargetId,$iStatus) {
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
@ -253,13 +263,12 @@ class ModuleSubscribe extends Module {
}
return false;
}
/**
* Возвращает URL на страницы объекта подписки с типом "topic_new_comment"
* Название метода формируется автоматически
*
* @param $iTargetId
* @return bool
* @param int $iTargetId ID топика
* @return string|bool
*/
public function GetUrlTargetTopicNewComment($iTargetId) {
if ($oTopic=$this->Topic_GetTopicById($iTargetId) and $oTopic->getPublish()) {

View file

@ -15,7 +15,13 @@
---------------------------------------------------------
*/
class ModuleSubscribe_EntitySubscribe extends Entity {
/**
* Объект сущности подписки
*
* @package modules.subscribe
* @since 1.0
*/
class ModuleSubscribe_EntitySubscribe extends Entity {
}
?>

View file

@ -15,17 +15,33 @@
---------------------------------------------------------
*/
class ModuleSubscribe_MapperSubscribe extends Mapper {
/**
* Объект маппера для работы с БД
*
* @package modules.subscribe
* @since 1.0
*/
class ModuleSubscribe_MapperSubscribe extends Mapper {
/**
* Добавляет подписку в БД
*
* @param ModuleSubscribe_EntitySubscribe $oSubscribe Объект подписки
* @return int|bool
*/
public function AddSubscribe($oSubscribe) {
$sql = "INSERT INTO ".Config::Get('db.table.subscribe')." SET ?a ";
$sql = "INSERT INTO ".Config::Get('db.table.subscribe')." SET ?a ";
if ($iId=$this->oDb->query($sql,$oSubscribe->_getData())) {
return $iId;
}
}
return false;
}
/**
* Получение подписки по типы и емайлу
*
* @param string $sType Тип
* @param string $sMail Емайл
* @return ModuleSubscribe_EntitySubscribe|null
*/
public function GetSubscribeByTypeAndMail($sType,$sMail) {
$sql = "SELECT * FROM ".Config::Get('db.table.subscribe')." WHERE target_type = ? and mail = ?";
if ($aRow=$this->oDb->selectRow($sql,$sType,$sMail)) {
@ -33,21 +49,33 @@ class ModuleSubscribe_MapperSubscribe extends Mapper {
}
return null;
}
/**
* Обновление подписки
*
* @param ModuleSubscribe_EntitySubscribe $oSubscribe
* @return int
*/
public function UpdateSubscribe($oSubscribe) {
$sql = "UPDATE ".Config::Get('db.table.subscribe')."
SET
status = ?,
date_remove = ?
WHERE id = ?d
";
";
return $this->oDb->query($sql,$oSubscribe->getStatus(),
$oSubscribe->getDateRemove(),
$oSubscribe->getId());
$oSubscribe->getDateRemove(),
$oSubscribe->getId());
}
/**
* Возвращает список подписок по фильтру
*
* @param array $aFilter Фильтр
* @param array $aOrder Сортировка
* @param int $iCount Возвращает общее количество элементов
* @param int $iCurrPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @return array
*/
public function GetSubscribes($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
$aOrderAllow=array('id','date_add','status');
$sOrder='';