From 3032784ca743fdb980d5559365c2bdafa3adc36e Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 17 Dec 2020 23:40:57 +0900 Subject: [PATCH 1/2] Add x_inline class to default member skin --- modules/member/skins/default/css/member.css | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/member/skins/default/css/member.css b/modules/member/skins/default/css/member.css index 6039274f7..7853f1fd5 100644 --- a/modules/member/skins/default/css/member.css +++ b/modules/member/skins/default/css/member.css @@ -18,6 +18,7 @@ .xm select, .xm textarea{font-weight:normal;line-height:20px} .xm label{display:block;margin-bottom:5px} +.xm label.x_inline{display:inline-block;margin-right:12px} .xm select, .xm textarea, .xm input[type="text"], From c52187a8f229330357a978bc5b3acc9eeb414e0b Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 17 Dec 2020 23:41:31 +0900 Subject: [PATCH 2/2] Support user config of notification types, fixes #994 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 코어에서 지원하는 알림 종류 및 알림 수신 방법이 늘어남에 따라, 관리자가 설정한 범위 내에서 회원들이 알림 수신 방법을 선택할 수 있도록 합니다. 기존에는 수신 여부만 선택할 수 있었으나 이제 더 세부적인 설정이 가능합니다. 예를 들어 웹 알림과 푸시알림은 받고, 메일 알림과 문자 알림은 끌 수 있습니다. 이 기능을 지원하기 위해 ncenterlite_user_set 테이블 스키마를 대폭 조정합니다. 기존 설정은 가능하면 그대로 유지하려고 노력하였습니다. --- modules/ncenterlite/lang/en.php | 41 ++-- modules/ncenterlite/lang/ko.php | 46 ++-- .../ncenterlite/ncenterlite.admin.view.php | 23 +- modules/ncenterlite/ncenterlite.class.php | 171 +++++-------- .../ncenterlite/ncenterlite.controller.php | 227 ++++++++++-------- modules/ncenterlite/ncenterlite.model.php | 121 ++++++++-- modules/ncenterlite/ncenterlite.view.php | 37 +-- modules/ncenterlite/queries/getNotifyType.xml | 7 +- modules/ncenterlite/queries/insertNotify.xml | 3 +- .../schemas/ncenterlite_user_set.xml | 16 +- .../ncenterlite/skins/default/userconfig.html | 99 +++----- .../skins/default_bottom/userconfig.html | 105 +++----- modules/ncenterlite/tpl/config.html | 68 +----- modules/ncenterlite/tpl/othercomment.html | 2 +- 14 files changed, 435 insertions(+), 531 deletions(-) diff --git a/modules/ncenterlite/lang/en.php b/modules/ncenterlite/lang/en.php index 9cf4459b0..89f355222 100644 --- a/modules/ncenterlite/lang/en.php +++ b/modules/ncenterlite/lang/en.php @@ -2,15 +2,18 @@ $lang->ncenterlite = 'Notification Center Lite'; $lang->ncenterlite_install_version = 'Installed version'; $lang->ncenterlite_advenced_config = 'Advenced Setting'; -$lang->ncenterlite_document = 'document'; +$lang->ncenterlite_document = 'post'; $lang->ncenterlite_comment = 'comment'; -$lang->ncenterlite_mention = 'Mention'; -$lang->ncenterlite_cmd_vote = 'Vote'; -$lang->ncenterlite_cmd_scrap = 'Scrap'; -$lang->ncenterlite_comment_comment = 'Reply to Comment'; -$lang->ncenterlite_admin_content = 'Admin Notification'; -$lang->ncenterlite_custom = 'Other'; -$lang->ncenterlite_type_message = 'message'; +$lang->ncenterlite_type_document = 'New document'; +$lang->ncenterlite_type_comment = 'New comment'; +$lang->ncenterlite_type_comment_comment = 'Reply on comment'; +$lang->ncenterlite_type_mention = 'Mention'; +$lang->ncenterlite_type_vote = 'Vote'; +$lang->ncenterlite_type_scrap = 'Scrap'; +$lang->ncenterlite_type_message = 'Direct message'; +$lang->ncenterlite_type_test = 'Test notification'; +$lang->ncenterlite_type_admin_content = 'Admin notification'; +$lang->ncenterlite_type_custom = 'Other'; $lang->ncenterlite_sender = 'Sender'; $lang->ncenterlite_addressee = 'Recipient'; $lang->ncenterlite_noti_contents = 'Contents'; @@ -23,14 +26,14 @@ $lang->ncenterlite_my_settings = 'My notification settings'; $lang->ncenterlite_user_settings = 'User notification settings'; $lang->ncenterlite_userconfig_title = 'Notification Center Settings of %s'; $lang->ncenterlite_userconfig_about = 'Personalized settings of notification center can be controlled by you.'; -$lang->ncenterlite_comment_noti = 'Comment notice'; -$lang->ncenterlite_comment_noti_about = 'Get notice of a comment after someone replies to my documents or comments.'; -$lang->ncenterlite_mention_noti = 'New Direct Message'; -$lang->ncenterlite_mention_noti_about = 'Get notice of a mention after someone mention me on documents and/or comments. ( @Nickname to mention )'; -$lang->ncenterlite_message_noti = 'New Message'; -$lang->ncenterlite_message_noti_about = 'Get notice of a message after someone send the message to me.'; -$lang->ncenterlite_comment_comment_noti = 'New Comment'; -$lang->ncenterlite_vote_noti = 'New Upvote'; +$lang->ncenterlite_comment_noti_about = 'Receive notifications for new comments on my posts.'; +$lang->ncenterlite_comment_comment_noti_about = 'Receive notifications for replies to my comments.'; +$lang->ncenterlite_mention_noti_about = 'Receive notifications for mentions (@%s).'; +$lang->ncenterlite_message_noti_about = 'Receive notifications for direct messages.'; +$lang->ncenterlite_vote_noti_about = 'Receive notifications when someone votes on my post or comment.'; +$lang->ncenterlite_scrap_noti_about = 'Receive notifications when someone scraps my post.'; +$lang->ncenterlite_admin_content_noti_about = 'Receive administrator notifications.'; +$lang->ncenterlite_custom_noti_about = 'Receive all other notifications.'; $lang->ncenterlite_activate = 'Activate'; $lang->ncenterlite_inactivate = 'Inactivate'; $lang->ncenterlite_userconfig_about_warning = 'Watch out! You are controlling other user\'s settings via this page.'; @@ -65,7 +68,6 @@ $lang->ncenterlite_not_have_message = 'You have no new notifications.'; $lang->ncenterlite_thisistest = '[*] This is a test notice.'; $lang->ncenterlite_delete_all = 'delete all'; $lang->ncenterlite_more = 'More'; -$lang->ncenterlite_stop_login_required = 'Sign in to control your own notification settings.'; $lang->ncenterlite_stop_no_permission_other_user = 'You don\'t have the authority to read settings of other members.'; $lang->ncenterlite_stop_no_permission_other_user_settings = 'You don\'t have the authority to control settings of other members.'; $lang->ncenterlite_message_delete_notification_before = 'Notifications before %s are deleted.'; @@ -125,6 +127,11 @@ $lang->anonymous_scrap = 'anonymous scrap'; $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->fail_module_install = 'Failed to install module.'; +$lang->cmd_web_notify = 'Web'; +$lang->cmd_mail_notify = 'Email'; +$lang->cmd_sms_notify = 'SMS'; +$lang->cmd_push_notify = 'Push'; $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'; diff --git a/modules/ncenterlite/lang/ko.php b/modules/ncenterlite/lang/ko.php index dde9428e1..192196e54 100644 --- a/modules/ncenterlite/lang/ko.php +++ b/modules/ncenterlite/lang/ko.php @@ -4,12 +4,16 @@ $lang->ncenterlite_install_version = '설치된 버전'; $lang->ncenterlite_advenced_config = '고급 설정'; $lang->ncenterlite_document = '글'; $lang->ncenterlite_comment = '댓글'; -$lang->ncenterlite_mention = '멘션'; -$lang->ncenterlite_cmd_vote = '추천'; -$lang->ncenterlite_cmd_scrap = '스크랩'; -$lang->ncenterlite_comment_comment = '대댓글'; -$lang->ncenterlite_type_message = '쪽지'; -$lang->ncenterlite_type_test = '테스트'; +$lang->ncenterlite_type_document = '글 알림'; +$lang->ncenterlite_type_comment = '댓글 알림'; +$lang->ncenterlite_type_comment_comment = '대댓글 알림'; +$lang->ncenterlite_type_mention = '멘션 알림'; +$lang->ncenterlite_type_vote = '추천 알림'; +$lang->ncenterlite_type_scrap = '스크랩 알림'; +$lang->ncenterlite_type_message = '쪽지 알림'; +$lang->ncenterlite_type_test = '테스트 알림'; +$lang->ncenterlite_type_admin_content = '관리자 알림'; +$lang->ncenterlite_type_custom = '기타 알림'; $lang->ncenterlite_sender = '보낸 사람'; $lang->ncenterlite_addressee = '받는 사람'; $lang->ncenterlite_noti_contents = '내용'; @@ -17,8 +21,6 @@ $lang->ncenterlite_notify_setting = '알림 미표시 페이지'; $lang->ncenterlite_about_notify_setting = '선택한 모듈에서는 알림을 표시하지 않습니다. 그리고 알림을 전송하지도 않습니다.'; $lang->ncenterlite_notify_mid_all = '관리자 알림 페이지'; $lang->ncenterlite_about_mid_all = '선택한 모듈에서는 모든 알림이 관리자에게도 전달됩니다.'; -$lang->ncenterlite_admin_content = '관리자 알림'; -$lang->ncenterlite_custom = '기타 알림'; $lang->ncenterlite_read = '읽음 확인'; $lang->ncenterlite_read_y = '읽음'; $lang->ncenterlite_read_n = '읽지 않음'; @@ -29,18 +31,14 @@ $lang->ncenterlite_user_settings = '사용자 알림 설정'; $lang->ncenterlite_notify_settings = '알림 설정'; $lang->ncenterlite_userconfig_title = '%s님의 알림센터 설정'; $lang->ncenterlite_userconfig_about = '알림센터의 개인의 설정을 저장하도록 합니다.'; -$lang->ncenterlite_comment_noti = '댓글 알림'; -$lang->ncenterlite_comment_noti_about = '내 게시물에 댓글이 달릴 경우 알림을 받습니다.'; -$lang->ncenterlite_mention_noti = '멘션 알림'; -$lang->ncenterlite_mention_noti_about = '누군가 글, 혹은 댓글을 통해서 나를 멘션 했을 경우 알림을 받습니다. (멘션 방법 @닉네임 )'; -$lang->ncenterlite_message_noti = '쪽지 알림'; -$lang->ncenterlite_message_noti_about = '누군가에게 받은 쪽지를 알림을 받습니다.'; -$lang->ncenterlite_comment_comment_noti = '대댓글 알림'; -$lang->ncenterlite_comment_comment_noti_about = '내 댓글에 댓글이 달릴 경우 알림을 받습니다.'; -$lang->ncenterlite_vote_noti = '추천 알림'; -$lang->ncenterlite_vote_noti_about = '내 게시글, 혹은 댓글이 추천을 받았을 때 알림을 받습니다.'; -$lang->ncenterlite_scrap_noti = '스크랩 알림'; -$lang->ncenterlite_scrap_noti_about = '누군가 내 게시글을 스크랩 했을 경우 알림을 받습니다.'; +$lang->ncenterlite_comment_noti_about = '내 글에 댓글이 달리면 알림을 받습니다.'; +$lang->ncenterlite_comment_comment_noti_about = '내 댓글에 대댓글이 달리면 알림을 받습니다.'; +$lang->ncenterlite_mention_noti_about = '누군가 글이나 댓글에서 나를 멘션(@%s)하면 알림을 받습니다.'; +$lang->ncenterlite_message_noti_about = '새 쪽지가 도착하면 알림을 받습니다.'; +$lang->ncenterlite_vote_noti_about = '내 글이나 댓글이 추천을 받으면 알림을 받습니다.'; +$lang->ncenterlite_scrap_noti_about = '누군가 내 글을 스크랩하면 알림을 받습니다.'; +$lang->ncenterlite_admin_content_noti_about = '관리자 알림을 받습니다.'; +$lang->ncenterlite_custom_noti_about = '기타 알림을 받습니다.'; $lang->ncneterlite_block_individual = '개별 문서/댓글 알림 차단'; $lang->ncneterlite_block_individual_about = '개별적으로 문서/댓글을 차단할 수 있습니다.'; $lang->ncenterlite_activate = '사용'; @@ -81,10 +79,9 @@ $lang->ncenterlite_not_have_message = '새 알림이 없습니다.'; $lang->ncenterlite_thisistest = '[*] 시험용 알림입니다'; $lang->ncenterlite_delete_all = '모두 삭제'; $lang->ncenterlite_more = '더보기'; -$lang->ncenterlite_stop_login_required = '알림센터 설정을 하시려면 로그인 해주세요.'; $lang->ncenterlite_stop_no_permission_other_user = '다른 회원의 설정을 볼 권한이 없습니다.'; $lang->ncenterlite_stop_no_permission_other_user_settings = '다른 회원의 설정을 변경할 권한이 없습니다.'; -$lang->ncenterlite_stop_no_permission_other_user_block_settings = '다른 회원의 차단 설정을 변경할 권한이 없습니다.'; +$lang->ncenterlite_stop_no_permission_other_user_block_settings = '다른 회원의 설정을 변경할 권한이 없습니다.'; $lang->ncenterlite_message_delete_notification_before = '%s까지 알림 정보를 삭제했습니다.'; $lang->ncenterlite_message_delete_notification_all = '모든 알림을 삭제했습니다.'; $lang->ncenterlite_notice_list = '알림 목록'; @@ -156,7 +153,8 @@ $lang->about_mention_suffix_always_cut = '\'알림센터님\'이라는 회원과 $lang->mention_limit = '멘션 갯수 제한'; $lang->about_mention_limit = '서버 과부하와 스팸을 방지하기 위해 한 글에서 지나치게 많은 회원들을 호출하지 못하도록 합니다.'; $lang->ncenterlite_msg_setting_error = '설정에 오류가 있습니다. 다시 설정해 주세요.'; -$lang->ncenterlite_use_help = '회원들에게 전송할 알림을 선택할 수 있습니다.
모든 댓글 작성자에게 알림 기능은 게시글의 작성자가 댓글을 남길경우 게시글을 작성한 작성자를 제외하고 해당 글의 모든 댓글 작성자들에게 알림을 전송합니다.'; +$lang->ncenterlite_use_help = '회원들에게 전송할 알림의 종류와 전달 방식을 선택할 수 있습니다.'; +$lang->ncenterlite_use_othercomment_help = '글 작성자가 댓글을 남기면 해당 글에 댓글을 작성한 모든 사람에게 알림을 전송합니다.'; $lang->member_phone_variable = '회원 전화번호 변수'; $lang->member_phone_variable_about = '문자 알림 사용시 회원의 전화번호를 어디에서 불러올지 선택합니다. 회원정보의 전화번호 또는 확장변수를 선택할 수 있습니다.
전화번호 형태의 확장변수가 1개뿐인 경우 설치시 자동으로 설정이 저장됩니다.'; $lang->member_phone_builtin_field = '회원정보의 전화정보'; @@ -166,7 +164,7 @@ $lang->anonymous_scrap = '스크랩 익명'; $lang->about_anonymous_scrap = '스크랩 알림시 스크랩한 사람을 익명으로 처리합니다.'; $lang->highlight_effect = '하이라이트 효과'; $lang->about_highlight_effect = '댓글 URL로 접근시 해당 댓글에 하이라이트 효과를 줍니다.'; -$lang->fail_module_install = '모듈설치에 실패하였습니다.'; +$lang->fail_module_install = '모듈 설치에 실패하였습니다.'; $lang->cmd_web_notify = '웹 알림'; $lang->cmd_mail_notify = '메일 알림'; $lang->cmd_sms_notify = '문자 알림'; diff --git a/modules/ncenterlite/ncenterlite.admin.view.php b/modules/ncenterlite/ncenterlite.admin.view.php index af6747c45..df9134b4a 100644 --- a/modules/ncenterlite/ncenterlite.admin.view.php +++ b/modules/ncenterlite/ncenterlite.admin.view.php @@ -11,28 +11,11 @@ class ncenterliteAdminView extends ncenterlite { $oNcenterliteModel = getModel('ncenterlite'); - if(Rhymix\Framework\SMS::getDefaultDriver()->getName() === 'Dummy') - { - $sms_available = false; - } - else - { - $sms_available = true; - } - - if(count(Rhymix\Framework\Config::get('push.types'))) - { - $push_avaliable = true; - } - else - { - $push_avaliable = false; - } - $config = $oNcenterliteModel->getConfig(); Context::set('config', $config); - Context::set('sms_available', $sms_available); - Context::set('push_available', $push_avaliable); + 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); } function dispNcenterliteAdminSeletedmid() diff --git a/modules/ncenterlite/ncenterlite.class.php b/modules/ncenterlite/ncenterlite.class.php index 2588f799a..35f579512 100644 --- a/modules/ncenterlite/ncenterlite.class.php +++ b/modules/ncenterlite/ncenterlite.class.php @@ -63,72 +63,37 @@ class ncenterlite extends ModuleObject } } - if(!$oDB->isColumnExists('ncenterlite_notify', 'readed')) + foreach(['notify_type', 'readed', 'target_body', 'target_browser', 'target_p_srl'] as $column_name) { - return true; + if(!$oDB->isColumnExists('ncenterlite_notify', $column_name)) + { + return true; + } + } + foreach(['idx_srl', 'idx_member_srl', 'idx_regdate', 'idx_readed', 'idx_target_srl', 'idx_target_p_srl', 'idx_target_member_srl', 'idx_member_srl_and_readed'] as $index_name) + { + if(!$oDB->isIndexExists('ncenterlite_notify', $index_name)) + { + return true; + } } - if(!$oDB->isColumnExists('ncenterlite_notify', 'target_body')) + foreach(NcenterliteModel::getNotifyTypes() as $type => $srl) { - return true; + if(!$oDB->isColumnExists('ncenterlite_user_set', $type . '_notify')) + { + return true; + } + else + { + $column_info = $oDB->getColumnInfo('ncenterlite_user_set', $type . '_notify'); + if (strtolower($column_info->dbtype) !== 'varchar' || $column_info->size < 40) + { + return true; + } + } } - - if(!$oDB->isColumnExists('ncenterlite_notify', 'notify_type')) - { - return true; - } - - if(!$oDB->isColumnExists('ncenterlite_notify', 'target_browser')) - { - return true; - } - - if(!$oDB->isColumnExists('ncenterlite_notify', 'target_p_srl')) - { - return true; - } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_srl')) - { - return true; - } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_target_srl')) - { - return true; - } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_target_p_srl')) - { - return true; - } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_target_member_srl')) - { - return true; - } - - // Composite index to speed up getNotifyList - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_member_srl_and_readed')) - { - return true; - } - - if(!$oDB->isColumnExists('ncenterlite_user_set', 'comment_comment_notify')) - { - return true; - } - - if(!$oDB->isColumnExists('ncenterlite_user_set', 'vote_notify')) - { - return true; - } - - if(!$oDB->isColumnExists('ncenterlite_user_set', 'scrap_notify')) - { - return true; - } - + // PK duplicate if($oDB->isIndexExists('ncenterlite_notify', 'idx_notify')) { @@ -177,54 +142,53 @@ class ncenterlite extends ModuleObject } } - if(!$oDB->isColumnExists('ncenterlite_notify','readed')) - { - $oDB->addColumn('ncenterlite_notify', 'readed', 'char', 1, 'N', true); - $oDB->addIndex('ncenterlite_notify', 'idx_readed', array('readed')); - $oDB->addIndex('ncenterlite_notify', 'idx_member_srl', array('member_srl')); - $oDB->addIndex('ncenterlite_notify', 'idx_regdate', array('regdate')); - } - - if(!$oDB->isColumnExists('ncenterlite_notify','target_browser')) - { - $oDB->addColumn('ncenterlite_notify', 'target_browser', 'varchar', 50, true); - } - - if(!$oDB->isColumnExists('ncenterlite_notify','target_body')) - { - $oDB->addColumn('ncenterlite_notify', 'target_body', 'varchar', 255, true); - } - if(!$oDB->isColumnExists('ncenterlite_notify','notify_type')) { $oDB->addColumn('ncenterlite_notify', 'notify_type', 'number', 11, 0); } - + if(!$oDB->isColumnExists('ncenterlite_notify','readed')) + { + $oDB->addColumn('ncenterlite_notify', 'readed', 'char', 1, 'N', true); + } + if(!$oDB->isColumnExists('ncenterlite_notify','target_body')) + { + $oDB->addColumn('ncenterlite_notify', 'target_body', 'varchar', 255, true); + } + if(!$oDB->isColumnExists('ncenterlite_notify','target_browser')) + { + $oDB->addColumn('ncenterlite_notify', 'target_browser', 'varchar', 50, true); + } if(!$oDB->isColumnExists('ncenterlite_notify','target_p_srl')) { $oDB->addColumn('ncenterlite_notify', 'target_p_srl', 'number', 10, true); } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_srl')) + + foreach(['idx_srl', 'idx_member_srl', 'idx_regdate', 'idx_readed', 'idx_target_srl', 'idx_target_p_srl', 'idx_target_member_srl'] as $index_name) { - $oDB->addIndex('ncenterlite_notify', 'idx_srl', array('srl')); + if(!$oDB->isIndexExists('ncenterlite_notify', $index_name)) + { + $oDB->addIndex('ncenterlite_notify', $index_name, array(substr($index_name, 4))); + } } - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_target_srl')) + $prev_type = ''; + foreach(NcenterliteModel::getNotifyTypes() as $type => $srl) { - $oDB->addIndex('ncenterlite_notify', 'idx_target_srl', array('target_srl')); + if(!$oDB->isColumnExists('ncenterlite_user_set', $type . '_notify')) + { + $oDB->addColumn('ncenterlite_user_set', $type . '_notify', 'varchar', 40, null, true, $prev_type ? ($prev_type . '_notify') : 'member_srl'); + } + else + { + $column_info = $oDB->getColumnInfo('ncenterlite_user_set', $type . '_notify'); + if (strtolower($column_info->dbtype) !== 'varchar' || $column_info->size < 40) + { + $oDB->modifyColumn('ncenterlite_user_set', $type . '_notify', 'varchar', 40, null, true, $prev_type ? ($prev_type . '_notify') : 'member_srl'); + } + } + $prev_type = $type; } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_target_p_srl')) - { - $oDB->addIndex('ncenterlite_notify', 'idx_target_p_srl', array('target_p_srl')); - } - - if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_target_member_srl')) - { - $oDB->addIndex('ncenterlite_notify', 'idx_target_member_srl', array('target_member_srl')); - } - + // Composite index to speed up getNotifyList if(!$oDB->isIndexExists('ncenterlite_notify', 'idx_member_srl_and_readed')) { @@ -237,21 +201,6 @@ class ncenterlite extends ModuleObject $oDB->dropIndex('ncenterlite_notify', 'idx_notify'); } - if(!$oDB->isColumnExists('ncenterlite_user_set','comment_comment_notify')) - { - $oDB->addColumn('ncenterlite_user_set', 'comment_comment_notify', 'char', 1, null, true, 'comment_notify'); - } - - if(!$oDB->isColumnExists('ncenterlite_user_set','vote_notify')) - { - $oDB->addColumn('ncenterlite_user_set', 'vote_notify', 'char', 1, null, true, 'mention_notify'); - } - - if(!$oDB->isColumnExists('ncenterlite_user_set','scrap_notify')) - { - $oDB->addColumn('ncenterlite_user_set', 'scrap_notify', 'char', 1, null, true, 'vote_notify'); - } - $config = getModel('ncenterlite')->getConfig(); if(!$config) { diff --git a/modules/ncenterlite/ncenterlite.controller.php b/modules/ncenterlite/ncenterlite.controller.php index d2f0c2693..81e081d60 100644 --- a/modules/ncenterlite/ncenterlite.controller.php +++ b/modules/ncenterlite/ncenterlite.controller.php @@ -53,40 +53,53 @@ class ncenterliteController extends ncenterlite function procNcenterliteUserConfig() { - $logged_info = Context::get('logged_info'); - $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); + if(!Rhymix\Framework\Session::isMember()) + { + throw new Rhymix\Framework\Exceptions\MustLogin; + } if($config->user_notify_setting != 'Y') { throw new Rhymix\Framework\Exception('msg_not_use_user_setting'); } + $logged_info = Context::get('logged_info'); $member_srl = Context::get('member_srl'); - if(!$member_srl) { $member_srl = $logged_info->member_srl; } - if($logged_info->member_srl != $member_srl && $logged_info->is_admin != 'Y') { throw new Rhymix\Framework\Exception('ncenterlite_stop_no_permission_other_user_settings'); } - $user_config = $oNcenterliteModel->getUserConfig($member_srl); - - $obj = Context::getRequestVars(); + $vars = Context::getRequestVars(); + $notify_types = NcenterliteModel::getNotifyTypes(); $args = new stdClass(); $args->member_srl = $member_srl; - $args->comment_notify = $obj->comment_notify; - $args->comment_comment_notify = $obj->comment_comment_notify; - $args->mention_notify = $obj->mention_notify; - $args->message_notify = $obj->message_notify; - $args->vote_notify = $obj->vote_notify; - $args->scrap_notify = $obj->scrap_notify; + foreach ($notify_types as $type => $srl) + { + if ($type !== 'admin_content' && $type !== 'custom') + { + $disabled_list = array(); + foreach (['web', 'mail', 'sms', 'push'] as $method) + { + if (isset($config->use[$type][$method]) && $config->use[$type][$method]) + { + if (!isset($vars->use[$type][$method]) || !$vars->use[$type][$method]) + { + $disabled_list[] = '!' . $method; + } + } + } + $args->{$type . '_notify'} = implode(',', $disabled_list); + } + } - if(!$user_config->data) + $user_config = NcenterliteModel::getUserConfig($member_srl); + if(!$user_config) { $insert_output = executeQuery('ncenterlite.insertUserConfig', $args); if(!$insert_output->toBool()) @@ -102,9 +115,9 @@ class ncenterliteController extends ncenterlite return $update_output; } } + Rhymix\Framework\Cache::delete('ncenterlite:user_config:' . $member_srl); $this->setMessage('success_updated'); - if (Context::get('success_return_url')) { $this->setRedirectUrl(Context::get('success_return_url')); @@ -117,20 +130,16 @@ class ncenterliteController extends ncenterlite function procNcenterliteInsertUnsubscribe() { - /** @var ncenterliteModel $oNcenterliteModel */ - $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); - + $config = NcenterliteModel::getConfig(); + if(!Rhymix\Framework\Session::isMember()) + { + throw new Rhymix\Framework\Exceptions\MustLogin; + } if($config->unsubscribe !== 'Y') { throw new Rhymix\Framework\Exception('msg_unsubscribe_block_not_support'); } - if(!Rhymix\Framework\Session::isMember()) - { - throw new Rhymix\Framework\Exception\MustLogin; - } - $obj = Context::getRequestVars(); if(!$this->user->member_srl || (!intval($obj->unsubscribe_srl) && !intval($obj->target_srl))) @@ -140,6 +149,7 @@ class ncenterliteController extends ncenterlite if($obj->target_srl) { + $oNcenterliteModel = getModel('ncenterlite'); $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. @@ -298,7 +308,7 @@ class ncenterliteController extends ncenterlite $oModuleModel = getModel('module'); $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); $mention_targets = $this->_getMentionTarget($obj->title . ' ' . $obj->content); @@ -356,7 +366,7 @@ class ncenterliteController extends ncenterlite { /** @var ncenterliteModel $oNcenterliteModel */ $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); $logged_info = Context::get('logged_info'); @@ -476,9 +486,8 @@ class ncenterliteController extends ncenterlite $abs_member_srl = abs($oComment->member_srl); if($config->user_notify_setting == 'Y') { - $comment_member_config = $oNcenterliteModel->getUserConfig($abs_member_srl); - $parent_member_config = $comment_member_config->data; - if($parent_member_config->comment_comment_notify == 'N') + $parent_member_config = NcenterliteModel::getUserConfig($abs_member_srl); + if($parent_member_config && !$parent_member_config->comment_comment) { return; } @@ -491,11 +500,6 @@ class ncenterliteController extends ncenterlite if(!in_array($abs_member_srl, $notify_member_srls) && (!Context::get('is_logged') || ($abs_member_srl != 0 && $abs_member_srl != $logged_info->member_srl))) { - if($oNcenterliteModel->getUserConfig($abs_member_srl)->data->comment_comment_notify == 'N') - { - return; - } - // 받는 사람이 문서를 차단하고 있을 경우 if($oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($document_srl, $abs_member_srl)) { @@ -548,9 +552,8 @@ class ncenterliteController extends ncenterlite if($config->user_notify_setting == 'Y') { - $comment_member_config = $oNcenterliteModel->getUserConfig($abs_member_srl); - $document_comment_member_config = $comment_member_config->data; - if($document_comment_member_config->comment_notify == 'N') + $document_comment_member_config = NcenterliteModel::getUserConfig($abs_member_srl); + if($document_comment_member_config && !$document_comment_member_config->comment) { return; } @@ -585,7 +588,7 @@ class ncenterliteController extends ncenterlite function triggerAfterSendMessage($obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); $communication_config = getModel('communication')->getConfig(); if($communication_config->enable_message != 'Y') @@ -600,9 +603,8 @@ class ncenterliteController extends ncenterlite if($config->user_notify_setting == 'Y') { - $messages_member_config = $oNcenterliteModel->getUserConfig($obj->receiver_srl); - $message_member_config = $messages_member_config->data; - if($message_member_config->message_notify == 'N') + $target_member_config = NcenterliteModel::getUserConfig($obj->receiver_srl); + if($target_member_config && !$target_member_config->message) { return; } @@ -631,15 +633,19 @@ class ncenterliteController extends ncenterlite function triggerAfterScrap($obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!isset($config->use['scrap'])) { return; } - if($config->user_notify_setting == 'Y' && $oNcenterliteModel->getUserConfig(abs($obj->target_member_srl))->data->scrap_notify == 'N') + if($config->user_notify_setting === 'Y') { - return; + $target_member_config = NcenterliteModel::getUserConfig(abs($obj->target_member_srl)); + if($target_member_config && !$target_member_config->scrap) + { + return; + } } $oModuleModel = getModel('module'); @@ -668,7 +674,7 @@ class ncenterliteController extends ncenterlite function triggerAfterDocumentVotedUpdate(&$obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!isset($config->use['vote'])) { return; @@ -677,9 +683,13 @@ class ncenterliteController extends ncenterlite { return; } - if($config->user_notify_setting == 'Y' && $oNcenterliteModel->getUserConfig(abs($obj->member_srl))->data->vote_notify == 'N') + if($config->user_notify_setting == 'Y') { - return; + $target_member_config = NcenterliteModel::getUserConfig(abs($obj->member_srl)); + if ($target_member_config && !$target_member_config->vote) + { + return; + } } $oDocumentModel = getModel('document'); @@ -705,7 +715,7 @@ class ncenterliteController extends ncenterlite function triggerAfterDocumentVotedCancel($obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(empty($config->use)) { return; @@ -734,7 +744,7 @@ class ncenterliteController extends ncenterlite function triggerAfterCommentVotedCount($obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!isset($config->use['vote'])) { return; @@ -743,9 +753,13 @@ class ncenterliteController extends ncenterlite { return; } - if($config->user_notify_setting == 'Y' && $oNcenterliteModel->getUserConfig(abs($obj->member_srl))->data->vote_notify == 'N') + if($config->user_notify_setting == 'Y') { - return; + $target_member_config = NcenterliteModel::getUserConfig(abs($obj->member_srl)); + if ($target_member_config && !$target_member_config->vote) + { + return; + } } $oCommentModel = getModel('comment'); @@ -774,7 +788,7 @@ class ncenterliteController extends ncenterlite function triggerAfterCommentVotedCancel($obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(empty($config->use)) { return; @@ -803,7 +817,7 @@ class ncenterliteController extends ncenterlite function triggerAfterDeleteComment(&$obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(empty($config->use)) { return; @@ -836,7 +850,7 @@ class ncenterliteController extends ncenterlite function triggerAfterDeleteDocument(&$obj) { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(empty($config->use)) { return; @@ -865,7 +879,7 @@ class ncenterliteController extends ncenterlite } } - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(empty($config->use)) { @@ -897,7 +911,7 @@ class ncenterliteController extends ncenterlite } $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); // if the array is empty, lets return. if(empty($config->use)) { @@ -990,7 +1004,7 @@ class ncenterliteController extends ncenterlite $module_info = Context::get('module_info'); $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); // if the array is empty, dose not output the notification. if(empty($config->use)) @@ -1079,7 +1093,7 @@ class ncenterliteController extends ncenterlite $oNcenterliteModel = getModel('ncenterlite'); $oMemberController = getController('member'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if($config->user_config_list == 'Y') { @@ -1118,7 +1132,7 @@ class ncenterliteController extends ncenterlite } $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!Mobile::isFromMobilePhone()) { if($config->colorset && file_exists(FileHandler::getRealPath($this->template_path . 'ncenterlite.' . $config->colorset . '.css'))) @@ -1343,6 +1357,16 @@ class ncenterliteController extends ncenterlite $args->target_user_id = ''; $args->target_email_address = ''; } + + // 수신자가 웹 알림을 거부한 경우 이미 읽은 것으로 처리 + if($config->user_notify_setting == 'Y') + { + $target_member_config = NcenterliteModel::getUserConfig($args->member_srl); + if($target_member_config && isset($target_member_config->{$args->config_type}) && !in_array('web', $target_member_config->{$args->config_type})) + { + $args->readed = 'Y'; + } + } $trigger_output = ModuleHandler::triggerCall('ncenterlite._insertNotify', 'before', $args); if(!$trigger_output->toBool() || $trigger_output->getMessage() === 'cancel') @@ -1419,7 +1443,7 @@ class ncenterliteController extends ncenterlite { $oNcenterliteModel = getModel('ncenterlite'); $oMemberModel = getModel('member'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); $logged_info = Context::get('logged_info'); // Extract mentions. @@ -1493,19 +1517,25 @@ class ncenterliteController extends ncenterlite function sendPushMessage($args) { - $oNcenterliteModel = getModel('ncenterlite'); - - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!isset($config->use[$args->config_type]['push'])) { return false; } - + if($config->user_notify_setting == 'Y') + { + $target_member_config = NcenterliteModel::getUserConfig($args->member_srl); + if($target_member_config && isset($target_member_config->{$args->config_type}) && !in_array('push', $target_member_config->{$args->config_type})) + { + return; + } + } if($this->user->member_srl == $args->member_srl && $args->target_type != $this->_TYPE_CUSTOM) { return false; } + $oNcenterliteModel = getModel('ncenterlite'); $content = $oNcenterliteModel->getNotificationText($args); $content = htmlspecialchars_decode(preg_replace('/<\/?(strong|)[^>]*>/', '', $content)); @@ -1526,19 +1556,25 @@ class ncenterliteController extends ncenterlite function sendSmsMessage($args) { - $oNcenterliteModel = getModel('ncenterlite'); - - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!isset($config->use[$args->config_type]['sms'])) { return false; } - + if($config->user_notify_setting == 'Y') + { + $target_member_config = NcenterliteModel::getUserConfig($args->member_srl); + if($target_member_config && isset($target_member_config->{$args->config_type}) && !in_array('sms', $target_member_config->{$args->config_type})) + { + return; + } + } if($this->user->member_srl == $args->member_srl && $args->target_type != $this->_TYPE_CUSTOM) { return false; } + $oNcenterliteModel = getModel('ncenterlite'); $content = $oNcenterliteModel->getNotificationText($args); $content = htmlspecialchars_decode(preg_replace('/<\/?(strong|)[^>]*>/', '', $content)); @@ -1548,7 +1584,7 @@ class ncenterliteController extends ncenterlite return false; } - $member_info = getModel('member')->getMemberInfoByMemberSrl($args->member_srl); + $member_info = MemberModel::getMemberInfoByMemberSrl($args->member_srl); if($config->variable_name) { if($config->variable_name === '#') @@ -1588,43 +1624,33 @@ class ncenterliteController extends ncenterlite function sendMailMessage($args) { - $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!isset($config->use[$args->config_type]['mail'])) { return false; } - + if($config->user_notify_setting == 'Y') + { + $target_member_config = NcenterliteModel::getUserConfig($args->member_srl); + if($target_member_config && isset($target_member_config->{$args->config_type}) && !in_array('mail', $target_member_config->{$args->config_type})) + { + return; + } + } if($this->user->member_srl == $args->member_srl && $args->target_type != $this->_TYPE_CUSTOM) { return false; } + $oNcenterliteModel = getModel('ncenterlite'); $content = $oNcenterliteModel->getNotificationText($args); - switch ($args->config_type) + $mail_title = lang('ncenterlite_type_' . $args->config_type); + if ($mail_title === 'ncenterlite_type_' . $args->config_type) { - case 'admin_content': - $mail_title = Context::getSiteTitle() . ' - ' . lang('ncenterlite_admin_content'); - break; - case 'comment_comment': - $mail_title = Context::getSiteTitle() . ' - ' . lang('ncenterlite_comment_comment_noti'); - break; - case 'comment': - $mail_title = Context::getSiteTitle() . ' - ' . lang('ncenterlite_comment_noti'); - break; - case 'message': - $mail_title = Context::getSiteTitle() . ' - ' . lang('ncenterlite_message_noti'); - break; - case 'vote': - $mail_title = Context::getSiteTitle() . ' - ' . lang('ncenterlite_vote_noti'); - break; - case 'mention': - $mail_title = Context::getSiteTitle() . ' - ' . lang('ncenterlite_mention_noti'); - break; - default: - return false; + $mail_title = lang('ncenterlite_type_custom'); } + $mail_title = Context::getSiteTitle() . ' - ' . $mail_title; $target_url = $args->target_url; if (!preg_match('!^https?://!', $target_url)) @@ -1633,7 +1659,7 @@ class ncenterliteController extends ncenterlite } $mail_content = sprintf("

%s

\n

%s

\n", $content, $target_url); - $member_info = getModel('member')->getMemberInfoByMemberSrl($args->member_srl); + $member_info = MemberModel::getMemberInfoByMemberSrl($args->member_srl); $oMail = new \Rhymix\Framework\Mail(); $oMail->setSubject($mail_title); @@ -1654,7 +1680,7 @@ class ncenterliteController extends ncenterlite function insertMentionByTargets($mention_targets, $obj, $module_info, $is_anonymous, $type = 'D') { $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if(!is_array($mention_targets)) { @@ -1671,9 +1697,8 @@ class ncenterliteController extends ncenterlite { if($config->user_notify_setting == 'Y') { - $target_member_config = $oNcenterliteModel->getUserConfig($mention_member_srl); - $notify_member_config = $target_member_config->data; - if ($notify_member_config->mention_notify == 'N') + $target_member_config = NcenterliteModel::getUserConfig($mention_member_srl); + if ($target_member_config && !$target_member_config->mention) { continue; } @@ -1738,7 +1763,7 @@ class ncenterliteController extends ncenterlite /** @var ncenterliteModel $oNcenterliteModel */ $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if($config->unsubscribe !== 'Y') return; @@ -1762,7 +1787,7 @@ class ncenterliteController extends ncenterlite /** @var ncenterliteModel $oNcenterliteModel */ $oNcenterliteModel = getModel('ncenterlite'); - $config = $oNcenterliteModel->getConfig(); + $config = NcenterliteModel::getConfig(); if($config->unsubscribe !== 'Y') return; diff --git a/modules/ncenterlite/ncenterlite.model.php b/modules/ncenterlite/ncenterlite.model.php index 7555f6e5e..7ccf55658 100644 --- a/modules/ncenterlite/ncenterlite.model.php +++ b/modules/ncenterlite/ncenterlite.model.php @@ -1,13 +1,14 @@ getModuleConfig('ncenterlite'); @@ -21,14 +22,11 @@ class ncenterliteModel extends ncenterlite { if($config->use == 'Y') { - $config->use = array( - 'mention' => array('web' => 1), - 'comment' => array('web' => 1), - 'comment_comment' => array('web' => 1), - 'vote' => array('web' => 1), - 'message' => array('web' => 1), - 'admin_content' => array('web' => 1), - ); + $config->use = array(); + foreach (self::getNotifyTypes() as $type => $srl) + { + $config->use[$type] = array('web' => 1); + } } else { @@ -78,10 +76,43 @@ class ncenterliteModel extends ncenterlite $config->highlight_effect = 'Y'; } - self::$config = $config; + self::$_config = $config; } - return self::$config; + return self::$_config; + } + + public static function getNotifyTypes() + { + $default = array( + 'comment' => 0, + 'comment_comment' => 0, + 'mention' => 0, + 'vote' => 0, + 'scrap' => 0, + 'message' => 0, + ); + if (Context::get('logged_info')->is_admin === 'Y') + { + $default['admin_content'] = 0; + } + + $custom_types = Rhymix\Framework\Cache::get('ncenterlite:notify_types'); + if (!$custom_types) + { + $custom_types = executeQueryArray('ncenterlite.getNotifyType', [])->data; + Rhymix\Framework\Cache::set('ncenterlite:notify_types', $custom_types, 0, true); + } + foreach ($custom_types as $type) + { + if (!isset($default[$type->notify_type_id])) + { + $default[$type->notify_type_id] = $type->notify_type_srl; + } + } + + $default['custom'] = 0; + return $default; } function getNotifyTypebySrl($notify_srl) @@ -133,7 +164,9 @@ class ncenterliteModel extends ncenterlite function insertNotifyType($args) { - return executeQuery('ncenterlite.insertNotifyType',$args); + $output = executeQuery('ncenterlite.insertNotifyType', $args); + Rhymix\Framework\Cache::delete('ncenterlite:notify_types'); + return $output; } /** @@ -141,23 +174,63 @@ class ncenterliteModel extends ncenterlite * @param null $member_srl * @return object|bool */ - function getUserConfig($member_srl = null) + public static function getUserConfig($member_srl = null) { if(!$member_srl) { - if(!Context::get('is_logged')) + $logged_info = Context::get('logged_info'); + $member_srl = $logged_info->member_srl ?? 0; + if (!$member_srl) { return false; } - $logged_info = Context::get('logged_info'); - $member_srl = $logged_info->member_srl; } - + + $member_srl = intval($member_srl); + $config = self::$_user_config[$member_srl] ?? null; + if ($config !== null) + { + return $config; + } + + $config = Rhymix\Framework\Cache::get('ncenterlite:user_config:' . $member_srl); + if ($config !== null) + { + return $config; + } + $args = new stdClass(); $args->member_srl = $member_srl; $output = executeQuery('ncenterlite.getUserConfig', $args); - - return $output; + if (!$output->data) + { + $config = false; + } + else + { + $config = new stdClass; + foreach (self::getNotifyTypes() as $type => $srl) + { + $disabled_list = $output->data->{$type . '_notify'} ?? ''; + if ($disabled_list === 'N' || strlen($disabled_list) === 1) + { + $config->{$type} = []; + } + elseif ($disabled_list === '') + { + $config->{$type} = ['web', 'mail', 'sms', 'push']; + } + else + { + $disabled_list = array_map(function($str) { return substr($str, 1); }, explode(',', $disabled_list)); + $config->{$type} = array_diff(['web', 'mail', 'sms', 'push'], $disabled_list); + } + } + } + + self::$_user_config[$member_srl] = $config; + Rhymix\Framework\Cache::set('ncenterlite:user_config:' . $member_srl, $config); + return $config; } function getAllMemberConfig() @@ -463,7 +536,7 @@ class ncenterliteModel extends ncenterlite // Message. case 'E': - $type = lang('ncenterlite_type_message'); + $type = lang('member_message'); break; // Test. diff --git a/modules/ncenterlite/ncenterlite.view.php b/modules/ncenterlite/ncenterlite.view.php index 61f047956..19ef47b37 100644 --- a/modules/ncenterlite/ncenterlite.view.php +++ b/modules/ncenterlite/ncenterlite.view.php @@ -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(); diff --git a/modules/ncenterlite/queries/getNotifyType.xml b/modules/ncenterlite/queries/getNotifyType.xml index 803ce2aba..cb19fc5ac 100644 --- a/modules/ncenterlite/queries/getNotifyType.xml +++ b/modules/ncenterlite/queries/getNotifyType.xml @@ -2,12 +2,13 @@ - - - + + + + diff --git a/modules/ncenterlite/queries/insertNotify.xml b/modules/ncenterlite/queries/insertNotify.xml index 24e96cdd4..3e435ebd9 100644 --- a/modules/ncenterlite/queries/insertNotify.xml +++ b/modules/ncenterlite/queries/insertNotify.xml @@ -17,7 +17,8 @@ - + + diff --git a/modules/ncenterlite/schemas/ncenterlite_user_set.xml b/modules/ncenterlite/schemas/ncenterlite_user_set.xml index 34c3060b7..68486e230 100644 --- a/modules/ncenterlite/schemas/ncenterlite_user_set.xml +++ b/modules/ncenterlite/schemas/ncenterlite_user_set.xml @@ -1,10 +1,12 @@
- - - - - - - + + + + + + + + +
diff --git a/modules/ncenterlite/skins/default/userconfig.html b/modules/ncenterlite/skins/default/userconfig.html index c87fbb4b3..c8b75f028 100644 --- a/modules/ncenterlite/skins/default/userconfig.html +++ b/modules/ncenterlite/skins/default/userconfig.html @@ -20,78 +20,33 @@

