#!/usr/bin/perl
require './setup.cgi';





# NICOLE Board Admin [ Freeware ]
#
# 掲示板の管理画面のスクリプト
#
# Script written by NICOLE
# web-page : http://www10.big.or.jp/~nicole/
# e-mail   : nicole@big.or.jp





$cgi = 'admin.cgi';

# data ディレクトリの確認
unless (-e './data'){
	&error('dataディレクトリがありません<BR>このCGIを設置したディレクトリ内にデータ格納用の<B>data</B>ディレクトリを作成して下さい。');
}

opendir ( DATADIR, "./data/");
@b = readdir(DATADIR);
closedir (DATADIR);
@boards = grep(/.cfg/, @b);
@boards = sort( @boards );
$board_count = 0;
$max_board = 0;

foreach(@boards){
	$name = $_;
	$name =~ s/.cfg//ig;
	&ReadConfig($name);
	$boardlist{ $name } = $config{'bbstitle'};
	if ($max_board < $name) {
		$max_board = $name;
	}
	$board_count++;
}

&decode;

if ( $admin_password eq ''){
	&error('管理パスワードが設定されていません。<BR><B>setup.cgi</B>ファイルの<B>$admin_password</B>に管理パスワードを記述して下さい。');
}

if ( $admin_password ne $pwd ){
	&DrawHeader;
	print <<_HTML_;
掲示板の設定画面を開きます。管理パスワードを入力して下さい。
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=cmd VALUE="$cmd">
<INPUT TYPE=hidden NAME=board VALUE="$board">
<INPUT TYPE=hidden NAME=wparam VALUE="$wparam">
<INPUT TYPE=hidden NAME=lparam VALUE="$lparam">
<INPUT TYPE=password NAME=pwd>
<INPUT TYPE=submit VALUE=" 認証 ">
</FORM>
</BODY>
</HTML>
_HTML_
	&DrawFooter;
	exit;
}

if ( 0 == $board_count ){
	$cmd = 'create';
}

if ($cmd eq 'create'){ &CreateBoard;
} elsif ( $cmd eq 'edit'){ &ReadConfig($board); &EditBoard;
} elsif ( $cmd eq 'copy'){ &CopyBoard($board);
} elsif ( $cmd eq 'delete'){ &DeleteBoard;
} elsif ( $cmd eq 'update') { &UpdateBoard;
} elsif ( $cmd eq 'rename'){ &RenameBoard;
} elsif ( $cmd eq 'ban'){ &ban;
} else {
	&menu;
}

exit;


sub ban {
	if ("update" eq $wparam ){
		@banlist = split(/\n/, $FORM{'banlist'});
		if ( open(FILE,">$xfile") ){
			print FILE @banlist;
			close(FILE);
		}
		$information = "<EM>出入禁止を設定しました</EM><UL>";
		foreach(@banlist){
			$information .= "<LI>$_</LI>\n";
		}
		$information .= "</UL><HR NOSHADE SIZE=1>\n";
		&menu;
		exit;
	} else {
	if ( -e $xfile ){
		if ( open(FILE,$xfile) ){
			@banlist = <FILE>;
			close(FILE);
		}
	}

	&DrawHeader('');
	print <<_HTML_;
<EM>注意！中級者〜上級者向けの設定です</EM>
<P>
出入禁止にしたいIPアドレス(xxx.xxx.xxx.xxx)を設定します。<BR>
この設定は<EM>全ての掲示板に適応されます</EM>から慎重に設定する必要があります。
<P>
例えば 123.456.789.123 というIPを出入禁止にしたい場合、
<BLOCKQUOTE>
123.456.789.123<BR>
123.456.789.*<BR>
</BLOCKQUOTE>
などとアスタリスクを併用して記述することができます。<BR>
また<EM>不適切な設定をすると掲示板自体がエラーを起こす</EM>場合もあります。
<P>
1行に1個で記述して下さい。
<FORM METHOD="$method" ACTION="$cgi">
<TEXTAREA NAME=banlist WRAP=soft ROWS=10 COLS=20>@banlist</TEXTAREA>
<P>
<INPUT TYPE=hidden NAME=cmd VALUE=ban>
<INPUT TYPE=hidden NAME=wparam VALUE=update>
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="設定する">
</FORM>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="メニュー画面へ戻る">
</FORM>
_HTML_
	&DrawFooter;
	}
}

