#!/usr/bin/perl

###############################################
#   sche6.cgi
#      V1.3 (2003.12.30)
#                     Copyright(C) CGI-design
###############################################

$script = 'sche.cgi';
$base = './schedata';				#データ格納ディレクトリ
$opfile = "$base/option.txt";		#オプションファイル
$style_file = "$base/style.css";	#スタイルシート

@week = ('日','月','火','水','木','金','土');
@mdays = (31,28,31,30,31,30,31,31,30,31,30,31);

open IN,"$opfile";		$opdata = <IN>;		close IN;
if (!$opdata) {
	$pass = &crypt('cgi');
	chmod(0666,$opfile);	open OUT,">$opfile";
	print OUT "スケジュール,$pass,http://www.niigata-jc.com/,$base/home.gif,$base/back.gif,$base/next.gif,$base/wall.gif,#800000,#ff0000,#000000,#ff0000,#fef0ef,#0000ff,#eeffff,#000000,#fef9e7,#ffff00,10,10,18,104,2";
	close OUT;
	foreach (1 .. 12) {chmod(0666,"$base/d2004$_.log");}
}

### メイン処理 ###
if ($ENV{'REQUEST_METHOD'} eq "POST") {read(STDIN, $in, $ENV{'CONTENT_LENGTH'});} else {$in = $ENV{'QUERY_STRING'};}
@pair = split(/&/,$in);
foreach (@pair) {
	($n,$val) = split(/=/);
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	if ($n eq 'holi') {$in_holi[$val] = 1;} else {$in{$n} = $val;}
}
$mode = $in{'mode'};

open IN, "$opfile";
($title,$pass,$home,$home_icon,$back_icon,$next_icon,$bg_img,$title_color,$sub_color,$sche_color,$holi_color,$holibg_color,$sat_color,$satbg_color,$day_color,$daybg_color,$today_color,$sub_size,$sche_size,$subc_size,$schec_size,$scher_size) = split(/,/,<IN>);
close IN;
@wcolor = ($holi_color,$day_color,$day_color,$day_color,$day_color,$day_color,$sat_color);

($sec,$min,$hour,$nowday,$nowmon,$nowyear,$nowwday) = localtime;
$nowyear += 1900;
$nowmon++;

$logyear = $in{'year'};
$logmon = $in{'mon'};
if (!$logyear) {$logyear = $nowyear; $logmon = $nowmon;}
$logfile = "$base/d$logyear$logmon.log";

$mdays = $mdays[$logmon - 1];
if ($logmon == 2 && $logyear % 4 == 0) {$mdays = 29;}

print "Content-type: text/html\n\n";
print <<"EOM" ;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>$title $logmon月</title>
<link href="../fonts.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="$style_file">
</head>
EOM

##スクリプトここから
print <<"EOM" ;
EOM

##スクリプトここまで
print "<body bgcolor=\"#DEE1C8\" text=\"#666666\" leftmargin=\"0\" topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\">\n";

if ($mode eq 'admin') {&admin;} else {&main;}
print "</body></html>\n";
exit;

