2 번째 수정본 소스 보기 : UseModWiki소스수정/페이지삭제시keep화일보존
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/페이지삭제시keep화일보존 는 읽기 전용 페이지입니다.
== 페이지를 삭제할 때 keep 화일은 지우지 않도록 함 == * [[/북마크]]를 구현할 때, 삭제된 페이지의 삭제 이전 내용을 볼 수 있는 기능을 추가하기 위해서 구현한 패치 * 필수 요구 사항 : 없음 * 추가 요구 사항 : 없음 * 관리 메뉴에서 페이지를 삭제할 경우, 기존에는 페이지의 현재 버전이 들어 있는 .db 화일과 이전 버전들이 모아져 있는 .kp 화일을 다 삭제하였다. * 이 패치를 적용하면, 페이지를 삭제하면 다음과 같이 동작한다. ** 현재 페이지의 내용을 keep 화일에 추가로 기록한다. ** .kp 화일은 놔두고 *.db 화일만을 삭제한다. 따라서 [[최근변경내역]] 화면에서 deleted 아이콘을 클릭했을 때 .kp 화일을 읽어서 삭제되기 이전의 내역을 볼 수 있다. 이를 이용하면 실수로 지운 페이지도 복구할 수 있다. ** 만일 삭제한 페이지를 다시 같은 이름으로 생성하게 되면, 그 시점에서 남아 있던 .kp 화일을 삭제한다. 그렇지 않을 경우 이전의 kp 화일의 내용과 새로 생성된 이후에 추가되는 kp 화일의 내용이 섞여서 history 가 꼬이게 된다. 따라서 삭제했던 페이지를 다시 생성한 이후에는 삭제 이전의 내용을 되찾을 수 없다. * 관리 메뉴에서 하단에 있는 "RecentChanges 갱신" 옵션은, 삭제에 대해서는 더 이상 작동하지 않는다. 그 옵션의 체크 여부와 관계없이, 페이지를 삭제해도 rclog 화일에서 그 페이지에 관한 라인을 없애지 않는다. * 부작용: 아직 모름 ** 본인 스스로도 "자신이 뭘 하고 있는지" 제대로 알지 못하면서 작업한 패치이다. :-/ ** 삭제하기 직전에 현재 페이지의 내용을 keep 화일에 기록하는 부분이 제일 문제가 된다. (그렇다고 해서 이 과정을 생략할 경우, 삭제되기 전의 가장 최신의 페이지를 찾을 수 없다) ** 테스트할 때는 별 문제가 없었다. :-) : {{{perl 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); } }}} : {{{perl 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
\n"; print Ts('Delete-Page: page %s is invalid', $page) . ".
" . Ts('error is: %s', $status) . "
\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화일은 어차피 따로 지우는 루틴을 두면 될테니까요. 세벌식 치기가 너무 힘드네요 ㅠㅠ. 좋은하루 되세요.
---- [[위키위키분류]]
UseModWiki소스수정/페이지삭제시keep화일보존
페이지로 돌아가기 |
다른 수정본 보기