레벨이 변경될때 소속 그룹도 변경되도록 포인트 모듈 기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3505 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-01-08 10:08:38 +00:00
parent bf1c149c3d
commit 89466e6e0e
12 changed files with 136 additions and 1 deletions

View file

@ -34,6 +34,9 @@
$lang->cmd_point_recal = 'Recalculate Point'; $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->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.<br />All point will be restored on acting reverse."; $lang->about_module_point = "You can set point for each module and modules which don't have any value will use default point.<br />All point will be restored on acting reverse.";
$lang->point_signup = 'Signup'; $lang->point_signup = 'Signup';

View file

@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산'; $lang->cmd_point_recal = '포인트 재계산';
$lang->about_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.<br />Todos los puntos serán restituidos al actuar en forma contraria."; $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.<br />Todos los puntos serán restituidos al actuar en forma contraria.";
$lang->point_signup = 'Fecha del'; $lang->point_signup = 'Fecha del';

View file

@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산'; $lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다'; $lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
$lang->point_link_group = '그룹 연동';
$lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
$lang->about_module_point = 'モジュール別にポイントを指定することができますが、指定されていないモジュールでは、デフォルトポイントが使用されます。すべてのポイント数は、反対のアクションを行った際には原状復帰されます。'; $lang->about_module_point = 'モジュール別にポイントを指定することができますが、指定されていないモジュールでは、デフォルトポイントが使用されます。すべてのポイント数は、反対のアクションを行った際には原状復帰されます。';
$lang->point_signup = '加入'; $lang->point_signup = '加入';

View file

@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산'; $lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다'; $lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
$lang->point_link_group = '그룹 연동';
$lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
$lang->about_module_point = '모듈별로 포인트를 지정할 수 있으며 지정되지 않은 모듈은 기본 포인트를 이용하게 됩니다<br />모든 점수는 반대 행동을 하였을 경우 원상복귀 됩니다.'; $lang->about_module_point = '모듈별로 포인트를 지정할 수 있으며 지정되지 않은 모듈은 기본 포인트를 이용하게 됩니다<br />모든 점수는 반대 행동을 하였을 경우 원상복귀 됩니다.';
$lang->point_signup = '가입'; $lang->point_signup = '가입';

View file

@ -34,6 +34,9 @@
$lang->cmd_point_recal = '포인트 재계산'; $lang->cmd_point_recal = '포인트 재계산';
$lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다'; $lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다';
$lang->point_link_group = '그룹 연동';
$lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
$lang->about_module_point = "Вы можете установть поинты для каждого модуля, а модули, не имеющие значения будут использовать значение по умолчанию для поинтов.<br />Все поинты будут восстановлены при обратном действии."; $lang->about_module_point = "Вы можете установть поинты для каждого модуля, а модули, не имеющие значения будут использовать значение по умолчанию для поинтов.<br />Все поинты будут восстановлены при обратном действии.";
$lang->point_signup = 'Присвоить'; $lang->point_signup = 'Присвоить';

View file

@ -34,6 +34,9 @@
$lang->cmd_point_recal = '重新计算积分'; $lang->cmd_point_recal = '重新计算积分';
$lang->about_cmd_point_recal = '文章/评论/附件等从新检查后按相应设置从新计算积分。'; $lang->about_cmd_point_recal = '文章/评论/附件等从新检查后按相应设置从新计算积分。';
$lang->point_link_group = '그룹 연동';
$lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.';
$lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。<br />所有积分在相反动作下恢复原始值。即发表新帖后再删除得到的积分为0分。'; $lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。<br />所有积分在相反动作下恢复原始值。即发表新帖后再删除得到的积分为0分。';
$lang->point_signup = '注册'; $lang->point_signup = '注册';

View file

