#18003387 회원가입시 포인트 지급되지 않는 문제 수정

#17990113 자신이 작성한 글의 댓글 작성 후 댓글 삭제시 포인트 차감되는 문제 수정
#17453338 임시 저장시에는 포인트 지급하지 않고 정상 등록시 포인트가 지급되도록 문제 수정 (포인트 모듈 업데이트 필요)
#17677500 글열람시 포인트가 차감되는 경우 보유 포인트가 차감 포인트보다 작으면 글 내용을 숨겨서 읽지 못하도록 기능 추가 


git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6331 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2009-05-19 03:35:28 +00:00
parent de9bf0db9a
commit fcf90678f9
6 changed files with 127 additions and 58 deletions

View file

@ -117,6 +117,9 @@
if(__DEBUG__==3) $GLOBALS['__trans_content_elapsed__'] = getMicroTime()-$start;
// 불필요한 정보 제거
$output = preg_replace('/member\_\-([0-9]+)/s','member_0',$output);
// 최종 레이아웃 변환
Context::set('content', $output);
$output = $oTemplate->compile('./common/tpl', 'common_layout');

View file

@ -33,10 +33,6 @@
$this->comment_srl = null;
return;
}
if ($attribute->member_srl < 0) {
$attribute->member_srl = 0;
$attribute->ipaddress = '0.0.0.0';
}
$this->comment_srl = $attribute->comment_srl;
$this->adds($attribute);

View file

@ -37,10 +37,6 @@
$this->document_srl = null;
return;
}
if ($attribute->member_srl < 0) {
$attribute->member_srl = 0;
$attribute->ipaddress = '0.0.0.0';
}
$this->document_srl = $attribute->document_srl;
$this->lang_code = $attribute->lang_code;
$this->adds($attribute);
@ -387,8 +383,7 @@
$oDocumentController = &getController('document');
if($oDocumentController->updateReadedCount($this)) {
$readed_count = $this->get('readed_count');
$readed_count++;
$this->add('readed_count', $readed_count);
$this->add('readed_count', $readed_count+1);
}
}

View file

