https://xetown.com/lakepark/19888
일찍이 닉이님의 도움으로 어렵게어렵게 추천할 때 포인트를 희생하는 시스템을 구현받았던 적이 있습니다.
걱정이 되서 질문글을 올리는데요..
1 . 이번 1.8.12 업데이트 이후로 작동이 안되는 프로그램이 있다보니 혹시 이 팁에도 영향이 가지 않을까 걱정이 됩니다 ^^
내용은 아래와 같습니다.
modules/point/point.controller.php 에서 아래 코드로 수정
이 코드를 적용하면 추천받음에 마이너스포인트 (예 -200)일 경우 추천한 사람의 포인트를 깎음
function triggerUpdateVotedCount(&$obj)
{
$module_srl = $obj->module_srl;
$member_srl = $obj->member_srl;
if(!$module_srl || !$member_srl) return new Object();
// 추천자 정보 구함
$logged_info = Context::get('logged_info');
$vote_member_srl = $logged_info->member_srl;
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('point');
$module_config = $oModuleModel->getModulePartConfig('point', $module_srl);
$oPointModel = getModel('point');
$vote_cur_point = $oPointModel->getPoint($vote_member_srl, true);
if( $obj->point > 0 )
{
$point = $module_config['voted'];
if(strlen($point) == 0 && !is_int($point)) $point = $config->voted;
}
else
{
$point = $module_config['blamed'];
if(strlen($point) == 0 && !is_int($point)) $point = $config->blamed;
}
if(!$point) return new Object();
// Increase the point
$vote_cur_point += $point;
$this->setPoint($vote_member_srl,$vote_cur_point);
return new Object();
}
modules/document/document.controller.php 에서 아래 코드로 수정
이 코드를 적용하면 포인트가 없는 경우 추천을 할 수 없게 됩니다. 단 아마도 포인트가 0 이상이기만 하면 추천이 가능할 겁니다..
function updateVotedCount 에서
~ 생략 ~
// Create a member model object
$oMemberModel = getModel('member');
$member_srl = $oMemberModel->getLoggedMemberSrl(); <-이 부분 바로 아랫부분에 다음 내용을 추가합니다.
// 포인트가 없으면 추천불가
$oPointModel = &getModel('point');
$member_point = $oPointModel->getPoint($member_srl, true);
if($member_point < 1) return new Object(-1, $failed_voted);
우선 여기까지가 팁에 적혀있는 코드인데요 ^^
혹시 이번 취약점 보안패치관련해서 더 수정해야 할 부분이 있는지 궁금하네요
2. 음...이 포인트가 없으면 추천불가능하다는 부분 말인데요...
링크된 부분에 코멘트로 달아놓기도 했지만, 가령 추천하는 경우 -200이 깎이도록 했는데, 현재 가진 총 포인트가 150이라도 추천이 가능합니다. 코드를 볼줄은 모르지만 아마도...포인트가 member_point<1 이라고 적혀있는 부분 때문에 1보다 작기만 하면 그냥 추천이 되는것 같습니다..
물론 추천한 후에는 0 포인트가 되서 더 이상 추천할 수 없게 되버리긴 하지만, 그렇게 되버리면 1포인트라도 포인트를 획득하면 200포인트를 소비해야하는 추천을 단 1포인트만으로 해낼 수 있게되버려서 저에게 문제입니다 ㅠ.ㅠ
그래서 이 부분을 제가 설정해놓은 (예를들자면 -200포인트 )포인트 보다 작은 경우엔 추천할 수 없도록 하는 것을 좀 도와주셨으면 좋겠습니다. (이왕이면 "포인트가 부족합니다. 현재포인트 얼마.." 와 같은 메세지를 띄워주면 정말 좋겠네요..)
바라는게 많습니다만...^^;;;
3. 이건 그냥 본문이랑 관계는 없습니다만... 혹시 특정 확장변수 (textarea 여러줄입력칸 ) 사용자정의 이름(value)을 이용해서 그 이름을 가진 확장변수에는 전화번호양식이나 이메일양식(@가 포함된)을 적을 수 없도록 처리하는 것 구현가능하시다면
쪽지라도 좀 보내주시면 좋겠숩니다 ^_________^;;
1번. 코어 1.8.12 업데이트와 무관한 기능임.
2번. 테스트는 안해봄.
modules/document/document.controller.php 파일
/// 내용추가 ///
$oModuleModel = getModel('module');
$mid = Context::get('mid');
$module_srl = $oModuleModel->getModuleSrlByMid($mid);
$module_config = $oModuleModel->getModulePartConfig('point', $module_srl);
$vote_point = $module_config['voted'];
// 아래 if문 살짝변경
// 포인트가 없으면 추천불가
$oPointModel = &getModel('point');
$member_point = $oPointModel->getPoint($member_srl, true);
$failed_voted = sprintf("포인트가 부족하여 추천할 수 없습니다. 현재 포인트는 %d 입니다", $member_point);
if($member_point < $vote_point ) return new Object(-1, $failed_voted);
3번. 가능.