###############################################################################
#
# Categoryプラグインのアクションハンドラ
#
###############################################################################
package plugin::category::CategoryHandler;
use strict;
use plugin::category::CategoryCache;
#==============================================================================
# コンストラクタ
#==============================================================================
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 $category  = $cgi->param("category");
	my $cachefile = $wiki->config('log_dir')."/category.cache";
	
	if(!(-e $cachefile)){
		&plugin::category::CategoryCache::create_cache($wiki);
	}
	my $result = &Util::load_config_hash(undef,$cachefile);
	
	if($category eq ""){
		$wiki->set_title("カテゴリの一覧");
		my $buf = "";
		foreach my $key (sort(keys(%$result))){
			$buf .= "<h2>".&Util::escapeHTML($key)."</h2>\n<ul>\n";
			my @pages = sort(split(/\t/,$result->{$key}));
			foreach my $pagename (@pages){
				if($wiki->can_show($pagename)){
					$buf .= "<li><a href=\"".$wiki->create_page_url($pagename)."\">".
					        &Util::escapeHTML($pagename)."</a></li>\n";
				}
			}
			$buf .= "</ul>\n";
		}
		return $buf;
		
	} else {
		$wiki->set_title("カテゴリ:".$category);
		my $buf = "<h2>".&Util::escapeHTML($category)."</h2>\n<ul>\n";
		foreach my $pagename (sort(split(/\t/,$result->{$category}))){
			if($wiki->can_show($pagename)){
				$buf .= "<li><a href=\"".$wiki->create_page_url($pagename)."\">".
			            &Util::escapeHTML($pagename)."</a></li>\n";
			}
		}
		return $buf."</ul>\n";
	}
}

1;