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)을 이용해서 그 이름을 가진 확장변수에는 전화번호양식이나 이메일양식(@가 포함된)을 적을 수 없도록 처리하는 것 구현가능하시다면
쪽지라도 좀 보내주시면 좋겠숩니다 ^_________^;;
댓글 18
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번. 가능.
그런데 예전에 당분간 의뢰는 안받는다 하지 않으셨나요..?? ㅠ
오히려 포인트가 0인경우에도 추천이 되버리는 불상사가 생기네요 ㅠ.ㅠ;;
$vote_point = $module_config['voted'];
이걸
$vote_point = abs($module_config['voted']);
이렇게 바꿔보세요.
3번. 테스트안해봄. 글읽을때 이메일,전화번호있을시 가려줌.
애드온까지 만들어주시다니 감사합니다..!!
제가 테스트를 해봤는데 작동은 되지 않습니다 ㅠ.ㅠ!!
혹시나해서
확장변수의
사용자정의 이름과 입력항목 이름 둘 다 써 보고 엔터로 구분해 봤는데요 그래도 안되네요..
막 사람들이 어떻게든 노력하는 경우 있잖아요 예를들어 o1o이칠팔이사삼육삼 모이렇게...
이런 부분을 전부 잡을 수 있었으면 좋겠는데 어렵나요.......?;;;
다시 사용해보세요. 테스트했습니다.
정형화된 형식이 아니라면 블라인드 처리 하기가 상당히 어렵다고 볼수 있습니다.
이상하다ㅠ.ㅠ
그리고 치환할 문자를 따로설정하셔도 되고 안하시면 '비공개'라고 치환되어 나옵니다.
흐음 저만 그런가요?? ㅠㅠ
제 계정 두군데에다 둘 다 설치해서 해봤는데 작동이 안되네요,,
혹시 포인트자료실에는 올리실 마음 없으신가요?ㅇ? 다른분들도 안되는지 알수가없네요 ㅠ.ㅠ 저는 스케치북 쓰고있습니다
음...혹시 확장변수의 형태가 여러줄입력칸이든 한줄입력칸이든 상관없는거죠..??
차례대로 테스트결과.
1. 확장변수 설정
2. 적용할 확장변수 애드온 설정
3. 테스트글 작성
4. 적용되는것을 확인.
위젯에도 관여하게는 안될까요-? ㅜㅜ
위젯으로 확장변수를 뽑아오도록 만들었는데 저렇게 치환된 부분은 본문에서는 애드온에 의해 제대로 바뀌었으나 위젯에서는 바뀌지 않고 그대로 노출이 되네요 ..
헉 그럼 약간 아쉬운 맛이 있습니다 ㅠ.ㅠ
차라리 전화번호등이 들어가면 경고메세지라도 띄우는 방식이 더 덜번거로울거같네요,,,
-_ㅠ 크 ....그렇다고 제가 할 수 있는 일은 아닙니다만 ㅠ.ㅜ;;;