* 오른쪽에 (optional) 이라고 적힌 것은, 개인적인 필요에 의해 수정한 부분이라, 고쳐도 좋고 말아도 좋은 그런 것들입니다.
== # 개요 ==
이 홈페이지에 사용되는 UseModWiki 는, [http://paedros.x-y.net/cgi-bin/wiki/wiki.pl Luke's wiki]에서 Luke님이 한글 관련 패치를 하고, PalmWiki:PalmWiki_관련 에서 jmjeong 님이 다시 몇 가지를 수정한 것을 [[주인장]]이 다운받아서 사용하고 있다.
여기에 별도로, [[위키위키를사용한홈페이지들]]마다 해당 홈페이지 운영자분들이 직접 고친 것들과, [[주인장]]이 개인적인 필요에 의해서 고친 것들을 추가로 적용하였다.
즉, 아래에서 제공하는 소스화일을 그대로 사용하던가, 필요한 것만 패치하고 싶다면 PalmWiki:PalmWiki_관련 에 있는 소스에서 시작해서 원하는 것만 적용하면 된다.
== # 현재 이 홈페이지에서 사용되고 있는 UseModWiki 소스 ==
'''여기서 제공하는 화일을 사용하여 발생하는 사태에 대해 [[주인장]]은 책임지지 않습니다'''
* GyparkPDS:wiki.txt
** 확장자를 pl 로 바꾸어서 사용하면 된다.
** "by gypark" 이라는 문자열을 검색하면, [[주인장]]이 추가,삭제,수정한 부분을 찾을 수 있다.
** 도움주신 PalmWiki 의 jmjeong 님, jof4002 님, [[danny]], 그 외 여러 분들께 감사를 드린다.
* GyparkPDS:korean.txt
** 위키가 설치된 디렉토리 내에 translations 라는 디렉토리를 만들고, 이 화일을 korean.pl 이라는 이름으로 보관한다.
== # 데이타 디렉토리와 설정 화일 위치 변경 (optional) ==
* 웹브라우저에서 데이타 디렉토리 내의 내용을 직접 억세스 할 수 있기 때문에, 특히나 user 디렉토리 밑에 있는 사용자 정보를 읽을 수 있었다.
* wiki.pl 을 수정하여, 데이타 디렉토리와 config 화일의 이름을 바꾸고, (사실 이름만 그럴싸하게 바꿔도 밖에서 들여다보기는 힘들겠지만) public_html 디렉토리 밖으로 이동시켰다.
* 부작용 : 알려진 것 없음
** 화일 경로명을 바꿨을 뿐이니, 부작용이 생길 여지가 보이지 않는다
: {{{
# == Configuration =====================================================
# $DataDir = "data"; # Main wiki directory
$DataDir = "newdata"; # Main wiki directory
}}}
: {{{
sub DoWikiRequest {
# if ($UseConfig && (-f "config.pl")) {
# do "config.pl"; # Later consider error checking?
# }
if ($UseConfig && (-f "newconfig.pl")) {
do "newconfig.pl"; # Later consider error checking?
}
}}}
* 간단하게는, 데이타 디렉토리 안에 .htaccess 화일을 만들어서 그 안에 "deny from all" (따옴표 제외) 라고만 적어줘도 아파치 서버에서는 브라우저를 통해서 들여다 볼 수 없게 할 수 있다.
== # fullsearch 와 titlesearch 매크로의 출력 형식 변경 ==
* fullsearch 와 titlesearch 매크로를 사용했을 때, 출력되는 페이지 제목들의 목록이 가로로 나열되는 것을 세로로 나열되도록 변경
* 부작용 : 알려진 것 없음
** 단순한 출력 변경이라, 전혀 없을 것이라 짐작함
: {{{
sub MacroTitleSearch {
...
$txt .= &GetPageLink($name) . "
\n"; # 원래는 " " 인데, "
\n" 으로 수정했음.
...
$txt .= &GetPageLink($name) . "
\n";
}
}}}
: {{{
sub MacroFullSearch()
{
...
$txt .= &GetPageLink($pagename) . "
\n";
...
}
}}}
== # pre 태그 안에서 부등호 표기 문제 해결 ==
* 좌우 부등호로 둘러쌓인 부분을 태그로 처리해 버리고, & lt; 와 & gt; 를 사용해도 다음 번 수정시에 다시 부등호로 바꾸어 버리는 문제를 해결
* [http://whitejames.x-y.net/cgi-bin/jofcgi/wiki/wiki.pl?프로그래밍팁/Wiki jof4002님의 패치]를 적용함
* 부작용 : 알려진 것 없음
: {{{
sub GetTextArea {
my ($name, $text, $rows, $cols) = @_;
$text =~ s/(\&)/\&/g; # 이 줄을 추가해 준다.
...
}
}}}
== # Index 의 페이지 목록을 제목의 첫글자별로 구분 ==
* 상단 메뉴의 index 를 클릭했을때 기존에 페이지들이 알파벳 순으로 출력되는 것을 개선하여, 첫글자에 따라 A,B,...,가,나,... 등으로 색인을 나눔.
* [http://whitejames.x-y.net/cgi-bin/jofcgi/wiki/wiki.pl?프로그래밍팁/Wiki jof4002님의 패치]를 적용함
* 여기에 다시 추가로, 목록 상단에 각 머리글자로 한 번에 이동할 수 있도록 링크를 추가함
* [[주인장]]이 직접 고침. perl 에 대해 전혀 모른 상태에서 기존 소스만 보고 고친 탓에 지저분하다.
* 부작용 : 알려진 것 없음
* 이 두 패치를 동시에 적용하면 다음과 같다.
: {{{
# 다음의 함수를 통채로 바꿈
sub PrintPageList {
my ($pagename);
my $count = 0;
my $titleIsPrinted = 0;
my @han = qw(가 나 다 라 마 바 사 아 자 차 카 타 파 하);
my @indexTitle = (0, "A".."Z");
push (@indexTitle, @han, "기타");
my @indexSearch=("A".."Z");
push (@indexSearch, @han, "豈");
print "", Ts('페이지 수: %s', ($#_ + 1)), "
\n";
my $count2 = 0;
print("\n|");
while ( $count2 <= $#indexTitle ) {
if ($count2 == 27) {
print("
\n|");
}
print("");
print(" $indexTitle[$count2] ");
print("|");
$count2++;
}
print "
";
$count2 = 0;
foreach $pagename(@_) {
until (
$pagename lt @indexSearch[$count]
&& ($count == 0 || $pagename gt @indexSearch[$count-1])
) {
$count++;
$titleIsPrinted = 0;
last if $count > 40;
}
if (!$titleIsPrinted) {
while ( $count2 <= ($count - 1) ) {
print "\n";
print "";
$count2++;
}
print "\n";
print $q->h3($indexTitle[$count]);
print "";
$count2 = $count + 1;
$titleIsPrinted=1;
}
print ".... " if ($pagename =~ m|/|);
print &GetPageLink($pagename);
if (&UserIsAdmin()) {
print " | " . &ScriptLink("action=pagelock&set=1&id=" .$pagename, T('lock'));
print " | " . &ScriptLink("action=pagelock&set=0&id=" .$pagename, T('unlock'));
}
print $q->br;
print "\n";
}
}
}}}
== # 상단 메뉴바에 사용자 정의 링크 추가 (optional) ==
* 기존 소스에서 UserGotoBar 라는 변수를 사용해서 사용자 메뉴 항목을 상단 메뉴 오른쪽 끝에 표시한다.
* UserGotoBar2~UserGotoBar4 세 개의 변수를 추가하여 상단 메뉴에 포함
* 부작용 : 알려진 것 없음
** 단순한 출력 변경이라, 전혀 없을 것이라 짐작함
: {{{
### 제일 끝에 UserGotoBar2~4 추가
use vars qw(@RcDays @HtmlPairs @HtmlSingle
$TempDir $LockDir $DataDir $HtmlDir $UserDir $KeepDir $PageDir
...
$UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4);
...
}}}
: {{{
sub GetGotoBar {
...
$bartext .= ' ' . &GetSearchForm();
if ($UserGotoBar ne '') {
$bartext .= " | " . $UserGotoBar;
}
### 다음 단락을 추가. UserGotoBar3 와 4 도 원하는 위치에 삽입하면 됨
if ($UserGotoBar2 ne '') {
$bartext .= " | " . $UserGotoBar2;
}
### 여기까지
$bartext .= " | ";
$bartext .= $q->endform;
$bartext .= "
\n";
return $bartext;
}
...
}}}
== # 외부 URL 옆에 "새 창으로 열기" 아이콘 표시 (optional) ==
* 외부 URL 또는 [[인터위키]] 링크 옆에 있는 http://gypark.pe.kr/cgi-bin/wiki/emoticon/newwindow.gif 아이콘을 클릭하면 새 창이 뜬다.
* [http://whitejames.x-y.net/cgi-bin/jofcgi/wiki/wiki.pl?프로그래밍팁/Wiki jof4002님의 패치]를 적용함
* 아이콘은 친구 [[danny]]가 자신의 홈페이지에서 사용하려고 만든 것을 가져다가 좀 더 날씬하게 바꿨음. :-)
* 부작용 : 알려진 것 없음
** 단순한 출력 변경이라, 전혀 없을 것이라 짐작함
: {{{
sub InterPageLink {
...
# return ("$name", $punct);
return ("$name
", $punct);
}
}}}
: {{{
sub StoreBracketInterPage {
...
# return &StoreRaw("[$text]");
return &StoreRaw("[$text]
");
}
}}}
: {{{
sub UrlLink {
...
# return ("$name", $punct);
return ("$name
", $punct);
}
}}}
: {{{
sub StoreBracketUrl {
...
# return &StoreRaw("[$text]");
return &StoreRaw("[$text]
");
}
}}}
== # 사이트 로고 표시 문제 해결 ==
* 모든 페이지에 로고가 나오지 않고, Index, RecentChanges 등 action 이 있는 페이지에서만 로고가 나오는 문제 해결
* [http://host9.swidc.com/~ncc1701/wiki/wiki.cgi?FAQ Jay's Wiki의 패치]를 적용함
* 부작용 : 알려진 것 없음
: {{{
...
sub GetHeader {
...
if ($id ne '') {
# $result .= $q->h1(&GetSearchLink($id)); 이 부분을
$result .= $q->h1($header . &GetSearchLink($id)); # 이렇게 고쳐줄 것
} else {
$result .= $q->h1($header . $title);
}
...
}
...
}}}
== # toc 매크로 문제 해결 ==
* toc 매크로를 사용할 때, == 사이에 둘러쌓인 제목들이 같은 영단어로 끝날 경우 제대로 toc 가 만들어지지 않는 문제 해결
* [http://host9.swidc.com/~ncc1701/wiki/wiki.cgi?FAQ Jay's Wiki의 패치]를 적용함
* 부작용 : 알려진 것 없음
: {{{
...
sub WikiHeadingNumber {
...
# Cook anchor by canonicalizing $text.
# 아래 여섯 줄은 불필요. 주석처리
# $anchor = $text;
# $anchor =~ s/\<.*?\>//g;
# $anchor =~ s/\W/_/g;
# $anchor =~ s/__+/_/g;
# $anchor =~ s/^_//;
# $anchor =~ s/_$//;
# $anchor = '_' . (join '_', @HeadingNumbers) unless $anchor; # Last ditch effort 이 줄을
$anchor = 'H_' . (join '_', @HeadingNumbers); # unless 뒤를 잘라서 이렇게 고친다
...
}
...
}}}
== # 상단 메뉴에 상위페이지 아이콘 표시 (optional) ==
* [[하위페이지]]의 경우, 상단 메뉴에 상위페이지로 가는 링크가 추가되는데, 이 링크가 다른 링크 사이에 묻혀 잘 눈에 띄지 않는다.
* 상위페이지 이름 앞에 http://gypark.pe.kr/cgi-bin/wiki/emoticon/parentpage.gif 아이콘을 표시하게 함
* 부작용 : 알려진 것 없음
** 단순한 출력 변경이라, 전혀 없을 것이라 짐작함
: {{{
...
sub GetGotoBar {
...
if ($id =~ m|/|) {
$main = $id;
$main =~ s|/.*||; # Only the main page name (remove subpage)
# $bartext .= " " . &GetPageLink($main); 이 줄을 아래와 같이 바꾼다
$bartext .= " | " . &GetPageLink($main);
}
...
}
...
}}}
== # {{{ }}} 태그 추가 ==
* 프로그램 코드 등, 특수문자가 많이 쓰이거나 고정폭 폰트로 인용해야 되는 내용들을 {{{ 와 }}} 사이에 적어주면 됨
* 이제는 부등호를 & lt; & gt; 등으로 적을 필요 없이 그대로 적어도 된다. 만세.
* [[danny]]의 패치 적용.
* 부작용 : '''주의!!!''' - 이 변경은, 중요한 함수들의 실행 순서를 바꾸었기 때문에 위키의 태그처리 방식에 변화가 생겼다. 기존의 페이지들이 제대로 보이는 지 점검할 것. 현재 다음의 사항들이 발견되었음
** pre 태그로 둘러싼 영역 안에서는 예전에 작동하던 태그가 작동하지 않는다. 어찌 보면 이게 더 자연스러운지도.
** h4, h5, h6 의 헤드라인이 제대로 동작하지 않는다.
*** $ThinLine 변수의 값이 1 일때는, ---- 는 얇은 가로줄, ==== 는 굵은 가로줄로 바뀌는데, 이 변환이 헤드라인 변환보다 먼저 일어나버려서 등호를 네 개 이상 사용하는 h4 부터가 변환되지 않는다.
*** 해당 기능을 없애고 헤드라인을 살리는 쪽을 택함
** 표가 제대로 만들어지지 않는다. 날림으로 해결. 거짓말이 거짓말을 낳듯... 뭣모르고 수정한 코드가 다른 부분의 수정을 부르고 있다.
*** 의미를 제대로 알 수 없는 (아마도 "|" 하나로 표를 만들기 위함인 듯) 두 줄을 주석처리하여 해결
* Jof 님의 제보에 의하면, 오리지널 UseModWiki 소스에서 CommonMarkup 와 WikiLinesToHtml 의 순서가 이 패치의 순서와 동일하다고 한다. ([[주인장]]이 직접 들여다봤는데, 정말 그렇다) 따라서 원래의 코드로 되돌아간 셈인데, 아마도 Luke님이 소스를 수정하는 과정에서 변경하지 않았을까 한다. Luke님 홈페이지에 순서를 변경한 연유를 여쭈었으니, 답을 들은 후에 고민해야겠다
: {{{
sub WikiToHTML {
...
# 다음 두 함수의 순서를 바꾸어 CommonMarkup() 이 먼저 실행되게 한다.
$pageText = &CommonMarkup($pageText, 1, 0); # Multi-line markup # line wraped. luke
$pageText = &WikiLinesToHtml($pageText); # Line-oriented markup
# $pageText = &CommonMarkup($pageText, 1, 0); # Multi-line markup # line wraped. luke
...
}
}}}
: {{{
sub CommonMarkup {
...
s/\<code\>((.|\n)*?)\<\/code\>/&StorePre($1, "code")/ige;
# 바로 아래 라인을 삽입
s/\{\{\{((.|\n)*?)\}\}\}/&StoreRaw("" . $1 . "<\/pre>")/ige;
s/\[\#(\w+)\]/&StoreHref(" name=\"$1\"")/ge if $NamedAnchors;
...
# 헤드라인 문제를 해결하기 위해 굵은 가로줄 기능 없앰
# 아래 if 구문을 삭제하고 한 줄만 남겨둔다
# if ($ThinLine) {
# s/----+/ /g;
# s/====+/ /g;
# } else {
# s/----+/ /g;
# }
s/----+/ /g;
...
# 표 처리 문제를 해결하기 위해 아래 두 줄 주석처리
# s/^\|([^|]+)[^|]/$1<\/TD>\n/g; # start of line: new table-r
ow -- luke
# s/\|([^|]+)[^|]/ | $1<\/td>\n/g; # new field -- luke
return $_;
}
}}}
== # 이모티콘 도움말 추가 ==
* 페이지 수정 모드에서, 상단 메뉴 아래에 있는 도움말에 "이모티콘" 항목을 추가
* [[danny]]의 패치를 약간 수정하여 적용
* $UseEmoticon 값에 따라 출력 내용이 달라진다.
* 부작용 : 알려진 것 없음
: {{{
# 이 안에서 nowiki 문자열과 양 옆의 부등호 사이에 공백이 없게 할 것
# 여기서는 위키 홈페이지에 올리기 위해서 부득이하게 공백을 삽입했음
sub DoHelp {
...
|;
}
### 여기서부터 추가
elsif ($idx eq 5) {
if ($UseEmoticon eq 0) {
$text = q|
'''현재 이 홈페이지에서는 이모티콘을 사용하지 않도록 설정되어 있습니다.'''
'''따라서 아래의 도움말은 적용되지 않습니다.'''
|;
}
$text .= q|
== 이모티콘 ==
이모티콘은 감정표현에 사용되는 작은 그림입니다.
다음과 같은 문자열 중 하나를 입력하시면 왼쪽의 그림이 자동으로 삽입됩니다.
* ^^ < nowiki>^^ ^-^ ^_^ ^o^ ^O^ ^^; ^-^; ^_^; ^o^ ^O^ :-D :D< /nowiki>
* :-) < nowiki>:-)< /nowiki>
* -_- < nowiki>-_- -_-; =.= =.=; :-s :-S< /nowiki>
* o.O < nowiki>o.O *.* :-o :-O :o :O< /nowiki>
* :-( < nowiki>:-( :(< /nowiki>
* :-p < nowiki>:-p :-P :p :P< /nowiki>
* ;-) < nowiki>;-) ;)< /nowiki>
|;
}
### 여기까지
$ClickEdit = 0;
print &GetHttpHeader();
...
}
}}}
: {{{
sub DoEdit {
...
print &HelpLink(3, "링크와 이미지") . " | ";
# print &HelpLink(4, "매크로") . " "; 이 줄을 아래 두 줄로 바꿈
print &HelpLink(4, "매크로") . " | ";
print &HelpLink(5, "이모티콘") . " ";
print &GetFormStart();
...
}
}}}
== # 한글이 포함된 [[인터위키]] 문제 해결 ==
* [[인터위키]]를 사용할 때 페이지 제목에 한글이 포함되어 있으면 제대로 인식을 하지 못하는 문제가 있었다.
* [http://whitejames.x-y.net/cgi-bin/jofcgi/wiki/wiki.pl?action=browse&diff=1&id=프로그래밍팁/Wiki Jof4002님의 패치]를 적용
* 부작용 : 알려진 것 없음
: {{{
sub SplitUrlPunct {
....
$punct = "";
# 아래 두 줄의 xc0 을 x80 으로 바꿈
# ($punct) = ($url =~ /([^a-zA-Z0-9\/\xc0-\xff]+)$/);
# $url =~ s/([^a-zA-Z0-9\/\xc0-\xff]+)$//;
($punct) = ($url =~ /([^a-zA-Z0-9\/\x80-\xff]+)$/);
$url =~ s/([^a-zA-Z0-9\/\x80-\xff]+)$//;
return ($url, $punct);
}
}}}
== # history 매크로 문제 해결 ==
* 라는 매크로가 있다면, 본문 내용에 최근 5번의 revision 목록을 출력하는데 (History 를 클릭했을 때와 동일한 출력), 실제로 다섯개의 최근 revision 이 각각의 revision 을 링크하고 있는 것이 아니라 죄다 현재 버전을 링크하고 있다. (Revision 3 을 클릭해도 3번째 수정본이 아닌 마지막 수정본이 출력된다)
* 왼쪽에 있는 radio button 들도, History 를 클릭했을 때와는 다르게 엉뚱한 위치가 디폴트로 지정되어 있다. (디폴트 위치가 문제가 있을 뿐 동작은 제대로 한다)
* MacroHistory 에서 GetHistoryLine 을 부를 때 row parameter 의 값을 수정하여 해결
* 부작용: 알려진 것 없음
** MacroHistory의 내용만 변경했으므로, 부작용이 있더라도 history 매크로를 사용한 곳에서만 발생할 것으로 생각됨
: {{{
sub MacroHistory {
...
$html .= "";
# $html .= &GetHistoryLine($DocID, $Page{'text_default'}, 0, 1); 이 줄을 다음 줄로 변경
$html .= &GetHistoryLine($DocID, $Page{'text_default'}, 0, 0);
&OpenKeptRevisions('text_default');
...
next if ($_ eq ""); # (needed?)
# $html .= &GetHistoryLine($DocID, $KeptRevisions{$_}, 0, 0); 이 줄을 다음 줄로 변경
$html .= &GetHistoryLine($DocID, $KeptRevisions{$_}, 0, $i);
}
$html .= " | | \n";
return $html;
}
}}}
== # user 디렉토리를 생성하지 못하는 문제 해결 ==
* 설치 후 처음으로 사용자 이름을 등록할 때, 사용자 정보를 저장하지 못한다는 에러가 발생할 수 있다.
** $DataDir/user 디렉토리를 생성하는 루틴이 없어서 발생
** 생성 루틴 추가
* 참고로, 설치 후 처음 실행 시에 data 디렉토리를 생성하지 못해서 에러가 발생할 수도 있다. 이것은 위키가 설치된 디렉토리의 퍼미션 문제이다.
** 위키가 설치된 디렉토리에 타인의 write 권한이 허용되어 있으면 (ex: 777, 773 등) 이 에러가 발생하지 않는다.
** 또는, 사용자가 수동으로 data 디렉토리를 만들어 주어도 된다. 이 때는 data 디렉토리를 777 퍼미션으로 해 주어야 한다.
** [[Unix의Permission]] 참조
* 부작용: 알려진 것 없음
** 사용자 환경설정에서 저장버튼을 누를 때마다 함수 호출 한 번, if 문 한 번이 실행되니, 퍼포먼스 저하가 부작용이라면 부작용일 듯. :-)
:{{{
sub SaveUserData {
my ($userFile, $data);
# 다음 줄 추가
&CreateDir($UserDir);
$userFile = &UserDataFilename($UserID);
$data = join($FS1, %UserData);
&WriteStringToFile($userFile, $data);
}
}}}
== # 번역 화일 사용 ==
* UseModWiki 에서 표시되는 메시지들은 T() 또는 Ts() 함수를 거쳐서 출력됨
* 이 함수는 Translate 해쉬 변수에 원문 메시지를 키 값으로 넣어서, 해당 키에 대한 값 (번역문) 이 정의되어 있으면 그 데이타를 출력하고, 데이타가 없으면 원래의 키 값을 그대로 출력한다.
* wiki.pl 을 수정하여, Luke 님이 한글로 바꾸어 적었던 것들을 원래의 영문 메시지로 전부 바꿈
* korean.pl 을 작성하여, 이 안에 Translate 해쉬변수의 값을 정의하였다.
** 현재, 총 236 개 메시지 (오리지널 위키보다 31개 메시지가 더 있음) 엔트리가 있고, 이 중 213 개가 번역되었음.
** 23개의 메시지는 어떤 상황에서 출력되는지를 파악하지 못하여 그대로 영문으로 둠
* config.pl 또는 wiki.pl 내에 다음과 같이 적어주면 된다.
: {{{
do "./translations/korean.pl"; # 번역 화일의 경로
}}}
* 다른 언어의 번역화일들은 UseMod:UseModWiki/Translations 에서 구할 수 있다.
* wiki.pl 에서 변경된 부분이 너무 많아서 여기에 적을 수가 없습니다. (소스에 주석처리도 하지 않았습니다) 기존에 사용하고 있는 소스를 바꾸고 싶지 않다면, korean.pl 화일을 가져가고 위에 적은 한 줄만 추가하여서 그냥 사용하셔도 될 겁니다. 이 경우, Luke 님이 고쳐둔 한글메시지는 언어팩 설정의 영향을 받지 않고 무조건 한글로 나오게 되겠죠.
== # 페이지 목록에서 잠겨 있는 페이지 표시 ==
* 관리자로 로긴했을 때, 페이지 목록을 보면 각 페이지 제목 옆에 lock 과 unlock 두 가지 기능이 있는데, 정작 각 페이지가 현재 잠겨 있는지 그렇지 않은지를 알려면 쉘에서 lock 화일을 찾는 수 밖에 없다. (아니면 로그아웃해서 각각의 페이지를 확인하던가..)
* wiki.pl 을 수정하여, 관리자로 로긴하여 index 화면에 들어갈 경우, 잠긴 화일 옆에는 "(locked)" 라는 표시가 추가로 보이게 하였음
** 관리자 아닌 경우에도 표시되게 하고 싶다면, if (&UserIsAdmin()) { 라인 위쪽에 적어주면 될 터이다. 그렇지만 방문자들이 index 를 볼 때마다 lock 화일을 찾는 과정을 거쳐야 하므로, 페이지 수가 많고 방문객도 많은 사이트에서는 시스템을 혹사시킬 듯 하다.
* 부작용:
** 페이지 수가 많을 경우, 각 페이지에 대한 lock 화일을 찾아야 하므로 시스템 성능 저하가 예상됨 - lock 화일이 있는 페이지의 목록을 미리 만들어 두었다가 비교하는 방법이 더 낫지 않을까 함
:{{{
sub PrintPageList {
...
if (&UserIsAdmin()) {
### 아래의 if { } 문 삽입
if (-f &GetLockedPageFile($pagename)) {
print " " . T('(locked)');
}
### 여기까지
print " | " . &ScriptLink("action=pagelock&set=1&id=" . $pagename, T('lock'));
print " | " . &ScriptLink("action=pagelock&set=0&id=" . $pagename, T('unlock'));
}
...
}
}}}
== # 잠겨 있는 페이지를 삭제 또는 이름을 변경할 때 lock 도 같이 처리 ==
* lock 이 걸려 있는 페이지를 관리자가 삭제할 때, lock 화일은 삭제되지 않고 그대로 남아 있는 문제가 있었다.
* 마찬가지로, lock 이 걸려 있는 페이지의 이름을 변경할 경우, lock 화일이 그대로 남아서, 옛 이름의 페이지는 lock 만 남아있고, 새 이름의 페이지는 반대로 lock 이 걸려 있지 않게 되는 문제가 있었다.
* wiki.pl 의 페이지삭제와 페이지이름변경 루틴에 lock 에 대한 처리를 삽입하여 해결
* 부작용: 알려진 것 없음
:{{{
sub DeletePage {
...
$fname = $KeepDir . "/" . &GetPageDirectory($page) . "/$page.kp";
unlink($fname) if (-f $fname);
### 아래 두 줄 추가
$fname = &GetLockedPageFile($page);
unlink($fname) if (-f $fname);
### 여기까지
unlink($IndexFile) if ($UseIndex);
...
}
}}}
:{{{
sub RenamePage {
...
rename($oldkeep, $newkeep);
unlink($IndexFile) if ($UseIndex);
### 다음 코드를 삽입
my ($oldlock, $newlock);
$oldlock = &GetLockedPageFile($old);
if (-f $oldlock) {
$newlock = &GetLockedPageFile($new);
rename($oldlock, $newlock) || die "error while renaming lock";
}
### 여기까지
&EditRecentChanges(2, $old, $new) if ($doRC);
if ($doText) {
...
}
}}}
== # 페이지 하단에 수정금지 여부와 설정/해제 표시 (optional) ==
* 관리자 권한이 있는 경우는, 페이지 내용을 볼 때 그 페이지가 수정금지 설정이 되어 있는지 여부와, 설정/해제 기능을 하는 링크를 화면 하단에 표시하도록 하였다
* 매번 index 화면에 가서 하자니 귀찮아서... :-)
* 부작용 : 알려진 것 없음
:{{{
sub GetEditGuide {
my ($id, $rev) = @_;
my $result = "";
### 다음 코드를 삽입.
if (&UserIsAdmin()) {
if (-f &GetLockedPageFile($id)) {
$result .= T('(locked)') . " | ";
}
$result .= &ScriptLink("action=pagelock&set=1&id=" . $id, T('lock'));
$result .= " | " . &ScriptLink("action=pagelock&set=0&id=" . $id, T('unlock'));
$result .= " ";
}
### 여기까지
if (&UserCanEdit($id, 0)) {
if ($rev ne '') {
...
}
}}}
== # To Do or Bug Report ==
* UseModWiki 에 있는 버그들 수정 - [[Perl]] 을 제대로 공부하기 전까지는 힘들 듯 (그러면 뭐하러 적었을까..)
** 사용자ID 대소문자 처리 문제
** ID 와 패스워드의 보안성 강화
** 어떤 페이지의 하위페이지들을 삭제하거나 이름을 변경하여 다른 계층으로 옮겼을때, 하위 페이지들을 보관하던 디렉토리가 (화일이 하나도 없는 경우가 되어도) 삭제되지 않는다 - 그냥 두는 게 더 나으려나..
* UseModWiki 개선
** [[역링크]] 개선
*** 현재는 페이지 제목을 클릭하면 해당 제목이 포함된 모든 페이지를 찾음
*** 해당 페이지를 "링크"하고 있는 페이지들만 찾도록 개선했음 좋겠음
*** 대괄호쌍을 검색시킬 경우, 대괄호를 사용하지 않고 위키네임으로만 링크한 경우가 검색되지 않는 문제가 있음
----
관련 링크:
* [[/사용자의견]]
* [[홈페이지작업일지]]
* UseMod:UseModWiki - 오리지널 UseModWiki 사이트
* UseModKr:소스수정
* PalmWiki:PalmWiki_관련
* JofWiki:프로그래밍팁/Wiki
----
[[주인장분류]] [[위키위키분류]]
UseModWiki소스수정백업 페이지로 돌아가기 | 다른 수정본 보기
| |