2003년 1월 8일 이후 
모두 명  오늘 명 
메인 페이지  
칼럼 보기  
카툰 보기  
게시판 가기  
사이트맵  
그밖의 것들  

가입하면 정말 편합니다;;
자유 게시판
질답 게시판
유용한 정보
 

Boards
유용한 정보
나중에 보고싶어서 찾아헤맬 것들을 미리 모아두는 곳
(건망증이 심한 저를 위한.....)

 댓글 신고 시스템 통합 패키지  
 리디  posted at 2005-03-03 16:07:52
10635 hits  5 comments
 http://reedyfox.com/fox NeWin reedyfox is level 39  llllllllll 
File #1 : report.zip (38.5 KB)   Download : 410
File #2 : nzeo_ver4_bbs.zip (40.2 KB)   Download : 334
 퍼머링크 : http://reedyfox.com/island.php/later/71  [복사]


# 2005.3.3. report.zip 일부 소스 수정 (첨부파일 다시 내려받으세요.)

# 2005.8.4. report.zip 일부 소스 수정 (첨부파일 다시 내려받으세요.)
댓글 내용에 작은 따옴표가 있으면 신고처리가 제대로 안되는 문제 해결
- addslashes() 를 여섯 군데 추가함



네이버 뉴스 게시판 댓글 신고 시스템을 벤치마킹한 통합 패키지입니다.
어떤 방식으로 동작하는지 보시겠습니다.


회원이 작성한 영화 '숨바꼭질' 감상평에 악플러가 스포일러 댓글을 달았습니다. 다른 분들의 피해가 속출합니다.


신고하기 위해 'test'라는 아이디로 로그인하겠습니다.

로그인 하면 닉네임 밑에 신고하기 단추가 보입니다. 익명을 이용한 무분별한 신고를 막기 위해 회원만 신고를 할 수 있게 했습니다.


신고 단추를 누르면 신고 팝업창이 뜹니다. 신고 사유를 선택할 수 있습니다.


신고 사유는 운영자용으로 미리 생성해둔 '신고 게시판'의 카테고리를 자동으로 불러오도록 되어 있습니다. 스포일러 신고를 하려고 하는데 해당되는 사유가 없으므로 '기타'를 선택해보겠습니다.


'기타'를 선택하면 기타 사유를 입력할 수 있도록 글상자가 뜹니다. 내용을 입력하고 '신고' 단추를 누릅니다.


닉네임 '악플러' 밑에 빨간색으로 '신고접수됨'이라는 문구가 생긴 것을 알 수 있습니다. 중복된 신고를 막기 위해 신고된 댓글은 다른 사람이 신고할 수 없도록 했습니다.

자, 이렇게 회원이 신고를 하면 어떤 일이 벌어질까요? 다음은 언급했듯이 운영자용으로 생성해둔 '신고 게시판'입니다. 이 게시판은 운영자만이 접근할 수 있으므로 test 아이디는 로그아웃하고 다시 운영자 아이디인 reedyfox로 로그인하겠습니다.


신고 게시판에 '숨바꼭질'이라는 제목으로 새글이 올라와 있습니다. 신고와 함께 자동으로 생성된 글입니다. 게시물의 제목을 그대로 따온 것입니다. 그렇게 한 이유는 이 신고 게시판을 관리하는 여러 운영자 중에서 아직 '숨바꼭질'이라는 영화를 보지 않은 사람이 스포일러 피해를 입지 않게 하기 위함입니다.

작성자는 신고자의 이름으로 되어 있으며, 처리 여부는 '미처리'로 되어있네요.


게시물을 클릭해보면 피신고자, 피신고자의 아이피, 신고된 댓글 내용, 댓글 작성시간, 그리고 기타를 누를 경우에 입력하도록 되어 있는 신고자의 부연설명까지 한 눈에 볼 수 있습니다. 스샷에서 '악플러'는 회원이 아니므로 아이디 대신 '손님'이라고 표시되어 있습니다.

신고된 댓글을 처리하기 위해 '해당 게시물 보러가기'를 클릭합니다.


자동으로 스크롤되어 해당 댓글로 이동됩니다. '신고접수됨' 단추 옆에 아까는 보이지 않던 세모 모양의 단추가 보입니다. 클릭해보겠습니다.


신고 처리 팝업창이 뜹니다. '삭제', '무혐의', '보류' 3개의 메뉴가 있습니다. '삭제'를 클릭해 보겠습니다.


