############################################################################### # # ログファイルを管理するモジュール # ############################################################################### package plugin::admin::AdminLogHandler; 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 $login = $wiki->get_login_info(); if($cgi->param("delete")){ return $self->delete_log($wiki); } elsif($cgi->param("download")){ $self->download_log($wiki); } elsif($cgi->param("deletecache")){ return $self->delete_cache($wiki); } else { return $self->log_info($wiki); } } #============================================================================== # ログファイルの情報を表示 #============================================================================== sub log_info { my $self = shift; my $wiki = shift; my $buf = ""; $wiki->set_title("ログファイルの管理"); $buf .= $self->make_log_form($wiki,"アクセスログ","access"); $buf .= $self->make_log_form($wiki,"添付ファイルのログ","attach"); $buf .= $self->make_log_form($wiki,"添付ファイルダウンロード数のログ","download"); $buf .= "

※このログファイルを削除すると添付ファイルのダウンロード数がクリアされます。

\n"; $buf .= $self->make_log_form($wiki,"ページ凍結のログ","freeze"); $buf .= "

※このログファイルを削除すると全てのページ凍結が解除されます。

\n"; # キャッシュファイルの情報 $buf .= "

キャッシュファイル

\n"; my @cachefiles = (); if($wiki->config("log_dir") ne ""){ opendir(DIR,$wiki->config("log_dir")) or die $wiki->config("log_dir")."のオープンに失敗しました。"; while(my $entry = readdir(DIR)){ if($entry =~ /\.cache$/){ push(@cachefiles,$entry); } } closedir(DIR); } if($#cachefiles==-1){ $buf .= "

キャッシュファイルはありません。

\n"; } else { $buf .= "\n"; $buf .= "
\n". " \n". " \n". "
\n"; } return $buf; } #============================================================================== # ログファイルの情報表示と操作を行うフォームを出力する関数 #============================================================================== sub make_log_form { my $self = shift; my $wiki = shift; my $name = shift; my $target = shift; my $file = $self->get_filename_from_target($wiki,$target); my $buf .= "

".&Util::escapeHTML($name)."

\n"; if(-e $wiki->config('log_dir')."/$file"){ my @status = stat($wiki->config('log_dir')."/$file"); my $size = @status[7] / 1024; # 整数に切り上げ $size = ($size==int($size) ? $size : int($size + 1)); $buf .= "

".&Util::escapeHTML($file)."(".$size."KB)

\n". "
config('script_name')."\" method=\"POST\">\n". " \n". " \n". " \n". " \n". "
\n"; } else { $buf .= "

ログファイルはありません。

\n"; } return $buf; } #============================================================================== # ログファイルを削除 #============================================================================== sub delete_log { my $self = shift; my $wiki = shift; my $target = $wiki->get_CGI->param("target"); my $file = $self->get_filename_from_target($wiki,$target); if($file eq ""){ return $wiki->error("パラメータが不正です。"); } unlink($wiki->config('log_dir')."/$file") or die $file."の削除に失敗しました。"; return $wiki->redirectURL($wiki->config('script_name')."?action=ADMINLOG"); #$wiki->set_title("ログファイルの管理"); #return "

ログファイルを削除しました。

\n". # "

[config('script_name')."?action=ADMINLOG\">戻る]

\n"; } #============================================================================== # ログファイルをダウンロード #============================================================================== sub download_log { my $self = shift; my $wiki = shift; my $target = $wiki->get_CGI->param("target"); my $file = $self->get_filename_from_target($wiki,$target); if($file eq ""){ return $wiki->error("パラメータが不正です。"); } print "Content-Type: text/plain\n"; print "Content-Disposition: inline;filename=\"".&Jcode::convert($file,"sjis")."\"\n\n"; open(LOG,$wiki->config('log_dir')."/$file") or die $file."のオープンに失敗しました。"; binmode(LOG); while(){ print $_; } close(LOG); exit(); } #============================================================================== # ログファイルのファイル名を取得する関数 #============================================================================== sub get_filename_from_target { my $self = shift; my $wiki = shift; my $target = shift; if($target eq "access"){ return $wiki->config('access_log_file'); } elsif($target eq "attach"){ return $wiki->config('attach_log_file'); } elsif($target eq "freeze"){ return $wiki->config('freeze_file'); } elsif($target eq "download"){ return $wiki->config('download_count_file'); } else { return ""; } } #============================================================================== # キャッシュファイルを削除 #============================================================================== sub delete_cache { my $self = shift; my $wiki = shift; unlink glob($wiki->config("log_dir")."/*.cache") or die "キャッシュファイルの削除に失敗しました。"; return $wiki->redirectURL($wiki->config('script_name')."?action=ADMINLOG"); #$wiki->set_title("ログファイルの管理"); #return "

キャッシュファイルを削除しました。

\n". # "

[config('script_name')."?action=ADMINLOG\">戻る]

\n"; } 1;