2 번째 수정본
페이지를 삭제할 때 keep 화일은 지우지 않도록 함
- /북마크를 구현할 때, 삭제된 페이지의 삭제 이전 내용을 볼 수 있는 기능을 추가하기 위해서 구현한 패치
- 필수 요구 사항 : 없음
- 추가 요구 사항 : 없음
- 관리 메뉴에서 페이지를 삭제할 경우, 기존에는 페이지의 현재 버전이 들어 있는 .db 화일과 이전 버전들이 모아져 있는 .kp 화일을 다 삭제하였다.
- 이 패치를 적용하면, 페이지를 삭제하면 다음과 같이 동작한다.
- 현재 페이지의 내용을 keep 화일에 추가로 기록한다.
- .kp 화일은 놔두고 *.db 화일만을 삭제한다. 따라서 최근변경내역 화면에서 deleted 아이콘을 클릭했을 때 .kp 화일을 읽어서 삭제되기 이전의 내역을 볼 수 있다. 이를 이용하면 실수로 지운 페이지도 복구할 수 있다.
- 만일 삭제한 페이지를 다시 같은 이름으로 생성하게 되면, 그 시점에서 남아 있던 .kp 화일을 삭제한다. 그렇지 않을 경우 이전의 kp 화일의 내용과 새로 생성된 이후에 추가되는 kp 화일의 내용이 섞여서 history 가 꼬이게 된다. 따라서 삭제했던 페이지를 다시 생성한 이후에는 삭제 이전의 내용을 되찾을 수 없다.
- 관리 메뉴에서 하단에 있는 "RecentChanges 갱신" 옵션은, 삭제에 대해서는 더 이상 작동하지 않는다. 그 옵션의 체크 여부와 관계없이, 페이지를 삭제해도 rclog 화일에서 그 페이지에 관한 라인을 없애지 않는다.
- 부작용: 아직 모름
- 본인 스스로도 "자신이 뭘 하고 있는지" 제대로 알지 못하면서 작업한 패치이다. :-/
- 삭제하기 직전에 현재 페이지의 내용을 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();
###
###############
$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
위키위키분류