해당 댓글이 없어지고 대신 그 자리에 '신고에 의해 삭제되었다'는 문구가 뜹니다. 삭제된 댓글은 '복원하기' 단추를 눌러서 복원 가능합니다. 한편, 동시에 신고 게시판에도 이 내용이 업데이트 됩니다. 무슨 말이냐고요? 한 번 보시죠.


아까 '미처리'로 되어있던 것이 '완료'로 바뀌었습니다.


클릭해서 본문을 보면, 아까 있던 내용 아래에 처리한 운영자의 닉네임과 아이디, 처리 시간, 그리고 처리 결과가 추가된 것을 볼 수 있습니다.

자, 그럼 삭제된 댓글을 복원시키면 어떻게 되는지 볼까요?


닉네임 밑에 '무혐의 처리'라고 파란색 글씨가 보입니다. 이것은 맨처음 신고 처리를 할 때, 팝업창에서 무혐의 처리 메뉴를 선택한 것과 같은 결과입니다. 한 번 무혐의 처리된 댓글은 일반 회원이 더 이상 신고할 수 없으나, 운영자는 계속해서 처리 내용을 바꿀 수가 있습니다.

자, 다음은 다시 신고 게시판입니다.


아까 '완료'라고 되어있던 것이 '재처리(1)'라고 바뀐 것을 알 수 있습니다. 일단 운영자 중 누군가가 처리를 해서 완료가 되었는데 또다시 그 댓글을 다르게 처리하면 저렇게 재처리 횟수가 표시되는 것입니다.


본문을 보면 '복원후 무혐의 처리'라고 내용이 추가되어 있습니다.


즉, 이 팁은 신고의 내용과 처리 과정을 완전히 기록함으로써 처리의 신속성과 과정의 투명성을 동시에 노릴 수 있습니다. 아래는 이 팁을 적용하는 방법입니다.


1) 파일을 업로드합니다.
첨부된 report.zip 파일을 다운 받아 압축을 풉니다. 수정해야 할 부분이 있습니다.

popReport.php - 상단 주소와 절대경로
popReport_ok.php - 상단 주소와 절대경로
popExecute.php - 상단 주소와 절대경로
popExecute_ok.php - 상단 주소와 절대경로
config.php - 허용할 (운영자) 레벨과 신고 게시판 아이디 입력


수정이 끝났으면 제로보드 디렉토리에 업로드합니다.

http://당신의도메인/제로보드디렉토리/report

이렇게 되어야 합니다.


2) 신고 게시판을 생성합니다.
신고 게시판은 별도의 스킨을 사용해야 합니다. 그 이유는 '처리' 과정을 표시하기 위해 '추천' 기능을 사용하기 때문입니다. 스킨에서 수정해야 할 부분은 다음과 같습니다.

list_head.php - '추천'이라는 글자를 '처리'로 변경
view_foot.php - '추천' 단추 삭제
(스킨에 따라서 이 파일 말고도 '추천' 단추가 있는 경우가 있음)
view.php - 역시 '추천' 표시하는 부분 삭제
list_main.php - <?=$vote?> 를 다음으로 교체
                <?php
                if($vote==0) echo "미처리";
                elseif($vote==1) echo "완료";
                else {
                        $vote = $vote - 1;
                        echo "재처리(".$vote.")";
                }
                ?>

신고 게시판은 카테고리 기능을 사용해야 합니다. 카테고리를 만들때는 몇 개가 되어도 상관 없으나, 마지막(맨 아래) 카테고리는 반드시 '기타'가 되어야 합니다. 카테고리를 추가할 때도 이름을 변경해서 항상 마지막 카테고리가 '기타'가 되도록 하세요.

신고 게시판의 권한은 다음과 같습니다.

목록보기 - 허용된 (운영자) 레벨
내용보기 - 허용된 (운영자) 레벨
글쓰기 - 1
간단한 답글 쓰기 - 허용된 (운영자) 레벨
답변쓰기 - 1

삭제 - 1
공지사항 - 1

중요한것은 삭제 권한입니다. 투명성을 위한 것이므로 혹시 모를 공동 운영진의 무분별한 댓글 삭제를 막기 위해 (삭제후 신고 게시판 글 수정하는 행위) 반드시 삭제 권한을 최고 운영자로 하십시오.


3) 일반 게시판 스킨을 수정합니다.
자칫 실수할 수 있으니 주의깊게 따라하세요. 혹시 그대로 사용하실 분들을 위해 이 팁이 적용된 제로보드 디폴트 스킨을 첨부2에 올려놓겠습니다.

첫번째 수정할 파일은 setup.php 입니다.
파일을 열어 맨 마지막에 다음을 추가합니다.