@ -505,8 +505,8 @@
* @brief 회원 가입
**/
function procMemberInsert() {
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
// 관리자가 회원가입을 허락하였는지 검사
if($config->enable_join != 'Y') return $this->stop('msg_signup_disabled');

View file

@ -78,6 +78,9 @@
$member_srl = $obj->member_srl;
if(!$module_srl || !$member_srl) return new Object();
// 임시저장일 경우 포인트를 지급하지 않도록 수정
if($module_srl == $member_srl) return new Object();
// point 모듈 정보 가져옴
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('point');
@ -102,6 +105,48 @@
return new Object();
}
/**
* @brief 임시저장된 글을 정상 등록시 포인트 적용하는 trigger
* 1.2.3 에서 임시저장시에 포인트 지급되지 않도록 변경됨
**/
function triggerUpdateDocument(&$obj) {
$oDocumentModel = &getModel('document');
$oModuleModel = &getModel('module');
$document_srl = $obj->document_srl;
$oDocument = $oDocumentModel->getDocument($document_srl);
$module_srl = $oDocument->get('module_srl');
$member_srl = $oDocument->get('member_srl');
if(!$module_srl || !$member_srl) return new Object();
// 임시저장된 것이 아니면 return
if($module_srl != $member_srl) return new Object();
// point 모듈 정보 가져옴
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point',$obj->module_srl);
// 대상 회원의 포인트를 구함
$oPointModel = &getModel('point');
$cur_point = $oPointModel->getPoint($member_srl, true);
$point = $module_config['insert_document'];
if(!isset($point)) $point = $config->insert_document;
$cur_point += $point;
// 첨부파일 등록에 대한 포인트 추가
$point = $module_config['upload_file'];
if(!isset($point)) $point = $config->upload_file;
if($obj->uploaded_count) $cur_point += $point * $obj->uploaded_count;
// 포인트 증감
$this->setPoint($member_srl,$cur_point);
return new Object();
}
/**
* @brief 게시글 삭제 이전에 게시글의 댓글에 대한 포인트 감소 처리를 하는 trigger
**/
@ -137,11 +182,11 @@
$cnt = count($output->data);
for($i=0;$i<$cnt;$i++) {
if($output->data[$i]->member_srl<1) continue;
$member_srls[$output->data[$i]->member_srl] = $output->data[$i]->count;
$member_srls[abs($output->data[$i]->member_srl)] = $output->data[$i]->count;
}
// 원글 작성 회원의 번호는 제거
if($member_srl) unset($member_srls[$member_srl]);
if($member_srl) unset($member_srls[abs($member_srl)]);
if(!count($member_srls)) return new Object();
// 각 회원들을 모두 돌면서 포인트 감소
@ -211,7 +256,7 @@
$document_srl = $obj->document_srl;
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists() || $oDocument->get('member_srl')==$member_srl) return new Object();
if(!$oDocument->isExists() || abs($oDocument->get('member_srl'))==abs($member_srl)) return new Object();
// point 모듈 정보 가져옴
$oModuleModel = &getModel('module');
@ -236,17 +281,25 @@
* @brief 댓글 삭제 포인트 적용 trigger
**/
function triggerDeleteComment(&$obj) {
$oModuleModel = &getModel('module');
$oPointModel = &getModel('point');
$oDocumentModel = &getModel('document');
$module_srl = $obj->module_srl;
$member_srl = $obj->member_srl;
$member_srl = abs($obj->member_srl);
$document_srl = $obj->document_srl;
if(!$module_srl || !$member_srl) return new Object();
// 원글을 가져옴 (원글이 없거나 원글이 자신의 글이라면 포인트 적용 하지 않음)
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return new Object();
if($oDocument->get('member_srl')==$member_srl) return new Object();
// point 모듈 정보 가져옴
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point', $module_srl);
// 대상 회원의 포인트를 구함
$oPointModel = &getModel('point');
$cur_point = $oPointModel->getPoint($member_srl, true);
$point = $module_config['insert_comment'];
@ -311,7 +364,7 @@
if(!$module_srl) return new Object();
// 자신의 올린 파일이면 패스
if($obj->member_srl == $member_srl) return new Object();
if(abs($obj->member_srl) == abs($member_srl)) return new Object();
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('point');
@ -346,7 +399,7 @@
if(!$module_srl) return new Object();
// 자신의 올린 파일이면 패스
if($obj->member_srl == $member_srl) return new Object();
if(abs($obj->member_srl) == abs($member_srl)) return new Object();
// point 모듈 정보 가져옴
$oModuleModel = &getModel('module');
@ -370,39 +423,56 @@
/**
* @brief 조회수 증가시 포인트 적용
* 포인트가 없을때 조회를 하지 못하는 기능의 적용도 실행
**/
function triggerUpdateReadedCount(&$obj) {
// 로그인 상태일때만 실행
$logged_info = Context::get('logged_info');
if(!$logged_info->member_srl) return new Object();
$member_srl = $logged_info->member_srl;
$module_srl = $obj->get('module_srl');
// 자신의 글이면 패스
if($obj->get('member_srl') == $member_srl) return new Object();
// point 모듈 정보 가져옴
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point', $module_srl);
// 대상 회원의 포인트를 구함
$oPointModel = &getModel('point');
$cur_point = $oPointModel->getPoint($member_srl, true);
// 포인트를 구해옴
// 접속자의 정보 구함
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
// 원글의 회원 번호 구함
$target_member_srl = abs($obj->get('member_srl'));
// 원글을 적은 이와 동일하면 조회수 올리지 않고 pass
if($target_member_srl == $member_srl) return new Object();
// 회원일 경우 읽은 적이 있으면 그냥 pass 하고 그렇지 않으면 현재 포인트 구함
if($member_srl) {
$args->member_srl = $member_srl;
$args->document_srl = $obj->document_srl;
$output = executeQuery('document.getDocumentReadedLogInfo', $args);
if($output->data->count) return new Object();
$cur_point = $oPointModel->getPoint($member_srl, true);
} else {
$cur_point = 0;
}
// 포인트 모듈 기본 설정 가져옴
$config = $oModuleModel->getModuleConfig('point');
// 모듈별 point 정보 가져옴
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point', $obj->get('module_srl'));
// 조회 포인트를 구해옴
$point = $module_config['read_document'];
if(!isset($point)) $point = $config->read_document;
// 조회 포인트가 -(마이너스)일때 현재 포인트와 비교
if($config->disable_read_document == 'Y' && $point < 0 && abs($point)>$cur_point) {
$obj->add('content', sprintf(Context::getLang('msg_disallow_by_point'), abs($point), $cur_point));
return new Object();
}
// 로그인 사용자가 아니라면 pass
if(!$logged_info->member_srl) return new Object();
// 조회 포인트가 없으면 패스
if(!$point) return new Object();
// 읽은 기록이 있는지 확인
$args->member_srl = $member_srl;
$args->document_srl = $obj->document_srl;
$output = executeQuery('document.getDocumentReadedLogInfo', $args);
if($output->data->count) return new Object();
// 읽은 기록이 없으면 기록 남김
$output = executeQuery('document.insertDocumentReadedLog', $args);
@ -450,6 +520,7 @@
* @brief 포인트 설정
**/
function setPoint($member_srl, $point, $mode = null) {
$member_srl = abs($member_srl);
$mode_arr = array('add', 'minus', 'update', 'signup');
if(!$mode || !in_array($mode,$mode_arr)) $mode = 'update';
@ -467,26 +538,28 @@
$args->member_srl = $member_srl;
$args->point = $prev_point;
if($mode == 'add') {
$args->point += $point;
} elseif($mode == 'minus') {
$args->point -= $point;
if($args->point < 0) $args->point = 0;
} elseif($mode == 'update') {
$args->point = $point;
if($args->point < 0) $args->point = 0;
switch($mode) {
case 'add' :
$args->point += $point;
break;
case 'minus' :
$args->point -= $point;
break;
case 'update' :
$args->point = $point;
break;
case 'signup' :
$args->point = $point;
break;
}
if($args->point < 0) $args->point = 0;
$point = $args->point;
// 포인트가 있는지 체크
// 포인트가 있으면 update, 없으면 insert
$oPointModel = &getModel('point');
if($oPointModel->isExistsPoint($member_srl)) {
executeQuery("point.updatePoint", $args);
} else {
if($mode != 'signup') $args->point += (int)$config->signup_point;
executeQuery("point.insertPoint", $args);
}
if($oPointModel->isExistsPoint($member_srl)) executeQuery("point.updatePoint", $args);
else executeQuery("point.insertPoint", $args);
// 새로운 레벨을 구함
$level = $oPointModel->getLevel($point, $config->level_step);

View file

@ -17,6 +17,7 @@
* @brief 포인트 정보가 있는지 체크
**/
function isExistsPoint($member_srl) {
$member_srl = abs($member_srl);
$args->member_srl = $member_srl;
$output = executeQuery('point.getPoint', $args);
if($output->data->member_srl == $member_srl) return true;
@ -27,6 +28,7 @@
* @brief 포인트를 구해옴
**/
function getPoint($member_srl, $from_db = false) {
$member_srl = abs($member_srl);
$path = sprintf('./files/member_extra_info/point/%s',getNumberingPath($member_srl));
if(!is_dir($path)) FileHandler::makeDir($path);
$cache_filename = sprintf('%s%d.cache.txt', $path, $member_srl);