############### ### added by gypark ### 패치를 위해 추가된 내부 전역 변수 use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts $ViewCount $AnchoredFreeLinkPattern %UserInterest); # %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>'; ############### ### added by gypark ### page count $result .= Ts('%s hit' . (($ViewCount > 1)?'s':'') , $ViewCount)." | " if ($ViewCount ne ""); ### ############### ############### ### added by gypark ### 관심 페이지 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); # -1 keeps trailing null fields ############### ### added by gypark ### 관심 페이지 %UserInterest = split(/$FS2/, $UserData{'interest'}, -1); ### ############### }
sub DoOtherRequest { ... ### oekaki } elsif ($action eq "oekaki") { &DoOekaki(); ### 관심 페이지 } elsif ($action eq "interest") { &DoInterest(); ### UploadedFiles 매크로 } 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; }
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 관심있는 페이지
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 :-)