OSDN Git Service

FSWiki 3.6.4対応版
[fswiki/sandbox.git] / kgsoft / _ex_spam_filter_light / tags / _ex_spam_filter_light#20171207 / _ex_spam_filter_light / core.pm
diff --git a/kgsoft/_ex_spam_filter_light/tags/_ex_spam_filter_light#20171207/_ex_spam_filter_light/core.pm b/kgsoft/_ex_spam_filter_light/tags/_ex_spam_filter_light#20171207/_ex_spam_filter_light/core.pm
new file mode 100644 (file)
index 0000000..c0bcc87
--- /dev/null
@@ -0,0 +1,216 @@
+##########################################################################################
+#
+# ¥¹¥Ñ¥à¥Õ¥£¥ë¥¿¡¼¥×¥é¥°¥¤¥ó¡Ê³Ø½¬µ¡Ç½Ìµ¤·ÈÇ¡Ë
+#¡Êcore::EditPage¥×¥é¥°¥¤¥ó¡Ê¥Ú¡¼¥¸¤ÎÊÔ½¸¡Ë¤Î¥ª¡¼¥Ð¡¼¥é¥¤¥É¡Ë
+#
+##########################################################################################
+use strict;
+
+use plugin::core::EditPage;
+
+# plugin::core::EditPage¤Îdo_action¥á¥½¥Ã¥É¤ÎÃÖ¤­´¹¤¨
+package plugin::core::EditPage;
+
+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->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
+                       }
+               }
+               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 = undef;
+                       if($artno eq ""){
+                               $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+                       } else {
+                               $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $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);
+                       $buf .= $diff."<br>";
+                       
+                       $content = $orig_source;
+                       
+               } else {
+
+#--------------------------------------------------------------------------------------------------
+  if($content){
+    unless(&plugin::_ex_spam_filter_light::Install::judgment_text($content)){
+      my $time = Util::format_date(time());
+      my $file = $wiki->config('log_dir')."/spam_page.txt";
+      if(open(SPAM_LOG, ">>$file")){
+        print SPAM_LOG "-" x 70 . "\n";
+        print SPAM_LOG "$pagename:$artno ($time)\n";
+        print SPAM_LOG "-" x 70 . "\n";
+        print SPAM_LOG "$content\n";
+        close(SPAM_LOG);
+      }
+      my $error_message = $wiki->error("ÊÔ½¸¤µ¤ì¤¿Ê¸¾Ï¤Ï¥¹¥Ñ¥àʸ¾Ï¤ÈȽÄꤵ¤ì¤Þ¤·¤¿¡£\n");
+      $content = Util::escapeHTML($content);
+      $content =~ s/\n/<br>/g;
+      $error_message .= "<p>\n";
+      $error_message .= "<div>Åê¹Æ¤µ¤ì¤¿Ê¸¾Ï¡§</div>\n";
+      $error_message .= "<div>¡ã¥Ú¡¼¥¸Ì¾¡ä</div>\n";
+      $error_message .= "<div>$pagename</div>\n";
+      $error_message .= "<div>¡ãËÜʸ¡ä</div>\n";
+      $error_message .= "<div>$content</div>\n";
+      $error_message .= "</p>\n";
+      return $error_message;
+    }
+  }
+#--------------------------------------------------------------------------------------------------
+\r
+                       #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, $artno);
+                               } else {
+                                       if($artno eq ""){
+                                               $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
+                                               return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       } else {
+                                               $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
+                                               return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       }
+                               }
+                       }
+               }
+       #--------------------------------------------------------------------------
+       # º¹Ê¬³Îǧ½èÍý
+       } elsif($cgi->param("diff") ne ""){
+               if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
+                       }
+               }
+               $time = $cgi->param("lastmodified");
+               
+               my $mode = $wiki->get_edit_format();
+               my $orig_source = undef;
+               if($artno eq ""){
+                       $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+               } else {
+                       $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
+               }
+               my $your_source = $content;
+               $your_source =~ s/\r\n/\n/g;
+               $your_source =~ s/\r/\n/g;
+               
+               if($orig_source eq $your_source){
+                       $buf .= '<p class="error">º¹Ê¬¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>';
+               } else {
+                       my $diff = plugin::core::Diff::_get_diff_html($wiki, $your_source, $orig_source);
+                       $buf .= $diff."<br>";
+               }
+               
+       #--------------------------------------------------------------------------
+       # ¥×¥ì¥Ó¥å¡¼½èÍý
+       } elsif($cgi->param("preview") ne ""){
+               if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
+                       }
+               }
+               $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;
+}
+
+1;