mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-04 09:32:15 +09:00
Support user config of notification types, fixes #994
코어에서 지원하는 알림 종류 및 알림 수신 방법이 늘어남에 따라, 관리자가 설정한 범위 내에서 회원들이 알림 수신 방법을 선택할 수 있도록 합니다. 기존에는 수신 여부만 선택할 수 있었으나 이제 더 세부적인 설정이 가능합니다. 예를 들어 웹 알림과 푸시알림은 받고, 메일 알림과 문자 알림은 끌 수 있습니다. 이 기능을 지원하기 위해 ncenterlite_user_set 테이블 스키마를 대폭 조정합니다. 기존 설정은 가능하면 그대로 유지하려고 노력하였습니다.
This commit is contained in:
parent
3032784ca7
commit
c52187a8f2
14 changed files with 435 additions and 531 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue