웹마스터 팁

130523 10:10  -  스팸IP 인지 조회하는 부분 조금 보완 - 기존 IP 변수에 저장해 쿼리 줄임

 

----------------------------------

 

XE 공홈에 있던 글에서 아이디어를 얻어서 기능을 만들어보았습니다.

스팸은 모든 유저가 겪는 고통이기에, 이 기능만큼은 무료로 기능 구현방법을 공개합니다

솔직히 이 팁이 Core 에 포함되었으면 하는데, 과연 포함될지는 미지수죠 ^^;;;

(사용해보시고 도움이 되시면,  XE Core Issue 쪽에 건의해보세요 ^^;  호응이 좋으면 될지도)

 

관리자페이지 -> 회원목록 에서 회원을 선택해서 삭제할 경우

일반삭제는 그냥 회원정보만 삭제되고 기존글/댓글이 유지되지만.

'스팸처리' 를 눌러서 삭제하면,  회원정보가 삭제 되면서 동시에 그 회원이 쓴 모든 글 / 모든 댓글 도 같이 삭제되며. 또한 해당 글/댓글의  IP 주소를 스팸필터에 자동등록하게 하는 기능이 포함되어있습니다..

 

처음에는 지금 만든기능을 트리거화 하려했는데, 일반회원의 탈퇴나 삭제시 관련글들이 다 지워지면 안 되니.

결국 Core 업데이트될때마다 재수정을 해시는 방법밖에 없지만,  수정량이 많은건 아니니 스팸에 시달리는 것보다는 낫겠죠?

 

스팸처리 기능 관련 문의사항은..

http://sejin7940.co.kr/index.php?mid=sejin7940_works&category=92002&page=1    에 남겨주세요.

 

 

수정방법은 아래에 기록해둡니다.

XE 1.5 와 XE 1.7 이 조금 다릅니다.  1번은 버전에 따라 수정법이 다르고,  2번.3번 사항은 동일합니다.

 

혹시나의 상황을 대비해, DB는 꼭 백업을 해두고 진행하세요 ^^

 

 

1. modules/member/tpl/member_list.html 에서

 

(1) XE 1.5 기반에서 수정방법

130번째줄 부근의

<span class="btn"><button type="submit" name="type" value="delete">{$lang->cmd_delete}</button></span> 

밑에다가 추가

<span class="btn"><button type="submit" name="type" value="spam">스팸처리</button></span>

 


(2) XE 1.7 기반에서 수정방법

1)
<a href="#listManager" data-value="delete" class="modalAnchor _member x_btn">{$lang->delete}</a>  아래에다가 추가 (2군데 있음. 26번째줄과 105번째줄

부근)

<a href="#listManager" data-value="spam" class="modalAnchor _member x_btn">스팸처리</a>


2)
166번째 줄 부근의

<button type="submit" name="type" value="modify|delete" class="x_btn x_btn-inverse">{$lang->confirm}</button>

를 아래걸로 교체

<button type="submit" name="type" value="modify|delete|spam" class="x_btn x_btn-inverse">{$lang->confirm}</button>

 

 

이후에 기술할 2. 3. 은   XE 1.5 와 XE 1.7 모두 동일함


2. modules/member/member.admin.controller.php 에서

function procMemberAdminSelectedMemberManage() 함수 내부에