###
sub main {
#-----ヘッダここから
print <<"EOM" ;
<table width="761" height="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr>
    <td width="16" height="7" valign="top" background="../image/b02.jpg"><img src="../image/b01.jpg" width="16" height="7"></td>
    <td width="180" rowspan="3" valign="top"><table width="180" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td><img src="../image/t01.gif" width="180" height="7"></td>
      </tr>
      <tr>
        <td><div align="center"><img src="../image/logo01.gif" width="180" height="115"><br>
              <img src="../image/logo02.jpg" width="180" height="70"><br>
              <a href="../pc_index.html"><img src="../image/bt00.gif" alt="トップページ" width="180" height="25" border="0"></a><br>
              <a href="../rekishi.html"><img src="../image/bt01.gif" alt="二葉幼稚園の歴史" width="180" height="25" border="0"></a><br>
              <a href="../gaiyou.html"><img src="../image/bt02.gif" alt="二葉幼稚園の概要" width="180" height="25" border="0"></a><br>
              <a href="../days.html"><img src="../image/bt03.gif" alt="二葉幼稚園での一日" width="180" height="25" border="0"></a><br>
              <a href="../address.html"><img src="../image/bt04.gif" alt="二葉幼稚園の所在地" width="180" height="25" border="0"></a><br>
              <img src="../image/b05.gif" width="180" height="22"><br>
              <a href="sche.cgi"><img src="../image/bt05.gif" width="180" height="25" border="0" alt="スケジュール"></a><br>
            <a href="../gaiyou.html#gai11"><img src="../image/sumire.gif" alt="スケジュール" width="180" height="25" border="0"></a><br>
              <a href="../bbs/bbs.cgi?id=en&pass=tyo"><img src="../image/bt06.gif" width="180" height="25" border="0" alt="園長先生の日記"></a><br>
<a href="../glossary.html"><img src="../image/2.gif" alt="二葉基礎用語集" width="180" height="25" border="0"></a><br>
<a href="../entrance.html"><img src="../image/b_en.gif" alt="入園のご案内" width="180" height="25" border="0"></a><br>
<a href="../paper.html"><img src="../image/11.gif" alt="届出用紙ダウンロード" width="180" height="25" border="0"></a><br>
              <a href="../mail.cgi"><img src="../image/bt07.gif" width="180" height="25" border="0" alt="お問い合わせ"></a><br>
              <img src="../image/b05.gif" width="180" height="22"><br>
              <br>
              <a href="../bbs/bbs.cgi"><img src="../image/bana01.jpg" width="166" height="56" border="0" alt="二葉通信"></a> 
            </div></td>
      </tr>
    </table>
    </td>
    <td width="549" rowspan="2" valign="top" background="../image/b04.jpg"><table width="549" border="0" cellpadding="0" cellspacing="0" class="font12-1">
        <tr> 
          <td width="549" height="9" colspan="2"><img src="../image/t02.jpg" width="549" height="9"></td>
        </tr>
        <tr> 
          <td colspan="2"><img src="../image/sch_01.jpg" width="549" height="208"></td>
        </tr>
        <tr> 
          <td><img src="../image/spase.gif" width="19" height="60"></td>
          <td width="549" valign="bottom"><img src="../image/sch_02.gif" width="530" height="47"></td>
        </tr>
        <tr> 
          <td rowspan="3"><img src="../image/spase.gif" width="19" height="8"></td>
          <td>　二葉幼稚園では、年間を通じて様々な催し物を\予\定しております。<br><br></td>
        </tr>
        <tr> 
          <td>
            <table border="0" cellpadding="2" cellspacing="1" width="521" bgcolor="#F0EEEC" class="font12-1">
              <tr>
                <td align="center">
EOM
#-----ヘッダここまで
	&dsp;
#-----フッタここから
print <<"EOM" ;
</td>
</tr>
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="455" bgcolor="#F0EEEC" class="font12-1">
<tr>
<td>スケジュールは変更になる場合がございます。</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
        </tr>
      </table></td>
    <td width="16" rowspan="3" valign="top" background="../image/b03.jpg"><img src="../image/b03.jpg" width="16" height="1"></td>
  </tr>
  <tr>
    <td rowspan="2" valign="top" background="../image/b02.jpg"><img src="../image/b02.jpg" width="16" height="1"></td>
  </tr>
  <tr>
    <td valign="bottom" background="../image/b04.jpg">
    <br><br><br>
<table width="549" border="0" cellpadding="0" cellspacing="0">
      <tr>
          <td><table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr> 
                <td width="19"><img src="../image/spase.gif" width="19" height="10"></td>
                <td><table width="530" border="0" cellspacing="0" cellpadding="0" class="font10">
                    <tr> 
                      <td width="103"><img src="../image/logo03.gif" width="93" height="10"></td>
                      <td>〒951-8118 新潟市中央区西中町714番地 TEL 025-222-4509 FAX 025-222-9130</td>
                    </tr>
                  </table></td>
              </tr>
              <tr> 
                <td colspan="2"><img src="../image/spase.gif" width="5" height="5"></td>
              </tr>
              <tr> 
                <td colspan="2"><img src="../image/bot03.jpg" width="549" height="29"></td>
              </tr>
            </table>
          </td>
      </tr>
    </table>
    </td>
  </tr>
</table>
EOM
#-----フッタここまで
}

