[첫화면으로]UseModWiki소스수정/페이지소스보기

마지막으로 [b]

view action 추가 및 잠긴 페이지의 소스를 볼 수 있게 함

/마우스더블클릭 패치에서 편집 권한이 있을 때만 더블 클릭이 통하게 했던 것을 되돌림
sub GetHtmlHeader {
    ...
            $bodyExtra .= qq(ondblclick="location.href='$ScriptName?action=edit&id=$id'");  # 뒤에 있던 if 문 제거
    ...
}

편집 가이드에서 기존에는 읽기 전용이라고 메시지만 나왔던 것을 링크가 걸리도록 수정
sub GetEditGuide {
    ...
    if (&UserCanEdit($id, 0)) {
        if ($rev ne '') {
            $result .= &GetOldPageLink('edit',   $id, $rev,
                         Ts('Edit revision %s of this page', $rev));
        } else {
            $result .= &GetEditLink($id, T('Edit text of this page'));
        }
    } else {
###############
### replaced by gypark
### view action 추가
#       $result .= T('This page is read-only');
        if ($rev ne '') {
            $result .= &GetOldPageLink('edit',   $id, $rev,
                         Ts('View revision %s of this page', $rev));
        } else {
            $result .= &GetEditLink($id, T('View text of this page'));
        }
###
###############
    }
    $result .= "</DIV>";
    ...
}

