-###############################################################################\r
-# \r
-# ¥Ú¡¼¥¸¤òÊÔ½¸¤¹¤ë¥×¥é¥°¥¤¥ó\r
-# \r
-###############################################################################\r
-package plugin::core::EditPage;\r
-use strict;\r
-#==============================================================================\r
-# ¥³¥ó¥¹¥È¥é¥¯¥¿\r
-#==============================================================================\r
-sub new {\r
- my $class = shift;\r
- my $self = {};\r
- return bless $self,$class;\r
-}\r
-\r
-#==============================================================================\r
-# ¥¢¥¯¥·¥ç¥ó¤Î¼Â¹Ô\r
-#==============================================================================\r
-sub do_action {\r
- my $self = shift;\r
- my $wiki = shift;\r
- my $cgi = $wiki->get_CGI;\r
- \r
- my $pagename = $cgi->param("page");\r
- my $format = $wiki->get_edit_format();\r
- my $content = $cgi->param("content");\r
- my $sage = $cgi->param("sage");\r
- my $template = $cgi->param("template");\r
- my $artno = $cgi->param("artno");\r
- my $time = $wiki->get_last_modified($pagename);\r
- \r
- my $buf = "";\r
- my $login = $wiki->get_login_info();\r
-\r
- if($pagename eq ""){\r
- return $wiki->error("¥Ú¡¼¥¸¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");\r
- }\r
- if($pagename =~ /([\|\[\]])|^:|([^:]:[^:])/){\r
- return $wiki->error("¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£");\r
- }\r
- if(!$wiki->can_modify_page($pagename)){\r
- return $wiki->error("¥Ú¡¼¥¸¤ÎÊÔ½¸¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");\r
- }\r
- \r
- #--------------------------------------------------------------------------\r
- # Êݸ½èÍý\r
- if($cgi->param("save") ne ""){\r
- if($wiki->page_exists($pagename)){\r
- if($cgi->param("lastmodified") != $time){\r
- return $wiki->error("¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");\r
- }\r
- }\r
- #my $save_content = $content;\r
- my $mode = $wiki->get_edit_format();\r
- my $save_content = $wiki->convert_to_fswiki($content,$mode);\r
-\r
- # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç\r
- if($artno ne ""){\r
- $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki);\r
- }\r
- # FrontPage¤Ïºï½üÉÔ²Ä\r
- if($pagename eq $wiki->config("frontpage") && $save_content eq ""){\r
- $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£</b>\n";\r
-\r
- # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ\r
- } else {\r
- $wiki->save_page($pagename,$save_content,$sage);\r
- \r
- if($content ne ""){\r
- $wiki->redirect($pagename);\r
- } else {\r
- if($artno eq ""){\r
- $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");\r
- return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";\r
- } else {\r
- $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");\r
- return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";\r
- }\r
- }\r
- }\r
- #--------------------------------------------------------------------------\r
- # ¥×¥ì¥Ó¥å¡¼½èÍý\r
- } elsif($cgi->param("preview") ne ""){\r
- $time = $cgi->param("lastmodified");\r
- $buf = "°Ê²¼¤Î¥×¥ì¥Ó¥å¡¼¤ò³Îǧ¤·¤Æ¤è¤í¤·¤±¤ì¤Ð¡ÖÊݸ¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£<br>";\r
- if($content eq ""){\r
- if($pagename eq $wiki->config("frontpage") && $artno eq ""){\r
- $buf = $buf."<b>¡Ê".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£¡Ë</b>";\r
- } else {\r
- if($artno eq ""){\r
- $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ú¡¼¥¸¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";\r
- } else {\r
- $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ñ¡¼¥È¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";\r
- }\r
- }\r
- }\r
- $content = $wiki->convert_to_fswiki($content,$format);\r
- $buf = $buf."<br>".$wiki->process_wiki($content);\r
-\r
- } elsif($wiki->page_exists($pagename)) {\r
- #¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç\r
- if($artno eq ""){\r
- $content = $wiki->get_page($pagename);\r
- } else {\r
- $content = &read_by_part($wiki->get_page($pagename),$artno);\r
- }\r
- } elsif($template ne ""){\r
- #¥Æ¥ó¥×¥ì¡¼¥È¤ò»ØÄꤵ¤ì¤¿¾ì¹ç\r
- $content = $wiki->get_page($template);\r
- }\r
- \r
- #--------------------------------------------------------------------------\r
- # ÆþÎÏ¥Õ¥©¡¼¥à\r
- $wiki->set_title($pagename."¤ÎÊÔ½¸",1);\r
-\r
- my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/editform.tmpl",\r
- die_on_bad_params => 0);\r
-\r
- $tmpl->param({SCRIPT_NAME => $wiki->create_url(),\r
- PAGE_NAME => $pagename,\r
- CONTENT => $wiki->convert_from_fswiki($content,$format),\r
- LAST_MODIFIED => $time,\r
- ACTION => 'EDIT',\r
- EXISTS_PAGE => $wiki->page_exists($pagename),\r
- SAGE => $sage});\r
- \r
- if($artno ne ""){\r
- $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno',VALUE=>$artno}]);\r
- }\r
-\r
- $buf .= $tmpl->output();\r
-\r
- # ¥×¥é¥°¥¤¥ó¤òÁÞÆþ\r
- $buf .= $wiki->get_editform_plugin();\r
- \r
- return $buf;\r
-}\r
-\r
-#==============================================================================\r
-# ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç¤ÎÊÔ½¸Éôʬ¤Î¼è¤ê½Ð¤·\r
-#==============================================================================\r
-sub read_by_part {\r
- my $page = shift;\r
- my $num = shift;\r
- my $count = 0;\r
- my $buf = "";\r
- my $level = 0;\r
- my $flag = 0;\r
- foreach my $line (split(/\n/,$page)){\r
- if($line=~/^(!{1,3})/){\r
- if($flag==1 && $level<=length($1)){\r
- last;\r
- }\r
- if($count==$num){\r
- $flag = 1;\r
- $level = length($1);\r
- }\r
- $count++;\r
- }\r
- if($flag==1){\r
- $buf .= $line."\n";\r
- }\r
- }\r
- return $buf;\r
-}\r
-\r
-#==============================================================================\r
-# ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç¤ÎÊݸÍÑ¥½¡¼¥¹¤ÎºîÀ®\r
-#==============================================================================\r
-sub make_save_source {\r
- my $org = shift;\r
- my $edit = shift;\r
- my $num = shift;\r
- my $wiki = shift;\r
- my $count = 0;\r
- my $buf = "";\r
- my $level = "";\r
- my $flag = "";\r
- foreach my $line (split(/\n/,$org)){\r
- if($line=~/^(!{1,3})/){\r
- if($flag==1 && $level<=length($1)){\r
- $flag = 0;\r
- }\r
- if($count==$num){\r
- $flag = 1;\r
- $level = length($1);\r
- $buf .= $edit;\r
- # ºÇ¸å¤¬²þ¹Ô¤Ç¤Ê¤¤¾ì¹ç¤À¤±²þ¹Ô¤òÄɲáʼ¡¤Î¥»¥¯¥·¥ç¥ó¤È¤¯¤Ã¤Ä¤¤¤Æ¤·¤Þ¤¦¤¿¤á¡Ë\r
- $buf .= "\n" unless($edit =~ /\n$/);\r
- }\r
- $count++;\r
- }\r
- if($flag==0){\r
- $buf .= "$line\n";\r
- }\r
- }\r
- return $buf;\r
-}\r
-\r
-#==============================================================================\r
-# ¥Ú¡¼¥¸É½¼¨»þ¤Î¥Õ¥Ã¥¯¥á¥½¥Ã¥É\r
-# ¡ÖÊÔ½¸¡×¥á¥Ë¥å¡¼¤ò͸ú¤Ë¤·¤Þ¤¹\r
-#==============================================================================\r
-sub hook {\r
- my $self = shift;\r
- my $wiki = shift;\r
- my $cgi = $wiki->get_CGI;\r
- \r
- my $pagename = $cgi->param("page");\r
- my $login = $wiki->get_login_info();\r
- \r
- # ÊÔ½¸¥á¥Ë¥å¡¼¤ÎÀ©¸æ\r
- if($wiki->can_modify_page($pagename)){\r
- $wiki->add_menu("ÊÔ½¸",$wiki->create_url({ action=>"EDIT",page=>$pagename }));\r
- }\r
-}\r
-\r
-1;\r
+###############################################################################
+#
+# ¥Ú¡¼¥¸¤òÊÔ½¸¤¹¤ë¥×¥é¥°¥¤¥ó
+#
+###############################################################################
+package plugin::core::EditPage;
+use strict;
+use plugin::core::Diff;
+#==============================================================================
+# ¥³¥ó¥¹¥È¥é¥¯¥¿
+#==============================================================================
+sub new {
+ my $class = shift;
+ my $self = {};
+ return bless $self,$class;
+}
+
+#==============================================================================
+# ¥¢¥¯¥·¥ç¥ó¤Î¼Â¹Ô
+#==============================================================================
+sub do_action {
+ my $self = shift;
+ my $wiki = shift;
+ my $cgi = $wiki->get_CGI;
+
+ my $pagename = $cgi->param("page");
+ my $format = $wiki->get_edit_format();
+ my $content = $cgi->param("content");
+ my $sage = $cgi->param("sage");
+ my $template = $cgi->param("template");
+ my $artno = $cgi->param("artno");
+ my $time = $wiki->get_last_modified($pagename);
+
+ my $buf = "";
+ my $login = $wiki->get_login_info();
+
+ if($pagename eq ""){
+ return $wiki->error("¥Ú¡¼¥¸¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
+ }
+ if($pagename =~ /([\|\[\]])|^:|([^:]:[^:])/){
+ return $wiki->error("¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£");
+ }
+ if(!$wiki->can_modify_page($pagename)){
+ return $wiki->error("¥Ú¡¼¥¸¤ÎÊÔ½¸¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
+ }
+
+ #--------------------------------------------------------------------------
+ # Êݸ½èÍý
+ if($cgi->param("save") ne ""){
+ if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
+ $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</span></p>";
+
+ my $mode = $wiki->get_edit_format();
+ my $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+ my $your_source = $content;
+ $your_source =~ s/\r\n/\n/g;
+ $your_source =~ s/\r/\n/g;
+
+ my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source);
+ $diff =~ s/\n/<br>/g;
+
+ $buf .= qq|
+ <ul>
+ <li>Äɲ䵤줿Éôʬ¤Ï<ins class="diff">¤³¤Î¤è¤¦¤Ë</ins>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
+ <li>ºï½ü¤µ¤ì¤¿Éôʬ¤Ï<del class="diff">¤³¤Î¤è¤¦¤Ë</del>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
+ </ul>
+ <div class="diff">$diff</div>
+ |;
+
+ $content = $orig_source;
+
+ } else {
+ #my $save_content = $content;
+ my $mode = $wiki->get_edit_format();
+ my $save_content = $wiki->convert_to_fswiki($content,$mode);
+
+ # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
+ if($artno ne ""){
+ $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki);
+ }
+ # FrontPage¤Ïºï½üÉÔ²Ä
+ if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
+ $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£</b>\n";
+
+ # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
+ } else {
+ $wiki->save_page($pagename,$save_content,$sage);
+
+ if($content ne ""){
+ $wiki->redirect($pagename);
+ } else {
+ if($artno eq ""){
+ $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
+ return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
+ } else {
+ $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
+ return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
+ }
+ }
+ }
+ }
+ #--------------------------------------------------------------------------
+ # ¥×¥ì¥Ó¥å¡¼½èÍý
+ } elsif($cgi->param("preview") ne ""){
+ $time = $cgi->param("lastmodified");
+ $buf = "°Ê²¼¤Î¥×¥ì¥Ó¥å¡¼¤ò³Îǧ¤·¤Æ¤è¤í¤·¤±¤ì¤Ð¡ÖÊݸ¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£<br>";
+ if($content eq ""){
+ if($pagename eq $wiki->config("frontpage") && $artno eq ""){
+ $buf = $buf."<b>¡Ê".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£¡Ë</b>";
+ } else {
+ if($artno eq ""){
+ $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ú¡¼¥¸¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";
+ } else {
+ $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ñ¡¼¥È¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";
+ }
+ }
+ }
+ $content = $wiki->convert_to_fswiki($content,$format);
+ $buf = $buf."<br>".$wiki->process_wiki($content);
+
+ } elsif($wiki->page_exists($pagename)) {
+ #¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç
+ if($artno eq ""){
+ $content = $wiki->get_page($pagename);
+ } else {
+ $content = &read_by_part($wiki->get_page($pagename),$artno);
+ }
+ } elsif($template ne ""){
+ #¥Æ¥ó¥×¥ì¡¼¥È¤ò»ØÄꤵ¤ì¤¿¾ì¹ç
+ $content = $wiki->get_page($template);
+ }
+
+ #--------------------------------------------------------------------------
+ # ÆþÎÏ¥Õ¥©¡¼¥à
+ $wiki->set_title($pagename."¤ÎÊÔ½¸",1);
+
+ my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/editform.tmpl",
+ die_on_bad_params => 0);
+
+ $tmpl->param({SCRIPT_NAME => $wiki->create_url(),
+ PAGE_NAME => $pagename,
+ CONTENT => $wiki->convert_from_fswiki($content,$format),
+ LAST_MODIFIED => $time,
+ ACTION => 'EDIT',
+ EXISTS_PAGE => $wiki->page_exists($pagename),
+ SAGE => $sage});
+
+ if($artno ne ""){
+ $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno',VALUE=>$artno}]);
+ }
+
+ $buf .= $tmpl->output();
+
+ # ¥×¥é¥°¥¤¥ó¤òÁÞÆþ
+ $buf .= $wiki->get_editform_plugin();
+
+ return $buf;
+}
+
+#==============================================================================
+# ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç¤ÎÊÔ½¸Éôʬ¤Î¼è¤ê½Ð¤·
+#==============================================================================
+sub read_by_part {
+ my $page = shift;
+ my $num = shift;
+ my $count = 0;
+ my $buf = "";
+ my $level = 0;
+ my $flag = 0;
+ foreach my $line (split(/\n/,$page)){
+ if($line=~/^(!{1,3})/){
+ if($flag==1 && $level<=length($1)){
+ last;
+ }
+ if($count==$num){
+ $flag = 1;
+ $level = length($1);
+ }
+ $count++;
+ }
+ if($flag==1){
+ $buf .= $line."\n";
+ }
+ }
+ return $buf;
+}
+
+#==============================================================================
+# ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç¤ÎÊݸÍÑ¥½¡¼¥¹¤ÎºîÀ®
+#==============================================================================
+sub make_save_source {
+ my $org = shift;
+ my $edit = shift;
+ my $num = shift;
+ my $wiki = shift;
+ my $count = 0;
+ my $buf = "";
+ my $level = "";
+ my $flag = "";
+ foreach my $line (split(/\n/,$org)){
+ if($line=~/^(!{1,3})/){
+ if($flag==1 && $level<=length($1)){
+ $flag = 0;
+ }
+ if($count==$num){
+ $flag = 1;
+ $level = length($1);
+ $buf .= $edit;
+ # ºÇ¸å¤¬²þ¹Ô¤Ç¤Ê¤¤¾ì¹ç¤À¤±²þ¹Ô¤òÄɲáʼ¡¤Î¥»¥¯¥·¥ç¥ó¤È¤¯¤Ã¤Ä¤¤¤Æ¤·¤Þ¤¦¤¿¤á¡Ë
+ $buf .= "\n" unless($edit =~ /\n$/);
+ }
+ $count++;
+ }
+ if($flag==0){
+ $buf .= "$line\n";
+ }
+ }
+ return $buf;
+}
+
+#==============================================================================
+# ¥Ú¡¼¥¸É½¼¨»þ¤Î¥Õ¥Ã¥¯¥á¥½¥Ã¥É
+# ¡ÖÊÔ½¸¡×¥á¥Ë¥å¡¼¤ò͸ú¤Ë¤·¤Þ¤¹
+#==============================================================================
+sub hook {
+ my $self = shift;
+ my $wiki = shift;
+ my $cgi = $wiki->get_CGI;
+
+ my $pagename = $cgi->param("page");
+ my $login = $wiki->get_login_info();
+
+ # ÊÔ½¸¥á¥Ë¥å¡¼¤ÎÀ©¸æ
+ if($wiki->can_modify_page($pagename)){
+ $wiki->add_menu("ÊÔ½¸",$wiki->create_url({ action=>"EDIT",page=>$pagename }));
+ }
+}
+
+1;