###
sub dsp {
	if (-e $logfile) {
		open IN, "$logfile";
		while (<IN>) {
			($day,$com,$sub,$holi) = split(/<>/);
			$com[$day] = $com;
			$sub[$day] = $sub;
			$holi[$day] = $holi;
		}
		close IN;
	}
	print "<table width=455 cellspacing=2 cellpadding=0><tr>\n" ;
	print "<td width=33% valign=\"bottom\" style=\"font-size:16px\"><b>$logyear年</b></td><td align=center width=34%>\n";
	$mon = $logmon - 1;

	if ($mode eq "admin") {
		if ($mon < 1) {$mon = 12; $year = $logyear - 1;} else {$year = $logyear;}
		print "<a href=\"$script?year=$year&mon=$mon&mode=admin&pass=$in{'pass'}\"><img src=\"$back_icon\" border=0></a>　\n";
		print "<b>$logmon月</b>";
		$mon = $logmon + 1;
		if (12 < $mon) {$mon = 1; $year = $logyear + 1;} else {$year = $logyear;}
		print "　<a href=\"$script?year=$year&mon=$mon&mode=admin&pass=$in{'pass'}\"><img src=\"$next_icon\" border=0></a></td><td>　</td></tr></table>\n";
	} else {
		if ($mon < 1) {$mon = 12; $year = $logyear - 1;} else {$year = $logyear;}
		print "<a href=\"$script?year=$year&mon=$mon\"><img src=\"$back_icon\" border=0></a>　\n";
		print "<b>$logmon月</b>";
		$mon = $logmon + 1;
		if (12 < $mon) {$mon = 1; $year = $logyear + 1;} else {$year = $logyear;}
		print "　<a href=\"$script?year=$year&mon=$mon\"><img src=\"$next_icon\" border=0></a></td><td width=33%>　</td></tr></table>\n";
	}

	print "<table width=455 bgcolor=\"#aaaaaa\" cellspacing=1 cellpadding=3><col span=1 align=right style=\"font-size:12px\">\n";
	&get_date($logyear,$logmon,1);
	$w = $wday;
	for ($k=1; $k<=$mdays; $k++) {
		$wcolor = $wcolor[$w];
		if ($logyear == $nowyear && $logmon == $nowmon && $k == $nowday) {$bcday = " bgcolor=\"$today_color\"";} else {$bcday = '';}
		if (!$w) {$bc = $holibg_color;} elsif ($w == 6) {$bc = $satbg_color;} else {$bc = $daybg_color;}
		if ($holi[$k]) {$bc = $holibg_color; $wcolor = $holi_color;}

		print "<tr bgcolor=\"$bc\"><td width=60><font color=\"$wcolor\"><b>$k</b>($week[$w])</font></td><td$bcday>\n";
		if ($mode eq 'admin') {
			if ($holi[$k]) {$chk = ' checked';} else {$chk = '';}
			print "<input type=checkbox name=holi value=\"$k\"$chk>\n";
			print "<input type=text size=$subc_size name=sub$k value=\"$sub[$k]\">\n";
			$com[$k] =~ s/<br>/\r/g;
			print "<textarea cols=$schec_size rows=$scher_size name=com$k wrap=soft>$com[$k]</textarea>";
		} else {
			if ($sub[$k]) {$sub = "<font color=\"$sub_color\" style=\"font-size: $sub_size"."pt\">$sub[$k]</font>　";} else {$sub = '';}
			$com[$k] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
			print "$sub<font color=\"$sche_color\" style=\"font-size: $sche_size","pt\">$com[$k]</font>";
		}
		print "</td></tr>\n";
		$w++;
		if (6 < $w) {$w = 0;}
	}
	print "</table>\n";
}