DoEdit 함수를 고쳐 준다. 주석문을 참조하여 바뀐 곳을 찾아서 고쳐 줄 것. 중간 중간에 보면 원래의 코드를 if 문으로 둘러싼 부분들이 있다. 앞뒤 괄호가 맞게 추가되는지 잘 살피지 않으면 나중에 에러가 날 수 있으니 주의
sub DoEdit {
    my ($id, $isConflict, $oldTime, $newText, $preview) = @_;
    my ($header, $editRows, $editCols, $userName, $revision, $oldText);
    my ($summary, $isEdit, $pageTime);

###############
### added by gypark
### view action 추가
    my $canEdit = &UserCanEdit($id,1);
###
###############

###############
### commented by gypark
### view action 추가
#   if (!&UserCanEdit($id, 1)) {
#       print &GetHeader("", T('Editing Denied'), "");
#       if (&UserIsBanned()) {
#           print T('Editing not allowed: user, ip, or network is blocked.');
#           print "<p>";
#           print T('Contact the wiki administrator for more information.');
#       } else {
### 수정 불가를 알리는 메세지에, 사이트 제목이 아니라
### 해당 페이지명이 나오도록 수정
#           print Ts('Editing not allowed: %s is read-only.', $SiteName);
#           print Ts('Editing not allowed: %s is read-only.', $id);
#       }
#       print &GetCommonFooter();
#       return;
#   }
###
###############

    # Consider sending a new user-ID cookie if user does not have one
    &OpenPage($id);
    &OpenDefaultText();
    $pageTime = $Section{'ts'};
    $header = Ts('Editing %s', $id);
###############
### added by gypark
### view action 추가
    $header = Ts('Viewing %s', $id) if (!$canEdit);
###
###############
    # Old revision handling
    $revision = &GetParam('revision', '');
    $revision =~ s/\D//g;  # Remove non-numeric chars
    if ($revision ne '') {
        &OpenKeptRevisions('text_default');
        if (!defined($KeptRevisions{$revision})) {
            $revision = '';
            # Later look for better solution, like error message?
        } else {
            &OpenKeptRevision($revision);
            $header = Ts('Editing revision %s of', $revision) . " $id";
###############
### added by gypark
### view action 추가
            $header = Ts('Viewing revision %s of', $revision) . " $id" if (!$canEdit);
###
###############
        }
    }
    $oldText = $Text{'text'};
    if ($preview && !$isConflict) {
        $oldText = $newText;
    }
    $editRows = &GetParam("editrows", 20);
    $editCols = &GetParam("editcols", 65);
    print &GetHeader('', &QuoteHtml($header), '');
###############
### added by gypark
### view action 추가
    if (!$canEdit) {
        if (&UserIsBanned()) {
            print T('Editing not allowed: user, ip, or network is blocked.');
            print "<p>";
            print T('Contact the wiki administrator for more information.');
        } else {
            print Ts('Editing not allowed: %s is read-only.', $id);
        }
        print "<br>\n";
    }
###
###############
###############
### replaced by gypark
### view action 추가
#   if ($revision ne '') {
    if ($canEdit && ($revision ne '')) {
###
###############
        print "\n<b>"
                . Ts('Editing old revision %s.', $revision) . "  "
        . T('Saving this page will replace the latest revision with this text.')
                . '</b><br>'
    }
###############
### replaced by gypark
### view action 추가
#   if ($isConflict) {
    if ($canEdit && $isConflict) {
###
###############
        $editRows -= 10  if ($editRows > 19);
        print "\n<H1>" . T('Edit Conflict!') . "</H1>\n";
    ...
    var w = window.open(s, "Help", "width=500,height=400, resizable=1, scrollbars=1");
    w.focus();
}
//-->
</script>
|;

###############
### added by gypark
### view action 추가
    if ($canEdit) {
###
###############
        print T('Editing Help :') . "&nbsp;";
###############
### replaced by gypark
### 도움말 별도의 화일로 분리

#   print &HelpLink(1, T('Make Page')) . " | ";
#   ...
#   print &HelpLink(5, T('Emoticon')) . "<br>\n";
        use vars qw(@HelpItem);
        require mod_edithelp;

        foreach (0 .. $#HelpItem) {
            print &HelpLink($_, T("$HelpItem[$_]"));
            print " | " if ($_ ne $#HelpItem);
        }
        print "<br>\n";
###
###############
###############
### added by gypark
### view action 추가
    }
###
###############

###############
### replaced by gypark
### 편집모드에 들어갔을때 포커스가 편집창에 있도록 한다
#   print &GetFormStart();
    print &GetFormStart("form_edit");
###
###############
###############
### added by gypark
### view action 추가
    if ($canEdit) {
###
###############
        print &GetHiddenValue("title", $id), "\n",
                    &GetHiddenValue("oldtime", $pageTime), "\n",
                    &GetHiddenValue("oldconflict", $isConflict), "\n";
        if ($revision ne "") {
            print &GetHiddenValue("revision", $revision), "\n";
        }
        print &GetTextArea('text', $oldText, $editRows, $editCols);
        $summary = &GetParam("summary", "*");
    ...
                    &GetTextArea('newtext', $newText, $editRows, $editCols),
                    "<p>\n";
        }
### added by gypark
### view action 추가
    } else {
        print $q->textarea(-class=>'view', -accesskey=>'i', -name=>'text',
                -default=>$oldText, -rows=>$editRows, -columns=>$editCols,
                -override=>1, -style=>'width:100%', -wrap=>'virtual',
                -readonly=>'true');
    }
###
###############
    print "<hr class='footer'>\n";
    if ($preview) {
     ...
    print &GetMinimumFooter();
}

Notes

그냥 DoEdit 함수를 수정해서, 수정권한이 없으면 DoEdit 내에서 다시 DoView 를 호출하게 한다면 기존에 GetEditLink 가 들어간 부분들을 일일이 GetEditLink 또는 GetViewLink 로 분기하도록 고치지 않아도 되었을 것이다. 그렇지만 수정 권한이 없더라도 edit 로 링크가 걸리게 하고 싶은 경우도 있을 것이라 생각했고, 결정적으로 수정 권한이 있는 경우와 없는 경우에 각각 링크가 걸리는 안내문 자체가 달라져야 하기 때문에 어쨌거나 if 문이 추가되어야 했다. 뭐... 그렇다는 얘기. 여전히 DoEdit 또는 하다못해 GetEditLink 자체를 수정해서 권한 여부에 따라 DoEdit 또는 DoView 를 자동으로 결정하게 하고 싶은 유혹이 강하다.. 어느게 좋으려나...
-- Raymundo 2003-3-6 12:37 am

소스용량을 생각한다면 그냥 권한여부에 따라서 버튼만 막는게 좋을거 같네요. 지금 BCN에서 디지털맨이라는 영화 상영중 --v
-- Bab2 2003-3-6 1:47 am

^^; 그 생각도 했었는데... DoEdit 가 생긴게 복잡해 보여서 건드리기 싫었고, action=edit 를 했을 때는 명확히 거부된다는 것을 보이는 게 더 모양새도 좋아 보이더라고요. 용량은 뭐... 도움말하고 환경변수 초기화 루틴을 빼면서 10KB 정도를 벌고 이걸로 3.7KB 정도 늘었으니 뭐.. ^_^ 그리고 어쨌거나 링크를 거는 시점에서 텍스트가 바뀌어야 하니 if 문도 들어가야 되겠고요. (아니면 말씀하신 것처럼 구현한 후에 링크 자체를 "수정 또는 소스 보기" 라고 이름을 붙일까요? 으음..
-- Raymundo 2003-3-6 8:10 am

음... 아무래도 말씀하신 것처럼 하는 게 낫겠습니다. 짧게 고치고 끝낼 수 있는 방법을 놔두고 굳이 이렇게 할 필요가 없을 것 같네요. 다시 고치죠 뭐...
-- Raymundo 2003-3-6 8:40 am

편집불가메세지는 일단 소스보기로 대체하고 편집화면에서 편집불가임을 알리는 메세지를 넣어주는게 좀 더 친절해 보일듯 싶네요. 개인적으로 WikiX에서 처음 소스보기 눌러보고 느낀 것이었습니다.
-- Bab2 2003-3-6 1:42 pm

위의 내용대로 소스를 재수정했습니다. action=edit 했을 때 편집권한이 없다면 기존에는 편집 불가 메시지가 출력되고 끝났는데, 여기서는 페이지 소스를 read-only 로 볼 수 있게 했습니다.
-- Raymundo 2003-3-6 3:28 pm

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