<script>
function Report(id, no, c_no, target) {
        var url='./report/'+target+'.php?id='+id+'&no='+no+'&c_no='+c_no;
        var opt='width=560,height=260,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,left=100,top=100,copyhistory=yes';
        window.open(url, 'comments', opt);
}
</script>


두번째 수정할 파일은 view_comment.php 입니다. 이해를 돕기 위해 제로보드 디폴트 스킨에 적용된 모습을 보여드리겠습니다.

http://reedyfox.com/cont/050303.phps새창으로 열기

위와 같이 수정하시면 됩니다. 어떻게 하는지 이제 보겠습니다.

운영자가 신고된 댓글로 이동할 때 자동 스크롤을 할 수 있도록 댓글 전체를 name 태그로 묶어 줍니다. 즉, view_comment.php  파일의 맨 위에 <a name=#<?=$c_data[no]?>>, 맨 아래에 </a> 를 삽입합니다.

그리고 적당한 자리- 닉네임 표시되는 곳 아래 같은 곳 - 에 다음을 삽입합니다. 이것은 '신고하기' 단추에 해당합니다.

                <?php
                include "./report/config.php";
                if (strpos($c_memo, '[__report__]') !== false) {
                        $tmpReport = explode("[__report__]",$c_memo);
                        $c_memo = $tmpReport[0];
                        $msgReport = $tmpReport[1];
                        if($msgReport==1) {
                                echo "<font color=red>[신고접수됨]</font>";
                                if($member[level]<=$allow_level) echo " <a style=\"cursor:pointer;\" onclick=\"Report('".$id."',".$no.",".$c_data[no].",'popExecute')\">▶</a>";
                        } elseif($msgReport==2) {
                                echo "<font color=blue>[무혐의처리]</font>";
                                if($member[level]<=$allow_level) echo " <a style=\"cursor:pointer;\" onclick=\"Report('".$id."',".$no.",".$c_data[no].",'popExecute')\">▶</a>";
                        }
                } else {
                        if($member[no]) echo "<a style=\"cursor:pointer;\" onclick=\"Report('".$id."',".$no.",".$c_data[no].",'popReport')\">[신고하기]</a>";
                }
                ?>



아래는 건의에 의해 수정된 부분입니다.
1번 버전은 삭제된 댓글이 아무에게도 보이지 않습니다.
2번 버전은 삭제된 댓글이 작성한 본인에게만 보이도록 해서 뭘 잘못했는지를 똑똑히 봐라(?)는 취지입니다.
3번 버전은 2번 버전 기능에 더하여, 신고가 접수된 댓글은 일단 비공개로 처리합니다. 이 버전은 무고하게 신고를 당한 회원의 댓글이 비공개 처리되는 문제점이 있으니 적용에 앞서 신중하게 생각하시기 바랍니다.

셋 중 하나를 골라서 적용하세요.
(개인적으로 2번 버전을 추천)
(첨부된 스킨은 수정되기 전 그대로 임)


## 1번 버전 시작 ##
다음은 댓글을 삭제하거나 복원시키는 기능을 넣어야 합니다. 여러분이 사용하는 스킨에서 다음 부분을 찾으십시오.

<?=nl2br($c_memo)?>
또는
<?=str_replace("\n","<br>",$c_memo)?>


이것을 지우고 그 자리에 다음을 삽입하십시오.

        <?php
        if($msgReport==3) {
                echo "<font color=red>신고에 의해 삭제되었습니다.</font>";
                if($member[level]<=$allow_level) echo " <a href=./report/popExecute_ok.php?id=".$id."&no=".$no."&c_no=".$c_data[no]."&mode=3>[복원하기]</a>";
        } else {
                echo str_replace("\n","<br>",$c_memo);
        }
unset($msgReport); // ## 기타 ## 를 적용하실 분은 이 줄을 반드시 삭제!!
        ?>

## 1번 버전 끝 ##


## 2번 버전 시작 ##
다음은 댓글을 삭제하거나 복원시키는 기능을 넣어야 합니다. 여러분이 사용하는 스킨에서 다음 부분을 찾으십시오.

<?=nl2br($c_memo)?>
또는
<?=str_replace("\n","<br>",$c_memo)?>


이것을 지우고 그 자리에 다음을 삽입하십시오.

        <?php
        if($msgReport==3) {
                echo "<font color=red>신고에 의해 삭제되었습니다.</font>";
                if($member[level]<=$allow_level) echo " <a href=./report/popExecute_ok.php?id=".$id."&no=".$no."&c_no=".$c_data[no]."&mode=3>[복원하기]</a>";
                if($c_data[ismember]==$member[no]) {
                        echo "<br><font color=red>댓글 내용은 다른 회원에게는 보이지 않습니다.</font><br><br>";
                        echo str_replace("\n","<br>",$c_memo);
                }
        } else {
                echo str_replace("\n","<br>",$c_memo);
        }
