[첫화면으로]UseModWiki소스수정/북마크

마지막으로 [b]

최근변경내역 화면에 북마크 기능 추가

...
use vars qw(%Page %Section %Text %InterSite %SaveUrl %SaveNumUrl
    %KeptRevisions %UserCookie %SetCookie %UserData %IndexHash %Translate
    %LinkIndex $InterSiteInit $SaveUrlIndex $SaveNumUrlIndex $MainPage
    $OpenPageName @KeptList @IndexList $IndexInit
    $q $Now $UserID $TimeZoneOffset $ScriptName $BrowseCode $OtherCode);

###############
### added by gypark
### 패치를 위해 추가된 내부 전역 변수
use vars qw(%RevisionTs);
###
###############

# == Configuration =====================================================
...

sub BrowsePage {
    ...
    if ($UseDiff && $showDiff) {
        $diffRevision = $goodRevision;
        $diffRevision = &GetParam('diffrevision', $diffRevision);
        # Later try to avoid the following keep-loading if possible?
        &OpenKeptRevisions('text_default')  if (!$openKept);
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
        if ($showDiff == 5) {
            if (&GetParam('username',"") ne "") {
                $diffRevision = $Page{'revision'} - 1;
                my $userBookmark = &GetParam('bookmark',-1);
                while (($diffRevision > 1) &&
                    (defined($RevisionTs{$diffRevision})) &&
                    ($RevisionTs{$diffRevision} > $userBookmark)) {
                    $diffRevision--;
                }
            }
            $showDiff = &GetParam("defaultdiff", 1);
        }
###
###############
        $fullHtml .= &GetDiffHTML($showDiff, $id, $diffRevision, "$revision", $newText);
        $fullHtml .= "<hr>\n";
    }
    ...
}

sub DoRc {
    ...
            # Following comment line is for translation helper script
            # Ts('%s days', '');
    }

###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
#   print "<br>" . &ScriptLink("action=rc&from=$lastTs",
#       T('List new changes starting from'));
#   print " " . &TimeToText($lastTs) . "<br>\n";

    if (&GetParam("username") eq "") {
        print "<br>" . &ScriptLink("action=rc&from=$lastTs",
            T('List new changes starting from'));
        print " " . &TimeToText($lastTs) . "<br>\n";
    } else {
        my $bookmark = &GetParam('bookmark',-1);
        print "<br>" . &ScriptLink("action=bookmark&time=$Now",
                T('Update my bookmark timestamp'));
        print " (".
            Ts('currently set to %s', &TimeToText($bookmark)).
            ")<br>\n";
    }
###
###############

    # Later consider a binary search?
    $i = 0;
    ...
}

