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번. 가능.

  • ? ?
    앗 이렇게 빨리...
    그런데 예전에 당분간 의뢰는 안받는다 하지 않으셨나요..?? ㅠ
  • ? ?
    돈받고 하는건 안하고, 3번은 간단한거라 지금 시간도있고해서 만들고있어요. 대중적인게 아니라 자료실올릴지 그냥 여기에 올리지 고민
  • ? ?
    2번은 그대로 대입해 보았는데
    오히려 포인트가 0인경우에도 추천이 되버리는 불상사가 생기네요 ㅠ.ㅠ;;
  • ? ?
    2번
    $vote_point = $module_config['voted'];

    이걸

    $vote_point = abs($module_config['voted']);

    이렇게 바꿔보세요.
  • ?

    3번. 테스트안해봄. 글읽을때 이메일,전화번호있을시 가려줌.

  • ? ?

    애드온까지 만들어주시다니 감사합니다..!!
    제가 테스트를 해봤는데 작동은 되지 않습니다 ㅠ.ㅠ!!
    혹시나해서
    확장변수의
    사용자정의 이름과 입력항목 이름 둘 다 써 보고 엔터로 구분해 봤는데요 그래도 안되네요..

     

    막 사람들이 어떻게든 노력하는 경우 있잖아요 예를들어 o1o이칠팔이사삼육삼 모이렇게...

    이런 부분을 전부 잡을 수 있었으면 좋겠는데 어렵나요.......?;;;

  • ? ?

    다시 사용해보세요. 테스트했습니다.

     

    정형화된 형식이 아니라면 블라인드 처리 하기가 상당히 어렵다고 볼수 있습니다.

  • ? ?
    흐음 그렇게 어려운 사용법이 있는건 아닐텐데 왜 제꺼에선 안될까요 ㅠ.ㅠ 그..사용자정의 이름 이라고 적혀있는 것을 그대로 적어서 설정해두면 이메일은 비공개라는 부분으로 치환되서 출력되는거아닌가요..?
    이상하다ㅠ.ㅠ
  • ? ?
    설정에 적용할 사용자 정의 이름을 입력하시면됩니다.
    그리고 치환할 문자를 따로설정하셔도 되고 안하시면 '비공개'라고 치환되어 나옵니다.
  • ? ?

    흐음 저만 그런가요?? ㅠㅠ
    제 계정 두군데에다 둘 다 설치해서 해봤는데 작동이 안되네요,,

    혹시 포인트자료실에는 올리실 마음 없으신가요?ㅇ? 다른분들도 안되는지 알수가없네요 ㅠ.ㅠ 저는 스케치북 쓰고있습니다

    음...혹시 확장변수의 형태가 여러줄입력칸이든 한줄입력칸이든 상관없는거죠..??

  • ? ?

    차례대로 테스트결과.

     

     

    1. 확장변수 설정

    2.jpg

     

     

     

    2. 적용할 확장변수 애드온 설정

     

    1.jpg

     

     

     

    3. 테스트글 작성

     

    3.jpg

     

     

     

    4. 적용되는것을 확인.

     

    4.jpg

     

     

     

     

     

     

     

     

  • ? ?
    오 이유를 알았습니다 ㅠ.ㅠ 처음 보내주신 애드온에 새로다운받은걸 덮어쓰기 해서 캐쉬같은게 남아있었나봅니다..! 삭제하고 다시 설치해보니 이젠 제대로되네요 핳 기쁘네요^^ 도와주셔서 너무 감사드려요
  • ? ?
    혹시 이 애드온
    위젯에도 관여하게는 안될까요-? ㅜㅜ
    위젯으로 확장변수를 뽑아오도록 만들었는데 저렇게 치환된 부분은 본문에서는 애드온에 의해 제대로 바뀌었으나 위젯에서는 바뀌지 않고 그대로 노출이 되네요 ..
    방법이 없을까요..?..
  • ? ?
    위 애드온은 게시물을 보여줄때만 치환해주는거라 위젯에도 적용하게 하려면, 아예 게시물을 작성할때 치환되어 저장하도록 수정을 해야합니다.
  • ? ?

    헉 그럼 약간 아쉬운 맛이 있습니다 ㅠ.ㅠ
    차라리 전화번호등이 들어가면 경고메세지라도 띄우는 방식이 더 덜번거로울거같네요,,,
    -_ㅠ 크 ....그렇다고 제가 할 수 있는 일은 아닙니다만 ㅠ.ㅜ;;;

  • ? ?
    작성할때 치환해주는거는 위애드온 조금만 수정하면 가능할 것으로 보입니다만... 다른분께 바톤을 넘기겠습니다..
  • profile
    좋은 팁이네요 ㅎ