@ -24,9 +24,11 @@
// 변수 정리 // 변수 정리
$args = Context::getRequestVars(); $args = Context::getRequestVars();
// 포인트 이름 체크
$config->point_name = $args->point_name; $config->point_name = $args->point_name;
if(!$config->point_name) $config->point_name = 'point'; if(!$config->point_name) $config->point_name = 'point';
// 기본 포인트 지정
$config->signup_point = (int)$args->signup_point; $config->signup_point = (int)$args->signup_point;
$config->login_point = (int)$args->login_point; $config->login_point = (int)$args->login_point;
$config->insert_document = (int)$args->insert_document; $config->insert_document = (int)$args->insert_document;
@ -35,20 +37,35 @@
$config->upload_file = (int)$args->upload_file; $config->upload_file = (int)$args->upload_file;
$config->download_file = (int)$args->download_file; $config->download_file = (int)$args->download_file;
// 최고 레벨
$config->max_level = $args->max_level; $config->max_level = $args->max_level;
if($config->max_level>1000) $config->max_level = 1000; if($config->max_level>1000) $config->max_level = 1000;
if($config->max_level<1) $config->max_level = 1; if($config->max_level<1) $config->max_level = 1;
// 레벨 아이콘 설정
$config->level_icon = $args->level_icon; $config->level_icon = $args->level_icon;
// 포인트 미달시 다운로드 금지 여부 체크
if($args->disable_download == 'Y') $config->disable_download = 'Y'; if($args->disable_download == 'Y') $config->disable_download = 'Y';
else $config->disable_download = 'N'; 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); unset($config->level_step);
for($i=1;$i<=$config->max_level;$i++) { for($i=1;$i<=$config->max_level;$i++) {
$key = "level_step_".$i; $key = "level_step_".$i;
$config->level_step[$i] = (int)$args->{$key}; $config->level_step[$i] = (int)$args->{$key};
} }
// 레벨별 포인트 계산 함수
$config->expression = $args->expression; $config->expression = $args->expression;
// 저장 // 저장

View file

@ -30,6 +30,18 @@
$level_icon_list = FileHandler::readDir("./modules/point/icons"); $level_icon_list = FileHandler::readDir("./modules/point/icons");
Context::set('level_icon_list', $level_icon_list); 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'); $this->setTemplateFile('config');
} }

View file

@ -346,10 +346,16 @@
if($point < 0) $point = 0; if($point < 0) $point = 0;
// 설정 정보 가져오기 // 설정 정보 가져오기
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module'); $oModuleModel = &getModel('module');
$oPointModel = &getModel('point');
$config = $oModuleModel->getModuleConfig('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->member_srl = $member_srl;
$args->point = $point; $args->point = $point;
@ -362,6 +368,58 @@
executeQuery("point.insertPoint", $args); 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)); $cache_path = sprintf('./files/member_extra_info/point/%s/', getNumberingPath($member_srl));
FileHandler::makedir($cache_path); FileHandler::makedir($cache_path);

View file

@ -0,0 +1,9 @@
<query id="deleteMemberGroup" action="delete">
<tables>
<table name="member_group_member" />
</tables>
<conditions>
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" filter="number" />
<condition operation="in" column="group_srl" var="group_srl" filter="number" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,8 @@
<query id="getMemberGroupMember" action="select">
<tables>
<table name="member_group_member" />
</tables>
<conditions>
<condition operation="equal" column="member_srl" var="member_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -16,6 +16,19 @@
<div id="pointReCal"></div> <div id="pointReCal"></div>
</td> </td>
</tr> </tr>
<tr>
<th scope="col" rowspan="{(count($group_list)+2)}">{$lang->point_link_group}</th>
<th colspan="2">{$lang->group}</th>
<th>{$lang->level}</th>
</tr>
<!--@foreach($group_list as $key => $val)-->
<tr>
<td colspan="2">{$val->title}</td>
<td><input type="text" class="inputTypeText w80" value="{$config->point_group[$key]}" name="point_group_{$key}" /></td>
<!--@end-->
<tr>
<td colspan="3"><p>{$lang->about_point_link_group}</p></td>
</tr>
<tr> <tr>
<th scope="col">{$lang->max_level}</th> <th scope="col">{$lang->max_level}</th>
<td colspan="3"> <td colspan="3">