###############################################################################
#
# FSWikiのスタイル設定を行うアクションハンドラ
#
###############################################################################
package plugin::admin::AdminStyleHandler;
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_config($wiki);
	} else {
		return $self->config_form($wiki);
	}
}

#==============================================================================
# 設定フォーム
#==============================================================================
sub config_form {
	my $self = shift;
	my $wiki = shift;
	
	my $config  = &Util::load_config_hash($wiki,$wiki->config('config_file'));
	my $usercss = &Util::load_config_text($wiki,$wiki->config('usercss_file'));
	
	# テーマの一覧を取得しテンプレート用に加工
	my @buf   = $self->list_theme($wiki);
	my @theme = $self->convert_template_list(\@buf, $config->{theme});
	
	# サイトテンプレートテーマの一覧を取得しテンプレート用に加工
	@buf = $self->list_site_tmpl_theme($wiki);
	my @site_tmpl_theme =  $self->convert_template_list(\@buf,$config->{site_tmpl_theme});
	
	my $no_theme = 0;
	if($config->{'theme'} eq ""){
		$no_theme = 1;
	}
	
	# テンプレートにパラメータをセット
	my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/admin_style.tmpl",
	                               die_on_bad_params => 0);
	$tmpl->param(THEME           => \@theme,
	             USERCSS         => $usercss,
	             OUTER_CSS       => $config->{'outer_css'},
	             NO_THEME        => $no_theme,
	             SITE_TMPL_THEME => \@site_tmpl_theme);
	
	return "<form action=\"".$wiki->create_url()."\" method=\"POST\">\n".
	       $tmpl->output().
	       "<input type=\"hidden\" name=\"action\" value=\"ADMINSTYLE\">\n".
	       "</form>\n";
}

#==============================================================================
# 設定を保存
#==============================================================================
sub save_config {
	my $self = shift;
	my $wiki = shift;
	my $cgi  = $wiki->get_CGI;
	my $config = &Util::load_config_hash($wiki,$wiki->config('config_file'));
	
	$config->{theme}           = $cgi->param("theme");
	$config->{outer_css}       = $cgi->param("outer_css");
	$config->{site_tmpl_theme} = $cgi->param("site_tmpl_theme");
	
	&Util::save_config_hash($wiki,$wiki->config('config_file'),$config);
	
	my $usercss = $cgi->param("usercss");
	&Util::save_config_text($wiki,$wiki->config('usercss_file'),$usercss);
	
	return $wiki->redirectURL( $wiki->create_url({action=>"ADMINSTYLE"}) );
	#return "設定を保存しました。\n";

}

#==============================================================================
# ディレクトリの一覧を取得
#==============================================================================
sub list_dir {
	my $self = shift;
	my $dir  = shift;
	my @list = ();
	opendir(DIR, $dir) or die $!;
	while(my $entry = readdir(DIR)) {
		my $type = -d $dir."/$entry" ? "dir" : "file";
		if($type eq "dir" && $entry ne "." && $entry ne ".."){
			push(@list,$entry);
		}
	}
	closedir(DIR);
	
	return sort(@list);
}

#==============================================================================
# テーマの一覧を取得
#==============================================================================
sub list_theme {
	my $self = shift;
	my $wiki = shift;
	return $self->list_dir($wiki->config('theme_dir'));
}

#==============================================================================
# サイトテンプレートテーマの一覧を取得
#==============================================================================
sub list_site_tmpl_theme {
	my $self = shift;
	my $wiki = shift;
	return $self->list_dir($wiki->config('tmpl_dir').'/site');
}

#==============================================================================
# HTML::Templateのセレクトタグ用にリストを変換し結果を取得
#==============================================================================
sub convert_template_list {
	my $self = shift;
	my $list = shift;
	my $selected_value = shift;

	my @ret = ();
	foreach my $value (@$list){
		my $selected = 0;
		if($value eq $selected_value){
			$selected = 1;
		}
		push(@ret,{VALUE=>$value,SELECT=>$selected});
	}

	return @ret;
}

1;