텍스트큐브 댓글, 방명록을 write-once로 바꾸기
"댓글을 실수로 지워버릴 수 있기 때문에 write-once 방식으로 바꾸면 아주 좋을 것 같다"는 개인적인 애로사항이 꽃폈다. 하지만 텍스트큐브는 댓글/방명록을 '쓰기 전용'으로 만드는 옵션을 제공하지 않는 것 같다.
그래서 직접 한번 코드를 고쳐보기로 했다.
어떻게 고치지?
텍스트큐브의 내부 구조라든가, 코드가 어떤 방식으로 짜여있는가 하는 등은 전~혀 모르지만 텍스트큐브의 코드 자체가 나름 구조화(?) 되어있어서 그런지 해당 부분은 금방 찾을 수 있었다.
이번에 수정할 파일은 interface/comment/delete/index.php 하나 뿐이다.
이 파일은 디렉토리에서 풍기는 분위기와는 달리 delete, edit, commit이라는 세가지 기능을 모두 수행한다. (그 때문에 이 파일만 고치면 되는거다!)
코드는 대략 다음처럼 되어있다:
list($replier) = getCommentAttributes($blogid, $suri['id'], 'replier');
if (!empty($_POST['mode'])) {
switch ($_POST['mode']) {
case 'delete':
// ...
case 'edit':
// ...
case 'commit':
// ...
}
respond::ErrorPage();
}
// ...
이야.. 다 끝났군하!
코드 중간 중간에 보면
에러 메시지를 출력해주는 훌륭한 함수 respond::ErrorPage(_text('msg'));가 쓰이고 있다.
이걸 그대로 써먹으면 되겠다.
write-once로 바꾸려면 delete와 edit가 불가능하면 되니까 주1 이 두 case 맨 위에 다음과 같이 추가하면 된다:
respond::ErrorPage(_text('댓글은 수정/삭제가 불가능합니다.'));
exit;
별로 많이 고칠 거 없이 간단하게 끝났다.
관리자가 스팸을 못지우는건 곤란;
그렇다! 적어도 관리자는 스팸을 지우기 위해서라도 댓글을 수정/삭제 할 수 있어야한다.
그 방법도 간단하다.
관리자인지 확인하는 코드는 이미 doesHaveOwnership()라는 함수로 잘 만들어져 있는데다가,
각 case에서는 항상 관리자인지 여부를 먼저 확인하도록 되어있다.
그러므로 관리자가 아닐 경우에만 위의 저 코드를 넣어주면 되는거다.
예를 들어, 관리자가 아닐 경우 delete를 못하게 하려면 다음처럼 수정한다:
case 'delete':
if (!list($entryId) = getCommentAttributes($blogid, $suri['id'], 'entry'))
respond::ErrorPage(_text('댓글이 존재하지 않습니다.'));
$result = false;
if (doesHaveOwnership()) {
$result = trashComment($blogid, $suri['id'], $entryId, isset($_POST['password']) ? $_POST['password'] : '');
} else {
respond::ErrorPage(_text('댓글은 수정/삭제가 불가능합니다.'));
exit;
}
// ...
이렇게 하면 관리자일 경우엔 delete가 제대로 처리되서 휴지통에 들어가고, 그 외의 사용자는 에러 메시지를 보게 될 것이다.
이 정도면 얼추... 정리가 된건가?
주의 사항?
여기서 소개한 내용을 그대로 적용해버리면 관리자도 수정할 수 없게 된다. 그러므로 관리자는 수정 할 수 있도록 하고 싶다면, 약간의 꼼수를 더 써야한다.
하지만 그것은 이 글의 목적과 어긋나고, 어떻게 하면 되는지에 대한 기본적인 설명은 다 된 것으로 보이므로 다른 사람의 몫으로 남겨둔다.
유용한 정보였다면 트랙백 날려주시라!
- 2010/02/28CCL을 내리다! [0]
- 2010/02/07블로깅을 관두는 5가지 영양소 결핍증 [1]
- 2010/01/13텍스트큐브 댓글, 방명록을 write-once로 바꾸기 [0]
- 2009/09/24"모든 블로그의 최근 글 보기"에 정렬방식 추가하기 [0]
- 2009/09/23텍스트큐브를 위한 알라딘 TTB 플러그인 v0.3 [0]