sub menu {
	local($s) = @_;

	&DrawHeader('ほだれ祭　ＣＧＩ管理画面');
	print <<_HTML_;
<FONT COLOR=#ff0000>$s</FONT>
<BR>
<FONT SIZE=2>
<UL>
<LI>この管理画面では掲示板の新規作成、設定の変更、設定のコピー、掲示板の削除など、各掲示板の管理を簡単に行えます</LI>
<LI>掲示板へのリンクは board.cgi?board=ファイル名 という感じになります</LI>
<LI>単純に board.cgi へリンクすると掲示板一覧リストが\表\示されるようになります</LI>
<LI>掲示板はサーバーのディスク容量が許す限り、制限無くいくつでも作成できます</LI>
</UL>

</FONT>

_HTML_

	if (0 != $board_count){
		print <<_HTML_;
<HR NOSHADE SIZE=1>
<B>設定編集や掲示板の削除</B>
<BLOCKQUOTE>
掲示板の設定編集、設定のコピー、掲示板削除は下の選択リストから「どの掲示板に」「なにを」で選択し「する」ボタンを押して下さい。
<P>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<TABLE BORDER=1 CELLPADDING=0 CELLSPACING=0 BGCOLOR=lightblue><TR><TD>
<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0>
<TR>
<TD>
<SELECT NAME=board>
_HTML_
		foreach(sort keys %boardlist){
			if ($board == $_ ){
				print "<OPTION VALUE=\"$_\" SELECTED>$boardlist{$_} ( $_ )\n";
			} else {
				print "<OPTION VALUE=\"$_\">$boardlist{$_} ( $_ )\n";
			}
		}
		print <<_HTML_;
</SELECT>
</TD></TR>
<TR><TD>
<SELECT NAME=cmd>
<OPTION VALUE="edit">の設定を編集
<OPTION VALUE="copy">の設定をコピーし新しい掲示板を作成
<OPTION VALUE="rename">のファイル名を変更
<OPTION VALUE="delete">の掲示板自体を削除
</SELECT>
<INPUT TYPE=submit VALUE=" 　する　 ">
</TD>
</TR>
</TABLE>
</TD></TR></TABLE>
</FORM>
</BLOCKQUOTE>
_HTML_
	}
	print <<_HTML_;

<HR NOSHAD SIZE=1>
<B>掲示板の新規作成</B>
<BLOCKQUOTE>
新しい掲示板を新規に作成するには、このボタンを押して下さい。
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=cmd VALUE=create>
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="掲示板の新規作成">
</FORM>
</BLOCKQUOTE>


<HR NOSHADE SIZE=1>


<B>出入禁止者の設定（全掲示板共通設定）</B>
<BLOCKQUOTE>
出入禁止にしたいリモートホストを設定します。
この設定は全ての掲示板に適応されますから慎重に設定する必要があります。

<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=cmd VALUE="ban">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="出入禁止の設定をする">
</FORM>
</BLOCKQUOTE>

<HR NOSHADE SIZE=1>
<B>掲示板一覧</B>
<BLOCKQUOTE>
<B>$board_count</B> 個の掲示板があります。<P>
各掲示板へのリンクは下\表\の「リンク書式」を参考にしてください。具体的には board.cgi に board=ボードファイル名 という感じでパラメータを指定します。
また、単純に <A HREF="board.cgi">board.cgi</A> に（パラメータ無しで）リンクすると掲示板一覧へアクセスできます。
<P>

<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1>
<TR BGCOLOR=#000050>
<TD NOWRAP><FONT COLOR=#ffffff SIZE=2><B>掲示板の名称</B></TD>
<TD NOWRAP><FONT COLOR=#ffffff SIZE=2><B>リンク書式</B></TD>
<TD NOWRAP><FONT COLOR=#ffffff SIZE=2><B>占有ファイル容量</B></TD>
<TD NOWRAP><FONT COLOR=#ffffff SIZE=2><B>投稿モード</B></TD>
<TD NOWRAP><FONT COLOR=#ffffff SIZE=2><B>公開状態</B></TD>
</TR>
_HTML_

	$size0 = 0;

	foreach(sort keys %boardlist){
		$board = $_;
		&ReadConfig( $board );

		print "<TR BGCOLOR=f0f0f0>\n";
		print "<TD><A HREF=\"board.cgi?board=$board\"><B>$config{'bbstitle'}</B></A></</TD>\n";
		print "<TD><FONT SIZE=2><A HREF=\"board.cgi?board=$board\">board.cgi?board=$board</A></TD>\n";

		$size9 = 0;

		$size1 =  -s "./data/$board.cfg";
		$size9 = $size9 + $size1;

		$size2 =  -s "./data/$board.log";
		$size9 = $size9 + $size2;

		$size1 = int($size1/1024 +1) ;
		$size2 = int($size2/1024 +1) ;
		$size0 = $size0 + $size9;
		$size9 = int($size9/1024 +1) ;

		print "<TD ALIGN=center><FONT SIZE=2>約 $size9 KB</TD>\n";

		if (1 == $config{'readonly'} ){
			print "<TD><FONT SIZE=2>管理者のみ</TD>\n";
		} else {
			print "<TD>&nbsp;</TD>\n";
		}

		if (1 == $config{'disable'} ){
			print "<TD><FONT SIZE=2>閉鎖中</FONT></TD>\n";
		} else {
			print "<TD>&nbsp;</TD>\n";
		}

		print "</TR>\n";

	}

	$size0 = int($size0/1024 +1) ;
	print <<_HTML_;
</TABLE>
<BR>
ファイル容量合計　約 <B>$size0 KB</B>
</BLOCKQUOTE>
_HTML_
	&DrawFooter;
}


