관심있는 페이지를 지정하는 기능 추가
- /사용자의견에 있는 거북이님의 제안을 구현 (정확하게 구현하기에는 난이도가 너무 높아서... 동작이 조금 다르다)
- 눈여겨 지켜보고 싶은 페이지를 자신의 "관심 있는 페이지" 목록에 추가해 둘 수 있다.
- 필수 요구 사항 : 없음
- 선택 요구 사항 :
- /북마크와 /최근변경내역테이블출력이 적용되어 있는 상태에서 추가 적용한 패치이기 때문에, 이 패치를 수작업으로 적용하는 경우 앞의 두 패치가 이미 적용되어 있어야 수월할 것이다.
- 사용법 :
- 로그인한 상태에서만 사용할 수 있다.
- 페이지 하단의 편집 가이드에 있는 "관심있는 페이지로 등록" 을 클릭하면 자신의 관심 페이지 목록에 추가된다.
- 관심 페이지 목록에 등록된 페이지의 경우는 편집 가이드의 해당 자리에 "관심있는 페이지에서 제거"라고 표시된다. 이 링크를 클릭하면 그 페이지를 자신의 관심 페이지 목록에서 제거한다.
- 자신의 관심 페이지 목록에 등록된 페이지는, 최근변경내역에서 해당 페이지 제일 왼쪽에 아이콘이 표시된다. (아웃룩 익스프레스로 뉴스그룹을 볼 때 사용하는 아이콘을 슬쩍해 왔음.. -_-;) 이 아이콘은 "$IconDir로 설정된 디렉토리/rc-interest.gif" 으로 존재해야 한다.
wiki.pl 수정
use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts
$ViewCount $AnchoredFreeLinkPattern %UserInterest);
다음의 GetRcHtml 함수는 /북마크와 /최근변경내역테이블출력이 적용되어 있는 상태에서 다시 수정된 것이다.
sub GetRcHtml {
...
my ($rcnew, $rcupdated, $rcdiff, $rcdeleted, $rcinterest) = (
"<img style='border:0' src='$IconDir/rc-new.gif'>",
"<img style='border:0' src='$IconDir/rc-updated.gif'>",
"<img style='border:0' src='$IconDir/rc-diff.gif'>",
"<img style='border:0' src='$IconDir/rc-deleted.gif'>",
"<img style='border:0' src='$IconDir/rc-interest.gif' alt='".T('Interesting Page')."'>",
);
$bookmark = &GetParam('bookmark',-1);
...
$html .= "<TR class='rc'>"
. "<TD class='rc'>"
. ((defined ($UserInterest{$pagename}))?"$rcinterest":" ")
. "</TD>"
. "<TD class='rc'>$link </TD>"
. "<TD class='rcpage'>" . &GetPageOrEditLink($pagename) . "</TD>"
. "<TD class='rctime'>" . &CalcTime($ts) . "</TD>"
...
}
sub GetEditGuide {
...
$result .= '<br>';
$result .= Ts('%s hit' . (($ViewCount > 1)?'s':'') , $ViewCount)." | " if ($ViewCount ne "");
if (&GetParam('username') ne "") {
if (defined($UserInterest{$id})) {
$result .= &ScriptLink("action=interest&mode=remove&id=$id", T('Remove from interest list'));
} else {
$result .= &ScriptLink("action=interest&mode=add&id=$id", T('Add to my interest list'));
}
$result .= " | ";
}
$result .= &GetHistoryLink($id, T('History'));
if ($rev ne '') {
$result .= ' | ';
$result .= &GetPageLinkText($id, T('View current revision'));
}
...
}
sub LoadUserData {
...
%UserData = split(/$FS1/, $data, -1);
%UserInterest = split(/$FS2/, $UserData{'interest'}, -1);
}
sub DoOtherRequest {
...
} elsif ($action eq "oekaki") {
&DoOekaki();
} elsif ($action eq "interest") {
&DoInterest();
} elsif ($action eq "deleteuploadedfiles") {
&DoDeleteUploadedFiles();
...
}
다음 함수를 통채로 추가
sub DoInterest {
my ($title, $temp);
my $mode = &GetParam('mode');
my $id = &GetParam('id');
my $failMsg = T('Fail to access Interest Page List');
if (&GetParam('username') eq "") {
print &GetHeader('', $failMsg, '');
print T('You must login to do this action');
print &GetCommonFooter();
return;
}
if ($mode eq "add") {
$title = T('Add a page to Interest Page List');
} elsif (&GetParam('mode') eq "remove") {
$title = T('Remove a page from Interest Page List');
} else {
print &GetHeader('', $failMsg, '');
print Ts('Invalid action parameter %s', $mode);
print &GetCommonFooter();
return;
}
$temp = &ValidId($id);
if ($temp ne "") {
print &GetHeader('', $failMsg, '');
print $temp;
print &GetCommonFooter();
return;
}
print &GetHeader('', $title, '');
if ($mode eq "add") {
$UserInterest{$id} = "1";
print Ts('Page %s is added to your Interest Page List', $id);
} else {
delete $UserInterest{$id};
print Ts('Page %s is removed from your Interest Page List', $id);
}
$UserData{'interest'} = join($FS2, %UserInterest);
&SaveUserData();
print "<hr size='1'>";
print Ts('Return to %s' , &GetPageLink($id));
print &GetCommonFooter();
return 1;
}
translations/korean.pl 에 추가
Add to my interest list
관심있는 페이지로 등록
Remove from interest list
관심있는 페이지에서 제거
Fail to access Interest Page List
관심있는 페이지 목록 수정 실패
You must login to do this action
이 명령을 수행하기 위해서는 로그인을 해야 합니다
Add a page to Interest Page List
관심있는 페이지 목록에 추가
Remove a page from Interest Page List
관심있는 페이지 목록에서 제거
Page %s does not exist
%s 페이지가 존재하지 않습니다
Page %s is added to your Interest Page List
%s 페이지를 관심있는 페이지 목록에 추가했습니다
Page %s is removed from your Interest Page List
%s 페이지를 관심있는 페이지 목록에서 제거했습니다
Interesting Page
관심있는 페이지
Notes
앗, 지금 보니까 sub DoInterest 함수의 뒷부분이 누락되어 있더군요. 그리고 이 함수의 중간에 있는 if 구문 한 단락을 삭제했습니다.
Maybe, Page could be removed from your Interest Page List, when you delete the page, too. --JuanmaMP
Here it's. Despite this hack is based on ascendant Usemod (where it saved userfile with numbers 1001.db, 1002.db, and on UsemodKr is saved userfile with names, JuanmaMP.db, and so on. This patch can be adapted here too.
Rationale is, when a page is deleted, then the respective "interest page" is deleted too, on whole users list.
sub DeletePage {
...
my $data;
for ($i= 1001; ; ++$i) {
$fname = &UserDataFilename($i);
($status, $data) = &ReadFile($fname); # (1) see to the end of bucle
%UserData = split(/$FS1/, $data, -1); # (2) see to the end of bucle
last unless scalar %UserData;
if ($UserData{'interest'}) {
%UserInterest = split(/$FS2/, $UserData{'interest'}, -1);
foreach (sort (keys (%UserInterest))) {
if ($page eq $_) {
delete $UserInterest{$page};
print $UserData{username} . '(' . T('Interest') . ')' . '<br>'; # optional
$UserData{'interest'} = join($FS2, %UserInterest);
$data = join($FS1, %UserData);
&WriteStringToFile($userFile, $data);
}
}
}
}
# (1) and (2) yield effect as updating some user-parameters, the next line does updating again true values (without refresh page)
&LoadUserData($UserID);
In turn, as you can observe, it can appear an "edit conflict". An admin user can be trying to modify his/her preferences and actions system (delete and rename $UserData{'interest'}) be on modifying userfiles ... --JuanmaMP
Thank you :-)
위키위키분류