ncenterlite integration for push notification

This commit is contained in:
Kijin Sung 2020-06-19 16:04:12 +09:00
parent 4dcb8d741b
commit 10a01103b4
4 changed files with 65 additions and 12 deletions

View file

@ -157,7 +157,6 @@ $lang->mention_limit = '멘션 갯수 제한';
$lang->about_mention_limit = '서버 과부하와 스팸을 방지하기 위해 한 글에서 지나치게 많은 회원들을 호출하지 못하도록 합니다.';
$lang->ncenterlite_msg_setting_error = '설정에 오류가 있습니다. 다시 설정해 주세요.';
$lang->ncenterlite_use_help = '회원들에게 전송할 알림을 선택할 수 있습니다. <br /> 모든 댓글 작성자에게 알림 기능은 게시글의 작성자가 댓글을 남길경우 게시글을 작성한 작성자를 제외하고 해당 글의 <strong>모든 댓글 작성자</strong>들에게 알림을 전송합니다.';
$lang->ncenterlite_dont_use_push = '푸시 알림은 현재 지원중이 아닙니다.';
$lang->member_phone_variable = '회원 전화번호 변수';
$lang->member_phone_variable_about = '문자 알림 사용시 회원의 전화번호를 어디에서 불러올지 선택합니다. 회원정보의 전화번호 또는 확장변수를 선택할 수 있습니다.<br />전화번호 형태의 확장변수가 1개뿐인 경우 설치시 자동으로 설정이 저장됩니다.';
$lang->member_phone_builtin_field = '회원정보의 전화정보';

View file

@ -19,9 +19,16 @@ class ncenterliteAdminView extends ncenterlite
{
$sms_available = true;
}
$push_avaliable = false;
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);

View file

@ -7,12 +7,12 @@ class ncenterliteController extends ncenterlite
*
* @param int $from_member_srl Sender
* @param int $to_member_srl Recipient
* @param string $message Message content
* @param string|object $message Message content
* @param string $url The URL to redirect to when the recipient clicks the notification
* @param int $target_srl The sequence number associated with this notification
* @return BaseObject
*/
public function sendNotification($from_member_srl, $to_member_srl, $message, $url, $target_srl = 0)
public function sendNotification($from_member_srl, $to_member_srl, $message, $url = '', $target_srl = 0)
{
$args = new stdClass();
$args->config_type = 'custom';
@ -27,7 +27,20 @@ class ncenterliteController extends ncenterlite
$args->target_url = $url;
$args->target_browser = '';
$args->target_summary = '';
$args->target_body = $message;
if (is_object($message))
{
$args->target_body = $message->subject;
$args->target_url = $message->url ?: $args->target_url;
$args->extra_content = $message->content;
$args->extra_image = $message->image;
$args->extra_data = $message->data ?: [];
}
else
{
$args->target_body = $message;
}
$output = $this->_insertNotify($args);
if(!$output->toBool())
{
@ -1337,6 +1350,7 @@ class ncenterliteController extends ncenterlite
if($output->toBool())
{
ModuleHandler::triggerCall('ncenterlite._insertNotify', 'after', $args);
$this->sendPushMessage($args);
$this->sendSmsMessage($args);
$this->sendMailMessage($args);
$this->removeFlagFile($args->member_srl);
@ -1473,6 +1487,40 @@ class ncenterliteController extends ncenterlite
return array_values($members);
}
function sendPushMessage($args)
{
$oNcenterliteModel = getModel('ncenterlite');
$config = $oNcenterliteModel->getConfig();
if(!isset($config->use[$args->config_type]['push']))
{
return false;
}
if($this->user->member_srl == $args->member_srl && $args->target_type != $this->_TYPE_CUSTOM)
{
return false;
}
$content = $oNcenterliteModel->getNotificationText($args);
$content = htmlspecialchars_decode(preg_replace('/<\/?(strong|)[^>]*>/', '', $content));
$target_url = $args->target_url;
if (!preg_match('!^https?://!', $target_url))
{
$target_url = Rhymix\Framework\URL::getCurrentDomainUrl($target_url);
}
$oPush = new \Rhymix\Framework\Push();
$oPush->setSubject($content);
$oPush->setContent($args->extra_content);
$oPush->setImage($args->extra_image);
$oPush->setData($args->extra_data);
$oPush->setURL($target_url);
$oPush->addTo($args->member_srl);
$oPush->send();
}
function sendSmsMessage($args)
{
$oNcenterliteModel = getModel('ncenterlite');
@ -1483,13 +1531,13 @@ class ncenterliteController extends ncenterlite
return false;
}
if($this->user->member_srl == $args->member_srl)
if($this->user->member_srl == $args->member_srl && $args->target_type != $this->_TYPE_CUSTOM)
{
return false;
}
$content = $oNcenterliteModel->getNotificationText($args);
$content = preg_replace('/<\/?(strong|)[^>]*>/', '', $content);
$content = htmlspecialchars_decode(preg_replace('/<\/?(strong|)[^>]*>/', '', $content));
$sms = $this->getSmsHandler();
if($sms === false)
@ -1544,11 +1592,11 @@ class ncenterliteController extends ncenterlite
return false;
}
$logged_info = Context::get('logged_info');
if($logged_info->member_srl == $args->member_srl)
if($this->user->member_srl == $args->member_srl && $args->target_type != $this->_TYPE_CUSTOM)
{
return false;
}
$content = $oNcenterliteModel->getNotificationText($args);
switch ($args->config_type)

View file

@ -66,7 +66,6 @@
<label for="custom_push" class="x_inline" disabled="disabled"|cond="!$push_available"><input type="checkbox" name="use[custom][push]" id="custom_push" value="1" disabled="disabled"|cond="!$push_available" checked="checked"|cond="isset($config->use['custom']['push'])" /> {$lang->cmd_push_notify}</label>
<p>
<div>{$lang->ncenterlite_use_help}</div>
<div><span class="x_label x_label-important">{$lang->ncenterlite_warning}</span> {$lang->ncenterlite_dont_use_push}</div>
</p>
</div>
</div>