{$lang->ncenterlite_userconfig_about} ({$lang->ncenterlite_userconfig_about_warning})

-
- -
- - -

{$lang->ncenterlite_comment_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_mention_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_message_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_vote_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_scrap_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_comment_comment_noti_about}

-
-
+ {@ $uc = get_object_vars($user_config)} + + +
+ +
+ {@ $available = isset($module_config->use[$notify_type]['web']) && $module_config->use[$notify_type]['web'] !== 'N'} + {@ $selected = in_array('web', $uc[$notify_type])} + + {@ $available = isset($module_config->use[$notify_type]['mail']) && $module_config->use[$notify_type]['mail'] !== 'N'} + {@ $selected = in_array('mail', $uc[$notify_type])} + + + {@ $available = isset($module_config->use[$notify_type]['sms']) && $module_config->use[$notify_type]['sms'] !== 'N'} + {@ $selected = in_array('sms', $uc[$notify_type])} + + + + {@ $available = isset($module_config->use[$notify_type]['push']) && $module_config->use[$notify_type]['push'] !== 'N'} + {@ $selected = in_array('push', $uc[$notify_type])} + + +

{sprintf($lang->get('ncenterlite_' . $notify_type . '_noti_about'), $logged_info->nick_name)}

+
+
+ +
diff --git a/modules/ncenterlite/skins/default_bottom/userconfig.html b/modules/ncenterlite/skins/default_bottom/userconfig.html index 69f316638..c8b75f028 100644 --- a/modules/ncenterlite/skins/default_bottom/userconfig.html +++ b/modules/ncenterlite/skins/default_bottom/userconfig.html @@ -2,7 +2,7 @@
-
+

