From 43fe12af13054429b21ac032e1000d08be288ac8 Mon Sep 17 00:00:00 2001 From: Min-Soo Kim Date: Sun, 31 May 2020 22:44:14 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EC=88=98=EC=8B=A0=20?= =?UTF-8?q?=EA=B1=B0=EB=B6=80=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EB=93=9C?= =?UTF-8?q?=EB=A1=AD=EB=8B=A4=EC=9A=B4=20=EB=A9=94=EB=89=B4=EC=97=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#1301)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 알림센터의 수신 거부 기능을 드롭다운 메뉴에 추가. * 알림 수신 설정 메뉴 트리거 코드 수정 * Unsubscribe_srl이 잘못된 값일 경우에 대한 오류 처리 추가 * Refining the unsubscribing methods * 사용하지 않는 변수 제거, 오류 문구 정리 * 사용할 필요가 없어진 $member_srl 변수 사용 안함. * 수신 거부 해제 대상이 아닌 컨텐츠를 수신 거부 해제 요청시 오류 문구 추가. * Support multi-lang for the unsubscribing page of default skin --- modules/ncenterlite/lang/en.php | 7 + modules/ncenterlite/lang/ko.php | 3 + modules/ncenterlite/ncenterlite.class.php | 3 + .../ncenterlite/ncenterlite.controller.php | 133 +++++++++++++++--- modules/ncenterlite/ncenterlite.view.php | 16 +-- .../skins/default/unsubscribe.html | 4 +- .../skins/default/unsubscribeList.html | 10 +- 7 files changed, 144 insertions(+), 32 deletions(-) diff --git a/modules/ncenterlite/lang/en.php b/modules/ncenterlite/lang/en.php index adfa551cf..9cf4459b0 100644 --- a/modules/ncenterlite/lang/en.php +++ b/modules/ncenterlite/lang/en.php @@ -109,6 +109,10 @@ $lang->ncenterlite_commnet_event_noti_all = 'Notice every comments to the author $lang->ncenterlite_commnet_event_noti_some = 'Notice only direct replies to the author'; $lang->ncenterlite_message_event = 'Notify message'; $lang->ncenterlite_message_event_about = 'Do not notify message (Use XE Core message notification system).'; +$lang->ncenterlite_mid_use = 'Module specific settings'; +$lang->ncenterlite_to_unsubscribe = 'Disable notification'; +$lang->ncenterlite_subscribe = 'Activate notification'; +$lang->ncenterlite_cmd_unsubscribe_settings = 'Notification settings'; $lang->ncenterlite_all_delete = 'Delete all'; $lang->ncenterlite_month_before_delete = 'Delete older than 1 month'; $lang->dont_check_notify_delete = 'Unread notifications will be deleted, too.'; @@ -122,3 +126,6 @@ $lang->about_anonymous_scrap = 'anonymize scrapper in scrap notification'; $lang->highlight_effect = 'highlight effect'; $lang->about_highlight_effect = 'it gives highlight effect to the comment when access the comment URL.'; $lang->msg_denger_rhymix_user = 'Warning! Rhymix includes notification center by default.
Please remove this XE-only module and reinstall the Rhymix native version.'; + +$lang->ncenterlite_content_type = 'Type of the contents'; +$lang->msg_unsubscribe_not_in_list = 'This contents is not in the unsubscribed list.'; \ No newline at end of file diff --git a/modules/ncenterlite/lang/ko.php b/modules/ncenterlite/lang/ko.php index 5a094e098..6f623438b 100644 --- a/modules/ncenterlite/lang/ko.php +++ b/modules/ncenterlite/lang/ko.php @@ -129,6 +129,7 @@ $lang->ncenterlite_message_event_about = '쪽지 알림을 사용하지 않음(X $lang->ncenterlite_mid_use = '모듈별 사용 설정'; $lang->ncenterlite_to_unsubscribe = '수신 거부'; $lang->ncenterlite_subscribe = '수신 거부 안함'; +$lang->ncenterlite_cmd_unsubscribe_settings = '알림 수신 설정'; $lang->this_message_unsubscribe = '이 게시글/댓글의 알림 수신 거부'; $lang->about_this_message_unsubscribe = '이 게시글/댓글의 알림을 수신 거부합니다.'; $lang->unsubscribe_list = '수신 거부 리스트'; @@ -171,6 +172,7 @@ $lang->cmd_web_notify = '웹 알림'; $lang->cmd_mail_notify = '메일 알림'; $lang->cmd_sms_notify = '문자 알림'; $lang->cmd_push_notify = '푸시 알림'; +$lang->ncenterlite_content_type = '컨텐츠 종류'; $lang->ncenterlite_type_id = '알림 타입 아이디'; $lang->ncenterlite_type_objects = '알림 타입 변수값'; $lang->ncenterlite_type_content = '알림 타입 내용'; @@ -182,3 +184,4 @@ $lang->msg_denger_rhymix_user = '경고! 라이믹스에서는 $lang->msg_test_notifycation_success = '테스트알림더미를 정상적으로 생성하였습니다.'; $lang->msg_unsubscribe_block_not_support = '개별 수신 거부 기능을 제공하지 않습니다. 관리자에게 문의하세요.'; $lang->msg_unsubscribe_not_permission = '다른 회원의 구독리스트를 조회할 권한이 없습니다.'; +$lang->msg_unsubscribe_not_in_list = '수신 거부 목록에 없는 컨텐츠입니다.'; diff --git a/modules/ncenterlite/ncenterlite.class.php b/modules/ncenterlite/ncenterlite.class.php index ee9d433d9..adcc8fe91 100644 --- a/modules/ncenterlite/ncenterlite.class.php +++ b/modules/ncenterlite/ncenterlite.class.php @@ -31,6 +31,9 @@ class ncenterlite extends ModuleObject array('document.moveDocumentToTrash', 'ncenterlite', 'controller', 'triggerAfterMoveToTrash', 'after'), array('comment.updateVotedCount', 'ncenterlite', 'controller', 'triggerAfterCommentVotedCount', 'after'), array('comment.updateVotedCountCancel', 'ncenterlite', 'controller', 'triggerAfterCommentVotedCancel', 'after'), + // 2020. 05. 30 add menu when popup document menu called + array('document.getDocumentMenu', 'ncenterlite', 'controller', 'triggerGetDocumentMenu', 'after'), + array('comment.getCommentMenu', 'ncenterlite', 'controller', 'triggerGetCommentMenu', 'after'), ); private $delete_triggers = array( diff --git a/modules/ncenterlite/ncenterlite.controller.php b/modules/ncenterlite/ncenterlite.controller.php index 1ea19acc2..eebab858c 100644 --- a/modules/ncenterlite/ncenterlite.controller.php +++ b/modules/ncenterlite/ncenterlite.controller.php @@ -113,40 +113,85 @@ class ncenterliteController extends ncenterlite throw new Rhymix\Framework\Exception('msg_unsubscribe_block_not_support'); } - $member_srl = Context::get('member_srl'); - if(!$member_srl) + if(!Rhymix\Framework\Session::isMember()) { - $member_srl = $this->user->member_srl; - } - - if(intval($this->user->member_srl) != intval($member_srl) && $this->user->is_admin != 'Y') - { - throw new Rhymix\Framework\Exception('ncenterlite_stop_no_permission_other_user_block_settings'); + throw new Rhymix\Framework\Exception\MustLogin; } $obj = Context::getRequestVars(); - if($obj->unsubscribe_srl) + + if(!$this->user->member_srl || (!intval($obj->unsubscribe_srl) && !intval($obj->target_srl))) { - $userBlockData = $oNcenterliteModel->getUserUnsubscribeConfigByUnsubscribeSrl($obj->unsubscribe_srl); - } - else if($obj->target_srl) - { - $userBlockData = $oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($obj->target_srl, $member_srl); + throw new Rhymix\Framework\Exceptions\InvalidRequest; } + if($obj->target_srl) + { + $userBlockData = $oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($obj->target_srl, $this->user->member_srl); + + // If there was a record directed by unsubscribe_srl, the record should be used to validate the input data. + if($userBlockData) + { + if (!intval($obj->unsubscribe_srl)) + { + $obj->unsubscribe_srl = $userBlockData->unsubscribe_srl; + } + + if (intval($obj->unsubscribe_srl) != intval($userBlockData->unsubscribe_srl)) + { + throw new Rhymix\Framework\Exceptions\InvalidRequest; + } + } + } + + if(!$userBlockData && $obj->unsubscribe_srl) + { + $userBlockData = $oNcenterliteModel->getUserUnsubscribeConfigByUnsubscribeSrl($obj->unsubscribe_srl); + + // The input member_srl from the POST or GET might not equal to the member_srl from the record of unsubscribe_srl. + if(intval($this->user->member_srl) != intval($userBlockData->member_srl)) + { + throw new Rhymix\Framework\Exception('ncenterlite_stop_no_permission_other_user_block_settings'); + } + + // If there was a record directed by unsubscribe_srl, the record should be used to validate the input data. + if($userBlockData) + { + if (!intval($obj->target_srl)) + { + $obj->target_srl = $userBlockData->target_srl; + } + + if (intval($obj->target_srl) != intval($userBlockData->target_srl)) + { + throw new Rhymix\Framework\Exceptions\InvalidRequest; + } + } + } + + if($userBlockData) + { + $obj->unsubscribe_srl = $userBlockData->unsubscribe_srl; + } + + // Content type can be document and comment, now. However, the default type cannot be specified, as the type can be another in the future. if($obj->unsubscribe_type == 'document') { $text = cut_str(getModel('document')->getDocument($obj->target_srl)->get('title'), 30); } - else + elseif($obj->unsubscribe_type == 'comment') { $comment = getModel('comment')->getComment($obj->target_srl); $contentString = $comment->getContentText(30); $text = strlen($contentString) ? $contentString : lang('comment.no_text_comment'); } + else + { + throw new Rhymix\Framework\Exceptions\InvalidRequest; + } $args = new stdClass(); - $args->member_srl = $member_srl; + $args->member_srl = $this->user->member_srl; $args->target_srl = $obj->target_srl; if($obj->unsubscribe_type == 'document') { @@ -178,6 +223,11 @@ class ncenterliteController extends ncenterlite } else { + if(!$obj->unsubscribe_srl && !$userBlockData) + { + throw new Rhymix\Framework\Exception('msg_unsubscribe_not_in_list'); + } + $args->unsubscribe_srl = $obj->unsubscribe_srl; $output = executeQuery('ncenterlite.deleteUnsubscribe', $args); if(!$output->toBool()) @@ -193,7 +243,7 @@ class ncenterliteController extends ncenterlite } else { - $this->setRedirectUrl(getNotEncodedUrl('act', 'dispNcenterliteUnsubscribeList', 'member_srl', $member_srl)); + $this->setRedirectUrl(getNotEncodedUrl('act', 'dispNcenterliteUnsubscribeList', 'member_srl', $this->user->member_srl)); } } @@ -1621,4 +1671,53 @@ class ncenterliteController extends ncenterlite } return $notify_member_srls; } + + /** + * trigger for document.getDocumentMenu. Append to popup menu a button for dispNcenterliteInsertUnsubscribe() + * + * @param array &$menu_list + * + * @return object + **/ + function triggerGetDocumentMenu(&$menu_list) + { + if(!Rhymix\Framework\Session::isMember()) return; + + $document_srl = Context::get('target_srl'); + + /** @var ncenterliteModel $oNcenterliteModel */ + $oNcenterliteModel = getModel('ncenterlite'); + $config = $oNcenterliteModel->getConfig(); + + if($config->unsubscribe !== 'Y') return; + + $oDocumentController = getController('document'); + $url = getUrl('','module','ncenterlite','act','dispNcenterliteInsertUnsubscribe', 'target_srl', $document_srl, 'unsubscribe_type', 'document'); + $oDocumentController->addDocumentPopupMenu($url,'ncenterlite_cmd_unsubscribe_settings','','popup'); + } + + /** + * trigger for comment.getCommentMenu. Append to popup menu a button for dispNcenterliteInsertUnsubscribe() + * + * @param array &$menu_list + * + * @return object + **/ + function triggerGetCommentMenu(&$menu_list) + { + if(!Rhymix\Framework\Session::isMember()) return; + + $comment_srl = Context::get('target_srl'); + + /** @var ncenterliteModel $oNcenterliteModel */ + $oNcenterliteModel = getModel('ncenterlite'); + $config = $oNcenterliteModel->getConfig(); + + if($config->unsubscribe !== 'Y') return; + + $oCommentController = getController('comment'); + $url = getUrl('','module','ncenterlite','act','dispNcenterliteInsertUnsubscribe', 'target_srl', $comment_srl, 'unsubscribe_type', 'comment'); + $oCommentController->addCommentPopupMenu($url,'ncenterlite_cmd_unsubscribe_settings','','popup'); + } + } diff --git a/modules/ncenterlite/ncenterlite.view.php b/modules/ncenterlite/ncenterlite.view.php index fa1076cbe..ccad4ca41 100644 --- a/modules/ncenterlite/ncenterlite.view.php +++ b/modules/ncenterlite/ncenterlite.view.php @@ -156,11 +156,11 @@ class ncenterliteView extends ncenterlite if($unsubscribe_type == 'document') { - $text = getModel('document')->getDocument($target_srl)->get('title'); - $type = '문서'; + $text = getModel('document')->getDocument($target_srl)->getTitleText(); + $type = lang('document'); if(!$text) { - $text = getModel('comment')->getComment($target_srl)->get('content'); + $text = getModel('comment')->getComment($target_srl)->getContentPlainText(); if(!$text) { throw new Rhymix\Framework\Exceptions\InvalidRequest; @@ -168,18 +168,18 @@ class ncenterliteView extends ncenterlite else { Context::set('unsubscribe_type', 'comment'); - $type = '댓글'; + $type = lang('comment'); } } } else { - $text = getModel('comment')->getComment($target_srl)->get('content'); - $type = '댓글'; + $text = getModel('comment')->getComment($target_srl)->getContentPlainText(); + $type = lang('comment'); if(!$text) { - $text = getModel('document')->getDocument($target_srl)->get('title'); + $text = getModel('document')->getDocument($target_srl)->getTitleText(); if(!$text) { throw new Rhymix\Framework\Exceptions\InvalidRequest; @@ -187,7 +187,7 @@ class ncenterliteView extends ncenterlite else { Context::set('unsubscribe_type', 'document'); - $type = '문서'; + $type = lang('document'); } } } diff --git a/modules/ncenterlite/skins/default/unsubscribe.html b/modules/ncenterlite/skins/default/unsubscribe.html index 4a26c8f3f..5e00723ae 100644 --- a/modules/ncenterlite/skins/default/unsubscribe.html +++ b/modules/ncenterlite/skins/default/unsubscribe.html @@ -20,7 +20,7 @@
- +

{$type} @@ -28,7 +28,7 @@

- +

diff --git a/modules/ncenterlite/skins/default/unsubscribeList.html b/modules/ncenterlite/skins/default/unsubscribeList.html index 5f3ebf6e0..5ff6b8ec5 100644 --- a/modules/ncenterlite/skins/default/unsubscribeList.html +++ b/modules/ncenterlite/skins/default/unsubscribeList.html @@ -5,9 +5,9 @@ - - - + + + @@ -15,9 +15,9 @@
타입콘텐츠차단설정{lang('ncenterlite_content_type')}{lang('content')}{lang('ncenterlite_notify_settings')}
- 문서 + {lang('document')} - 댓글 + {lang('comment')}