##########################################################################################
#
# スパムフィルタープラグイン（学習機能無し版）
#（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->page_exists($pagename)){
			if($cgi->param("lastmodified") < $time){
				return $wiki->error("ページは既に別のユーザによって更新されています。");
			}
		}

#--------------------------------------------------------------------------------------------------
  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;
    }
  }
#--------------------------------------------------------------------------------------------------

		#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 $cgi->escapeHTML($pagename)."を削除しました。";
				} else {
					$wiki->set_title($pagename."のパートを削除しました");
					return $cgi->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->config('script_name'),
				  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;
