[첫화면으로]UseModWiki소스수정/페이지삭제시keep화일보존

마지막으로 [b]

페이지를 삭제할 때 keep 화일은 지우지 않도록 함

sub SaveKeepSection {
    my $file = &KeepFileName();
    my $data;

###############
### replaced by gypark
### 페이지 삭제 시에 keep 화일은 보존해 둠
#   return  if ($Section{'revision'} < 1);  # Don't keep "empty" revision
    if ($Section{'revision'} < 1) {
        if (-f $file) {
            unlink($file) || die "error while removing obsolete keep file [$file]";
        }
        return;
    }
###
###############

    $Section{'keepts'} = $Now;
    $data = $FS1 . join($FS2, %Section);
    &CreatePageDir($KeepDir, $OpenPageName);
    &AppendStringToFile($file, $data);
}

sub DeletePage {
    my ($page, $doRC, $doText) = @_;
    my ($fname, $status);

    $page =~ s/ /_/g;
    $page =~ s/\[+//;
    $page =~ s/\]+//;
    $status = &ValidId($page);
    if ($status ne "") {
#       print "Delete-Page: page $page is invalid, error is: $status<br>\n";
        print Ts('Delete-Page: page %s is invalid', $page) . ".<br>" . Ts('error is: %s', $status) . "<br>\n";
        return;
    }

###############
### added by gypark
### 아래의 네 줄이 제일 불안한 부분이다. 이 부분에서 문제의 소지를 발견하면 제보해 주기 바람.
    &OpenPage($page);
    &OpenDefaultText();
    &SaveKeepSection();
    &ExpireKeepFile();
    &WriteRcLog($OpenPageName, "*", 0, $Now, &GetParam("username",""), &GetRemoteHost(0));
###
###############
    $fname = &GetPageFile($page);
    unlink($fname)  if (-f $fname);
###############
### commented by gypark
### 페이지 삭제 시에 keep 화일은 보존해 둠
#   $fname = $KeepDir . "/" . &GetPageDirectory($page) .  "/$page.kp";
#   unlink($fname)  if (-f $fname);
###
###############

#########################################################3
### 이 단락은 다른 패치에서 추가한 부분
### lck 화일도 같이 삭제
    $fname = &GetLockedPageFile($page);
    unlink($fname) if (-f $fname);
### cache 화일도 같이 삭제
    &UnlinkHtmlCache($page);
###
#########################################################3
    unlink($IndexFile)  if ($UseIndex);
###############
### commented by gypark
### 페이지 삭제 시에 keep 화일은 보존해 둠
#   &EditRecentChanges(1, $page, "")  if ($doRC);  # Delete page
###
###############
    # Currently don't do anything with page text
}

Note

에.. history가 꼬이는 것은 SavePage같은 곳에 kp화일의 revision을 따로 체크하는 방법이 있지 않을까요? 저는 이패치 적용 후에 일반 사용자들에게도 삭제권한을 줄 생각인데, 그렇게 되면 지금의 방법으로는 악의적인 사용자을을 막기 힘들지 않을까 싶네요. garbage kp화일은 어차피 따로 지우는 루틴을 두면 될테니까요. 세벌식 치기가 너무 힘드네요 ㅠㅠ. 좋은하루 되세요.
-- Bab2 2003-2-15 3:10 am

또 일거리를... ㅠ,.ㅠ 뭘 원하시는 지는 압니다. 저도 계속 그 고민 하고 있었으니까요. 그런데 그러자면... 페이지를 재생성한 후에도 예전의 내역을 보려면 재생성할 때 revision 번호를 1 부터 시작하게 하지 않고 (kp 화일에 있는 마지막 revision 번호 + 1) 부터 붙여 나가던가 (이러면 history 를 볼 때, 갓 생성된 페이지가 "20번째 수정본" 이라고 나오겠군요) 아니면 지금 사용하는 revision 말고, 재생성할 때마다 1 이 증가하는 또 다른 개념의 버전을 추가로 도입해야겠죠. 그러면 페이지를 열고 변경 내역을 보고 diff 를 보고 하는 루틴들을 죄다 고쳐 주어야 할 겁니다. 지금도 솔직히 전혀 문제가 없는지 확신하지 못하는 패치인데, 이 이상 그렇게 건드리고 싶지는 않습니다. :-) 요 며칠 동안 timezone 적용 문제 때문에 이전 패치를 다시 고치면서 느낀 건데... 제가 테스트해보고 잘 돌아간다고 해서 안심할 수가 없겠더군요. cache 를 사용하느냐 마느냐, index 화일을 사용하느냐 마느냐, major diff 를 기본으로 보느냐 minor diff 를 기본으로 보느냐, (timezone 설정 정도는 약과일지도) 등등 사용환경이 사람마다 다르니까요.

따라서 일단 궁리는 해 보겠지만, 쉽게 패치가 나오지는 못하겠습니다. :-) 그리고 페이지 삭제 권한을 뭐하러 공개하죠? 정 지워야겠다는 페이지가 있다면 페이지의 내용을 싹 지우고 delete this page 태그를 붙이라고 하세요. 굳이 칼을 쥐어주고 그것을 휘두를까봐 걱정거리를 늘릴 필요가 없지 않을까요.

아니면, 저 위에서 현재는 패에지를 새로 생성할 때 kp 화일을 지우도록 했는데 거기만 바꿔서, kp 화일을 따로 지정한 디렉토리로 옮겨 버리도록 하시면 금방 되겠네요. 이미 옮겨져 있다면 뒤에 번호를 추가로 붙여서 보관해야겠죠 (.kp.1 .kp.2 .kp.3 ...) 나중에 예전 버전을 되돌리고 싶으면 마지막으로 저장된 .kp 화일을 다시 keep 디렉토리로 복사해서 쓰면 되겠죠. 좀 어거지인 듯 합니다만 :-)
-- Raymundo 2003-2-15 8:36 am


2003-02-17 일자로 코드가 수정되었습니다. 최근에 변경된 적이 없는 페이지를 삭제할 경우 최근변경내역 화면에 나타나지 않게 되는데.. 페이지를 삭제하는 것도 rclog 화일에 새로 기록을 하여서 최근변경내역의 제일 최근 기록에 나타나도록 하였습니다.
sub DeletePage {
    ...
    &SaveKeepSection();
    &ExpireKeepFile();
    # 이 아래 라인이 추가되었음
    &WriteRcLog($OpenPageName, "*", 0, $Now, &GetParam("username",""), &GetRemoteHost(0));
    ...
}
-- Raymundo 2003-2-17 1:20 am


위키위키분류

마지막 편집일: 2007-1-8 12:19 pm (변경사항 [d])
851 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기