{$XE_VALIDATOR_MESSAGE}

@@ -10,7 +10,7 @@
- +

{@$user_str = $member_info->nick_name} @@ -20,78 +20,33 @@

{$lang->ncenterlite_userconfig_about} ({$lang->ncenterlite_userconfig_about_warning})

-
- -
- - -

{$lang->ncenterlite_comment_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_mention_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_message_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_vote_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_scrap_noti_about}

-
-
-
- -
- - -

{$lang->ncenterlite_comment_comment_noti_about}

-
-
+ {@ $uc = get_object_vars($user_config)} + + +
+ +
+ {@ $available = isset($module_config->use[$notify_type]['web']) && $module_config->use[$notify_type]['web'] !== 'N'} + {@ $selected = in_array('web', $uc[$notify_type])} + + {@ $available = isset($module_config->use[$notify_type]['mail']) && $module_config->use[$notify_type]['mail'] !== 'N'} + {@ $selected = in_array('mail', $uc[$notify_type])} + + + {@ $available = isset($module_config->use[$notify_type]['sms']) && $module_config->use[$notify_type]['sms'] !== 'N'} + {@ $selected = in_array('sms', $uc[$notify_type])} + + + + {@ $available = isset($module_config->use[$notify_type]['push']) && $module_config->use[$notify_type]['push'] !== 'N'} + {@ $selected = in_array('push', $uc[$notify_type])} + + +

{sprintf($lang->get('ncenterlite_' . $notify_type . '_noti_about'), $logged_info->nick_name)}

+
+
+ +
@@ -100,4 +55,4 @@
- \ No newline at end of file + diff --git a/modules/ncenterlite/tpl/config.html b/modules/ncenterlite/tpl/config.html index 2309dcc78..f32b8abdb 100644 --- a/modules/ncenterlite/tpl/config.html +++ b/modules/ncenterlite/tpl/config.html @@ -9,64 +9,18 @@
- + + +
+ + + + +
+ +
- - - - -
- -
- - - - -
- -
- - - - -
- -
- - - - -
- -
- - - - -
- -
- - - - -
- -
- - - - -
- -
- - - - -

-

{$lang->ncenterlite_use_help}
-

+

{$lang->ncenterlite_use_help}

diff --git a/modules/ncenterlite/tpl/othercomment.html b/modules/ncenterlite/tpl/othercomment.html index 567748528..8f3b8d209 100644 --- a/modules/ncenterlite/tpl/othercomment.html +++ b/modules/ncenterlite/tpl/othercomment.html @@ -18,7 +18,7 @@ -

{$lang->ncenterlite_use_help}

+

{$lang->ncenterlite_use_othercomment_help}