[첫화면으로]UseModWiki소스수정/관심있는페이지

마지막으로 [b]

관심있는 페이지를 지정하는 기능 추가

wiki.pl 수정

###############
### 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":"&nbsp;&nbsp;")
            . "</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;

}

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 구문 한 단락을 삭제했습니다.
-- Raymundo 2003-3-30 9:59 am

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 :-)
-- Raymundo 2012-8-6 5:45 pm


위키위키분류

마지막 편집일: 2012-8-9 10:11 am (변경사항 [d])
1864 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기