sub adjuststr {
	local($s,$max) = @_;
	if ( $max < 0 ) { $max = 20; }
	local($a) = $max - length( $s );
	if ( $max < length( $s )){
		$s = substr($s, 0, $max);
	} else {
		$s = "$s".(" ")x$a;
	}
	$s;
}

#■---------------------------
#■

sub RenameBoard {
	local($s, $err);
	$err = '';

	if (-e "./data/$wparam.cfg"){ $err .= "<LI><B>$wparam</B> は既に存在します。別のファイル名にして下さい</LI>" }
	if ($wparam =~ / /i){ $err .= '<LI>空白スペースは使わないで下さい</LI>';}
	if ($wparam ne '' && $wparam !~ /[0-9a-zA-Z\-\_\ ]+/i){ $err .= '不適切な文字が含まれています';}

	if ( $wparam eq '' || $err ne ''){
		&DrawHeader('ファイル名の変更');
		print <<_HTML_;
<EM>$err</EM>
<P>
<B>$boardlist{$board} ( $board ) </B> のファイル名を変更します。
変更するファイル名を入力して下さい。<BR>
ファイル名に使える文字は<B>半角英数字</B>(a〜z、A〜Z、0〜9)とアンダーバー(_)です｡<BR>
日本語や全角文字は使わないで下さい。
<P>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=cmd VALUE="rename">
<INPUT TYPE=hidden NAME=board VALUE="$board">
<INPUT TYPE=text NAME=wparam VALUE="$wparam">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="ファイル名を変更する">
</FORM>
_HTML_
	} else {
		rename ( "./data/$board.cfg", "./data/$wparam.cfg");
		rename ( "./data/$board.log", "./data/$wparam.log");
		$s = $boardlist{$board};
		delete $boardlist{$board};
		$boardlist{$wparam} = $s;
		$s = $board;
		$board = $wparam;
		&menu("<B>$s</B> から <B>$board</B> へファイル名は変更されました");
	}
}


#■---------------------------
#■

sub CopyBoard {
	local($b) = @_;
	$max_board++;
	$board_count++;
	$board = $max_board;
	&ReadConfig($b);
	$config{'bbstitle'} .= "のコピー";
	$boardlist{$board} = $config{'bbstitle'};
	&WriteConfig( $board );
	&EditBoard;
}