case 'delete':{  위에다가 추가


    
     case 'spam':{   // sejin7940 스팸회원 삭제 위해
      $output = $this->sejin7940_spamMember($member_srl);
      if(!$output->toBool()) {
       $oDB->rollback();
       return $output;
      }
      break;
     }

 

 

3. modules/member/member.admin.controller.php  에서

제일 끝에 함수 하나 추가  (제일 끝이란 끝부분의  } ?>  위를 말합니다)

 

 
  //  sejin7940 - 스팸회원 삭제/ 관련 글/ 관련 댓글 자동 삭제 및 IP 스팸등록 기능
  function sejin7940_spamMember($member_srl) {
   // 스팸 유저가 쓴 모든 글 자동 삭제
   $oDocumentModel = &getModel('document');
   $oDocumentController = &getController('document');
   $obj->member_srl = $member_srl;
   $obj->list_count = '99999999999';
   
   $columnList = array('document_srl','ipaddress');
   $document_list = $oDocumentModel->getDocumentList($obj,false,true,$columnList);
   foreach($document_list->data as $key_document => $val_document) {

    // 회원 IP 스팸에 등록
    $args_spam->ipaddress = $val_document->get('ipaddress');
    if($args_spam->ipaddress &&  ($ipaddress_bk != $args_spam->ipaddress )) {
     $output_spam = executeQuery('spamfilter.isDeniedIP', $args_spam);
     if(!$output_spam->data->count) {
      $ipaddress_bk = $args_spam->ipaddress;
      executeQuery('spamfilter.insertDeniedIP', $args_spam);
     }
    }
    // 글 삭제
    $oDocumentController->deleteDocument($val_document->document_srl);
   }

   // 스팸 유저가 쓴 모든 댓글 자동 삭제
   $oCommentModel = &getModel('comment');
   $obj->search_target = 'member_srl';
   $obj->search_keyword = $member_srl;
   $comment_list = $oCommentModel->getTotalCommentList($obj);
   $oCommentController = &getController('comment');
   foreach($comment_list->data as $key_comment => $val_comment) {
    // 회원 IP 스팸에 등록
    $args_spam->ipaddress = $val_comment->get('ipaddress');
    if($args_spam->ipaddress &&  ($ipaddress_bk != $args_spam->ipaddress )) {
     $output_spam = executeQuery('spamfilter.isDeniedIP', $args_spam);
     if(!$output_spam->data->count) {
      $ipaddress_bk = $args_spam->ipaddress;
      executeQuery('spamfilter.insertDeniedIP', $args_spam);
     }
    }
    $oCommentController->deleteComment($val_comment->comment_srl);
   }

   // 회원정보 삭제
   $oMemberController = &getController('member');   
   $oMemberController->memberInfo = null;
   $oMemberController = &getController('member');
          $output = $oMemberController->deleteMember($obj->member_srl);
                 if(!$output->toBool()) return $output;

   return $output;
  }


 

ps. 한줄 광고

XE 기반의 사이트 제작이나  기능제작등을 원하시면 ^^

XE 전문제작자 에게 맡겨보세요   =>   http://sejin7940.co.kr/index.php?mid=order_qna 

제목 글쓴이 날짜
탈퇴회원 레벨 아이콘 출력 안하기 [7] Gunmania 2013.08.17
익명게시판에서 회원 구분 가능하게 + 각 게시물에서 다른 아이디가 나타나게 하는 방법 [3] jn4kim 2013.08.06
Recruit 모듈 - 일반회원 채용글 등록할 수 있도록 수정 [10] 홍채화 2013.07.27
회원가입시 validation error 가 뜨거나 회원가입이 안될때 [2] 똑디 2013.07.27
회원가입폼에 필수항목 * 부분 처리 [3] 똑디 2013.07.18
회원가입 인증메일 제목 msg_confirm_account_title 오류 해결방법 [2] 뒤뒤 2013.06.27
스팸 회원 삭제시 동시에 관련 글 / 댓글 자동 삭제 + 스팸IP 등록기능 구현방법입니다 [20] sejin7940 2013.05.22
1.7.3 최신버전 특정사이트 iframe(아이프레임) 일반회원 html적용가능하게 하기 [2] imgXE™ 2013.05.06
회원가입 확장 모듈 1.7.X 및 모바일에서 사용가능하도록 [10] file hhgyu 2013.03.18
회원가입시 유저가 비공개 설정하기 [1] file 모앱 2013.03.03
출석부 소시랑 스킨 출석회원없을때 우측위젯이 아래로 떨어지는 현상 해결방법 [3] garnecia 2013.02.23
방명록 모듈 1.5.1.1에서 비회원이 남긴글 삭제하기 조슈아킴 2013.02.14
회원 정보에 내 포인트 현황 출력하기 [3] file 화랑529 2013.01.08
회원정보 수정 위해 비밀번호 재입력 후 튕기는 경우 [2] sejin7940 2013.01.06
1.5.4 회원정보에서 회원이 자기 이름 마음대로 수정 못하게 하는 거... [2] 샤로우 2012.12.31
XE 비회원이 귀찮게 이메일 홈페이지 입력 안하도록 하기 [7] jhrun 2012.12.16
xeshop에서 비회원 주문번호 조회 검색 가능하게 하기. [2] 리버즈 2012.12.15
회원가입 버튼을 누르면 출력되는 Can not open GeoIP.dat 에러 대처방법(임시) [2] 마음의빈자리 2012.11.30
회원설정에 레이아웃 설정이 생겼습니다. 회원정보보기페이지 레이아웃 설정 가능 [2] 똑디 2012.10.04
관리자의 회원정보 수정 페이지에 '가입일/최근접속일' 추가하기 [6] file showjean 2012.09.17