웹마스터 팁
스팸 회원 삭제시 동시에 관련 글 / 댓글 자동 삭제 + 스팸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
-
미친박군
2013.05.23 00:59
-
ttimo
2013.05.23 07:38
정말 필요한 기능이었는데, 감사합니다.
-
다크진
2013.05.23 08:40
정말 소중한 팁입니다 !!
-
착한악마
2013.05.23 09:19
정말 좋은 팁입니다. 이부분은 코어에 추가되야 할 팁이네..코어이슈에 올려 주세요에 한표!!!
-
오락실주인
2013.05.23 12:43
짱이네여 !!
-
뮤르시엘라고
2013.05.23 14:08
두줄광고네여
-
옆집옵하
2013.05.23 15:19
세진님 정말 참~~~~
세줄광고도 좋아요^^
-
드비츠로
2013.05.23 18:11
아이구 조금만 일찍알았어도 좀더 수월하게 스팸글 삭제하는건데ㅠㅠㅠ
감사합니다. 당장 적용해 놓아야겠네요.
-
Paul
2013.05.25 13:24
이런 기능은 정말 코어에 포함되어야 할것 같습니다! 좋은 팁 감사드립니다!! -
리리즈
2013.06.07 16:49
정말 최고의 기능입니다!
스팸성 글 한번에 1000개 넘게 올라와서 지우는 것도 일이었는데..
정말 좋은기능입니다. 감사합니다.
-
Goooooo
2013.06.08 01:00
3. modules/member/member.admin.controller.php 에서
제일 끝에 함수 하나 추가 (제일 끝이란 끝부분의 } ?> 위를 말합니다)....는?
제일 끝부분의
} ?> 위에
3.번에 있는 코드 전체를 붙혀넣기하면 되는 건가요?
-
sejin7940
2013.09.18 06:05
다른분이 이 기능을 애드온으로 만든게 어제 XE Market에 등록되었군요
물론 이런 팁이 없는 줄 알고 만든 애드온일 수도 있겠지만,
소스 고치기 힘드시면 애드온을 구매하셔서 써도 되고..
수정 가능하시면 이 팁으로도 효과는 동일할겁니다 (우연히도 애드온 효과가 완전히 동일하더군요)
-
푸시아
2013.09.18 12:41
오. 공개팁을 만들어 판매한다? 획기적인데요? 이제 팁도 적는걸 꺼리게 되겠군요. -
sejin7940
2013.09.18 13:41
푸시아님.. 너무 나아가셨어요 ^^;;;; 표절이라는 생각은 전혀 안 했거든요 (조금 놀랐을뿐 ^^;)
아래에도 자세히 적어는 놨지만, 무료로 하실분은 이렇게 수정하면 된다는 걸 전달하고팠던 댓글인데
제 표현이 조금 부족했나봐요.
-
푸시아
2013.09.18 15:14
ㅋㅋㅋ 제가 좀 과격합니다 -
드림XE
2013.09.18 13:29
안녕하세요 드림XE입니다.
표절(?) 의혹에 관련한 연락을 받고 댓글 남깁니다.
현재 XE마켓에 업로드된 모듈(애드온 포함)은 처음 개발 시 게시물/댓글 일괄 삭제 모듈이었습니다.
스크린샷에도 나와있듯이 게시물/댓글 일괄 삭제 모듈 (스패머 킬러)로 스패머 킬러라는 이름은 나중에 생긴것입니다.
제가 관리했던 사이트가 스팸 공격을 받고 전체 글, 댓글을 삭제하기 위해 임시방편차 개발된 모듈입니다.
(세진님도 XE에 관련하여 명성이 높으신 전문가이신 만큼 XE Document 데이터베이스만 삭제하는것은 데이터베이스의 무결성을 깨뜨릴 수 있는 것을 알 것입니다./ 그렇기에 저는 모듈 개발을 통해서 삭제하려 했습니다.)
개발하고 다른 아이디어를 생각하다가 예전에 가가토끼님께서 제작하신 원클릭 스팸 킬러 라는 모듈 (원클릭으로 회원 탈퇴, IP밴 추가)을 떠올렸습니다. 그래서 두개를 믹스해보면 어떨까 하는 생각에 만들었는데 이렇게 비슷한 모듈이 탄생할 줄은 상상도 못했습니다.
그리고
모듈 이름도 deleteall -> spamerkiller 로 변경하여 모듈을 개편하여 출시하였습니다.
이번 모듈로 통하여 오해가 생겼지만.. 세진님 말씀대로 소스코드에 수정이 어려우신분이 구매하시면 좋을 것 같네요..
이미 팁에 공개되어있던 것인 만큼 가격을 인하해서 많은 분들이 이용할 수 있도록 조치하겠습니다.
뿐만 아니라 현재 기능에서 더 추가하여 업데이트도 꾸준히 진행하도록 하겠습니다.
감사합니다.
-
sejin7940
2013.09.18 13:37
표절이라는 말처럼 들릴까봐서, 앞의 댓글쓸때 말을 정말 조심히 고민해 쓴건데.
역시 그렇게 느껴질 수 있겠군요 ^^; (이러면 제작자 입장에서 억울할 수 있을텐데.)
자료라는 게 만들다보면 당연히 서로서로 겹칠거라고 생각합니다
따라서 처음부터 표절했을거라고는 생각지 않았습니다. 저도 그런경우가 있었기에..
(전 역으로.. 유료 마켓 자료 와 제가 나중에 무료배포한 자료가 유사하게 겹쳤었죠 ^^)
실제 공개팁일지라도, 소스 수정이 어려우신분들도 많기에
애드온 되어 배포하는것 만으로도 충분한 가치가 있다고 생각합니다.
다만, 유료 판매가 되는 시점에.. 이게 사실 무료 팁으로도 있다는 걸 전달을 함으로써
소스 수정이 가능한 분은 이 팁으로 수정을 하셔도 되고
소스 수정이 어렵거나, Update 마다 고치는게 싫은 분들은, 애드온 자료를 이용하시면 된다는
선택점을 유저들에게 주고 팠던거예요 ^^
혹시나 마음 상하셨을까봐.. 흔적 남겨둡니다 ^^
ps. 최근에 XE Market 에 많은 자료를 올려주셔서 유저로서 감사드립니다.
(전 Market 활동하기엔 제약이 많아서 자료를 공유를 못해서 항상 미안해하고 있거든요 ^^)
-
드림XE
2013.09.18 13:45
세진님도 그런 경우가 있으셨군요..^^;;
고민 많이했습니다.. ㅎㅎ;; 지워야할까 말아야할까..;;;
세진님말씀대로 세진님이 작성하신 팁에 관하여 링크도 걸어두도록 하겠습니다.
XE마켓에서 모듈, 애드온만 판매했을때 얼마나 수익이 날까 궁금해서 시작해봤습니다.
근데 수익이 넘 안나긴 하네요..(저렴하게 많은분들에게 판매하는게 목적이었는데..)
역시 사용자분들은 위젯 모듈 디자인, 레이아웃에만 관심을 가지시나 봅니다... ㅜㅜ
곧 위젯 모듈 디자인, 레이아웃 분야도 시작해보렵니다..
어쨌든, 이렇게 오해가 풀려서 다행이네요.
즐거운 추석명절 보내시기 바랍니다. 감사합니다.
-
socialskyo
2014.02.04 01:12
아!! 대박입니다. 감사합니다!!
-
DjKiLLeR
2014.05.22 15:06
1.7.5에서는 적용이 안되는것 같습니다...........
스팸처리를 눌러도 회원이 그대로 남아 있는데
다른방법으로 수정을 해야하는건가요?
이전버젼에서는 잘 사용했었습니다.^^
좋은 정보감사드립니다.^^