#■---------------------------
#■

sub CreateBoard {
	local($filename);

	&SetDefaultConfig;
	$max_board++;
	$board_count++;
	$board = $max_board;
	$boardlist{$board} = $config{'bbstitle'};
	&WriteConfig($board);

	$filename = "./data/$board.log";
	open(FILE,">$filename");
	close(FILE);
	chmod( 0666 , $filename);
	&EditBoard;
}

#■---------------------------
#■

sub DeleteBoard {

	if ( $wparam ne 'ok' ){
		&DrawHeader('掲示板の削除');
		print <<_HTML_;
<EM>* 掲示板の削除 *</EM><P>
<B>$boardlist{$board}</B> ( $board )の掲示板を削除しますか?<BR>
記事データも全て完全に削除されます。<P>
<TABLE BORDER=0><TR>
<TD>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=cmd VALUE="delete">
<INPUT TYPE=hidden NAME=board VALUE="$board">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=hidden NAME=wparam VALUE="ok">
<INPUT TYPE=submit VALUE="削除する">
</FORM>
</TD>
<TD>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="やめる">
</FORM>
</TD>
</TR>
</TABLE>
_HTML_
	exit;
}

	if  ( $lparam ne 'ok'){
		&DrawHeader('掲示板の削除');
		print <<_HTML_;
<EM>もう一度、念の為に確認しますが、本当に掲示板を削除しますか？</EM><P>
<B>$boardlist{$board}</B> ( $board ) を削除する<P>
<TABLE BORDER=0><TR>
<TD>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=cmd VALUE="delete">
<INPUT TYPE=hidden NAME=board VALUE="$board">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=hidden NAME=wparam VALUE="ok">
<INPUT TYPE=hidden NAME=lparam VALUE="ok">
<INPUT TYPE=submit VALUE="本当に削除する">
</FORM>
</TD>
<TD>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="やめる">
</FORM>
</TD>
</TR>
</TABLE>
_HTML_
	exit;
	}
	$lparam = '';
	unlink( "./data/$board.cfg" );
	unlink( "./data/$board.log" );
	$information = "<EM>$boardlist{$board} ( $board ) は削除されました</EM>";
	delete($boardlist{$board});
	$board_count--;
	&menu;
}

#■---------------------------
#■

sub	UpdateBoard {
	local($err) = '';

	if ( $config{'bbstitle'} eq ''){ $err .= '<LI>掲示板の名称が設定されていません</LI>'; }
	if ( $config{'homepage'} ne '' && $config{'homepage'} !~ /http\:\/\/[\d\w\.\~\-\_\/]+/i){ $err .= "<LI>ホームぺージのURLが不適切です</LI>"; }
	if ( $config{'flush_time'} < 0 )	{	$config{'flush_time'} = 0; }
	if ( $config{'flush_time'} > 999)	{ $config{'flush_time'} = 999; }
	if ( $config{'max_topic'} < 100)		{ $config{'max_topic'} = 100; }
	if ( $config{'max_topic'} > 500)	{ $config{'max_topic'} = 500; }
	if ( $config{'viewcount'} < 1)		{ $config{'viewcount'} = 1; }
	if ( $config{'viewcount'} > 50)	{ $config{'viewcount'} =50; }

	$boardlist{$board} = $config{'bbstitle'};
	&WriteConfig($board);
	&menu("<B>$boardlist{$board}</B> ( $board ) の設定は更新されました");
}


#■---------------------------
#■

