mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-09 11:44:10 +09:00
commit
9673e71957
10 changed files with 264 additions and 25 deletions
|
|
@ -65,11 +65,19 @@ class CoolSMS extends Base implements \Rhymix\Framework\Drivers\SMSInterface
|
|||
{
|
||||
$sender = new \Nurigo\Api\Message($this->_config['api_key'], $this->_config['api_secret']);
|
||||
$status = true;
|
||||
|
||||
|
||||
foreach ($messages as $i => $message)
|
||||
{
|
||||
$options = new \stdClass;
|
||||
$options->type = $message->type;
|
||||
if ($this->_config['sender_key'])
|
||||
{
|
||||
$options->sender_key = $this->_config['sender_key'];
|
||||
$options->type = 'CTA';
|
||||
}
|
||||
else
|
||||
{
|
||||
$options->type = $message->type;
|
||||
}
|
||||
$options->from = $message->from;
|
||||
$options->to = implode(',', $message->to);
|
||||
$options->text = $message->content ?: $message->type;
|
||||
|
|
@ -91,7 +99,6 @@ class CoolSMS extends Base implements \Rhymix\Framework\Drivers\SMSInterface
|
|||
{
|
||||
$options->image = $message->image;
|
||||
}
|
||||
|
||||
$result = $sender->send($options);
|
||||
if (!$result->success_count)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ $lang->ncenterlite_message_mention = '<strong>%1$s</strong> sent you a message,
|
|||
$lang->ncenterlite_test_noti = 'Hello, <strong>%s</strong>! This is a test notification.';
|
||||
$lang->ncenterlite_vote = '<strong>%1$s</strong> upvoted your %3$s, "%2$s".';
|
||||
$lang->ncenterlite_admin_content_message = '<strong>%1$s</strong> wrote "%3$s" on <strong>%2$s</strong>.';
|
||||
$lang->ncenterlite_insert_member_message = '<strong>%s!</strong> Welcome to the <strong>membership!!</strong>';
|
||||
$lang->ncenterlite_ago = 'ago';
|
||||
$lang->ncenterlite_date['0'] = 'year';
|
||||
$lang->ncenterlite_date['1'] = 'month';
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ $lang->ncenterlite_my_list = '내 알림 목록';
|
|||
$lang->ncenterlite_my_settings = '내 알림 설정';
|
||||
$lang->ncenterlite_user_settings = '사용자 알림 설정';
|
||||
$lang->ncenterlite_userconfig_title = '%s님의 알림센터 설정';
|
||||
$lang->ncenterlite_sms_message_use = 'SMS 문자알림';
|
||||
$lang->ncenterlite_userconfig_about = '알림센터의 개인의 설정을 저장하도록 합니다.';
|
||||
$lang->ncenterlite_comment_noti = '댓글 알림';
|
||||
$lang->ncenterlite_comment_noti_about = '내 게시물의 혹은 내 댓글에 댓글이 달릴경우 알림을 받습니다.';
|
||||
|
|
@ -47,6 +48,7 @@ $lang->ncenterlite_message_mention = '<strong>%s</strong>님이 <strong>"%s"</st
|
|||
$lang->ncenterlite_test_noti = '<strong>%s</strong>님! 테스트 알림입니다.';
|
||||
$lang->ncenterlite_vote = '<strong>%s</strong>님이 회원님의 <strong>"%s"</strong> %s을 추천하였습니다.';
|
||||
$lang->ncenterlite_admin_content_message = '<strong>%1$s</strong>님이 <strong>"%2$s"</strong> 게시판에 <strong>"%3$s"</strong>라고 글을 남겼습니다.';
|
||||
$lang->ncenterlite_insert_member_message = '<strong>%s</strong>님 <strong>회원가입</strong>을 환영합니다!!';
|
||||
$lang->ncenterlite_ago = '전';
|
||||
$lang->ncenterlite_date['0'] = '년';
|
||||
$lang->ncenterlite_date['1'] = '개월';
|
||||
|
|
@ -122,3 +124,7 @@ $lang->about_mention_suffix_always_cut = '\'알림센터님\'이라는 회원과
|
|||
$lang->mention_limit = '멘션 갯수 제한';
|
||||
$lang->about_mention_limit = '서버 과부하와 스팸을 방지하기 위해 한 글에서 지나치게 많은 회원들을 호출하지 못하도록 합니다.';
|
||||
$lang->ncenterlite_msg_setting_error = '설정에 오류가 있습니다. 다시 설정해 주세요.';
|
||||
$lang->ncenterlite_use_sms_help = '이 옵션을 사용하게 되면 회원들에게 문자메세지 서비스를 이용하여 알림을 보낼 수 있습니다.';
|
||||
$lang->member_phone_variable = '회원전화번호 변수';
|
||||
$lang->member_phone_variable_about = '회원전화번호 변수를 선택합니다. 회원전화번호 변수가 1개일 경우 설치시 자동으로 설정이 저장됩니다. 이 경우 설정을 할 필요가 없어서 설정을 선택할 수 없습니다.';
|
||||
$lang->fail_module_install = '모듈설치에 실패하였습니다.';
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@ class ncenterliteAdminController extends ncenterlite
|
|||
'document_read',
|
||||
'layout_srl',
|
||||
'mlayout_srl',
|
||||
'use_sms',
|
||||
'variable_name',
|
||||
);
|
||||
|
||||
|
||||
foreach($config_vars as $val)
|
||||
{
|
||||
if($obj->{$val})
|
||||
|
|
@ -35,7 +37,7 @@ class ncenterliteAdminController extends ncenterlite
|
|||
$config->{$val} = $obj->{$val};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($obj->disp_act == 'dispNcenterliteAdminConfig')
|
||||
{
|
||||
if (!$obj->use)
|
||||
|
|
@ -43,7 +45,7 @@ class ncenterliteAdminController extends ncenterlite
|
|||
$config->use = array();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($obj->disp_act == 'dispNcenterliteAdminAdvancedconfig')
|
||||
{
|
||||
if (!$config->mention_suffixes)
|
||||
|
|
@ -54,6 +56,11 @@ class ncenterliteAdminController extends ncenterlite
|
|||
{
|
||||
$config->mention_suffixes = array_map('trim', explode(',', $config->mention_suffixes));
|
||||
}
|
||||
|
||||
if($obj->variable_name === '0')
|
||||
{
|
||||
$config->variable_name = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($obj->disp_act == 'dispNcenterliteAdminSeletedmid')
|
||||
|
|
@ -155,7 +162,7 @@ class ncenterliteAdminController extends ncenterlite
|
|||
{
|
||||
$this->setMessage('ncenterlite_message_delete_notification_all');
|
||||
}
|
||||
|
||||
|
||||
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON')))
|
||||
{
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispNcenterliteAdminList');
|
||||
|
|
|
|||
|
|
@ -11,8 +11,20 @@ class ncenterliteAdminView extends ncenterlite
|
|||
{
|
||||
$oNcenterliteModel = getModel('ncenterlite');
|
||||
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
if($sms::getDefaultDriver()->getName() === 'Dummy')
|
||||
{
|
||||
$sms_available = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sms_available = true;
|
||||
}
|
||||
|
||||
$config = $oNcenterliteModel->getConfig();
|
||||
Context::set('config', $config);
|
||||
Context::set('sms_available', $sms_available);
|
||||
}
|
||||
|
||||
function dispNcenterliteAdminSeletedmid()
|
||||
|
|
@ -64,8 +76,19 @@ class ncenterliteAdminView extends ncenterlite
|
|||
{
|
||||
$oNcenterliteModel = getModel('ncenterlite');
|
||||
|
||||
$member_config = getModel('member')->getMemberConfig();
|
||||
$variable_name = array();
|
||||
foreach($member_config->signupForm as $value)
|
||||
{
|
||||
if($value->type == 'tel')
|
||||
{
|
||||
$variable_name[] = $value->name;
|
||||
}
|
||||
}
|
||||
|
||||
$config = $oNcenterliteModel->getConfig();
|
||||
Context::set('config', $config);
|
||||
Context::set('variable_name', $variable_name);
|
||||
}
|
||||
|
||||
function dispNcenterliteAdminList()
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ class ncenterlite extends ModuleObject
|
|||
var $_TYPE_TEST = 'T'; // Test Notify create.
|
||||
var $_TYPE_ADMIN_DOCUMENT = 'B'; // Admin Document Alert
|
||||
var $_TYPE_CUSTOM = 'U'; //Updated alert(uses type table)
|
||||
var $_TYPE_INSERT_MEMBER = 'I'; // Insert Member
|
||||
|
||||
var $triggers = array(
|
||||
array('comment.insertComment', 'ncenterlite', 'controller', 'triggerAfterInsertComment', 'after'),
|
||||
|
|
@ -44,7 +45,9 @@ class ncenterlite extends ModuleObject
|
|||
array('document.updateVotedCount', 'ncenterlite', 'controller', 'triggerAfterVotedupdate', 'after'),
|
||||
array('moduleHandler.init', 'ncenterlite', 'controller', 'triggerAddMemberMenu', 'after'),
|
||||
array('document.moveDocumentToTrash', 'ncenterlite', 'controller', 'triggerAfterMoveToTrash', 'after'),
|
||||
array('member.insertMember', 'ncenterlite', 'controller', 'triggerAfterMemberInsert', 'after'),
|
||||
);
|
||||
|
||||
private $delete_triggers = array(
|
||||
array('moduleObject.proc', 'ncenterlite', 'controller', 'triggerBeforeModuleObjectProc', 'before')
|
||||
);
|
||||
|
|
@ -141,6 +144,23 @@ class ncenterlite extends ModuleObject
|
|||
return true;
|
||||
}
|
||||
|
||||
$config = getModel('ncenterlite')->getConfig();
|
||||
|
||||
$member_config = getModel('member')->getMemberConfig();
|
||||
$variable_name = array();
|
||||
foreach($member_config->signupForm as $value)
|
||||
{
|
||||
if($value->type == 'tel')
|
||||
{
|
||||
$variable_name[] = $value->name;
|
||||
}
|
||||
}
|
||||
|
||||
if(!$config->variable_name && count($variable_name) == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -226,6 +246,38 @@ class ncenterlite extends ModuleObject
|
|||
$oDB->dropIndex('ncenterlite_notify', 'idx_notify');
|
||||
}
|
||||
|
||||
|
||||
$config = getModel('ncenterlite')->getConfig();
|
||||
if(!$config)
|
||||
{
|
||||
$config = new stdClass();
|
||||
}
|
||||
|
||||
if(!$config->variable_name)
|
||||
{
|
||||
$member_config = getModel('member')->getMemberConfig();
|
||||
$variable_name = array();
|
||||
foreach($member_config->signupForm as $value)
|
||||
{
|
||||
if($value->type === 'tel')
|
||||
{
|
||||
$variable_name[] = $value->name;
|
||||
}
|
||||
}
|
||||
if(count($variable_name) === 1)
|
||||
{
|
||||
foreach($variable_name as $item)
|
||||
{
|
||||
$config->variable_name = $item;
|
||||
}
|
||||
$output = $oModuleController->insertModuleConfig('ncenterlite', $config);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return new Object(-1, 'fail_module_install');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -496,6 +496,31 @@ class ncenterliteController extends ncenterlite
|
|||
return new Object();
|
||||
}
|
||||
|
||||
function triggerAfterMemberInsert(&$obj)
|
||||
{
|
||||
// 관리자가 회원을 추가하는 경우 알림을 발송하지 않는다.
|
||||
if($obj->is_admin && Context::get('logged_info')->is_admin === 'Y')
|
||||
{
|
||||
return new Object();
|
||||
}
|
||||
|
||||
$args = new stdClass();
|
||||
$args->member_srl = $obj->member_srl;
|
||||
$args->srl = $obj->member_srl;
|
||||
$args->target_p_srl = '1';
|
||||
$args->target_srl = $obj->member_srl;
|
||||
$args->target_member_srl = $obj->member_srl;
|
||||
$args->type = $this->_TYPE_INSERT_MEMBER;
|
||||
$args->target_type = $this->_TYPE_INSERT_MEMBER;
|
||||
$args->target_summary = lang('cmd_signup');
|
||||
$args->regdate = date('YmdHis');
|
||||
$args->notify = $this->_getNotifyId($args);
|
||||
$args->target_url = getNotEncodedFullUrl('', 'act', 'dispMemberInfo');
|
||||
$this->_insertNotify($args);
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
function triggerAfterModuleHandlerProc(&$oModule)
|
||||
{
|
||||
$vars = Context::getRequestVars();
|
||||
|
|
@ -1076,6 +1101,8 @@ class ncenterliteController extends ncenterlite
|
|||
return $output;
|
||||
}
|
||||
|
||||
$this->sendSmsMessage($args);
|
||||
|
||||
if($output->toBool())
|
||||
{
|
||||
$trigger_notify = ModuleHandler::triggerCall('ncenterlite._insertNotify', 'after', $args);
|
||||
|
|
@ -1208,4 +1235,47 @@ class ncenterliteController extends ncenterlite
|
|||
|
||||
return array_values($members);
|
||||
}
|
||||
|
||||
function sendSmsMessage($args)
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($logged_info->member_srl == $args->member_srl)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$config = getModel('ncenterlite')->getConfig();
|
||||
|
||||
$content = getModel('ncenterlite')->getNotificationText($args);
|
||||
$content = preg_replace('/<\/?(strong|)[^>]*>/', '', $content);
|
||||
|
||||
$sms = getModel('ncenterlite')->getSmsHandler();
|
||||
if($sms === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$member_info = getModel('member')->getMemberInfoByMemberSrl($args->member_srl);
|
||||
if($config->variable_name)
|
||||
{
|
||||
$phone_number = $member_info->{$config->variable_name}[0].$member_info->{$config->variable_name}[1].$member_info->{$config->variable_name}[2];
|
||||
|
||||
// Check if a Korean phone number contains a valid area code and the correct number of digits.
|
||||
$phone_format = Rhymix\Framework\Korea::isValidPhoneNumber($phone_number);
|
||||
if($phone_format === false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$sms->addTo($phone_number);
|
||||
$sms->setContent($content);
|
||||
$output = $sms->send();
|
||||
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ class ncenterliteModel extends ncenterlite
|
|||
if(!$config->skin) $config->skin = 'default';
|
||||
if(!$config->colorset) $config->colorset = 'black';
|
||||
if(!$config->zindex) $config->zindex = '9999';
|
||||
if(!$config->use_sms) $config->use_sms = 'N';
|
||||
|
||||
self::$config = $config;
|
||||
}
|
||||
|
|
@ -304,7 +305,7 @@ class ncenterliteModel extends ncenterlite
|
|||
public function getNotificationText($notification)
|
||||
{
|
||||
global $lang;
|
||||
|
||||
|
||||
// Get the type of notification.
|
||||
switch ($notification->type)
|
||||
{
|
||||
|
|
@ -312,30 +313,35 @@ class ncenterliteModel extends ncenterlite
|
|||
case 'D':
|
||||
$type = $lang->ncenterlite_document;
|
||||
break;
|
||||
|
||||
|
||||
// Comment.
|
||||
case 'C':
|
||||
$type = $lang->ncenterlite_comment;
|
||||
break;
|
||||
|
||||
|
||||
// Message.
|
||||
case 'E':
|
||||
$type = $lang->ncenterlite_type_message;
|
||||
break;
|
||||
|
||||
|
||||
// Test.
|
||||
case 'T':
|
||||
$type = $lang->ncenterlite_type_test;
|
||||
break;
|
||||
|
||||
|
||||
// Custom string.
|
||||
case 'X':
|
||||
return $notification->target_body;
|
||||
|
||||
|
||||
// Insert member
|
||||
case 'I':
|
||||
$type = $lang->cmd_signup;
|
||||
break;
|
||||
|
||||
// Custom language.
|
||||
case 'Y':
|
||||
return $lang->{$notification->target_body};
|
||||
|
||||
|
||||
// Custom language with string interpolation.
|
||||
case 'Z':
|
||||
return vsprintf($lang->{$notification->target_body}, array(
|
||||
|
|
@ -353,7 +359,7 @@ class ncenterliteModel extends ncenterlite
|
|||
default:
|
||||
return $this->getNotifyTypeString($notification->notify_type, unserialize($notification->target_body)) ?: $lang->ncenterlite;
|
||||
}
|
||||
|
||||
|
||||
// Get the notification text.
|
||||
switch ($notification->target_type)
|
||||
{
|
||||
|
|
@ -361,32 +367,32 @@ class ncenterliteModel extends ncenterlite
|
|||
case 'C':
|
||||
$str = sprintf($lang->ncenterlite_commented, $notification->target_nick_name, $type, $notification->target_summary);
|
||||
break;
|
||||
|
||||
|
||||
// Comment on a board.
|
||||
case 'A':
|
||||
$str = sprintf($lang->ncenterlite_commented_board, $notification->target_nick_name, $notification->target_browser, $notification->target_summary);
|
||||
break;
|
||||
|
||||
|
||||
// Mentioned.
|
||||
case 'M':
|
||||
$str = sprintf($lang->ncenterlite_mentioned, $notification->target_nick_name, $notification->target_browser, $notification->target_summary, $type);
|
||||
break;
|
||||
|
||||
|
||||
// Message arrived.
|
||||
case 'E':
|
||||
$str = sprintf($lang->ncenterlite_message_mention, $notification->target_nick_name, $notification->target_summary);
|
||||
break;
|
||||
|
||||
|
||||
// Test notification.
|
||||
case 'T':
|
||||
$str = sprintf($lang->ncenterlite_test_noti, $notification->target_nick_name);
|
||||
break;
|
||||
|
||||
|
||||
// New document on a board.
|
||||
case 'P':
|
||||
$str = sprintf($lang->ncenterlite_board, $notification->target_nick_name, $notification->target_browser, $notification->target_summary);
|
||||
break;
|
||||
|
||||
|
||||
// New document.
|
||||
case 'S':
|
||||
if($notification->target_browser)
|
||||
|
|
@ -398,22 +404,26 @@ class ncenterliteModel extends ncenterlite
|
|||
$str = sprintf($lang->ncenterlite_article, $notification->target_nick_name, $notification->target_summary);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
// Voted.
|
||||
case 'V':
|
||||
$str = sprintf($lang->ncenterlite_vote, $notification->target_nick_name, $notification->target_summary, $type);
|
||||
break;
|
||||
|
||||
|
||||
// Admin notification.
|
||||
case 'B':
|
||||
$str = sprintf($lang->ncenterlite_admin_content_message, $notification->target_nick_name, $notification->target_browser, $notification->target_summary);
|
||||
break;
|
||||
|
||||
|
||||
case 'I':
|
||||
$str = sprintf($lang->ncenterlite_insert_member_message, $notification->target_nick_name);
|
||||
break;
|
||||
|
||||
// Other.
|
||||
default:
|
||||
$str = $lang->ncenterlite;
|
||||
}
|
||||
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
|
|
@ -491,4 +501,47 @@ class ncenterliteModel extends ncenterlite
|
|||
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
public static function getSmsHandler()
|
||||
{
|
||||
static $oSmsHandler = null;
|
||||
|
||||
if($oSmsHandler === null)
|
||||
{
|
||||
$config = self::getConfig();
|
||||
if($config->use_sms != 'Y')
|
||||
{
|
||||
$oSmsHandler = false;
|
||||
return $oSmsHandler;
|
||||
}
|
||||
else
|
||||
{
|
||||
$oSmsHandler = new Rhymix\Framework\SMS;
|
||||
|
||||
if($oSmsHandler::getDefaultDriver()->getName() === 'Dummy')
|
||||
{
|
||||
$oSmsHandler = false;
|
||||
return $oSmsHandler;
|
||||
}
|
||||
|
||||
$variable_name = array();
|
||||
$member_config = getModel('member')->getMemberConfig();
|
||||
foreach($member_config->signupForm as $value)
|
||||
{
|
||||
if($value->type == 'tel')
|
||||
{
|
||||
$variable_name[] = $value->name;
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($variable_name))
|
||||
{
|
||||
$oSmsHandler = false;
|
||||
return $oSmsHandler;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $oSmsHandler;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,16 @@
|
|||
<input type="hidden" name="act" value="procNcenterliteAdminInsertConfig" />
|
||||
|
||||
<section class="section">
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="variable_name">{$lang->member_phone_variable}</label>
|
||||
<div class="x_controls">
|
||||
<select name="variable_name" id="variable_name" disabled="disabled"|cond="empty($variable_name)">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$variable_name => $val" value="{$val}" selected="selected"|cond="$config->variable_name == $val">{$val}</option>
|
||||
</select>
|
||||
<p class="x_help-block">{$lang->member_phone_variable_about}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->ncenterlite_mention_target}</label>
|
||||
<div class="x_controls">
|
||||
|
|
|
|||
|
|
@ -20,6 +20,16 @@
|
|||
<p class="x_help-block">{$lang->about_admin_content}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="use_sms">{$lang->ncenterlite_sms_message_use}</label>
|
||||
<div class="x_controls">
|
||||
<select name="use_sms" disabled="disabled"|cond="!$sms_available" id="use_sms">
|
||||
<option value="Y" selected="selected"|cond="$config->use_sms=='Y' && $sms_available">{$lang->ncenterlite_activate}</option>
|
||||
<option value="N" selected="selected"|cond="$config->use_sms=='N' || !$sms_available">{$lang->ncenterlite_inactivate}</option>
|
||||
</select>
|
||||
<p>{$lang->ncenterlite_use_sms_help}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="display_use">{$lang->ncenterlite_display}</label>
|
||||
<div class="x_controls">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue