###############################################################################
# 
# ページを表示するプラグイン
# 
###############################################################################
package plugin::core::ShowPage;
use strict;
#==============================================================================
# コンストラクタ
#==============================================================================
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");
	if(!defined($pagename) || $pagename eq ""){
		$pagename = $wiki->config("frontpage");
		$cgi->param("page",$pagename);
	}
	
	if($wiki->page_exists($pagename)){
		# アクセスログの記録
		if($wiki->config('log_dir') ne "" && $wiki->config('access_log_file') ne ""){
			&write_log($wiki,$pagename);
		}
		
		# 参照権限のチェック
		if(!$wiki->can_show($pagename)){
			$wiki->set_title("参照権限がありません");
			return $wiki->error("参照権限がありません。");
		}
		
		$wiki->set_title($pagename);
		$wiki->do_hook("show"); # 本当はWiki.pmの中から呼びたい...
		
		return $wiki->process_wiki($wiki->get_page($pagename),1,1);
		
	} else {
		return $wiki->call_handler("EDIT",$cgi);
	}
}

#==============================================================================
# アクセスログの記録
#==============================================================================
sub write_log {
	my $wiki = shift;
	my $page = shift;
	
	my $ip  = $ENV{"REMOTE_ADDR"};
	my $ref = $ENV{"HTTP_REFERER"};
	my $ua  = $ENV{"HTTP_USER_AGENT"};
	if(!defined($ip)  || $ip  eq ""){ $ip  = "-"; }
	if(!defined($ref) || $ref eq ""){ $ref = "-"; }
	if(!defined($ua)  || $ua  eq ""){ $ua  = "-"; }
	
	my $logfile = $wiki->config('log_dir')."/".$wiki->config('access_log_file');
	Util::file_lock($logfile);
	open(LOG,">>$logfile") or die $!;
	print LOG Util::url_encode($page)." ".&log_date()." $ip $ref $ua\n";
	close(LOG);
	Util::file_unlock($logfile);
}

#===============================================================================
# 日付をフォーマット(アクセスログ用)
#===============================================================================
sub log_date {
	my ($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
	return sprintf("%04d/%02d/%02d %02d:%02d:%02d",
	               $year+1900,$mon+1,$mday,$hour,$min,$sec);
}

1;