sub EditBoard {
	$config{'information'} =~ s/<BR>/\n/ig;
	$config{'menu_list'} =~ s/<BR>/\n/ig;

	&DrawHeader("掲示板の設定");
	print <<_HTML_;
<FORM METHOD="$method" ACTION="$cgi">
<TABLE BORDER=0>

<TR>
<TD>掲示板の名称<EM>*</EM></TD>
<TD><INPUT TYPE=text NAME=bbstitle VALUE="$config{'bbstitle'}" SIZE=50></TD>
</TR>

<TR>
<TD>投稿モード</TD>
<TD><SELECT NAME=readonly>
_HTML_
	if (1 == $config{'readonly'}){
		print "<OPTION VALUE=0>誰でも投稿できる\n";
		print "<OPTION VALUE=1 SELECTED>管理者のみ投稿できる\n";
	} else {
		print "<OPTION VALUE=0 SELECTED>誰でも投稿できる\n";
		print "<OPTION VALUE=1>管理者のみ投稿できる\n";
	}

	print <<_HTML_;
</SELECT></TD></TR>
<TR>
<TD>公開／閉鎖モード</TD>
<TD><SELECT NAME=disable>
_HTML_

	if (1 == $config{'disable'}){
		print "<OPTION VALUE=0>公開\n";
		print "<OPTION VALUE=1 SELECTED>一時閉鎖\n";
	} else {
		print "<OPTION VALUE=0 SELECTED>公開\n";
		print "<OPTION VALUE=1>一時閉鎖\n";
	}

	print <<_HTML_;
</SELECT></TD></TR>
<TR><TD COLSPAN=2><HR NOSHADE SIZE=1></TD></TR>

<TR>
<TD>背景イメージ画像</TD>
<TD><INPUT TYPE=text NAME=image_background VALUE="$config{'image_background'}" SIZE=50></TD>
</TR>

<TR>
<TD>ホームページのURL<BR><FONT SIZE=2>（http://から記述する）</FONT></TD>
<TD><INPUT TYPE=text NAME=homepage VALUE="$config{'homepage'}" SIZE=50></TD>
</TR>

<TR><TD COLSPAN=2><HR NOSHADE SIZE=1></TD></TR>

<TR>
<TD>ページ全体の文字色</TD>
<TD><INPUT TYPE=text NAME=color_text VALUE="$config{'color_text'}" SIZE=20><FONT COLOR=$config{'color_text'}> ■ </FONT><FONT SIZE=2>$config{'color_text'}</FONT></TD>
</TR>

<TR>
<TD>ページ全体の背景色</TD>
<TD><INPUT TYPE=text NAME=color_bg VALUE="$config{'color_bg'}" SIZE=20><FONT COLOR=$config{'color_bg'}> ■ </FONT><FONT SIZE=2>$config{'color_bg'}</FONT></TD>
</TR>

<TR>
<TD>タイトルの文字色</TD>
<TD><INPUT TYPE=text NAME=color_subject VALUE="$config{'color_subject'}" SIZE=20><FONT COLOR=$config{'color_subject'}> ■ </FONT><FONT SIZE=2>$config{'color_subject'}</FONT></TD>
</TR>

<TR>
<TD>タイトルの背景色</TD>
<TD><INPUT TYPE=text NAME=color_subject_bg VALUE="$config{'color_subject_bg'}" SIZE=20><FONT COLOR=$config{'color_subject_bg'}> ■ </FONT><FONT SIZE=2>$config{'color_subject_bg'}</FONT></TD>
</TR>

<TR>
<TD>テキスト文章の文字色</TD>
<TD><INPUT TYPE=text NAME=color_comment_text VALUE="$config{'color_comment_text'}" SIZE=20><FONT COLOR=$config{'color_comment_text'}> ■ </FONT><FONT SIZE=2>$config{'color_comment_text'}</FONT></TD>
</TR>

<TR>
<TD>テキスト文章の背景色</TD>
<TD><INPUT TYPE=text NAME=color_comment_bg VALUE="$config{'color_comment_bg'}" SIZE=20><FONT COLOR=$config{'color_comment_bg'}> ■ </FONT><FONT SIZE=2>$config{'color_comment_bg'}</FONT></TD>
</TR>

<TR>
<TD>強調\表\示の文字色</TD>
<TD><INPUT TYPE=text NAME=color_em VALUE="$config{'color_em'}" SIZE=20><FONT COLOR=$config{'color_em'}> ■ </FONT><FONT SIZE=2>$config{'color_em'}</FONT></TD>
</TR>

<TR>
<TD>引用文の文字色</TD>
<TD><INPUT TYPE=text NAME=color_quote VALUE="$config{'color_quote'}" SIZE=20><FONT COLOR=$config{'color_quote'}> ■ </FONT><FONT SIZE=2>$config{'color_quote'}</FONT></TD>
</TR>

<TR>
<TD>リンクの文字色</TD>
<TD><INPUT TYPE=text NAME=color_link VALUE="$config{'color_link'}" SIZE=20><FONT COLOR=$config{'color_link'}> ■ </FONT><FONT SIZE=2>$config{'color_link'}</FONT></TD>
</TR>

<TR><TD COLSPAN=2><HR NOSHADE SIZE=1></TD></TR>

<TR>
<TD>NEWで\表\示する時間</TD>
<TD><INPUT TYPE=text NAME=flush_time VALUE="$config{'flush_time'}" SIZE=10>時間</TD>
</TR>

<TR>
<TD>一度に\表\示する記事の件数</TD>
<TD><INPUT TYPE=text NAME=viewcount VALUE="$config{'viewcount'}" SIZE=10>記事（1〜50)</TD>
</TR>