###
sub get_date {
	($y,$m,$d) = @_;
	if( $m < 3 ){$y--; $m+=12;}
	$wday = ($y+int($y/4)-int($y/100)+int($y/400)+int((13*$m+8)/5)+$d)%7;
}

###
sub admin {
	$inpass = $in{'pass'};
	if ($inpass eq '') {
		print "<table width=700><tr><td><a href=\"$script\">[スケジュール表\示へ戻る]</a></td></tr></table>\n";
		print "<br><br><br><br><h4>パスワードを入力して下さい</h4>\n";
		print "<form action=\"$script\" method=\"POST\">\n";
		print "<input type=hidden name=mode value=\"admin\">\n";
		print "<input type=password name=pass size=10 maxlength=8>\n";
		print "<input type=submit value=\"認証\"></form>\n";
		print "</center></body></html>\n";
		exit;
	}
	$mat = &decrypt($inpass,$pass);
	if (!$mat) {&error("パスワードが違います");}

	print "<br><table width=700 bgcolor=\"#8c4600\" cellspacing=5 cellpadding=0><tr><td>　<a href=\"$script\"><font color=\"#ffffff\"><b>スケジュール表\示へ戻る</b></font></a></td>\n";
	print "<td align=right><a href=\"$script?mode=admin&pass=$inpass\"><font color=\"#ffffff\"><b>スケジュール編集</b></font></a>\n";
	print "　　<a href=\"$script?mode=admin&act=set&pass=$inpass\"><font color=\"#ffffff\"><b>基本設定</b></font></a></td><td width=10></td></tr></table><br>\n";
	if ($in{'act'} eq 'set') {&setup;} else {&edtin;}
}

###
sub edtin {
	if ($in{'wrt'}) {
		if (-e $logfile) {$flag = 1;} else {$flag = 0;}
		open OUT, ">$logfile";
		foreach (1 .. $mdays) {
			$com = $in{"com$_"};
			$com =~ s/\r\n|\r|\n/<br>/g;
			print OUT "$_<>$com<>$in{\"sub$_\"}<>$in_holi[$_]<>\n";
		}
		close OUT;
		if (!$flag) {chmod(0666,$logfile);}
	}
	print "<form action=\"$script\" method=\"POST\">\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=wrt value=\"on\">\n";
	print "<input type=hidden name=year value=\"$logyear\">\n";
	print "<input type=hidden name=mon value=\"$logmon\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "下表\に休日チェック・特記事項・スケジュールを入力後、「書込む」をクリックして下さい。　<input type=submit value=\"書込む\"><br>\n";
	&dsp;
	print "</form><br>\n";
}

