### 패치를 위해 추가된 내부 전역 변수 use vars qw(%RevisionTs $FS_lt $FS_gt $StartTime $Sec_Revision $Sec_Ts $ViewCount $AnchoredFreeLinkPattern %UserInterest %HiddenPage $pageid); ###
sub BrowsePage { my ($id) = @_; my ($fullHtml, $oldId, $allDiff, $showDiff, $openKept); my ($revision, $goodRevision, $diffRevision, $newText); ### comments from Jof $pageid = $id; ### ...
sub MacroSubst { ... ### <comments(숫자)> $txt =~ s/(\&__LT__;comments\(([^,]+),([-+]?\d+)\)&__GT__;)/&MacroComments($1,$2,$3)/gei; ### <longcomments(숫자)> $txt =~ s/(\&__LT__;longcomments\(([^,]+),([-+]?\d+)\)&__GT__;)/&MacroComments($1,$2,$3,1)/gei; ### ############### return $txt; }
함수 통채로 추가
sub MacroComments { my ($itself,$id,$up,$long) = @_; my $idvalue; my $temp; $temp = $id; $temp =~ s/,$//; $temp = &RemoveLink($temp); $temp = &FreeToNormal($temp); if (&ValidId($temp) ne "") { return $itself; } $id = "$temp"; if (($UserID ne "113") && ($UserID ne "112")) { $idvalue = "[[$UserID]]"; } my ($hidden_long, $readonly_true, $readonly_style, $readonly_msg); my ($name_field, $comment_field); my $submit_button = $q->submit(-name=>"Submit",-value=>T("Submit")); if ($long) { $hidden_long = &GetHiddenValue("long","1") . "<br>"; } if ((!&UserCanEdit($id)) && (abs($up) < 100)) { # 에디트 불가 $readonly_true = "true"; $readonly_style = "background-color: #f0f0f0;"; $readonly_msg = T('Comment is not allowed'); $submit_button = ""; $name_field = $q->textfield(-name=>"name", -class=>"comments", -size=>"10", -maxlength=>"80", -readonly=>"$readonly_true", -style=>"$readonly_style", -default=>"$idvalue"); if ($long) { # longcomments $comment_field = $q->textarea(-name=>"comment", -class=>"comments", -rows=>"10", -cols=>"80", -readonly=>"$readonly_true", -style=>"$readonly_style", -default=>"$readonly_msg"); } else { # comments $comment_field = $q->textfield(-name=>"comment", -class=>"comments", -size=>"60", -readonly=>"$readonly_true", -style=>"$readonly_style", -default=>"$readonly_msg"); } } else { # 에디트 가능 $name_field = $q->textfield(-name=>"name", -class=>"comments", -size=>"10", -maxlength=>"80", -default=>"$idvalue"); if ($long) { # longcomments $comment_field = $q->textarea(-name=>"comment", -class=>"comments", -rows=>"10", -cols=>"80" -default=>""); } else { # comments $comment_field = $q->textfield(-name=>"comment", -class=>"comments", -size=>"60", -default=>""); } } return $q->startform(-name=>"comments",-method=>"POST",-action=>"$ScriptName") . &GetHiddenValue("action","comments") . &GetHiddenValue("id","$id") . &GetHiddenValue("pageid","$pageid") . &GetHiddenValue("up","$up") . T('Name') . ": " . $name_field . " " . T('Comment') . ": " . $hidden_long . $comment_field . " " . $submit_button . $q->endform; }
sub ProcessPostMacro { # $id 가 추가됨 my ($string, $id) = @_; ... ### comments from Jof if (length($id) != 0) { $string =~ s/(^|\n)<((long)?comments)\(([-+]?\d+)\)>([\r\f]*\n)/$1<$2($id,$4)>$5/gim; } ### return $string; }
sub DoOtherRequest { ... &DoPageHide(); ### comment from Jof } elsif (($action eq "comments") || ($action eq "longcomments")) { &DoComments($id) if &ValidIdOrDie($id); ### ############### } else { # Later improve error reporting ...
DoPost 함수를 새로 작성
sub DoPost { my $string = &GetParam("text", undef); my $id = &GetParam("title", ""); my $summary = &GetParam("summary", ""); my $oldtime = &GetParam("oldtime", ""); my $oldconflict = &GetParam("oldconflict", ""); DoPostMain($string, $id, $summary, $oldtime, $oldconflict, 0); return; }
기존의 DoPost 함수는 이름을 DoPostMain 으로 변경하고 아래와 같이 수정
# sub DoPost { # my ($editDiff, $old, $newAuthor, $pgtime, $oldrev, $preview, $user); # my $string = &GetParam("text", undef); # my $id = &GetParam("title", ""); # my $summary = &GetParam("summary", ""); # my $oldtime = &GetParam("oldtime", ""); # my $oldconflict = &GetParam("oldconflict", ""); # my $isEdit = 0; # my $editTime = $Now; # my $authorAddr = $ENV{REMOTE_ADDR}; sub DoPostMain { my ($string, $id, $summary, $oldtime, $oldconflict, $isEdit, $rebrowseid) = @_; my ($editDiff, $old, $newAuthor, $pgtime, $oldrev, $preview, $user); my $editTime = $Now; my $authorAddr = $ENV{REMOTE_ADDR}; ### ############### ############### ### replaced by gypark ### comments 기능 # if (!&UserCanEdit($id, 1)) { if (($rebrowseid eq "") && (!&UserCanEdit($id, 1))) { ### ############### # This is an internal interface--we don't need to explain ... ### <mysign([[Raymundo]],2003-9-6 8:02 am)> 등 글작성 직후 수행할 매크로 ### comments 구현을 위해 $id 추가, from Jof $string = &ProcessPostMacro($string, $id); ### ... &ReleaseLock(); ############### ### added by gypark ### comments from Jof if ($rebrowseid ne "") { $id = $rebrowseid; } ### ############### &ReBrowsePage($id, "", 1); }
함수 통채로 추가 ==> /액션모듈화가 되면서 아래 코드는 action/comments.pl 로 옮겨짐.
sub DoComments { my ($id) = @_; my $pageid = &GetParam("pageid", ""); my $name = &GetParam("name", ""); my $newcomments = &GetParam("comment", ""); my $up = &GetParam("up", ""); my ($timestamp) = CalcDay($Now) . " " . CalcTime($Now); my $string; my $long = &GetParam("long", ""); if ($newcomments =~ /^\s*$/) { &ReBrowsePage($pageid, "", 0); return; } $name = &GetRemoteHost(0) if ($name eq ""); $name =~ s/,/./g; $newcomments = &QuoteHtml($newcomments); &OpenPage($id); &OpenDefaultText(); $string = $Text{'text'}; if ($long) { $newcomments =~ s/^\s*//g; $newcomments =~ s/\s*$//g; $newcomments =~ s/(\n)\s*(\r?\n)/$1$2/g; $newcomments =~ s/(\r?\n)/ \\\\$1/g; if ($up > 0) { $string =~ s/(\<longcomments\($id,$up\)\>)/\n$newcomments <mysign($name,$timestamp)>\n$1/; } else { $string =~ s/(\<longcomments\($id,$up\)\>)/$1\n$newcomments <mysign($name,$timestamp)>\n/; } } else { $newcomments =~ s/(----+)/<nowiki>$1<\/nowiki>/g; if ($up > 0) { $string =~ s/\<comments\($id,$up\)\>/*''' $name ''' : $newcomments - <small>$timestamp<\/small>\n\<comments\($id,$up\)\>/; } else { $string =~ s/\<comments\($id,$up\)\>/\<comments\($id,$up\)\>\n*''' $name ''' : $newcomments - <small>$timestamp<\/small>/; } } DoPostMain($string, $id, "*", $Section{'ts'}, 0, 0, $pageid); return; }
Name 이름 Comment 내용 Submit 달기 Comment is not allowed 답글 달기가 허용되지 않습니다
ext-1.46d 에서 DoComments 함수에 한 줄 추가되었습니다. 코멘트 안에서 부등호를 자동으로 lt; 와 gt; 로 바꾸어서 html 태그나 매크로 등을 사용하지 못하게 하였습니다.
ext1.47 - longcomments 매크로가 추가되었습니다.
ext1.47a - longcomments 의 치환방식을 일단 결정지어서 반영하고, MacroComments 함수에서 직접 CGI 태그들을 출력하게 했더니만 위키에서 페이지 수정하기를 할 때 엉망이 되는 문제가 있어서.. Perl 의 CGI 모듈의 함수들을 사용하도록 수정했습니다.
ext1.48b - comments 에서 이름과 내용을 구분하기 힘든 것 같아 이름 부분 앞뒤에 ''' 를 붙여서 굵게 표시되도록 수정했습니다.
ext1.48c - 수정되었습니다. 매크로 앞뒤에 다른 문자가 없어야 한다는 제한이 추가되었습니다.
ext1.60a - /변경사항요약 패치가 되었기 때문에 굳이 직전 수정의 summary 를 이어받을 필요가 없다고 생각되어, summary 를 달지 않고 페이지를 수정하는 것처럼 동작하도록 고쳤습니다.
ext1.66 - /Thread매크로와 관련해서 이쪽의 함수들이 좀 바뀌었습니다. /Thread매크로 페이지에서 확인하세요.
ext1.82a - /액션모듈화와 관련하여, DoComments 함수를 별도의 파일로 분리함
ext1.89 - /Comments와Thread매크로개선에 의해 바뀌었습니다. /Comments와Thread매크로개선에서 확인하세요.
구현 및 소스 다듬기는 다 되었는데... longcomments 에 입력한 텍스트를 어떤 방식으로 페이지에 합칠 것인가 하는 문제가 여전히 남아 있습니다. comments 의 경우는 텍스트 앞에 "* " 을 붙여서 list 형태로 만드는 것은 다 아실테고... 현재 제가 생각한 안은 다음과 같습니다.
셋 다 장단점이 뚜렷해서 결정을 못하겠습니다. 사실 comments 매크로의 가장 큰 취지는 "페이지를 직접 수정해서 글을 쓰는 것에 부담을 느끼는 사람들을 위한 도구 제공"이라고 생각하는데, 그렇게 따진다면 2번이나 3번이 낫겠고.. 위키 사용자가 좀 더 편하게 페이지를 수정할 수 있게 한다면 1번이 낫겠지요. 내일(토요일) 오전쯤에 결정할 생각입니다. 시간이 얼마 남지 않았는데, 이걸 보시면 의견 좀 내어주세요.
크윽... pre 태그 또는 nowiki 태그를 앞뒤로 붙이는 것은 대괄호 링크마저 금지되니 포기. 스페이스를 라인 앞에 두는 것은 매 라인마다 pre 태그가 생기니 페이지 직접 수정시 너무 지저분해서 포기. 그냥 각 라인 끝에 "\\" 만 붙여서 넣어주기로 했습니다. 제일 무난한 것 같네요. 나중에라도 더 좋은 의견이 있으면 알려 주세요
if ($long) { # longcomments $comment_field = $q->textarea(-name=>"comment", -class=>"comments", -rows=>"10", # long comment 에서의 창 높이 -cols=>"80", # 창 폭 -readonly=>"$readonly_true", -style=>"$readonly_style", -default=>"$readonly_msg"); } else { # comments $comment_field = $q->textfield(-name=>"comment", -class=>"comments", -size=>"60", # comment 의 폭 -readonly=>"$readonly_true", -style=>"$readonly_style", -default=>"$readonly_msg"); }
네. 항상 그렇듯이 그럭 저럭 잘 지내고 있어요.
그런데 큰 일 났습니다.
버전을 올려보려고 잘 모르는 명령어를 쓰다가 위키 디렉토리를 옮겼고 그러던 중 그 파일을 일부 지웠는데 지금 운영하는 위키 폴더가 옮겨 졌고 작업 전에 백업한다고 받아 놓기는 했는데 받다가 실패여서 그게 또 완전한게 아닌 것 같아요 -_-;;;; 시간 있을 때 도와 주실 수 있는지요