<TR>
<TD>記録保存する最大記事数<BR></TD>
<TD><INPUT TYPE=text NAME=max_topic VALUE="$config{'max_topic'}" SIZE=10>記事を記録（100〜500) *親記事の数です*</TD>
</TR>

<TR>
<TD>タイトル一覧リストの\表\示</TD>
<TD><SELECT NAME=show_topiclist>
_HTML_

	if (1 == $config{'show_topiclist'}){
		print "<OPTION VALUE=1 SELECTED>\表\示する\n";
		print "<OPTION VALUE=0>\表\示しない\n";
	} else {
		print "<OPTION VALUE=1>\表\示する\n";
		print "<OPTION VALUE=0 SELECTED>\表\示しない\n";
	}

	print <<_HTML_;
</SELECT></TD></TR>

<TR>
<TD>PROXY制限</TD>
<TD><SELECT NAME=proxy>
_HTML_

	if ( 1 == $config{'proxy'}){
		print "<OPTION VALUE=0>制限無し\n";
		print "<OPTION VALUE=1 SELECTED>PROXY経由での投稿は出来ない\n";
	} else {
		print "<OPTION VALUE=0 SELECTED>制限無し\n";
		print "<OPTION VALUE=1>PROXY経由での投稿は出来ない\n";
	}

	print <<_HTML_;
</SELECT></TD></TR>


<TR><TD COLSPAN=2><HR NOSHADE SIZE=1></TD></TR>

<TR>
<TD>メニューの使用</TD>
<TD><SELECT NAME=menu_use>
_HTML_

	if ( 1 == $config{'menu_use'} ){
		print "<OPTION VALUE=0>メニューを使わない\n";
		print "<OPTION VALUE=1 SELECTED>メニューを使う\n";
	} else {
		print "<OPTION VALUE=0 SELECTED>メニューを使わない\n";
		print "<OPTION VALUE=1>メニューを使う\n";
	}

	print <<_HTML_;
</SELECT></TD></TR>

<TR>
<TD>メニューの名称</TD>
<TD><INPUT TYPE=text NAME=menu_name VALUE="$config{'menu_name'}">
</TR>

<TR>
<TD>メニューの項目<BR><FONT SIZE=2>(1行1項目)</FONT></TD>
<TD>
<TEXTAREA NAME=menu_list WRAP=soft ROWS=10 COLS=20>$config{'menu_list'}</TEXTAREA>
</TD>
</TR>

<TR><TD COLSPAN=2><HR NOSHADE SIZE=1></TD></TR>
<TR><TD>画面上部の\表\示するHTML</TD>
<TD><TEXTAREA NAME=information WRAP=soft ROWS=20 COLS=50>$config{'information'}</TEXTAREA></TD>
</TR>
</TABLE><P>
<HR NOSHADE SIZE=1>
<CENTER>
<TABLE BORDER=0><TR>
<TD>
<INPUT TYPE=hidden NAME=cmd VALUE=update>
<INPUT TYPE=hidden NAME=board VALUE="$board">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="変更を登録する">
</FORM>
</TD>
<TD>
<FORM METHOD="$method" ACTION="$cgi">
<INPUT TYPE=hidden NAME=pwd VALUE="$pwd">
<INPUT TYPE=submit VALUE="やめる">
</FORM>
</TD></TR></TABLE></CENTER>
_HTML_
	exit;
}

