OSDN Git Service

FSWiki 3.6.4対応版
[fswiki/sandbox.git] / kgsoft / _ex_spam_filter_light / tags / _ex_spam_filter_light_20171207 / plugin / _ex_spam_filter_light / bbsx.pm
diff --git a/kgsoft/_ex_spam_filter_light/tags/_ex_spam_filter_light_20171207/plugin/_ex_spam_filter_light/bbsx.pm b/kgsoft/_ex_spam_filter_light/tags/_ex_spam_filter_light_20171207/plugin/_ex_spam_filter_light/bbsx.pm
new file mode 100644 (file)
index 0000000..a0a6db1
--- /dev/null
@@ -0,0 +1,253 @@
+##########################################################################################
+#
+# ¥¹¥Ñ¥à¥Õ¥£¥ë¥¿¡¼¥×¥é¥°¥¤¥ó¡Ê³Ø½¬µ¡Ç½Ìµ¤·ÈÇ¡Ë
+#¡Êbbsx¥×¥é¥°¥¤¥ó¤Î¥ª¡¼¥Ð¡¼¥é¥¤¥É¡Ë
+#
+##########################################################################################
+use strict;
+
+use plugin::bbsx::BBSXHandler;
+
+# plugin::bbsx::BBSXHandler¤Îdo_action¥á¥½¥Ã¥É¤ÎÃÖ¤­´¹¤¨
+package plugin::bbsx::BBSXHandler;
+
+sub do_action {\r
+       my $self = shift;\r
+       my $wiki = shift;\r
+       my $cgi  = $wiki->get_CGI;\r
+\r
+       my $bbsname = $cgi->param("bbsname");\r
+       my $name    = $cgi->param("name");\r
+       my $subject = $cgi->param("subject");\r
+       my $message = $cgi->param("message");\r
+       my $password = $cgi->param("password");\r
+       my $page    = $cgi->param("page");\r
+       my $option  = $cgi->param("option");\r
+       my $filename = $cgi->param("file");\r
+       my $uploadable = $cgi->param("uploadable");\r
+\r
+       if($name    eq ""){\r
+               $name    = "̵̾¤·¤µ¤ó";\r
+       } else {\r
+               # post_name¤È¤¤¤¦¥­¡¼¤Ç¥¯¥Ã¥­¡¼¤ò¥»¥Ã¥È¤¹¤ë\r
+               my $cookie = $cgi->cookie(-name=>'post_name',-value=>$name,-expires=>'+1M');\r
+               print "Set-Cookie: ",$cookie->as_string,"\n";\r
+       }\r
+\r
+       if($subject eq ""){\r
+               $subject = "̵Âê";\r
+       }\r
+\r
+       if($bbsname eq ""){\r
+               return $wiki->error("¥Ñ¥é¥á¡¼¥¿¤¬ÉÔÀµ¤Ç¤¹¡£");\r
+       }\r
+\r
+       if($uploadable eq 'yes'){\r
+               if($message eq "" and $filename eq ""){\r
+               return $wiki->error("ËÜʸ¤«ÅºÉÕ¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£");\r
+               }\r
+       } else {\r
+               if($message eq ""){\r
+               return $wiki->error("ËÜʸ¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£");\r
+               }\r
+       }\r
+\r
+       if($password eq ""){\r
+               return $wiki->error("ºï½ü¥­¡¼¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£");\r
+       }\r
+\r
+       my $pagename = $self->get_page_name($wiki,$bbsname);\r
+\r
+       my $refpart='';\r
+\r
+       if($filename ne ""){\r
+               $filename =~ s/\\/\//g;\r
+               $filename = substr($filename,rindex($filename,"/")+1);\r
+               &Jcode::convert(\$filename,'euc');\r
+\r
+               my $hundle   = $cgi->upload("file");\r
+               my $filecont;\r
+               while(<$hundle>){ $filecont = $filecont.$_; }\r
+               my $uploadfileNP = &Util::url_encode($pagename).".".&Util::url_encode($filename);\r
+               my $uploadfile = $wiki->config('attach_dir')."/".$uploadfileNP;\r
+               open(DATA,">$uploadfile") or die $!;\r
+               binmode(DATA);\r
+               print DATA $filecont;\r
+               close(DATA);\r
+               # ¥í¥°¤Îµ­Ï¿\r
+               &plugin::attach::AttachHandler::write_log($wiki,"UPLOAD",$pagename,$filename);\r
+\r
+               # ÅºÉÕ¥Õ¥¡¥¤¥ë¤Îɽ¼¨·Á¼°È½Äê\r
+\r
+               my ($is_image,$infostring,$width,$height) = $self->getfileinfo($wiki,$uploadfile);\r
+               if($is_image){\r
+                       $refpart = "{{bbsxfile $filename,show=1,page=$pagename,width=$width,height=$height,border=0}}\n";\r
+               } else {\r
+                       my ($size) = (stat($uploadfile))[7];\r
+                       $refpart = "{{bbsxfile $filename,show=0,page=$pagename,size=$size}}\n";\r
+               }\r
+               if($plugin::bbsx::BBSXHandler::WRITEINFO){\r
+                       $refpart .= "$infostring\n";\r
+               }\r
+\r
+       }\r
+\r
+       my $addr = $ENV{'REMOTE_ADDR'};\r
+       my $content = "!![[$subject|$pagename]] - $name (".&Util::format_date(time()).")\n";\r
+\r
+       if($refpart ne ""){\r
+               $content .= "$refpart";\r
+       }\r
+       if($message ne ""){\r
+               $content .= "\n$message\n";\r
+       }\r
+
+#--------------------------------------------------------------------------------------------------
+  if($message){
+    unless(&plugin::_ex_spam_filter_light::Install::judgment_text($message)){
+      my $time = Util::format_date(time());
+      my $file = $wiki->config('log_dir')."/spam_bbsx.txt";
+      if(open(SPAM_LOG, ">>$file")){
+        print SPAM_LOG "-" x 70 . "\n";
+        print SPAM_LOG "$bbsname:$subject - $name ($time)\n";
+        print SPAM_LOG "-" x 70 . "\n";
+        print SPAM_LOG "$message\n";
+        close(SPAM_LOG);
+      }
+      my $error_message = $wiki->error("Åê¹Æ¤µ¤ì¤¿Ê¸¾Ï¤Ï¥¹¥Ñ¥à¥á¥Ã¥»¡¼¥¸¤ÈȽÄꤵ¤ì¤Þ¤·¤¿¡£\n");
+      $subject = Util::escapeHTML($subject);
+      $message = Util::escapeHTML($message);
+      $message =~ s/\n/<br>/g;
+      $error_message .= "<p>\n";
+      $error_message .= "<div>Åê¹Æ¤µ¤ì¤¿Ê¸¾Ï¡§</div>\n";
+      $error_message .= "<div>¡ã·ï̾¡ä</div>\n";
+      $error_message .= "<div>$subject</div>\n";
+      $error_message .= "<div>¡ãËÜʸ¡ä</div>\n";
+      $error_message .= "<div>$message</div>\n";
+      $error_message .= "</p>\n";
+      return $error_message;
+    }
+  }
+#--------------------------------------------------------------------------------------------------
+\r
+       $content .= "//IP=$addr\n";\r
+       # ¥Ñ¥¹¥ï¡¼¥Éµ­Ï¿\r
+       $content .= "{{bbsxpassword $pagename," . crypt($password, 'aa') . "}}\n";\r
+\r
+       # no_comment¥ª¥×¥·¥ç¥ó\r
+       if($option eq "no_comment"){\r
+\r
+       # reverse_comment¥ª¥×¥·¥ç¥ó\r
+       } elsif($option eq "reverse_comment"){\r
+               $content .= "{{bbsxcomment reverse}}\n";\r
+       # ¥Ç¥Õ¥©¥ë¥È\r
+       } else {\r
+               $content .= "{{bbsxcomment}}\n";\r
+       }\r
+       $wiki->save_page($pagename,$content);\r
+\r
+       # ¸µ¤Î¥Ú¡¼¥¸¤Ë¥ê¥À¥¤¥ì¥¯¥È\r
+       $wiki->redirect($bbsname);\r
+}\r
+
+use plugin::bbsx::BBSXCommentHandler;
+
+# plugin::bbsx::BBSXCommentHandler¤Îdo_action¥á¥½¥Ã¥É¤ÎÃÖ¤­´¹¤¨
+package plugin::bbsx::BBSXCommentHandler;
+
+sub do_action {\r
+       my $self = shift;\r
+       my $wiki = shift;\r
+       my $cgi  = $wiki->get_CGI;\r
+\r
+       my $name    = $cgi->param("name");\r
+       my $message = $cgi->param("message");\r
+       my $count   = $cgi->param("count");\r
+       my $page    = $cgi->param("page");\r
+       my $option  = $cgi->param("option");\r
+\r
+       if($name eq ""){\r
+               $name = "̵̾¤·¤µ¤ó";\r
+       } else {\r
+               # post_name¤È¤¤¤¦¥­¡¼¤Ç¥¯¥Ã¥­¡¼¤ò¥»¥Ã¥È¤¹¤ë\r
+               my $cookie = $cgi->cookie(-name=>'post_name',-value=>$name,-expires=>'+1M');\r
+               print "Set-Cookie: ",$cookie->as_string,"\n";\r
+       }\r
+
+#--------------------------------------------------------------------------------------------------
+  if($message){
+    unless(&plugin::_ex_spam_filter_light::Install::judgment_text($message)){
+      my $time = Util::format_date(time());
+      my $file = $wiki->config('log_dir')."/spam_bbsx_comment.txt";
+      if(open(SPAM_LOG, ">>$file")){
+        print SPAM_LOG "$page:$message - $name($time)\n";
+        close(SPAM_LOG);
+      }
+      my $error_message = $wiki->error("Åê¹Æ¤µ¤ì¤¿Ê¸¾Ï¤Ï¥¹¥Ñ¥à¥á¥Ã¥»¡¼¥¸¤ÈȽÄꤵ¤ì¤Þ¤·¤¿¡£\n");
+      $error_message .= "<p>\n";
+      $error_message .= "<div>Åê¹Æ¤µ¤ì¤¿Ê¸¾Ï¡§</div>\n";
+      $error_message .= "<div>" . Util::escapeHTML("$message") . "</div>\n";
+      $error_message .= "</p>\n";
+      return $error_message;
+    }
+  }
+#--------------------------------------------------------------------------------------------------
+
+       if($page ne "" && $message ne "" && $count ne ""){\r
+\r
+               my @lines = split(/\n/,$wiki->get_page($page));\r
+               my $flag       = 0;\r
+               my $form_count = 1;\r
+               my $content    = "";\r
+\r
+               my $addr = $ENV{'REMOTE_ADDR'};\r
+\r
+               # ¿·Ãå½ç¤Î¾ì¹ç\r
+               if($option eq "reverse"){\r
+                       foreach(@lines){\r
+                               if(/^{{bbsxpassword\s*.*}}$/){\r
+                                       # ¥Ñ¥¹¥ï¡¼¥É¹Ô¤òºï½ü\r
+                                       next;\r
+                               }\r
+                               $content = $content.$_."\n";\r
+                               if(/^{{bbsxcomment\s*.*}}$/ && $flag==0){\r
+                                       if($form_count==$count){\r
+                                               $content = $content."*$message - $name (".Util::format_date(time()).")\n";\r
+                                               $flag = 1;\r
+                                               $content = $content."//IP=$addr\n";\r
+                                       } else {\r
+                                               $form_count++;\r
+                                       }\r
+                               }\r
+\r
+                       }\r
+               # Åê¹Æ½ç¤Î¾ì¹ç\r
+               } else {\r
+                       foreach(@lines){\r
+                               if(/^{{bbsxpassword\s*.*}}$/){\r
+                                       # ¥Ñ¥¹¥ï¡¼¥É¹Ô¤òºï½ü\r
+                                       next;\r
+                               }\r
+                               if(/^{{bbsxcomment\s*.*}}$/ && $flag==0){\r
+                                       if($form_count==$count){\r
+                                               $content = $content."*$message - $name (".Util::format_date(time()).")\n";\r
+                                               $flag = 1;\r
+                                               $content = $content."//IP=$addr\n";\r
+                                       } else {\r
+                                               $form_count++;\r
+                                       }\r
+                               }\r
+                               $content = $content.$_."\n";\r
+                       }\r
+               }\r
+               if($flag==1){\r
+                       $wiki->save_page($page,$content);\r
+               }\r
+       }\r
+\r
+       my $bbsname = &plugin::bbsx::BBSXCommon::get_bbsname($wiki,$page);\r
+       # ¸µ¤Î¥Ú¡¼¥¸¤Ë¥ê¥À¥¤¥ì¥¯¥È\r
+       $wiki->redirect($bbsname);\r
+}
+
+1;