태터가 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도 변경하는 것이 좋다.

관련 글타래

2005/09/26 11:33 2005/09/26 11:33
글쓴이
author image
운영체제의 모든 것을 운영하고 있는 IT 블로거. IT 블로거라는 이름은 현재 시국때문에 시사 블로거로 바뀐 상태다. 그러나 나는 아직도 시사와 사회에 관심이 많은 IT 블로거일 뿐이다. 컴퓨터, 운영체제, 시사, 가족, 여행, 맛집, 리뷰등과 살면서 느끼는 소소한 일상이 블로그의 주제이다. 왼쪽의 아이콘은 둘째 딸 다예가 그린 내 모습이다.
오늘의 글
인기있는 글
조회수 많은 글 | 베오베
댓글 많은 글 | 베오베

Trackback

Trackback Address :: https://offree.net/trackback/346

Facebook

Comments

  1. 제스띠 2005/09/26 12:01

    헉! 혹시 제가 썼던 댓글때문에 만드신건가요? 괜시리 죄송스러워지는군요. --;;;

    perm. |  mod/del. reply.
    • 도아 2005/09/26 12:03

      아닙니다. 0.961로 태터가 업되면서 댓글 카운터 정책이 변경되서 이런 혼선을 막기위해 변경한 것입니다.

      처음에는 카운트를 일치 시키는 프로그램을 작성했다가 아예 댓글을 달지 못하도록 하는 것이 더 합리적인 것 같아서요.

      생각을 해보니 제스띠님이 그런 오해를 할 수 있을 것이라는 것을 생각하지 못했습니다.

      오해 없으시기 바랍니다.

  2. 제스띠 2005/09/26 15:42

    네~ ^^

    perm. |  mod/del. reply.
  3. 신공 2005/10/02 20:05

    질문! 입니다.
    뒤 2개의 패치는 성공 했는데 이번 패치에 사소한 문제가 발생했습니다; inc_function.php를 수정했는데 [error code 01B3 - 투고 권한이 없습니다]메시지가 뜨네요; 소스는 복사&붙여 넣기를 해서 오타는 없다고 생각합니다; [ ## 사이의 공백도 지웠구요

    perm. |  mod/del. reply.
    • 도아 2005/10/03 08:41

      어느 시점에서 오류가 뜨는지 알아야 답변이 가능합니다. 예를 들어 어드민으로 로그인하지 않은 상태에서 URL을 직접 입력하면 오류 메시지가 나타나는 것이 정상입니다.

  4. 신공 2005/10/03 10:27

    패치를 적용하고 어드민으로 로그인하지 않은 상태에서 R을 눌렀을때 투고 권한이 없다는 메시지가 나오네요

    perm. |  mod/del. reply.
    • 도아 2005/10/03 10:37

      남의 inc_function.php 파일의 내용을 봐야 확인할 수 있을 것 같습니다. 님의 inc_function.php파일을 inc_function.php.txt로 저장한 후 URL을 알려주기 바랍니다.

  5. 신공 2005/10/03 11:16

    에.. 여기 입니다;
    http://lhsthv.web-bi.net/inc_function.php.txt

    perm. |  mod/del. reply.
    • 도아 2005/10/03 11:29

      팁을 잘못 적용했습니다.

      459행을 459, 460으로 바꾸라고 해놨는데 님의 경우에는 459행을 그대로 두고 459행과 460행을 추가했기때문에 발생한 현상입니다.

      기존의 459행($bf2_rep = str_replace("[ ##rp_rep_onclick_reply##]", "onclick_reply('rp', '$num', '$no'); return false;", $bf2_rep);)을 삭제하면 정상적으로 동작할 것입니다.

  6. 신공 2005/10/03 12:09

    아..변경이군요ㅠㅠ 감사합니다;ㅅ;

    perm. |  mod/del. reply.
  7. 其仁 2005/10/04 09:06

    이 팁도 감사히 잘 쓰겠슴다~

    perm. |  mod/del. reply.
    • 도아 2005/10/04 10:55

      예... 오늘 방문했다가 적용된 것을 알 았습니다.

댓글로 기쁨을 나눠요!

(옵션: 없으면 생략)

글을 올릴 때 [b], [i], [url], [img]와 같은 BBCode를 사용할 수 있습니다.