Support user config of notification types, fixes #994

코어에서 지원하는 알림 종류 및 알림 수신 방법이 늘어남에 따라,
관리자가 설정한 범위 내에서 회원들이 알림 수신 방법을 선택할 수 있도록 합니다.
기존에는 수신 여부만 선택할 수 있었으나 이제 더 세부적인 설정이 가능합니다.
예를 들어 웹 알림과 푸시알림은 받고, 메일 알림과 문자 알림은 끌 수 있습니다.

이 기능을 지원하기 위해 ncenterlite_user_set 테이블 스키마를 대폭 조정합니다.
기존 설정은 가능하면 그대로 유지하려고 노력하였습니다.
This commit is contained in:
Kijin Sung 2020-12-17 23:41:31 +09:00
parent 3032784ca7
commit c52187a8f2
14 changed files with 435 additions and 531 deletions

View file

@ -48,27 +48,30 @@ class ncenterliteView extends ncenterlite
throw new Rhymix\Framework\Exception('msg_not_use_user_setting');
}
$oMemberModel = getModel('member');
$member_srl = Context::get('member_srl');
$logged_info = Context::get('logged_info');
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exception('ncenterlite_stop_login_required');
if($logged_info->is_admin == 'Y' && $member_srl)
if(!Rhymix\Framework\Session::getMemberSrl())
{
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
throw new Rhymix\Framework\Exceptions\MustLogin;
}
if($logged_info->is_admin != 'Y' && $member_srl)
$member_srl = Context::get('member_srl');
if($this->user->isAdmin() && $member_srl)
{
if($member_srl != $logged_info->member_srl)
$member_info = MemberModel::getMemberInfoByMemberSrl($member_srl);
}
if(!$this->user->isAdmin() && $member_srl)
{
if($member_srl != $this->user->member_srl)
{
throw new Rhymix\Framework\Exception('ncenterlite_stop_no_permission_other_user');
throw new Rhymix\Framework\Exceptions\NotPermitted('ncenterlite_stop_no_permission_other_user');
}
}
$output = $oNcenterliteModel->getUserConfig($member_srl);
Context::set('member_info', $member_info);
Context::set('user_config', $output->data);
Context::set('user_config', NcenterliteModel::getUserConfig($member_srl));
Context::set('module_config', NcenterliteModel::getConfig());
Context::set('notify_types', NcenterliteModel::getNotifyTypes());
Context::set('sms_available', Rhymix\Framework\SMS::getDefaultDriver()->getName() !== 'Dummy');
Context::set('push_available', count(Rhymix\Framework\Config::get('push.types')) > 0);
$this->setTemplateFile('userconfig');
}
@ -89,19 +92,17 @@ class ncenterliteView extends ncenterlite
if(!Rhymix\Framework\Session::getMemberSrl())
{
throw new Rhymix\Framework\Exception('ncenterlite_stop_login_required');
throw new Rhymix\Framework\Exceptions\MustLogin;
}
$member_srl = Context::get('member_srl');
if(!$member_srl)
{
$member_srl = $this->user->member_srl;
}
if($this->user->is_admin !== 'Y' && intval($this->user->member_srl) !== intval($member_srl))
if(!$this->user->isAdmin() && intval($this->user->member_srl) !== intval($member_srl))
{
throw new \Rhymix\Framework\Exception('msg_unsubscribe_not_permission');
throw new Rhymix\Framework\Exceptions\NotPermitted('msg_unsubscribe_not_permission');
}
$args = new stdClass();