#■---------------------------
#■

sub decode {
	local($buf);

	if ($ENV{'REQUEST_METHOD'} eq "$method") { 
		if($ENV{'CONTENT_LENGTH'} > $max_comment*2){
			&error("送信データ量が多すぎます");
		}
		read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
	} else {
		$buf = $ENV{'QUERY_STRING'};
	}

	@pairs = split(/&/,$buf);

	foreach $pair (@pairs) {
		local($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		&jcode'convert(*value,'sjis');
		&jcode'h2z_sjis(*value);
		$value =~ s/\&/\&amp;/g;
		$value =~ s/\"/\&quot;/g;
		$value =~ s/</\&lt;/g;
		$value =~ s/>/\&gt;/g;    
		$FORM{$name} .= "\0" if (defined($FORM{$name}));
		$FORM{$name} .= $value;
	}

	$cmd = $FORM{'cmd'};
	$wparam = $FORM{'wparam'};
	$lparam = $FORM{'lparam'};
	$pwd = $FORM{'pwd'};
	$board = $FORM{'board'};

	&SetDefaultConfig;
	foreach(sort keys %config){
		$config{$_} = $FORM{$_};
	}

	$config{'information'} =~ s/\r\n/\n/g;
	$config{'information'} =~ s/\r|\n/ /g;

	$config{'menu_list'} =~ s/\r\n/\n/g;
	$config{'menu_list'} =~ s/\r|\n/<BR>/g;
}


#■---------------------------
#■

sub ReadConfig {
	local($b) = @_;
	local($name,$value);
	open(FILE,"./data/$b.cfg") || &error ("can't open $b.cfg");
	while(<FILE>){
		chop;
		($name,$value) = split(/<>/);
		$config{ $name } = $value;
	}
	close(FILE);
}

#■---------------------------
#■

sub WriteConfig {
	local($b) = @_;
	local($tmpfile) = "./data/$b.tmp";
	open(TMP,">$tmpfile") || &error ("can't open $tmpfile");
	foreach(sort keys %config){
		print TMP "$_<>$config{$_}\n";
	}
	close(TMP);
	rename( $tmpfile, "./data/$b.cfg");
	chmod( 0666, "./data/$b.cfg");
}

#■---------------------------
#■

sub error {
	local($errmsg) = @_;
	&DrawHeader('エラー');
	print $errmsg;
	&DrawFooter;
	exit;
}

#■---------------------------
#■

sub DrawHeader {
	local($title) = @_;
	if ( $title eq ''){ $title = 'ほだれ祭　ＣＧＩ設定画面'; }
	print "Content-type: text/html\n\n";
	print <<_HTML_;
<HTML>
<HEAD>
$lparam
<TITLE>ほだれ祭　ＣＧＩ管理画面</TITLE>
<STYLE>
TH { text-align:left; vertical-align: top; background-color:#e0e0e0; }
TD { vertical-align: top; }
EM { text-decoration:none; font-style: normal; font-weight: bold; color: red; }
</STYLE>
</HEAD>
<BODY>
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0 BGCOLOR=red>
<TR><TD ALIGN=center><B><FONT COLOR=#ffffff>$title</FONT></B></TD></TR></TABLE>
<DIV ALIGN=right><FONT SIZE=2>この管理画面に <B>$ENV{'REMOTE_HOST'}</B> ( $ENV{'REMOTE_ADDR'} ) からアクセスしています</DIV></FONT>

<P>
$information
<P>
_HTML_
}

#■---------------------------
#■

sub DrawFooter {
	print <<_HTML_;
<P>
<HR NOSHADE SIZE=1>
<DIV ALIGN=center>
<FONT SIZE=2>
$copyright
</FONT>
</DIV>
</BODY>
</HTML>
_HTML_
}

