############################################################################### # # プラグインの設定を行うアクションハンドラ # ############################################################################### package plugin::admin::AdminPluginHandler; 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; $wiki->set_title("プラグイン設定"); if($cgi->param("SAVE") ne ""){ return $self->save_plugin_config($wiki); } else { return $self->plugin_config_form($wiki); } } sub plugin_config_form { my $self = shift; my $wiki = shift; my $cgi = $wiki->get_CGI; my @plugins = split(/\n/,&Util::load_config_text($wiki,$wiki->config('plugin_file'))); my $buf = "

プラグインの設定

\n". "
config('script_name')."\" method=\"POST\">\n". "\n". "\n"; foreach(sort($self->list_plugins($wiki))){ $buf .= ""; $buf .= ""; $buf .= ""; } $buf .= "

プラグイン説明
"; $buf .= "".$self->get_decription($wiki,$_)."
\n". "\n". "\n". "\n". "
\n"; return $buf; } #============================================================================== # 設定を保存 #============================================================================== sub save_plugin_config { my $self = shift; my $wiki = shift; my $cgi = $wiki->get_CGI; my @plugins = $cgi->param("plugin"); &Util::save_config_text($wiki,$wiki->config('plugin_file'),join("\n",@plugins)); return $wiki->redirectURL($wiki->config('script_name')."?action=ADMINPLUGIN"); #return "設定を保存しました。"; } #============================================================================== # プラグインの一覧を取得する関数 #============================================================================== sub list_plugins { my $self = shift; my $wiki = shift; my @list; opendir(DIR,$wiki->config('plugin_dir')."/plugin") or die $!; while(my $entry = readdir(DIR)){ my $path = $wiki->config('plugin_dir')."/plugin/$entry"; if(-d $path && $entry ne "." && $entry ne ".."){ if(-e "$path/Install.pm"){ push(@list,$entry); } } } closedir(DIR); @list = sort(@list); return @list; } #============================================================================== # Install.pmのコメントを取得 #============================================================================== sub get_decription { my $self = shift; my $wiki = shift; my $plugin = shift; open(DATA,$wiki->config('plugin_dir')."/plugin/$plugin/Install.pm") or return "
"; my $flag = 0; my $comment = ""; while(){ if(!/^#/ || /^##/){ if($flag==0){ next; } else { last; } } $flag = 1; s/\#+//; s/\=+//; s/^\s+//; s/\s+$//; if($_ ne ""){ $comment .= $_."\n"; } } close(DATA); return $comment; } 1;