###############################################################################
#
# 子Wikiを作成します。
# WikiFarmの設定でFarm機能を使用する設定になっている場合のみ有効になります。
#
###############################################################################
package plugin::core::CreateWikiHandler;
use strict;
use HTTP::Status;
use plugin::core::WikiList;
#==============================================================================
# コンストラクタ
#==============================================================================
sub new {
	my $class = shift;
	my $self  = {};
	return bless $self,$class;
}

#==============================================================================
# アクションハンドラ
#==============================================================================
sub do_action{
	my $self  = shift;
	my $farm  = shift;
	my $cgi   = $farm->get_CGI;
	my $child = $cgi->param("child");
	my $admin_id   = $cgi->param("admin_id");
	my $admin_pass = $cgi->param("admin_pass");
	
	my $can_create = 1;
	
	my $config = &Util::load_config_hash($farm,$farm->config('farmconf_file'));
	my $login  = $farm->get_login_info();
	if($config->{create}==1){
		if(!defined($login)){
			$can_create = 0;
			#return $farm->error(RC_FORBIDDEN, "Wikiの作成は許可されていません。");
		}
	} elsif($config->{create}==2){
		if(!defined($login) || $login->{type}!=0){
			$can_create = 0;
			#return $farm->error(RC_FORBIDDEN, "Wikiの作成は許可されていません。");
		}
	}
	
	if($child eq ""){
		# 子Wikiの名前入力フォーム
		$farm->set_title("WikiFarm",1);
		my $buf = "";
		
		if($can_create==1){
			$buf = "<h2>新規Wikiの作成</h2>\n".
			       "<form method=\"post\" action=\"".$farm->create_url()."\">\n".
			       "  <h3>Wikiの名前</h3>\n".
			       "  <p>ここで設定したWiki名はURLに含まれますのでそのWikiの特徴を表した、".
			       "     できるだけ短い名前をつけることをオススメします。".
			       "     半角英数字しか使用できません。</p>\n".
			       "  <p>Wiki名：<input type=\"text\" name=\"child\" size=\"40\"></p>".
			       "  <h3>管理者の情報</h3>\n".
			       "  <p>作成するWikiの管理者IDとパスワードを設定してください。".
			       "     半角英数字しか使用できません。</p>\n".
			       "  <p>ID：<input type=\"text\" size=\"20\" name=\"admin_id\">\n".
			       "     Pass：<input type=\"password\" size=\"20\" name=\"admin_pass\">\n".
			       "  </p>\n".
			       "  <input type=\"submit\" value=\" 作成 \">".
			       "  <input type=\"hidden\" name=\"action\" value=\"CREATE_WIKI\">".
			       "</form>\n";
		}
		
		# 子Wikiの一覧
		my $wikilist = plugin::core::WikiList->new();
		my $listcnt  = $wikilist->paragraph($farm);
		
		$buf .= "<h2>Wikiサイトの一覧</h2>\n";
		
		if($listcnt eq "<ul>\n</ul>\n"){
			$buf .= "<p>現在このWiki配下にはWikiサイトはありません。</p>";
		} else {
			$buf .= "<p>現在このWikiの配下には以下のWikiサイトが存在します。</p>".$listcnt;
		}
		
		return $buf;
		
	}else{
		if($can_create==0){
			return $farm->error(RC_FORBIDDEN, "Wikiの作成は許可されていません。");
		}
		
		# 入力チェック
		if(!($child =~ /^[A-Za-z0-9]+$/)){
			return $farm->error(RC_BAD_REQUEST, &Util::escapeHTML($child)."は不正な名称です。");
		
		} elsif($admin_id eq ""){
			return $farm->error(RC_BAD_REQUEST, "管理者IDを入力してください。");
			
		} elsif($admin_pass eq ""){
			return $farm->error(RC_BAD_REQUEST, "管理者パスワードを入力してください。");
			
		} elsif(!($admin_id =~ /^[A-Za-z0-9]+$/)){
			return $farm->error(RC_BAD_REQUEST, "管理者IDが不正です。");
		
		} elsif(!($admin_pass =~ /^[A-Za-z0-9]+$/)){
			return $farm->error(RC_BAD_REQUEST, "管理者パスワードが不正です。");
		
		# 子Wikiの重複をチェック
		} elsif($farm->wiki_exists($child)){
			return $farm->error(&Util::escapeHTML($child)."は既に存在します。");
		
		# ユーザの重複をチェック
		#} elsif($farm->user_exists($admin_id)){
		#	return $farm->error("ID：".&Util::escapeHTML($admin_id)."のユーザは既に存在します。");
			
		# 子Wiki作成
		} else {
			$farm->create_wiki($child,$admin_id,$admin_pass);
			$farm->set_title(&Util::escapeHTML($child)."を作成しました");
			return "<a href=\"".$farm->config('script_name')."/".&Util::escapeHTML($child)."\">".
			       &Util::escapeHTML($child)."</a>を作成しました。";
		}
	}
}

1;