unset($msgReport); // ## 기타 ## 를 적용하실 분은 이 줄을 반드시 삭제!!
        ?>

## 2번 버전 끝 ##


## 3번 버전 시작 ##
다음은 댓글을 삭제하거나 복원시키는 기능을 넣어야 합니다. 여러분이 사용하는 스킨에서 다음 부분을 찾으십시오.

<?=nl2br($c_memo)?>
또는
<?=str_replace("\n","<br>",$c_memo)?>


이것을 지우고 그 자리에 다음을 삽입하십시오.

        <?php
        if($msgReport==3) {
                echo "<font color=red>신고에 의해 삭제되었습니다.</font>";
                if($member[level]<=$allow_level) echo " <a href=./report/popExecute_ok.php?id=".$id."&no=".$no."&c_no=".$c_data[no]."&mode=3>[복원하기]</a>";
                if($c_data[ismember]==$member[no]) {
                        echo "<br><font color=red>댓글 내용은 다른 회원에게는 보이지 않습니다.</font><br><br>";
                        echo str_replace("\n","<br>",$c_memo);
                }
        } elseif($msgReport==1) {
                echo "<font color=orange>신고가 처리될 때까지 비공개로 유지됩니다.</font>";
                if($c_data[ismember]==$member[no]) {
                        echo "<br><font color=orange>댓글 내용은 본인에게만 보입니다.</font><br><br>";
                        echo str_replace("\n","<br>",$c_memo);
                }
        } else {
                echo str_replace("\n","<br>",$c_memo);
        }
unset($msgReport); // ## 기타 ## 를 적용하실 분은 이 줄을 반드시 삭제!!
        ?>

## 3번 버전 끝 ##



## 기타 ##
신고접수시 혹은 삭제시 댓글 삭제 단추를 없애는 부분입니다.
이것 역시 건의에 의해 추가한 기능입니다.(첨부된 스킨은 적용되어 있지 않음)
기존에 이 팁을 적용하신 분께서 이 부분을 추가하시려면 아래 소스를 적용하기 전에
기존 팁의 unset($msgReport); 를 반드시 삭제해주시기 바랍니다.

unset($msgReport); 가 원래 있던 곳에서 이쪽으로 옮겨왔기 때문입니다.
view_comment.php 에서 댓글 삭제 부분을 찾습니다. 보통...

<?=$a_del?><img src=<?=$dir?>/del.gif border=0 valign=absmiddle></a>

이렇게 되어 있습니다. 이것을 지우고 대신 다음을 넣으세요.

        <?php
        if(!($msgReport=="1"||$msgReport=="3")) {
                echo $a_del."<img src=".$dir."/del.gif border=0 valign=absmiddle></a>";
        }
        unset($msgReport);
        ?>




이상입니다.

여담이지만, 어떤 운영자가 신고 게시판에 올라온 글을 읽고 그 댓글을 처리하러 간 사이에, 다른 운영자도 마침 그 글을 읽고 그 역시 댓글을 처리하러 갔는데, 앞의 운영자가 이미 댓글을 처리했다면 어떻게 될까요? 그럴 때는 '다른 분이 처리했습니다' 라는 안내 메시지가 뜹니다. 혹시 그런 상황을 염려하는 분이 계실까봐 덧붙였습니다. ^^


  PRINT Text  PRINT HTML  

  Trackbacks for this Posting (0)
'생각하는섬 바닷가 - 댓글 신고 시스템 통합 패키지'

LIST ALL               GO TO THE TOP

- 이글 위에 있는 글 : 접속하면 항상 최근 글이 펼쳐진 상태가 되기
- 이글 아래 있는 글 : 제로보드용 로컬키워드

Copyright 1999-2020 Zeroboard

 
생각하는 섬, 바닷가는 리디가 운영하는 개인 칼럼 사이트이며 일부 컨텐츠는 리디 외의 필진에 의해 작성되었습니다. 이곳의 모든 컨텐츠는 출처(Deep Link URL) 및 작가를 명시하는 조건으로 비상업적 용도의 전제/복제가 가능합니다. 그러나 이곳에 게재된 컨텐츠의 취지 또는 작가의 의도가 왜곡되어 해석될 수 있는 컨텐츠 변형은 금지합니다. 이곳에 기재된 전자우편주소에 대한 일체의 수집행위를 거부합니다.(게시일 2008년 1월 1일)
Google
  박세미 - 셀프카메라의 일상  
Window close