sub GetRcHtml {
    ...
    $showedit = &GetParam("rcshowedit", $ShowEdits);
    $showedit = &GetParam("showedit", $showedit);
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
    my $bookmark;
    my $bookmarkuser = &GetParam('username', "");
    my ($rcnew, $rcupdated, $rcdiff, $rcdeleted) = (
            "<img style='border:0' src='icons/rc-new.gif'>",
            "<img style='border:0' src='icons/rc-updated.gif'>",
            "<img style='border:0' src='icons/rc-diff.gif'>",
            "<img style='border:0' src='icons/rc-deleted.gif'>"
    );
    $bookmark = &GetParam('bookmark',-1);
###
###############

    if ($showedit != 1) {
    ...
    foreach $rcline (@outrc) {
        ($ts, $pagename) = split(/$FS3/, $rcline);
###############
### replaced by gypark
### 최근변경내역에 북마크 기능 도입
#       $pagecount{$pagename}++;
        $pagecount{$pagename}++ if ($ts > $bookmark);
###
###############
        $changetime{$pagename} = $ts;
    }
    ...
        if ($date ne &CalcDay($ts)) {
            $date = &CalcDay($ts);
            if ($inlist) {
                $html .= "</ul>\n";
                $inlist = 0;
            }
###############
### replaced by gypark
### 최근변경내역에 북마크 기능 도입
#           $html .= "<p><strong>" . $date . "</strong><p>\n";
            if ($bookmarkuser eq "") {
                $html .= "<p><strong>" . $date . "</strong><p>\n";
            } else {
                $html .= "<p><strong>" . $date . "</strong> "." ["
                    .&ScriptLink("action=bookmark&time=$ts",T('set bookmark'))
                    ."]<p>\n";
            }
###
###############
        }
    ...
        $link = "";
        if ($UseDiff && &GetParam("diffrclink", 1)) {
###############
### replaced by gypark
### 최근변경내역에 북마크 기능 도입
#           $link .= &ScriptLinkDiff(4, $pagename, $tDiff, "") . "  ";
            if (!(-f &GetPageFile($pagename))) {
                $link .= &GetHistoryLink($pagename, $rcdeleted);
            } elsif (($bookmarkuser eq "") || ($ts <= $bookmark)) {
                $link .= &ScriptLinkDiff(4, $pagename, $rcdiff, "") . "  ";
            } elsif ($extra{'tscreate'} > $bookmark) {
                $link .= $rcnew . "  ";
            } else {
                $link .= &ScriptLinkDiffRevision(5, $pagename, "", $rcupdated) . "  ";
            }
###
###############

        }
        $link .= &GetPageLink($pagename);
        $html .= "<li>$link ";
    ...
}

sub OpenKeptRevisions {
    my ($name) = @_;  # Name of section
    my ($fname, $data, %tempSection);

    %KeptRevisions = ();
    &OpenKeptList();
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
    %RevisionTs = ();
###
###############
    foreach (@KeptList) {
        %tempSection = split(/$FS2/, $_, -1);
        next  if ($tempSection{'name'} ne $name);
        $KeptRevisions{$tempSection{'revision'}} = $_;
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
        $RevisionTs{$tempSection{'revision'}} = $tempSection{'ts'};
###
###############
    }
}

sub DoOtherRequest {
    ...
        } elsif ($action eq "version") {
            &DoShowVersion();
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
        } elsif ($action eq "bookmark") {
            &DoBookmark();
###
###############
        } else {
            # Later improve error reporting
    ...
}

sub WriteRcLog {
    ...
    $extra{'id'} = $UserID  if ($UserID ne "");
    $extra{'name'} = $name  if ($name ne "");
###############
### added by gypark
### 최근변경내역에 북마크 기능 도입
    $extra{'tscreate'} = $Page{'tscreate'};
###
###############

    $extraTemp = join($FS2, %extra);
    ...
}

###############
### 함수를 통채로 추가
### 최근변경내역에 북마크 기능 도입
sub DoBookmark {
    if (&GetParam('username') eq "") {      # 로그인하지 않은 경우
        &BrowsePage(T($RCName));            # 그냥 최근 변경 내역으로 이동
        return 1;
    }
    if (&GetParam('time') ne "") {
        $UserData{'bookmark'} = &GetParam('time');
    } else {
        $UserData{'bookmark'} = $Now;
    }
    &SaveUserData();
    &BrowsePage(T($RCName));
    return 1;
}
###
###############
&DoWikiRequest()  if ($RunCGI && ($_ ne 'nocgi'));   # Do everything.
1; # In case we are loaded from elsewhere
# == End of UseModWiki script. ===========================================

추가 업데이트 내역

ext1.54a - URL 에서 diff=5 를 인자로 주었을 때, 로그인한 사용자의 경우만 북마크 처리를 하고 로그인하지 않은 경우는 시스템 값(major, minor, author 중 하나)을 사용하도록 고쳤습니다. 애초에는 로그인하지 않았다면 diff=5 라는 링크가 나올 일이 없기 때문에 클릭할 수도 없었지만, /RSS제공을 통해 RSS 리더로 볼 때 diff=5 가 나오기 때문에...
-- Raymundo 2003-12-11 4:41 pm

Notes

북마크 갱신 링크를 누르면 '최근변경내역' 이 아니라 'RecentChanges' 로 이동하는 문제(?)가 있는데.. 이 홈페이지에서는 환경변수 RCName 의 값이 RecentChanges 로 되어 있어서 그런 문제가 발생합니다만.. UseModWiki번역화일을 사용하는 이상 여기도 번역을 하는 게 나을 듯 하네요. DoBookmark 함수에서 두 군데 수정했습니다. 해 줘도 되고 말아도 되는 수정입니다. :-)
&BrowsePage(T($RCName));   # $RCName 을 T($RCName) 으로 변경. DoBookmark 함수 내에 두 곳을 다 바꿔준다

