s/\|([^|]+)[^|]/$1<\/td>\n/g; # new field -- luke
return $_;
}
}}}
13. 이모티콘 도움말 추가
- 페이지 수정 모드에서, 상단 메뉴 아래에 있는 도움말에 "이모티콘" 항목을 추가
- 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();
...
}
}}}
14. 한글이 포함된 인터위키 문제 해결
- 인터위키를 사용할 때 페이지 제목에 한글이 포함되어 있으면 제대로 인식을 하지 못하는 문제가 있었다.
- [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);
}
}}}
15. history 매크로 문제 해결
- <history(5)> 라는 매크로가 있다면, 본문 내용에 최근 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 .= "<input type='submit' value='변경 비교'/> | | </form>\n";
return $html;
}
}}}
16. 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);
}
}}}
17. 번역 화일 사용
- UseModWiki 에서 표시되는 메시지들은 T() 또는 Ts() 함수를 거쳐서 출력됨
- 이 함수는 Translate 해쉬 변수에 원문 메시지를 키 값으로 넣어서, 해당 키에 대한 값 (번역문) 이 정의되어 있으면 그 데이타를 출력하고, 데이타가 없으면 원래의 키 값을 그대로 출력한다.
- wiki.pl 을 수정하여, Luke 님이 한글로 바꾸어 적었던 것들을 원래의 영문 메시지로 전부 바꿈
- korean.pl 을 작성하여, 이 안에 Translate 해쉬변수의 값을 정의하였다.
- 현재, 총 236 개 메시지 (오리지널 위키보다 31개 메시지가 더 있음) 엔트리가 있고, 이 중 213 개가 번역되었음.
- 23개의 메시지는 어떤 상황에서 출력되는지를 파악하지 못하여 그대로 영문으로 둠
- config.pl 또는 wiki.pl 내에 다음과 같이 적어주면 된다.
- {{{
do "./translations/korean.pl"; # 번역 화일의 경로
}}}
- wiki.pl 에서 변경된 부분이 너무 많아서 여기에 적을 수가 없습니다. (소스에 주석처리도 하지 않았습니다) 기존에 사용하고 있는 소스를 바꾸고 싶지 않다면, korean.pl 화일을 가져가고 위에 적은 한 줄만 추가하여서 그냥 사용하셔도 될 겁니다. 이 경우, Luke 님이 고쳐둔 한글메시지는 언어팩 설정의 영향을 받지 않고 무조건 한글로 나오게 되겠죠.
18. 페이지 목록에서 잠겨 있는 페이지 표시
- 관리자로 로긴했을 때, 페이지 목록을 보면 각 페이지 제목 옆에 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'));
}
...
}
}}}
19. 잠겨 있는 페이지를 삭제 또는 이름을 변경할 때 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) {
...
}
}}}
20. 페이지 하단에 수정금지 여부와 설정/해제 표시 (optional)
- 관리자 권한이 있는 경우는, 페이지 내용을 볼 때 그 페이지가 수정금지 설정이 되어 있는지 여부와, 설정/해제 기능을 하는 링크를 화면 하단에 표시하도록 하였다
- 매번 index 화면에 가서 하자니 귀찮아서... :-)
- 부작용 : 알려진 것 없음
- {{{
sub GetEditGuide {
my ($id, $rev) = @_;
my $result = "<div align=right>";
- 다음 코드를 삽입.
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 '') {
...
}
}}}
21. To Do or Bug Report
- UseModWiki 에 있는 버그들 수정 - Perl 을 제대로 공부하기 전까지는 힘들 듯 (그러면 뭐하러 적었을까..)
- 사용자ID 대소문자 처리 문제
- ID 와 패스워드의 보안성 강화
- 어떤 페이지의 하위페이지들을 삭제하거나 이름을 변경하여 다른 계층으로 옮겼을때, 하위 페이지들을 보관하던 디렉토리가 (화일이 하나도 없는 경우가 되어도) 삭제되지 않는다 - 그냥 두는 게 더 나으려나..
- UseModWiki 개선
- 역링크 개선
- 현재는 페이지 제목을 클릭하면 해당 제목이 포함된 모든 페이지를 찾음
- 해당 페이지를 "링크"하고 있는 페이지들만 찾도록 개선했음 좋겠음
- 대괄호쌍을 검색시킬 경우, 대괄호를 사용하지 않고 위키네임으로만 링크한 경우가 검색되지 않는 문제가 있음
관련 링크:
주인장분류 위키위키분류
|