###
sub setup {
	if ($in{'wrt'}) {
		if ($in{'newpass'} ne '') {$pass = &crypt($in{'newpass'});}
		$title = $in{'title'};
		$home = $in{'home'};
		$home_icon = $in{'home_icon'};
		$back_icon = $in{'back_icon'};
		$next_icon = $in{'next_icon'};
		$bg_img = $in{'bg_img'};

		$title_color = $in{'color0'};
		$sub_color = $in{'color1'};
		$sche_color = $in{'color2'};
		$holi_color = $in{'color3'};
		$holibg_color = $in{'color4'};
		$sat_color = $in{'color5'};
		$satbg_color = $in{'color6'};
		$day_color = $in{'color7'};
		$daybg_color = $in{'color8'};
		$today_color = $in{'color9'};

		$sub_size = $in{'sub_size'};
		$sche_size = $in{'sche_size'};
		$subc_size = $in{'subc_size'};
		$schec_size = $in{'schec_size'};
		$scher_size = $in{'scher_size'};

		open OUT, ">$opfile";
		print OUT "$title,$pass,$home,$home_icon,$back_icon,$next_icon,$bg_img,$title_color,$sub_color,$sche_color,$holi_color,$holibg_color,$sat_color,$satbg_color,$day_color,$daybg_color,$today_color,$sub_size,$sche_size,$subc_size,$schec_size,$scher_size";
		close OUT;
	}
	print "<form action=\"$script\" method=\"POST\">\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=act value=\"set\">\n";
	print "<input type=hidden name=wrt value=\"on\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<b>下記について設定した後、「送信する」を押して下さい。</b><br><br>\n";
	print "<input type=submit value=\"送信する\"><br><br>\n";

	print "<table bgcolor=\"#dddddd\" cellspacing=10><tr><td><table cellspacing=1 cellpadding=0>\n";
	print "<tr><td><b>タイトル</b></td><td><input type=text name=title size=\"40\" value=\"$title\"></td></tr>\n";
	print "<tr><td><b>ホームURL</b></td><td><input type=text size=70 name=home value=\"$home\"></td></tr>\n";
	print "<tr><td><b>ホームアイコン</b></td><td><input type=text size=70 name=home_icon value=\"$home_icon\">";
	if ($home_icon) {print "　<img src=\"$home_icon\">";}
	print "</td></tr>\n";
	print "<tr><td><b>BACKアイコン</b></td><td><input type=text size=70 name=back_icon value=\"$back_icon\">　<img src=\"$back_icon\"></td></tr>\n";
	print "<tr><td><b>NEXTアイコン</b></td><td><input type=text size=70 name=next_icon value=\"$next_icon\">　<img src=\"$next_icon\"></td></tr>\n";
	print "<tr><td><b>壁紙</b></td><td><input type=text size=70 name=bg_img value=\"$bg_img\">";
	if ($bg_img) {print "　<img src=\"$bg_img\" width=30>";}
	print "</td></tr>\n";

	print "<tr><td></td><td><a href=\"$base/color.htm\" target=\"_blank\">カラーコード</a></td></tr>\n";
	@name = ('タイトル','特記事項','スケジュール','休日の日付','休日の背景色','土曜日の日付','土曜日の背景色','平日の日付','平日の背景色','本日の背景色');
	@data = ($title_color,$sub_color,$sche_color,$holi_color,$holibg_color,$sat_color,$satbg_color,$day_color,$daybg_color,$today_color);
	foreach (0 .. $#name) {
		print "<tr><td><b>$name[$_]</b></td><td><table cellspacing=0 cellpadding=0><tr>\n";
		print "<td><input type=text name=color$_ size=10 value=\"$data[$_]\"></td>\n";
		print "<td width=5></td><td width=80 bgcolor=\"$data[$_]\"></td></tr></table></td></tr>\n";
	}
	print "<tr><td><b>文字サイズ</b></td><td>特記事項 <input type=text size=2 name=sub_size value=\"$sub_size\">pt　　　スケジュール <input type=text size=2 name=sche_size value=\"$sche_size\">pt</td></tr>\n";
	print "<tr><td><b>入力フォーム</b></td><td>特記事項 幅 <input type=text size=4 name=subc_size value=\"$subc_size\">\n";
	print "　　　スケジュール 幅 <input type=text size=4 name=schec_size value=\"$schec_size\">　高 <input type=text size=4 name=scher_size value=\"$scher_size\"></td></tr>\n";
	print "<tr><td><b>パスワード変更</b></td><td><input type=password name=newpass size=10 maxlength=8>（英数8文字以内）</td></tr>\n";
	print "</table></td></tr></table></form>\n";
}

###
sub crypt {
	@salt = ('a' .. 'z','A' .. 'Z','0' .. '9');
	srand;
	$salt = "$salt[int(rand($#salt))]$salt[int(rand($#salt))]";
	return crypt($_[0],$salt);
}

###
sub decrypt {
	$salt = $_[1] =~ /^\$1\$(.*)\$/ && $1 || substr($_[1],0,2);
	if (crypt($_[0],$salt) eq $_[1] || crypt($_[0],'$1$' . $salt) eq $_[1]) {return 1;}
	return 0;
}

###
sub error {
	print "<br><br><br><br><h3>ERROR !!</h3><font color=red><b>$_[0]</b></font>\n";
	print "</center></body></html>\n";
	exit;
}