펄에서 1970년대 시간이 어떻게 표시되나요? 처음 가입해서 북마크를 한번도 안찍은 사람들한테는 모든 글이 new로 보여서 이걸 바꿨음 좋겠는데요.
-- Bab2 2003-3-21 9:45 pm

중간에 보면 사용자의 북마크를 사용자 데이타에 설정되어 있지 않으면 기본값을 -1 로 한 것을 볼 수가 있을 겁니다. timestamp 값이 0 일 때가 1970년 1월 1일 9:00:00 이거든요.
-- Raymundo 2003-3-21 10:25 pm

sub GetRcHtml {
....
        } else {
                my $bookmark = &GetParam('bookmark',-1);
                print "<br>" . &ScriptLink("action=bookmark&time=$Now",
                T('Update my bookmark timestamp'));
### 수정
                if ($bookmark == -1) {
                        print " (" . T('Not set bookmark yet') . ")<br>\n";
                } else {
                        print " (".
                        Ts('currently set to %s', &TimeToText($bookmark)).
                        ")<br>\n";
                }
### 수정
        }
....
sub GetRcHtml {
....
            if (!(-f &GetPageFile($pagename))) {
                $link .= &GetHistoryLink($pagename, $rcdeleted);
### 수정
            } elsif (($bookmarkuser eq "") || ($ts <= $bookmark) || ($bookmark == -1)) {
### 수정
                $link .= &ScriptLinkDiff(4, $pagename, $rcdiff, "") . "  ";
            } elsif ($extra{'tscreate'} > $bookmark) {
                $link .= $rcnew . "  ";
....
이렇게 하려고 하는데 괜찮을라나 모르겠네요? 별 문젠 없겠죠?
-- Bab2 2003-3-21 11:02 pm

뭐 별다른 문제가 될 건덕지가 없는 곳이니까요. :-) 로그인을 하고 북마크를 한번도 지정하지 않은경우 new 대신에 diff 가 보이게 하려는 것 같군요. 처음에 이 패치 만들 때 그렇게 할까 하다가, 노스모크가 아마 처음 아이디 만들면 new 로 나왔던 걸로 기억이 나서요. 그런데, 첫번째 박스에서 GetParam('bookmark',-1) 이기 때문에, 뒤에 if 문에서 비교를 == 0 으로 하면 if 문에 걸리지 않습니다. GetParam 에서 0으로 하던가, if 문에서 -1 과 비교하던가 해야겠죠. (두 가지가 동일한 동작일지 아닐지는 생각 좀 해봐야겠지만)
-- Raymundo 2003-3-21 11:49 pm

그랬군요. 두개다 -1로 수정했습니다.
-- Bab2 2003-3-22 12:08 am

소스수정의 하위페이지에서 Notes 란이 아닌 윗부분을 다른 분이 고치시면 곤란합니다. 저 /UL 은 어차피 지금은 /최근변경내역테이블출력을 적용하면서 주석 처리가 된 부분이긴 합니다만... :-)
-- Raymundo 2003-3-22 1:37 am
억~ 노트 위쪽은 안건드렸어염.. ㅡ.ㅡa 어라라? /UL은 본적도 없는데.. 우에에에~ o.O? 자판 치다가 뭘 잘못한 모양이네요. ㅜㅡ
-- Bab2 2003-3-22 3:01 am


위키위키분류

마지막 편집일: 2007-1-8 12:19 pm (변경사항 [d])
1412 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기