웹마스터 팁
스팸 회원 삭제시 동시에 관련 글 / 댓글 자동 삭제 + 스팸IP 등록기능 구현방법입니다
2013.05.22 23:49
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
댓글 20
제목 | 글쓴이 | 날짜 |
---|---|---|
잦은 등급변경으로, 회원 등급이 엉켰을 경우 해결방법. [1] | NZ448 | 2009.09.10 |
이것두 팁은 되려나...; xe 7대 구성 설치법임..ㅋ; | 불패의초인 | 2009.09.11 |
오른쪽 서브메뉴영역 제목 이미지로 나타내기 [6] | hbeen | 2009.09.11 |
특정그룹회원에게 서비스 제공하기 [4] | 똑디 | 2009.09.12 |
웹에서 직접 zip파일 압축백업,압축풀기-호스팅 사용자님들 편한 툴입니다. [1] | ranson | 2009.09.12 |
네이버 실시간 인기검색어 가져오는 함수 [2] | Darby♡ | 2009.09.14 |
[content위젯] category 리스트만 가져오기.. [16] | 데즈라레 | 2009.09.14 |
XE 서버 이전할 때 통채로 압축해서 옮기는 완벽한 방법-로그인, 첨부파일문제 해결 [5] | 웰빙샵 지영 | 2009.09.15 |
서버이전 이후 발생하는 문제들에 대한 대응책 정리 [16] | Gekkou | 2009.09.16 |
게시판 확장변수 일괄 등록 하기 [2] | 2년후 | 2009.09.20 |
파일첨부 안될때 | 정박사닷컴 | 2009.09.24 |
확장변수 이용 답변완료 이미지 띄우기 간단 팁 [7] | jsuimage | 2009.09.25 |
방명록 게시판에서 확장변수 검사 안되는 문제 임시 방안 | June Oh | 2009.09.28 |
XE 수직 스크롤바 무조껀 띄우기 CSS [7] | 데즈라레 | 2009.09.28 |
/?module=admin 로 들어가지지 않아요. [2] | oO나쁜토끼Oo | 2009.09.29 |
확장변수 한줄입력칸 폭 조정하기 [2] | 아고라 | 2009.09.30 |
로그인이 안되거나 첨부파일이 등록이 안될때. [9] | 똑디 | 2009.09.30 |
이미지마크 쓸 경우 레벨아이콘 위치 바꾸기 | 고진감래 | 2009.09.30 |
추천과 추천포인트 관련 팁 [8] | 고진감래 | 2009.09.30 |
MySQL server has gone away 에러 대응 | 고수군 | 2009.09.30 |