diff --git a/modules/point/lang/en.lang.php b/modules/point/lang/en.lang.php
index c8b4393b5..c6ffb8c80 100644
--- a/modules/point/lang/en.lang.php
+++ b/modules/point/lang/en.lang.php
@@ -34,6 +34,9 @@
$lang->cmd_point_recal = 'Recalculate Point';
$lang->about_cmd_point_recal = "This will check articles/comments/attached files and reset all members' point to preset point.";
+ $lang->point_link_group = '그룹 연동';
+ $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
+
$lang->about_module_point = "You can set point for each module and modules which don't have any value will use default point.
All point will be restored on acting reverse.";
$lang->point_signup = 'Signup';
diff --git a/modules/point/lang/es.lang.php b/modules/point/lang/es.lang.php
index fe6cafdb0..d981b11e5 100644
--- a/modules/point/lang/es.lang.php
+++ b/modules/point/lang/es.lang.php
@@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
+ $lang->point_link_group = '그룹 연동';
+ $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
+
$lang->about_module_point = "Usted puede definir los puntos para cada módulo y los módulos que no tengan ningun valor usarán punto predefinido.
Todos los puntos serán restituidos al actuar en forma contraria.";
$lang->point_signup = 'Fecha del';
diff --git a/modules/point/lang/jp.lang.php b/modules/point/lang/jp.lang.php
index f0c351f15..ec89c9e98 100644
--- a/modules/point/lang/jp.lang.php
+++ b/modules/point/lang/jp.lang.php
@@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
+ $lang->point_link_group = '그룹 연동';
+ $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
+
$lang->about_module_point = 'モジュール別にポイントを指定することができますが、指定されていないモジュールでは、デフォルトポイントが使用されます。すべてのポイント数は、反対のアクションを行った際には原状復帰されます。';
$lang->point_signup = '加入';
diff --git a/modules/point/lang/ko.lang.php b/modules/point/lang/ko.lang.php
index 1ad796912..d6652b705 100644
--- a/modules/point/lang/ko.lang.php
+++ b/modules/point/lang/ko.lang.php
@@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
+ $lang->point_link_group = '그룹 연동';
+ $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
+
$lang->about_module_point = '모듈별로 포인트를 지정할 수 있으며 지정되지 않은 모듈은 기본 포인트를 이용하게 됩니다
모든 점수는 반대 행동을 하였을 경우 원상복귀 됩니다.';
$lang->point_signup = '가입';
diff --git a/modules/point/lang/ru.lang.php b/modules/point/lang/ru.lang.php
index c0fb103cd..2aa29b647 100644
--- a/modules/point/lang/ru.lang.php
+++ b/modules/point/lang/ru.lang.php
@@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
+ $lang->point_link_group = '그룹 연동';
+ $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
+
$lang->about_module_point = "Вы можете установть поинты для каждого модуля, а модули, не имеющие значения будут использовать значение по умолчанию для поинтов.
Все поинты будут восстановлены при обратном действии.";
$lang->point_signup = 'Присвоить';
diff --git a/modules/point/lang/zh-CN.lang.php b/modules/point/lang/zh-CN.lang.php
index 09ecb1566..e2793768c 100644
--- a/modules/point/lang/zh-CN.lang.php
+++ b/modules/point/lang/zh-CN.lang.php
@@ -34,6 +34,9 @@
$lang->cmd_point_recal = '重新计算积分';
$lang->about_cmd_point_recal = '文章/评论/附件等从新检查后按相应设置从新计算积分。';
+ $lang->point_link_group = '그룹 연동';
+ $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
+
$lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。
所有积分在相反动作下恢复原始值。即:发表新帖后再删除得到的积分为0分。';
$lang->point_signup = '注册';
diff --git a/modules/point/point.admin.controller.php b/modules/point/point.admin.controller.php
index 485a244e0..c82c0d3cb 100644
--- a/modules/point/point.admin.controller.php
+++ b/modules/point/point.admin.controller.php
@@ -24,9 +24,11 @@
// 변수 정리
$args = Context::getRequestVars();
+ // 포인트 이름 체크
$config->point_name = $args->point_name;
if(!$config->point_name) $config->point_name = 'point';
+ // 기본 포인트 지정
$config->signup_point = (int)$args->signup_point;
$config->login_point = (int)$args->login_point;
$config->insert_document = (int)$args->insert_document;
@@ -35,20 +37,35 @@
$config->upload_file = (int)$args->upload_file;
$config->download_file = (int)$args->download_file;
+ // 최고 레벨
$config->max_level = $args->max_level;
if($config->max_level>1000) $config->max_level = 1000;
if($config->max_level<1) $config->max_level = 1;
+ // 레벨 아이콘 설정
$config->level_icon = $args->level_icon;
+
+ // 포인트 미달시 다운로드 금지 여부 체크
if($args->disable_download == 'Y') $config->disable_download = 'Y';
else $config->disable_download = 'N';
+ // 레벨별 그룹 설정
+ foreach($args as $key => $val) {
+ if(substr($key, 0, strlen('point_group_')) != 'point_group_') continue;
+ $group_srl = substr($key, strlen('point_group_'));
+ $level = $val;
+ if(!$level) unset($config->point_group[$group_srl]);
+ else $config->point_group[$group_srl] = $level;
+ }
+
+ // 레벨별 포인트 설정
unset($config->level_step);
for($i=1;$i<=$config->max_level;$i++) {
$key = "level_step_".$i;
$config->level_step[$i] = (int)$args->{$key};
}
+ // 레벨별 포인트 계산 함수
$config->expression = $args->expression;
// 저장
diff --git a/modules/point/point.admin.view.php b/modules/point/point.admin.view.php
index 03949fc9b..15a98ddf0 100644
--- a/modules/point/point.admin.view.php
+++ b/modules/point/point.admin.view.php
@@ -30,6 +30,18 @@
$level_icon_list = FileHandler::readDir("./modules/point/icons");
Context::set('level_icon_list', $level_icon_list);
+ // 그룹 목록 가져오기
+ $oMemberModel = &getModel('member');
+ $group_list = $oMemberModel->getGroups();
+ $selected_group_list = array();
+ if(count($group_list)) {
+ foreach($group_list as $key => $val) {
+ if($val->is_admin == 'Y' || $val->is_default == 'Y') continue;
+ $selected_group_list[$key] = $val;
+ }
+ }
+ Context::set('group_list', $selected_group_list);
+
// 템플릿 지정
$this->setTemplateFile('config');
}
diff --git a/modules/point/point.controller.php b/modules/point/point.controller.php
index e335d5590..62465bf84 100644
--- a/modules/point/point.controller.php
+++ b/modules/point/point.controller.php
@@ -346,10 +346,16 @@
if($point < 0) $point = 0;
// 설정 정보 가져오기
+ $oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
+ $oPointModel = &getModel('point');
$config = $oModuleModel->getModuleConfig('point');
- // 변수 설정
+ // 기존 포인트 정보를 구함
+ $prev_point = $oPointModel->getPoint($member_srl, true);
+ $prev_level = $oPointModel->getLevel($prev_point, $config->level_step);
+
+ // 포인트 변경
$args->member_srl = $member_srl;
$args->point = $point;
@@ -362,6 +368,58 @@
executeQuery("point.insertPoint", $args);
}
+ // 새로운 레벨을 구함
+ $level = $oPointModel->getLevel($point, $config->level_step);
+
+ // 기존 레벨과 새로운 레벨이 다르면 포인트 그룹 설정 시도
+ if($level != $prev_point) {
+
+ // 현재 포인트 대비하여 레벨을 계산하고 레벨에 맞는 그룹 설정을 체크
+ $point_group = $config->point_group;
+
+ // 포인트 그룹 정보가 있을때 시행
+ if($point_group && is_array($point_group) && count($point_group) ) {
+
+ // 기본 그룹을 구함
+ $default_group = $oMemberModel->getDefaultGroup();
+
+ // 포인트 그룹에 속한 그룹과 새로 부여 받을 그룹을 구함
+ $point_group_list = array();
+ $current_group_srl = 0;
+
+ asort($point_group);
+
+ // 포인트 그룹 설정을 돌면서 현재 레벨까지 체크
+ foreach($point_group as $group_srl => $target_level) {
+ $point_group_list[] = $group_srl;
+ if($target_level <= $level) {
+ $current_group_srl = $group_srl;
+ }
+ }
+ $point_group_list[] = $default_group->group_srl;
+
+ // 만약 새로운 그룹이 없다면 기본 그룹을 부여 받음
+ if(!$current_group_srl) $current_group_srl = $default_group->group_srl;
+
+ // 일단 기존의 그룹을 모두 삭제
+ $del_group_args->member_srl = $member_srl;
+ $del_group_args->group_srl = implode(',',$point_group_list);
+ $del_group_output = executeQuery('point.deleteMemberGroup', $del_group_args);
+
+ // 새로운 그룹을 부여
+ $new_group_args->member_srl = $member_srl;
+ $new_group_args->group_srl = $current_group_srl;
+ $new_group_output = executeQuery('member.addMemberToGroup', $new_group_args);
+
+ // 만약 대상 사용자와 로그인 사용자의 정보가 동일하다면 세션을 변경해줌
+ $logged_info = Context::get('logged_info');
+ if($logged_info->member_srl == $member_srl) {
+ $member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
+ $_SESSION['logged_info']->group_list = $member_info->group_list;
+ }
+ }
+ }
+
// 캐시 설정
$cache_path = sprintf('./files/member_extra_info/point/%s/', getNumberingPath($member_srl));
FileHandler::makedir($cache_path);
diff --git a/modules/point/queries/deleteMemberGroup.xml b/modules/point/queries/deleteMemberGroup.xml
new file mode 100644
index 000000000..4df3ee6f0
--- /dev/null
+++ b/modules/point/queries/deleteMemberGroup.xml
@@ -0,0 +1,9 @@
+
+
+
{$lang->about_point_link_group}