댓글에 댓글

태터가 0.96으로 업데이트되면서 추가된 기능중 눈에띄는 기능은 댓글에 댓글을 다는 기능이다. 이 기능이 추가되기 전에는 알쯔님의 태터툴즈 0.94 계층형 코멘트 패치를 적용했었다. 0.96에서 댓글에 댓글을 다는 기능이 추가된 덕에 가장 복잡한 계층형 코멘트 패치를 하지 않아 좋기는 하지만 기존의 계층형 코멘트를 테터 테이타로 변환하는 문제가 있어서 기존 댓글 데이타를 정식 태터 댓글 데이타로 변환하기라는 글을 쓰게되었다.

댓글에 댓글

태터가 0.96으로 업데이트되면서 추가된 기능중 눈에띄는 기능은 댓글에 댓글을 다는 기능이다. 이 기능이 추가되기 전에는 알쯔님의 태터툴즈 0.94 계층형 코멘트 패치를 적용했었다.

0.96에서 댓글에 댓글을 다는 기능이 추가된 덕에 가장 복잡한 계층형 코멘트 패치를 하지 않아 좋기는 하지만 기존의 계층형 코멘트를 테터 테이타로 변환하는 문제가 있어서 기존 댓글 데이타를 정식 태터 댓글 데이타로 변환하기라는 글을 쓰게되었다.

0.96에는 관리자의 댓글이 최근에 달린 댓글 목록에 나오며 난 댓글을 한꺼번에 다는 습관 때문에 태터 패치: 최근에 달린 댓글에서 관리자 댓글 제거하기라는 패치를 작성했다.

현재 태터의 댓글의 댓글은 누구나 달 수 있도록 되어 있다. 이 경우 다음과 같은 문제점이 발견되었다.

  1. 가독성 문제: 어떤 형태를 사용하던 하나의 댓글에 댓글이 여러개 붙어서 보기에 좋지않다. 아울러 이런 댓글이 많은 경우 가독성이 떨어진다. 가독성이 좋게 스킨을 변경하려고 했지만 이것도 조금 힘들었다.
  2. 카운트 정책의 혼선: 0.95 이전 버전에서는 달린 모든 댓글을 카운트했다. 그러나 0.96 버전에서는 댓글에 달린 댓글은 카운트하지 않았다. 그러나 0.961 업데이트에서 다시 댓글에 달린 댓글까지 카운트를 하고 있다(결국 카운트를 일치 시키는 프로그램을 다시 작성했다).

이 문제를 해결하는 방법은 여러가지가 있겠지만 가장 좋은 방법은 관리자외에는 댓글을 달 수 없도록 하는 것인 것 같아 관리자만 댓글에 댓글을 달 수 있도록 태터를 패치하게되었다.

inc_function.php

**변경전**
459: $bf2_rep = str_replace("[ ##_rp_rep_onclick_reply_##]",
    "onclick_reply('rp', '$num', '$no'); return false;", $bf2_rep);

**변경후**
459: if($is_admin) $bf2_rep = str_replace("[ ##_rp_rep_onclick_reply_##]",
    "onclick_reply('rp', '$num', '$no'); return false;", $bf2_rep);
460: else $bf2_rep = str_replace("[ ##_rp_rep_onclick_reply_##]",
    "alert('관리자만 댓글을 달 수 있습니다'); return false;", $bf2_rep);

위에서 알 수 있듯이 459행(변경전)을 459행과 460행(변경후)으로 변경하면 된다. 여기서 주의할 것은 [ ## 사이에는 공백이 없어야 하며, 행번호는 일치하지 않을 수도 있다.

일단 위 팁을 적용하고 댓글 버튼(R)을 클릭하면 '관리자만 댓글을 달 수 있습니다'라는 메시지가 출력된다. 그러나 문제는 비정상적으로 접속하는 사람들이다. 댓글 버튼(R) 버튼을 클릭하지 않고 직접 댓글 폼을 호출할 수 있다. 한 예를들어 태터 패치: 최근에 달린 댓글에서 관리자 댓글 제거하기에 불법적인 댓글을 달려고 하면 다음 URL을 통해 접근하면 댓글을 다는 것이 가능해진다.

https://offree.net/reply_exe.php?mode=rp&pnum=307&num=1320

따라서 이러한 비정상적인 접속을 막기위해서는 reply_exe.php도 패치하는 것이 좋다.

reply_exe.php

**변경전**
34: if (return_authority()) $buf = substr($p_user_pass, 8);

**변경후**
34: if (return_authority()) { $buf = substr($p_user_pass, 8); $is_admin = 1; }
35: else $is_admin = 0;
36: if($is_admin) {
...
119: <? }
120: else error_process("01B3");

34행(변경전)을 34행~36행(변경후)으로 바꾸고 파일 끝에 119행과 120행을 추가하면된다. 37행~118행까지는 변경할 필요는 없다. 마찬가지로 행 번호는 일치하지 않을 수 있다.

inc_function.php를 변경하지 않아도 정상적으로 동작한다. 그러나 문제는 'error code 01B3 - 투고 권한이 없습니다'라는 메시지는 환경 설정에서 사용자의 IP를 제한한 경우에 나타나는 메시지이므로 오해의 소지가 없도록 inc_function.php도 변경하는 것이 좋다.

관련 글타래