#!/usr/bin/perl
############################################################
# Copyright 2001-2004 Rex Pin-Yi Huang      rex@therex.net #
# Created 12/12/2001              Last Modified 09/24/2006 #
############################################################

# Including Variables
use Fcntl;
require 'gary_lib.pl';

&get_input;
if ($FORM{'act'} ne 'login' && $FORM{'act'} ne 'register' && $FORM{'act'} ne 'write_register')
{ &check_access; }
&get_time;
if ($FORM{'act'} eq 'login') {
   if(&login_check) {
   	&show_login;
   	my $msg_tmp=&get_msg;
    	&show_main($msg_tmp);
    	&update_top10; 	
    } else {
    	foreach my $key_tmp(keys %COOKIE) { $COOKIE{$key_tmp}=""; }
        $COOKIE{'gid'}=$superuser;
    	&html_top($sysename." ".$sysname);
    	&close_link;
    	print "<br><br><br><div align=center><font color=red size=+2><b>帳號或密碼錯誤！！請確認後重新登入！！</b></font></div><br><br><br>\n";
    	&html_bottom;
   }
} elsif ($FORM{'act'} eq 'main') {
   &show_main;
} elsif ($FORM{'act'} eq 'board') {
   if ($FORM{'message'}) {
      $error_tmp=&write_board;
      &show_main($error_tmp);
    } else {
      &show_main("您輸入的留言為空白，請重新輸入！");
   }
} elsif ($FORM{'act'} eq 'addr') {
   &show_addr;
} elsif ($FORM{'act'} eq 'addr_prt') {
   &print_addr;   
} elsif ($FORM{'act'} eq 'msg') {
   &clear_input;
   @info=("本簡訊服務不是手機傳簡訊唷！訊息將會在被傳訊者下次登入時收到！！");
   if($FORM{'msg'}) {
      &write_msg;
      &html_top($listname3,"您留給 <font color=blue>$FORM{'receiver'}</font> 的簡訊已經記錄，訊息將於 <font color=blue>$FORM{'receiver'}</font> 下次上站時自動送出！","",@info);
    } else {
      if($FORM{'receiver'}) {
         &html_top($listname3,"您輸入的簡訊容為空白，請重新輸入！！","",@info);
       } else {
         &html_top($listname3,"","",@info);
      }
   }
   &show_msg;

} elsif ($FORM{'act'} eq 'photo') {
   &show_photo;
} elsif ($FORM{'act'} eq 'chginfo') {
   if ($FORM{'mode'} eq 'passwd') {
      my @info_tmp=("<font color=red>新密碼不可含有 & , &gt; , &lt; 及空白字元！</font>");
      my $link_tmp = &get_ln4_link;   	
      if(!$FORM{'edit'}) {
         &html_top($listname4,"",$link_tmp,@info_tmp);
       } else {
         &clear_input;
         if ($FORM{'newpass'} eq "" || $FORM{'renewpass'} eq "") {
            &html_top($listname4,"您所輸入的新密碼不可為空白，請重新輸入！",$link_tmp,@info_tmp);
         } elsif ($FORM{'newpass'} ne $FORM{'renewpass'}) {
            &html_top($listname4,"您所輸入的新密碼與確認密碼不相符，請重新輸入！",$link_tmp,@info_tmp);
         } elsif ($FORM{'newpass'} =~ /&/) {
            &html_top($listname4,"您所輸入的新密碼不可含有 & , &gt; , &lt; 字元，請重新輸入！",$link_tmp,@info_tmp);
         } else {
            &write_passwd($link_tmp,@info_tmp);
         }
      }
      &change_passwd;
   } elsif ($FORM{'mode'} eq 'addr') {
      my @info_tmp=(
"<font color=red>若您的個人資料已經填寫正確，也請按下確認鈕，系統將更新登錄日期以避免產生逾期警告訊息。</font>",
"除永久資料務必填寫外，其他欄位沒有請空白。",
"請盡可能填妥您的電子信箱，以便寄發通告時能快速通知到您。",
"若您的目前資料與永久資料相同，請將目前資料欄位空白。"
);

      my $link_tmp = &get_ln4_link;
      if(!$FORM{'edit'}) {
         &html_top($listname4,"",$link_tmp,@info_tmp);
       } else {
         &write_addr;
         &html_top($listname4,"您的個人資料已經更新完成，您的通訊錄資料是最新的！",$link_tmp,@info_tmp);
      }
      &change_addr;
   } elsif ($FORM{'mode'} eq 'defaultgroup') {
      my $link_tmp = &get_ln4_link;
      if(!$FORM{'edit'}) {
         &html_top($listname4,"",$link_tmp); 
       } else {
         &write_defaultgroup;
         &html_top($listname4,"您的預設登入群組已經更新完成，下次登入本網站時將採用新的設定！",$link_tmp);
      }
      &change_defaultgroup;
   }
} elsif ($FORM{'act'} eq 'chgroup') {
   if ($FORM{'newgroup'}){
      &change_group;
    } else {
      &show_group;
   }
} elsif ($FORM{'act'} eq 'maintain') {
   if ($COOKIE{'gowner'} eq "" && $COOKIE{'suser'} eq "") {
      print "Location: $indexurl\n\n";
      exit 0;
   }	
   if ($FORM{'mode'} eq 'addnews') {
      my @info_tmp=("若您採用說明視窗，請避免使用Enter，讓系統自動換行以增進輸出美觀。");
      my $link_tmp = &get_ln7_link;   	
      if(!$FORM{'edit'}) {
         &html_top($listname7,"",$link_tmp,@info_tmp);
       } else {
         &write_news;
         &html_top($listname7,"您欲新增的 <font color=blue>最新消息</font> 已經記錄，請檢視網頁是否顯示正常！！",$link_tmp);
      }
      &add_news;
   } elsif ($FORM{'mode'} eq 'editnews') {
      my @info_tmp=(
"下面為最近十筆的最新消息資料，打勾代表該筆資料將於群組首頁中顯示。",
"若您不希望顯示某筆資料，請取消其前方的勾勾即可。",
"群組首頁中，最多僅顯示五筆資料。"
);
      my $link_tmp = &get_ln7_link;   	
      if(!$FORM{'edit'}) {
         &html_top($listname7,"",$link_tmp,@info_tmp);
       } else {
         &edit_news;
         &html_top($listname7,"<font color=blue>最新消息</font> 已經更新，請檢視網頁是否顯示正常！",$link_tmp);
      }
      &show_news;
   } elsif ($FORM{'mode'} eq 'editaddr') {
      my @info_tmp=("請點選欲更新的姓名，再按確認按鈕。");
      my $link_tmp = &get_ln7_link;   	
      if(!$FORM{'edit'}) {
         &html_top($listname7,"",$link_tmp,@info_tmp);
       } else {
         &update_addr;
         &update_rate;
         &html_top($listname7,"您選定的成員個人資料已經更新完成！",$link_tmp);
      }
      &edit_addr;
   } elsif ($FORM{'mode'} eq 'listaddr') {
      &list_addr;      
   } elsif ($FORM{'mode'} eq 'thought') {
      my $link_tmp = &get_ln7_link;   	
      if(!$FORM{'edit'}) {
         &html_top($listname7,"",$link_tmp);
       } else {
         &textarea_input("thought");
         &write_thought;
         &html_top($listname7,"<font color=blue>Thought for the Day</font> 已經更新，請檢視網頁是否顯示正常！",$link_tmp);
      }
      &change_thought;            
   } elsif ($FORM{'mode'} eq 'other') {
      &show_other;
   }
} elsif ($FORM{'act'} eq 'logout') {
   &show_logout;
} elsif ($FORM{'act'} eq 'register') {
   foreach my $key_tmp(keys %COOKIE) { $COOKIE{$key_tmp}=""; }
   $COOKIE{'gid'}=$superuser;
   my @info_tmp=(
"本服務僅供已申請班級網頁之成員使用，非該班級網頁成員請勿嘗試註冊！",
"系統已事先建有各班級網頁成員名單，請正確填寫下面資料，以供確認您的身分。",
"若您在註冊時有任何疑問或錯誤訊息產生，請來信 <a href=\"mailto:$sysemail\">服務信箱</a> 。"
);
   if (!$FORM{'edit'}) {
      &html_top($sysename." ".$sysname." 會員註冊","","",@info_tmp);
      &close_link;
      &register_form; 
    } else {
      my $error_msg=&check_register;
      &html_top($sysename." ".$sysname." 會員註冊",$error_msg,"",@info_tmp);
      &close_link;
      &register_form;       
   }    	
} elsif ($FORM{'act'} eq 'write_register') {
   &clear_input;
   foreach my $key_tmp(keys %COOKIE) { $COOKIE{$key_tmp}=""; }
   $COOKIE{'gid'}=$superuser;
   if ($FORM{'nickname'} =~ /&/ || $FORM{'passwd'} =~ /&/ || $FORM{'nickname'} eq "" || $FORM{'passwd'} eq "") {
      &show_register("您所輸入的帳號或密碼任一不可含有 & , &gt; , &lt; 及空白字元！<br>請再次確認您輸入資料正確後，重新嘗試註冊！");
      exit 0;
   } elsif ($FORM{'passwd'} ne $FORM{'repasswd'}) {
      &show_register("您所輸入的確認密碼與密碼不相符！<br>請再次確認您輸入資料正確後，重新嘗試註冊！");
      exit 0;
   } else {
      &write_register;
   }
} else {
   print "Location: $indexurl\n\n";	
}

##############
# Subrutines #
##############

################
# Get_Ln4_Link #
################

sub get_ln4_link {
	
my $str;
$str = "$listname4_1&&$classboardcgi?act=chginfo&mode=passwd&&$listname4_2&&$classboardcgi?act=chginfo&mode=addr";
if ($COOKIE{'multigroups'}) {
   $str=$str."&&$listname4_3&&$classboardcgi?act=chginfo&mode=defaultgroup";
}
return $str;
	
}

################
# Get_Ln7_Link #
################

sub get_ln7_link {
	
my $str;
$str = "$listname7_1&&$classboardcgi?act=maintain&mode=addnews&&$listname7_2&&$classboardcgi?act=maintain&mode=editnews&&$listname7_3&&$classboardcgi?act=maintain&mode=editaddr";

if ($COOKIE{'suser'}) {
   $str=$str."&&$listname7_4&&$classboardcgi?act=maintain&mode=thought&&$listname7_5&&$classboardcgi?act=maintain&mode=other";
}
return $str;
	
}

###############
# Login_Check #
###############

sub login_check {

if ($FORM{'name'} eq "" || $FORM{'passwd'} eq "") { return 0; }

# Read Passwd Data Base
open (PASSWD,"$passwdreal") || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,1);
@PASSWDS=<PASSWD>;
flock(PASSWD,8);
close(PASSWD);

for (my $k=0;$k<@PASSWDS;$k++) {
   if ($PASSWDS[$k] =~ /^#/) { next; }
   my $passwds = $PASSWDS[$k];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($user[0] eq $FORM{'name'} && $user[1] eq $FORM{'passwd'} && $user[9] eq "true") {
         return 1;
   }
}
return 0;
	
}

##############
# Close_Link #
##############

sub close_link {

print <<HTML;
<script language="javascript">
<!--
	mymenu.innerText='';
// -->
</script>
HTML

}

##############
# Show_Login #
##############

sub show_login {
	
# Check Remote Real IP, not Proxy IP
if ($ENV{'HTTP_X_FORWARDED_FOR'} eq '') {
   $remoteip=$ENV{'REMOTE_ADDR'};
 } else {
   $remoteip=$ENV{'HTTP_X_FORWARDED_FOR'};
}	
	
# Update Password Data Base
sysopen(PASSWD,$passwdreal,O_RDWR) || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,2);
@PASSWDS=<PASSWD>;
truncate(PASSWD,0) || die "Can't Truncate $passwdreal: $!\n";
seek(PASSWD,0,0) || die "Can't Seek $passwdreal: $!\n";
for ($i=0;$i<@PASSWDS;$i++) {
   $passwds1 = $PASSWDS[$i];
   chomp $passwds1;
   @user1 = split(/&&/, $passwds1);
   if ($user1[0] eq $FORM{'name'}) {
      print PASSWD "$user[0]&&$user[1]&&$user[2]&&$user[3]&&$nowtime&&$remoteip&&",++$user[6],"&&$user[7]&&$user[8]&&$user[9]\n";
    } else {
      print PASSWD $PASSWDS[$i];
   }
}
flock(PASSWD,8);
close(PASSWD);

# Change Last Login Time Format
@time = split(/\//, $user[4]);

# Check if Multigroups
@allgroups = split(/:/, $user[2]);
if (@allgroups > 1) {
   $multigroups=$allgroups[1];
   for ($a=2;$a<@allgroups;$a++) {
      $multigroups=$multigroups.":$allgroups[$a]";
   }
}

# Read Group Data Base
open (GROUP,"$groupreal") || die "Can't Open $groupreal: $!\n";
flock(GROUP,1);
@GROUPS=<GROUP>;
flock(GROUP,8);
close(GROUP);

for ($j=0;$j<@GROUPS;$j++) {
   if ($GROUPS[$j] =~ /^#/) { next; }
      $groups = $GROUPS[$j];
      chomp $groups;
      @group = split(/&&/, $groups);
      if ($group[0] eq $allgroups[0]) {
	 last;
      }
}
            
# Check if user is superuser or group owner
if ($user[0] eq $superuser && $user[3] eq $susername) { $suser=1; }
if ($user[0] eq $group[4]) {$gowner=1; }

# Send Cookie
my @cookie_tmp=("name=$user[0]","group=$allgroups[0]","realname=$user[3]","multigroups=$multigroups","gowner=$gowner","suser=$suser","gname=$group[1]","gid=$group[4]","gemail=$group[5]");
set_cookie(@cookie_tmp);

# Virtual Cookie
$COOKIE{'name'}=$user[0]; $COOKIE{'group'}=$allgroups[0]; $COOKIE{'realname'}=$user[3]; $COOKIE{'multigroups'}=$multigroups; $COOKIE{'gowner'}=$gowner; $COOKIE{'suser'}=$suser; $COOKIE{'gname'}=$group[1]; $COOKIE{'gid'}=$group[4]; $COOKIE{'gemail'}=$group[5];
		
}

###########
# Get_Msg #
###########

sub get_msg {
	
my $msg_tmp = "<font color=black>歡迎親愛的<font color=blue> $user[0] ( $user[3] ) </font>第 <font color=red>$user[6]</font> 度拜訪本站！您來自 <font color=orange>$remoteip</font>！<br>\n";

if ($user[6] != 1) {
   $msg_tmp=$msg_tmp."我記得上次您來的那天是 <font color=orange>$time[0]年$time[1]月$time[2]日$time[3]時$time[4]分</font>，來自 <font color=orange>$user[5]</font>！<br>\n";
}

# Check if Personal Data Uodated
if ( $today3 - $user[7] > $expireday*100 || $user[7] eq '尚未更新') {
   $msg_tmp=$msg_tmp."<p><font color=red><b>注意!!</b></font>\n您已經超過 <font color=red>$expireday</font> 個月沒有更新您的個人資料！<br>為確保您的個人資料正確，請立即至 <a href=\"$classboardcgi?act=chginfo&mode=addr\">$listname4</a> 確認您的個人資料！<br>\n";
}

# Check if today is user's birthday
@date = split(/\//, $user[8]);
if ($mon1 eq $date[1] && $mday1 eq $date[2]) {
   $yearold = $year - $date[0];
   $msg_tmp=$msg_tmp."<p><font color=red size=+2><b>生日快樂！！</b></font> 如果我沒記錯的話，今天是您的 <font color=blue>$yearold</font> 歲生日唷∼";
}

# Check if User is a Message Receiver
sysopen(MSG,$msgreal,O_RDWR) || die "Can't Open $msgreal: $!\n";
flock(MSG,2);
@MSGS=<MSG>;

for ($m=0;$m<@MSGS;$m++) {
   if ($MSGS[$m] =~ /^#/) { next; }
   $msgs = $MSGS[$m];
   chomp $msgs;
   @msg = split(/&&/, $msgs);
   if ($msg[0] eq $user[3]) {

$msg_tmp=$msg_tmp."<form method=POST action=\"$classboardcgi\">\n";
$msg_tmp=$msg_tmp."<input type=hidden name=act value=\"msg\">\n";
$msg_tmp=$msg_tmp."<font color=blue>$msg[1]</font> 於 <font color=orange>$msg[2]</font> 留下：\n";
$msg_tmp=$msg_tmp." <font color=blue>$msg[3]</font>\n";
$msg_tmp=$msg_tmp."<input type=hidden name=receiver value=\"$msg[1]\">\n";
$msg_tmp=$msg_tmp."<br>您想回訊息給 <font color=blue>$msg[1]</font> 嗎？\n";
$msg_tmp=$msg_tmp." 訊息：<input type=text name=msg size=40>\n";
$msg_tmp=$msg_tmp."<input type=submit value=\"送出\"></form><p>\n";

      $receive=true;
   }
}
if ($receive) {
truncate(MSG,0) || die "Can't Truncate $msgreal: $!\n";
seek(MSG,0,0) || die "Can't Seek $msgreal: $!\n";
for ($n=0;$n<@MSGS;$n++) {
   if ($MSGS[$n] =~ /^#/) {
      print MSG $MSGS[$n];
      next;
   }
   $mesg=$MSGS[$n];
   chomp $mesg;
   @mesgs=split(/&&/,$mesg);
   if ($mesgs[0] eq $user[3]) {
      next;
    } else {
      print MSG $MSGS[$n];
   }
}

}

flock(MSG,8);
close(MSG);

$msg_tmp=$msg_tmp."</font>";

return $msg_tmp;
		
}

###############
# Show_Logout #
###############

sub show_logout {
	
my @cookie_tmp = ("name=","group=","realname=","multigroups=","gowner=","suser=","gname=","gid=","gemail=");
set_cookie(@cookie_tmp);
print "Location: $indexurl\n\n";	
	
}

############
# Get_News #
############

sub get_news {

# Read News Data Base
$newsreal = "$newsrealbase/$COOKIE{'group'}.txt";
open (NEWS,"$newsreal") || die "Can't Open $newsreal: $!\n";
flock(NEWS,1);
@NEWS=<NEWS>;
flock(NEWS,8);
close(NEWS);
$nums = @NEWS;
if ($nums>5) { $nums=5; }
my @info;
for ($z=0;$z<$nums;$z++) {
   if ($NEWS[$z] =~ /^&&/) {
      if (@NEWS>$nums) { $nums++; }
    } else {
      chomp $NEWS[$z];
      @tmp = split(/ /,$NEWS[$z]);
      @tmp1 = split(/\./,$tmp[0]);
      if ((($today3)-($tmp1[0].$tmp1[1].$tmp1[2]))< $hotnews*100) {
         push (@info,"$NEWS[$z] <img src=\"$imageurlbase/icon_new.gif\">");
       } else {
         push (@info,"$NEWS[$z]");
      }
   }
}
return @info;	
	
}

#############
# Show_Main #
#############

sub show_main {
	
my ($msg_tmp)=@_;

my @news_info=&get_news;
&html_top("",$msg_tmp,"",@news_info);
	
# Display Output HTML Page
print <<HTML;
<script language="JavaScript">
<!--
function ShowNews(file) {
   window.open(file,"_blank","height=200,width=300,left=400,top=20,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no,location=no")
}
// -->
</script>
<table width=100% border=0 cellpadding=0 cellspacing=0><tr><td width=130 valign=top>
HTML

# Check if someone's birthday is comming!!
# Read Passwd Data Base
open (PASSWD,"$passwdreal") || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,1);
@PASSWDS=<PASSWD>;
flock(PASSWD,8);
close(PASSWD);
for ($m=0;$m<@PASSWDS;$m++) {
   if ($PASSWDS[$m] =~ /^#/) { next; }
   $infos = $PASSWDS[$m];
   chomp $infos;
   @info = split(/&&/, $infos);
   @birth = split(/\//, $info[8]);
   @grouplst = split(/:/, $info[2]);
   foreach $t(@grouplst) {
      if ($t eq $COOKIE{'group'} && $mon1 eq $birth[1]) {
         push(@birthlist,$birth[2]."&&".$info[3]);
      }
   }
}
if (@birthlist != 0) {
   print "<table width=100% border=0 cellpadding=1 cellspacing=0><tr><td bgcolor=\"#C0C0C0\">\n";
   print "<table width=100% border=0 cellpadding=3 cellspacing=0><tr><td bgcolor=\"#F0F0F0\" align=center>\n";
   print "本月壽星\n</td></tr></table>\n</td></tr></table>\n";
   print "<table width=100% border=0 cellpadding=0 cellspacing=0><tr><td height=3></td></tr></table>\n";
   print "<table width=100% border=0 cellpadding=1 cellspacing=0><tr><td bgcolor=\"#C0C0C0\">\n";
   print "<table width=100% border=0 cellpadding=3 cellspacing=0><tr><td bgcolor=\"#F0F0F0\">\n";
   print "<font size=-1>\n";
   @birthlist = sort(@birthlist);
   foreach $birthline(@birthlist) {
      @birthelm = split(/&&/, $birthline);
      if ($mday1 eq $birthelm[0]) {
         print "<b><font color=blue size=+1><b>$birthelm[1]</b></font> <font color=red size=+1>($mon1/$birthelm[0])</font></b><br>\n";
       } else {
         print "<font color=blue>$birthelm[1]</font> ($mon1/$birthelm[0])<br>\n";
      }
   }
}

print <<HTML;
</font>
</td></tr></table>
</td></tr></table>
<table width=100% border=0 cellpadding=0 cellspacing=0><tr><td height=10></td></tr></table>
<table width=100% border=0 cellpadding=1 cellspacing=0><tr><td bgcolor="#C0C0C0">
<table width=100% border=0 cellpadding=3 cellspacing=0><tr><td bgcolor="#F0F0F0" align=center>
過往雲煙
</td></tr></table>
</td></tr></table>
<table width=100% border=0 cellpadding=0 cellspacing=0><tr><td height=3></td></tr></table>
<table width=100% border=0 cellpadding=1 cellspacing=0><tr><td bgcolor="#C0C0C0">
<table width=100% border=0 cellpadding=3 cellspacing=0><tr><td bgcolor="#F0F0F0" valign=top>
<font size=-1>
HTML

# Read Board History Data Base
$hisreal = "$boardrealbase/$COOKIE{'group'}_history.txt";
open (HIS,"$hisreal") || die "Can't Open $hisreal: $!\n";
flock(HIS,1);
@HISS=<HIS>;
flock(HISD,8);
close(HIS);

for ($his=0;$his<@HISS;$his++) {
   chomp $HISS[$his];
   ($per_date,$per_link)=split(/&&/,$HISS[$his],2);
   print "<li><a href=\"$boardurlbase/$per_link\" target=_blank>$per_date</a>\n";	
}

print <<HTML;
</font>
</td></tr></table>
</td></tr></table>
</td>
<td width=1>&nbsp;</td>
<td bgcolor="#C0C0C0" width=1><table border=0 cellpadding=0 cellspacing=0><tr><td></td></tr></table></td>
<td width=1>&nbsp;</td>
<td valign=top>
<center>
<table width=90% border=0 cellpadding=0 cellspacing=0><tr><td>
<script language="JavaScript">
<!--
var submitcount=0;
function check() {
  if (submitcount == 0) {
    submitcount++;
    return true;
  } else {
    alert("請不要重覆點選按鍵，以免重複紀錄您的留言！");
    return false;
  }
}
// -->
</script>
<form method=post action="$classboardcgi" enctype="multipart/form-data" onSubmit="return check();">
<input type=hidden name=act value="board">
哈囉！親愛的<font color=blue> $COOKIE{'name'} ( $COOKIE{'realname'} ) </font>！<br>既然來了，捎個訊息讓大家知道您的近況吧！<P>
<textarea cols=60 rows=3 name=message wrap=hard></textarea><br><br>
<font size=-1>欲將您的圖檔分享給大家嗎？（僅供上傳 <font color=blue>$max_size KB</font> 以下之<font color=blue>
HTML

foreach $ext(@good_extensions) {
   print "$ext ";
}

print <<MIDDLE1;
</font>檔案）</font><br>
<input type=file name="filename"><br>
<p><input type=submit value="確定送出"> <input type=reset value="重新來過">
</form>
</td></tr></table></center>


<p>
<font size=-1>
MIDDLE1

# Read Board Data Base
$boardreal = "$boardrealbase/$COOKIE{'group'}.txt";
open (BOARD,"$boardreal") || die "Can't Open $boardreal: $!\n";
flock(BOARD,1);
@BOARDS=<BOARD>;
flock(BOARD,8);
close(BOARD);

print @BOARDS;

# Display End Part
print <<BACK;
<font></td></tr></table>
</td></tr></table>
BACK

&html_bottom;

}

###############
# Write_Board #
###############

sub write_board {

if($FORM{'filename'}) {
   my $file = $cgi_input->param("filename");
#   $file =~ s/ +/\_/g;
   $filename = $file; 
   $filename =~ s/^.*(\\|\/)//;
   my $proceed_type = 0;
   if(@good_extensions) {
      foreach(@good_extensions) {
         my $ext = $_;
         $ext =~ s/\.//g;
         if($filename =~ /\.$ext$/i) {
            $proceed_type = 1;
            last;
         }
      }
      unless($proceed_type) {
         push(@was_not_good_type, $filename);
      }
    } else {
      $proceed_type = 1;
   }
   if($proceed_type) {
      @filetype = split(/\./,$filename);
      $newfilename = "$COOKIE{'group'}_$nowtime1.$filetype[@filetype-1]";
      if(open(OUTFILE, ">$uploadrealbase/$newfilename")) {
         binmode(OUTFILE); ## for Windows Only
         while (my $bytesread = read($file, my $buffer, 1024)) { 
            print OUTFILE $buffer; 
         } 
         close (OUTFILE);
         push(@file_did_save, $filename);
       } else {
         push(@did_not_save, $filename);
      }
   }
   $filesize=(-s "$uploadrealbase/$newfilename");
   if($max_size) {
      if($filesize > ($max_size * 1024)) {
         push(@was_too_big, $filename);
         unlink("$uploadrealbase/$newfilename");
      }
   }
}	
	
# Format the Output Data
&clear_input;
&textarea_input("message");

# Read Data Base
$boardreal = "$boardrealbase/$COOKIE{'group'}.txt";
sysopen(DEST,$boardreal,O_RDWR) || die "Can't Open $boardreal: $!\n";
flock(DEST,2);
@LINES=<DEST>;

# Write New Database
truncate(DEST,0) || die "Can't Truncate $boardreal: $!\n";
seek(DEST,0,0) || die "Can't Seek $boardreal: $!\n";
for ($i=0;$i<@LINES;$i++) {
    if ($LINES[$i] =~ /<!-- GuestBook Position Mark -->/) {
	print DEST "<!-- GuestBook Position Mark -->\n";
	print DEST "<p><li><font color=blue> $COOKIE{'name'} ( $COOKIE{'realname'} ) </font> 於 <font color=orange>$today</font> 留下：<br><ul>\n";
	print DEST "$FORM{'message'}\n";
	if (@file_did_save) {
	   if (@was_too_big) {
	      print DEST "<p><img src=\"$imageurlbase/icon_off.gif\"> <font color=#888888>$filename</font> <font color=red>( 檔案大小超過 $max_size KB 限制 )</font>\n"
	    } else {
	      $FORM{'message'} =~ s/<br>\n//g;
	      if (length($FORM{'message'}) > 30) {
	         $msg = substr($FORM{'message'},0,30)."...";
	       } else {
	       	 $msg = $FORM{'message'};
	      }
	      $photoreal = "$photorealbase/$COOKIE{'group'}.txt";
	      open (PHOTO,">>$photoreal") || die "Can't Open $photoreal: $!\n";
	      flock(PHOTO,2);
	      seek(PHOTO,0,2);
	      printf PHOTO "$today1&&$COOKIE{'name'} ( $COOKIE{'realname'} )&&$filename&&$newfilename&&%d&&$msg\n",$filesize/1024;
	      flock(PHOTO,8);
	      close(PHOTO);
              printf DEST "<p><img src=\"$imageurlbase/icon_on.gif\"> <a href=\"$uploadurlbase/$newfilename\" target=_blank>$filename</a> (%dKB)\n",$filesize/1024;
           }
        } elsif (@was_not_good_type) {
           print DEST "<p><img src=\"$imageurlbase/icon_off.gif\"> <font color=#888888>$filename</font> <font color=red>( 錯誤檔案類型 )</font>\n"
        } elsif(@did_not_save) {
           print DEST "<p><img src=\"$imageurlbase/icon_off.gif\"> <font color=#888888>$filename</font> <font color=red>( 系統發生不可預期錯誤 )</font>\n"
        }
	print DEST "</ul>\n\n";
    } else {
	print DEST $LINES[$i];
    }

}
flock(DEST,8);
close(DEST);

my $result_msg="您的留言已經記錄完成，請多多利用留言系統！<br>\n";

if(@file_did_save && !@was_too_big) { $result_msg=$result_msg. "您欲分享的圖檔已經上傳完畢，系統將為您建立連結！<br>\n"; }
if(@was_not_good_type) {$result_msg=$result_msg. "您欲分享的圖檔類型不符合要求，系統將忽略您上傳的檔案！<Br>\n"; }
if(@was_too_big) { $result_msg=$result_msg. "您欲分享的圖檔檔案大小超過 $max_size KB，系統將忽略您上傳的檔案！<br>\n"; }
if(@did_not_save) {$result_msg=$result_msg. "您欲分享的圖檔無法儲存，系統將忽略您上傳的檔案！<p>請與 <a href=\"mailto:$sysemail\">服務信箱</a> 聯絡！<br>\n"; }

return $result_msg;

}	

#############
# Show_Addr #
#############

sub show_addr {

@info=(
"地址電話依序為一筆永久資料（強制性）及兩筆目前資料（選擇性）。",
"若您想列印目前的通訊錄，建議使用 <a href=\"$classboardcgi?act=addr_prt\" target=_blank>友善列印</a> 以得到舒適的列印畫面。"
);
&html_top($listname2,"","",@info);

# Read Data Base
$datareal="$datarealbase/$COOKIE{'group'}.txt";
open (FILE,"$datareal") || die "Can't Open $datareal: $!\n";
flock(FILE,1);
@LINES=<FILE>;
flock(FILE,8);
close(FILE);

# Display Output HTML Page
print <<FRONT;
<center>
<table border=0><tr><td><font size=-1>
FRONT

# Show Quick Link
$count=1;
for ($i=0;$i<@LINES;$i++) {
   if ($LINES[$i] =~ /^#/) { next; }
   $user = $LINES[$i];
   chomp $user;
   $user =~ s/&lt;br&gt;/<br>/g;
   @data = split(/&&/, $user);
   if ($count==10) {
      print "| <a href=\"#$i\">$data[0]</a> |<br>\n";
      $count=1;
    } else {
      print "| <a href=\"#$i\">$data[0]</a> ";
      $count++;
   }
}
if ($count != 1) { print "|\n"; }
print "</font></td></tr></table>\n<table width=100% border=0>\n";

# Display Main Part
for ($i=0;$i<@LINES;$i++) {
   if ($LINES[$i] =~ /^#/) { next; }
   if ($color eq "#D8EFD8") {
     $color = "#E6E8FA";
    } else {
     $color = "#D8EFD8";
   }
   $user = $LINES[$i];
   chomp $user;
   $user =~ s/&lt;br&gt;/<br>/g;
   @data = split(/&&/, $user);
   print "<tr bgcolor=$color><th><a name=$i>$data[0]</th>\n";
   print "<td>&nbsp;$data[4] $data[5]</td><td>&nbsp;$data[6]</td></tr>\n";
   print "<tr bgcolor=$color><td>&nbsp;</td><td>&nbsp;$data[7] $data[8]</td><td>&nbsp;$data[9]</td></tr>\n" if ($data[8] || $data[9]);
   print "<tr bgcolor=$color><td>&nbsp;</td><td>&nbsp;$data[10] $data[11]</td><td>&nbsp;$data[12]</td></tr>\n" if ($data[11] || $data[12]);
   print "<tr bgcolor=$color><td>&nbsp;</td><td colspan=2>" if ($data[13] || $data[14]);
   print " <img src=\"$imageurlbase/icon_bbc.gif\" align=top height=20 width=30 alt=\"扣機號碼\"> $data[13]" if $data[13];
   print " <img src=\"$imageurlbase/icon_talker.gif\" align=top height=20 width=60 alt=\"手機號碼\"> $data[14]" if $data[14];
   print "</td></tr>\n" if ($data[13] || $data[14]);
   print "<tr bgcolor=$color><td>&nbsp;</td><td colspan=2>\n" if ($data[15]);
   print " <img src=\"$imageurlbase/icon_ie.gif\" align=top height=20 width=20 alt=\"個人網頁\"> <a href=\"$data[15]\" target=_blank>$data[15]</a>\n" if $data[15];
   print "</td></tr>\n" if ($data[15]);
   print "<tr bgcolor=$color><td>&nbsp;</td><td colspan=2>\n" if ($data[16]);   
   if ($data[16]) {
      @emails = split(/\;/,$data[16]);
      foreach $em(@emails) {
         print " <img src=\"$imageurlbase/icon_mail.gif\" align=top height=20 width=20 alt=\"電子信箱\"> <a href=\"mailto:$em\">$em</a>\n";
      }
   }
   print "</td></tr>\n" if ($data[16]);
   print "<tr bgcolor=$color><td>&nbsp;</td><td colspan=2>\n" if ($data[17] || $data[18] || $data[19]);
   print " <img src=\"$imageurlbase/icon_icq.gif\" align=top height=20 width=20 alt=\"ＩＣＱ\"> $data[17]" if $data[17];
   print " <img src=\"$imageurlbase/icon_msn.gif\" align=top height=20 width=20 alt=\"ＭＳＮ\"> $data[18]" if $data[18];
   print " <img src=\"$imageurlbase/icon_yahoo.gif\" align=top height=20 width=20 alt=\"Ｙａｈｏｏ\"> $data[19]" if $data[19];
   print "</td></tr>\n" if ($data[17] || $data[18] || $data[19]);
   print "<tr bgcolor=$color><td colspan=3 align=right><font size=-1>最後更新日期：$data[20]</font></td></tr>\n";
}

# Display End Part
print <<BACK;
</table>
BACK

&html_bottom;

}

##############
# Print_Addr #
##############

sub print_addr {

# Read Data Base
$datareal="$datarealbase/$COOKIE{'group'}.txt";
open (FILE,"$datareal") || die "Can't Open $datareal: $!\n";
flock(FILE,1);
@LINES=<FILE>;
flock(FILE,8);
close(FILE);

# Display Output HTML Page
print <<FRONT;
Content-type: text/html

<html>
<head>
<title>$COOKIE{'gname'} $listname2</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<style type=text/css>
A:link { TEXT-DECORATION: none }
A:visited { COLOR: #0000ff; TEXT-DECORATION: none }
A:hover { TEXT-DECORATION: underline }
</style>
</head>
<body bgcolor=white>
<center>
<h3>$COOKIE{'gname'} $listname2</h3>
<table border=1 width=100% cellpadding=0 cellspacing=0>
FRONT

# Display Main Part
for ($i=0;$i<@LINES;$i++) {
   if ($LINES[$i] =~ /^#/) { next; }
   $user = $LINES[$i];
   chomp $user;
   $user =~ s/&lt;br&gt;/<br>/g;
   @data = split(/&&/, $user);
   print "<tr><td align=center>$data[0]</td>\n";
   print "<td align=center>永久</td><td>&nbsp;$data[4] $data[5]</td><td>&nbsp;$data[6]</td></tr>\n";
   print "<tr><td>&nbsp;</td><td align=center>目前</td><td>&nbsp;$data[7] $data[8]</td><td>&nbsp;$data[9]</td></tr>\n" if ($data[8] || $data[9]);
   print "<tr><td>&nbsp;</td><td align=center>目前</td><td>&nbsp;$data[10] $data[11]</td><td>&nbsp;$data[12]</td></tr>\n" if ($data[11] || $data[12]);
   print "<tr><td>&nbsp;</td><td colspan=3>" if ($data[13] || $data[14]);
   print "&nbsp;BBC: $data[13]" if $data[13];
   print "&nbsp;MobilePhone: $data[14]" if $data[14];
   print "</td></tr>\n" if ($data[13] || $data[14]);
   print "<tr><td>&nbsp;</td><td colspan=3>\n" if ($data[15]);
   print "&nbsp;Homepage: $data[15]" if ($data[15]);
   print "</td></tr>\n" if ($data[15]);   
   print "<tr><td>&nbsp;</td><td colspan=3>\n" if ($data[16]);
   if ($data[16]) {
      print "&nbsp;Email: ";
      @emails = split(/\;/,$data[16]);
      foreach $em(@emails) {
         print " $em\n";
      }
   }
   print "</td></tr>\n" if ($data[16]);
   print "<tr><td>&nbsp;</td><td colspan=3>\n" if ($data[17] || $data[18] || $data[19]);
   print "&nbsp;ICQ: $data[17]" if ($data[17]);
   print "&nbsp;MSN: $data[18]" if ($data[18]);
   print "&nbsp;Yahoo: $data[19]" if ($data[19]);
   print "</td></tr>\n" if ($data[17] || $data[18] || $data[19]); 

}

# Display End Part
print <<BACK;
</table>
<br><font size=-1>$year年$mon月$mday日列印自 $nowsysurl</font><br>
</center>
</body>
</html>
BACK

}

#############
# Write_Msg #
#############

sub write_msg {

# Write New Database
open (DEST,">>$msgreal") || die "Can't Open $msgreal: $!\n";
flock(DEST,2);
seek(DEST,0,2);
print DEST "$FORM{'receiver'}&&$COOKIE{'realname'}&&",$year,"年",$mon,"月$mday日$hour時$min分&&$FORM{'msg'}\n";
flock(DEST,8);
close(DEST);

}	

############
# Show_Msg #
############

sub show_msg {
	
# Display Output HTML Page
print <<FRONT;
<center>
<br><br>
想要傳簡訊給哪位仁兄啊？<br>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="msg">
<select name=receiver>
FRONT

# Read Passwd Data Base
$datareal = "$datarealbase/$COOKIE{'group'}.txt";
open (DATA,"$datareal") || die "Can't Open $datareal: $!\n";
flock(DATA,1);
@DATAS=<DATA>;
flock(DATA,8);
close(DATA);


   for ($k=0;$k<@DATAS;$k++) {
      if ($DATAS[$k] =~ /^#/) { next; }
      $users = $DATAS[$k];
      chomp $users;
      @tmp = split(/&&/, $users);
      if ($tmp[0] ne $COOKIE{'realname'}) {
           print "<option value=\"$tmp[0]\">$tmp[0]\n";
      }
   }

# Display End Part
print <<BACK;
</select><p>訊息的內容是？？<p>
訊息：<input type=text name=msg size=60><p>
<input type=submit value="確定送出"></form>
</center>
BACK

&html_bottom;

}

##############
# Show_Photo #
##############

sub show_photo {

# Display Output HTML Page
@info=(
"此清單由系統自動產生，欲分享圖檔請利用留言系統。"
);
&html_top($listname9,"","",@info);

print <<FRONT;
<table width=100% border=0>
<tr bgcolor="#FFFFB9"><td align=center>日期</td><td align=center>分享使用者</td><td align=center>圖案名稱及大小</td><td align=center>圖案說明</td></tr>
FRONT

# Read Passwd Data Base
$datareal = "$photorealbase/$COOKIE{'group'}.txt";
open (DATA,"$datareal") || die "Can't Open $datareal: $!\n";
flock(DATA,1);
@DATAS=<DATA>;
flock(DATA,8);
close(DATA);

   if (@DATAS == 0) {
      print "<tr><th colspan=4>尚無任何分享圖檔</th><tr>\n";
    } else {
      $total = @DATAS - 1;
      for ($k=$total;$k>=0;$k--) {
         if ($DATAS[$k] =~ /^#/) { next; }
         if ($color eq "#D8EFD8") {
            $color = "#E6E8FA";
          } else {
            $color = "#D8EFD8";
         }
         $photos = $DATAS[$k];
         chomp $photos;
         @tmp = split(/&&/, $photos);
         @tmp1 = split(/\./,$tmp[0]);
         if (($today3-($tmp1[0].$tmp1[1].$tmp1[2]))< $hotnews*100) {
            print "<tr bgcolor=$color height=25><td align=center><font size=-1>$tmp[0]</td><td align=center><font size=-1><font color=blue>$tmp[1]</font></td><td align=center><font size=-1><a href=\"$uploadurlbase/$tmp[3]\" target=_blank>$tmp[2]</a> ($tmp[4]KB)</font></td><td><font size=-1>&nbsp;$tmp[5]</font> <img src=\"$imageurlbase/icon_new.gif\"></td></tr>\n";
          } else {
            print "<tr bgcolor=$color height=25><td align=center><font size=-1>$tmp[0]</td><td align=center><font size=-1><font color=blue>$tmp[1]</font></td><td align=center><font size=-1><a href=\"$uploadurlbase/$tmp[3]\" target=_blank>$tmp[2]</a> ($tmp[4]KB)</font></td><td><font size=-1>&nbsp;$tmp[5]</font></td></tr>\n";;
         }
      }
   }

# Display End Part
print <<HTML;
</table>
HTML

&html_bottom;

}

#################
# Change_Passwd #
#################

sub change_passwd {

print <<HTML;
<div align=center><table border=0 width=80%><tr><td><br>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="chginfo">
<input type=hidden name=mode value="passwd">
<input type=hidden name=edit value="true">
<p>請輸入舊密碼：<input type=password name=oldpass size=8>
<p>請輸入新密碼：<input type=password name=newpass size=8>
　確認新密碼：<input type=password name=renewpass size=8>
　<input type=submit value="確定更改"></form>
</td></tr></table></div>
HTML

&html_bottom;
	
}	

################
# Write_Passwd #
################

sub write_passwd {

my ($link_tmp,@info_tmp)=@_;

# Read Passwd Data Base
open (PASSWD,"$passwdreal") || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,1);
@PASSWDS=<PASSWD>;
flock(PASSWD,8);
close(PASSWD);

#Check Password
for ($k=0;$k<@PASSWDS;$k++) {
   if ($PASSWDS[$k] =~ /^#/) { next; }
   $passwds = $PASSWDS[$k];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($user[0] eq $COOKIE{'name'}) {
      if ($user[1] ne $FORM{'oldpass'}) {
         &html_top($listname4,"您所輸入的舊密碼錯誤，請重新輸入！",$link_tmp,@info_tmp);
         &change_passwd;
         exit 0;
       } else {
         # Update Password Data Base
         sysopen(PASSWD,$passwdreal,O_RDWR) || die "Can't Open $passwdreal: $!\n";
         flock(PASSWD,2);
         @PASSWDS=<PASSWD>;
         truncate(PASSWD,0) || die "Can't Truncate $passwdreal: $!\n";
         seek(PASSWD,0,0) || die "Can't Seek $passwdreal: $!\n";
         for ($i=0;$i<@PASSWDS;$i++) {
            $passwds1 = $PASSWDS[$i];
            chomp $passwds1;
            @user1 = split(/&&/, $passwds1);
            if ($user1[0] eq $COOKIE{'name'}) {
               print PASSWD "$user[0]&&$FORM{'newpass'}&&$user[2]&&$user[3]&&$user[4]&&$user[5]&&$user[6]&&$user[7]&&$user[8]&&$user[9]\n";
             } else {
               print PASSWD $PASSWDS[$i];
            }
         }
         flock(PASSWD,8);
         close(PASSWD);
         &html_top($listname4,"您的登入密碼已經更新完成，下次登入本網站請使用新密碼！",$link_tmp,@info_tmp);
      }
   }
}
	
}	

###############
# Change_Addr #
###############

sub change_addr {

# Read Data Base
$datareal="$datarealbase/$COOKIE{'group'}.txt";
open (FILE,"$datareal") || die "Can't Open $datareal: $!\n";
flock(FILE,1);
@LINES=<FILE>;
flock(FILE,8);
close(FILE);
for ($i=0;$i<@LINES;$i++) {
   $user=$LINES[$i];
   chomp $user;
   @data = split(/&&/, $user);
   if ($data[0] eq $COOKIE{'realname'}) {
      last;
   }
}

print <<HTML;
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="chginfo">
<input type=hidden name=mode value="addr">
<input type=hidden name=edit value="true">
<table width=100% border=0>
<tr bgcolor="#FFFFB9"><td align=center>姓名</td><td align=center>$data[0]</td></tr>
HTML

print "<tr bgcolor=\"#D8EFD8\"><td align=center>性別與血型</td><td>\n<select name=bloodtype>\n";
foreach $blood ("A","B","O","AB","other") {
   if ($data[2] eq $blood) {
      print "<option value=\"$data[2]\" selected>$data[2]\n";
    } else {
      print "<option value=\"$blood\">$blood\n";
   }
}
print "</select> 型的 <select name=sex>\n";
if ($data[1] eq "M") {
      print "<option value=\"M\" selected>男士<option value=\"F\">女士\n</select></td></tr>\n";
 } else {
      print "<option value=\"M\">男士<option value=\"F\" selected>女士\n</select></td></tr>\n";
}
print "<tr bgcolor=\"#E6E8FA\"><td align=center>生日</td><td>\n<select name=year>\n";
@birth = split(/\//, $data[3]);
for ($y=1960;$y<=$year;$y++) {
   if ($birth[0] == $y) {
      print "<option value=\"$y\" selected>$y\n";
    } else {
      print "<option value=\"$y\">$y\n";
   }
}
print "</select>年<select name=month>\n";
for ($x=1;$x<=12;$x++) {
   if (length($x) == 1) { $x = "0".$x; }
   if ($birth[1] == $x) {
      print "<option value=\"$x\" selected>$x\n";
    } else {
      print "<option value=\"$x\">$x\n";
   }
}
print "</select>月<select name=day>\n";
for ($z=1;$z<=31;$z++) {
   if (length($z) == 1) { $z = "0".$z; }
   if ($birth[2] == $z) {
      print "<option value=\"$z\" selected>$z\n";
    } else {
      print "<option value=\"$z\">$z\n";
   }
}
print <<HTML;
</select>日</td></tr>
<tr bgcolor="#D8EFD8"><td align=center>永久地址</td><td>（<input type=text size=3 name=code1 value="$data[4]">）<input type=text size=50 name=addr1 value="$data[5]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>永久電話</td><td><input type=text name=tel1 value="$data[6]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>目前地址</td><td>（<input type=text size=3 name=code2 value="$data[7]">）<input type=text size=50 name=addr2 value="$data[8]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>目前電話</td><td><input type=text name=tel2 value="$data[9]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>目前地址二</td><td>（<input type=text size=3 name=code3 value="$data[10]">）<input type=text size=50 name=addr3 value="$data[11]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>目前電話二</td><td><input type=text name=tel3 value="$data[12]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>扣機號碼</td><td><input type=text name=bbc value="$data[13]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>手機號碼</td><td><input type=text name=talker value="$data[14]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>個人網頁</td><td><input type=text size=40 name=web value="$data[15]"><br>
<font size=-1>（請以 http:// 開頭，目前僅支援一個網址！ ）</font></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>電子信箱</td><td><input type=text size=50 name=email value="$data[16]"><br>
<font size=-1>（若您欲輸入一個以上的電子信箱，請用半形 ; 隔開！ ）</font></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>ＩＣＱ</td><td><input type=text name=icq value="$data[17]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>ＭＳＮ</td><td><input type=text name=msn value="$data[18]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>Ｙａｈｏｏ</td><td><input type=text name=yahoo value="$data[19]"></td></tr>
<tr bgcolor="#FFFFB9"><td align=right colspan=2><font sise=-1>最後更新日期：$data[20]</font></td></tr>
</table>
<p><div align=right><input type=submit value="確定更改"> <input type=reset value="重新填寫"></div>
</form>
HTML

&html_bottom;
	
}

##############
# Write_Addr #
##############

sub write_addr {

if ($COOKIE{'multigroups'} ne "") {
   $allgroups=$COOKIE{'group'}.":".$COOKIE{'multigroups'};
 } else {
   $allgroups=$COOKIE{'group'};
}
@allgroup = split(/:/, $allgroups);

# Check if user is the owner of certain group
# Read Group Data Base
sysopen(GROUP,$groupreal,O_RDWR) || die "Can't Open $groupreal: $!\n";
flock(GROUP,2);
@GROUPS=<GROUP>;

truncate(GROUP,0) || die "Can't Truncate $groupreal: $!\n";
seek(GROUP,0,0) || die "Can't Seek $groupreal: $!\n";
for ($j=0;$j<@GROUPS;$j++) {
   if ($GROUPS[$j] =~ /^#/) {
      print GROUP $GROUPS[$j];
      next;
   }
   $groups = $GROUPS[$j];
   chomp $groups;
   @group = split(/&&/, $groups);
   if ($group[4] eq $COOKIE{'name'}) {
      @emails = split(/\;/,$FORM{'email'});
      print GROUP "$group[0]&&$group[1]&&$group[2]&&$group[3]&&$group[4]&&$emails[0]\n";
    } else {
      print GROUP $GROUPS[$j];
   }
}
flock(GROUP,8);
close(GROUP);

# Multi Group
foreach $each (@allgroup) {

# Read Data Base
$datareal="$datarealbase/$each.txt";
sysopen(DEST,$datareal,O_RDWR) || die "Can't Open $datareal: $!\n";
flock(DEST,2);
@LINES=<DEST>;

# Write New Database
truncate(DEST,0) || die "Can't Truncate $datareal: $!\n";
seek(DEST,0,0) || die "Can't Seek $datareal: $!\n";
for ($i=0;$i<@LINES;$i++) {
    $line=$LINES[$i];
    chomp $line;
    @data=split(/&&/,$line);
    if ( $data[0] eq $COOKIE{'realname'}) {
	print DEST "$COOKIE{'realname'}&&$FORM{'sex'}&&$FORM{'bloodtype'}&&$FORM{'year'}\/$FORM{'month'}\/$FORM{'day'}&&$FORM{'code1'}&&$FORM{'addr1'}&&$FORM{'tel1'}&&$FORM{'code2'}&&$FORM{'addr2'}&&$FORM{'tel2'}&&$FORM{'code3'}&&$FORM{'addr3'}&&$FORM{'tel3'}&&$FORM{'bbc'}&&$FORM{'talker'}&&$FORM{'web'}&&$FORM{'email'}&&$FORM{'icq'}&&$FORM{'msn'}&&$FORM{'yahoo'}&&$today2\n";
    } else {
	print DEST $LINES[$i];
    }

}
flock(DEST,8);
close(DEST);

}

# Update Password Data Base
sysopen(PASSWD,$passwdreal,O_RDWR) || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,2);
@PASSWDS=<PASSWD>;
truncate(PASSWD,0) || die "Can't Truncate $passwdreal: $!\n";
seek(PASSWD,0,0) || die "Can't Seek $passwdreal: $!\n";
for ($i=0;$i<@PASSWDS;$i++) {
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($user[0] eq $COOKIE{'name'}) {
      print PASSWD "$user[0]&&$user[1]&&$user[2]&&$user[3]&&$user[4]&&$user[5]&&$user[6]&&$today3&&$FORM{'year'}\/$FORM{'month'}\/$FORM{'day'}&&$user[9]\n";
    } else {
      print PASSWD $PASSWDS[$i];
   }
}
flock(PASSWD,8);
close(PASSWD);
	
}	

#######################
# Change_Defaultgroup #
#######################

sub change_defaultgroup {

# Read Group Data Base
open (GROUP,"$groupreal") || die "Can't Open $groupreal: $!\n";
flock(GROUP,1);
@GROUPS=<GROUP>;
flock(GROUP,8);
close(GROUP);

print "<div align=center><table border=0 width=80%><tr><td><br><br><br>\n";
print "<form method=POST action=\"$classboardcgi\">\n";
print "<input type=hidden name=act value=\"chginfo\">\n";
print "<input type=hidden name=mode value=\"defaultgroup\">\n";
print "<input type=hidden name=edit value=\"true\">\n";
print "請選擇新的預設登入群組：<select name=glogin>\n";
for ($d=0;$d<@GROUPS;$d++) {
   if ($GROUPS[$d] =~ /^#/) { next; }
   $groups = $GROUPS[$d];
   chomp $groups;
   @group = split(/&&/, $groups);
   if ($group[0] eq $COOKIE{'group'}) {
      print "<option value=\"$group[0]\">$group[1]\n";
      last;
   }
}
@allgroups = split(/:/, $COOKIE{'multigroups'});
for ($k=0;$k<@allgroups;$k++) {
   for ($j=0;$j<@GROUPS;$j++) {
      if ($GROUPS[$j] =~ /^#/) { next; }
      $groups = $GROUPS[$j];
      chomp $groups;
      @group = split(/&&/, $groups);
      if ($group[0] eq $allgroups[$k]) {
         print "<option value=\"$group[0]\">$group[1]\n";
         last;
      }
   }
}
print "</select>\n　<input type=submit value=\"確定更改\"></form>\n";
print "<br><br></td></tr></table></div>\n";

&html_bottom;
	
}	

######################
# Write_Defaultgroup #
######################

sub write_defaultgroup {

# Read Passwd Data Base
sysopen(PASSWD,$passwdreal,O_RDWR) || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,2);
@PASSWDS=<PASSWD>;

# Update Password Data Base
truncate(PASSWD,0) || die "Can't Truncate $passwdreal: $!\n";
seek(PASSWD,0,0) || die "Can't Seek $passwdreal: $!\n";
for ($i=0;$i<@PASSWDS;$i++) {
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($user[0] eq $COOKIE{'name'}) {
      print PASSWD "$user[0]&&$user[1]&&$FORM{'glogin'}";
      @groups = split(/:/, $user[2]);
      foreach $tmp(@groups) {
         if ($tmp ne $FORM{'glogin'}) { print PASSWD ":$tmp"; }
      }
      print PASSWD "&&$user[3]&&$user[4]&&$user[5]&&$user[6]&&$user[7]&&$user[8]&&$user[9]\n";
    } else {
      print PASSWD $PASSWDS[$i];
   }
}
flock(PASSWD,8);
close(PASSWD);
	
}	

################
# Change_Group #
################

sub change_group {

# Read Group Data Base
open (GROUP,"$groupreal") || die "Can't Open $groupreal: $!\n";
flock(GROUP,1);
@GROUPS=<GROUP>;
flock(GROUP,8);
close(GROUP);

for ($j=0;$j<@GROUPS;$j++) {
   if ($GROUPS[$j] =~ /^#/) { next; }
   $groups = $GROUPS[$j];
   chomp $groups;
   @group = split(/&&/, $groups);
   if ($group[0] eq $FORM{'newgroup'}) {
      last;
   }
}

@allgroups = split(/:/, $COOKIE{'multigroups'});
$newmulti=$COOKIE{'group'};
for ($k=0;$k<@allgroups;$k++) {
   if ($allgroups[$k] ne $FORM{'newgroup'}) {
      $newmulti=$newmulti.":$allgroups[$k]";
   }
}

# Check if user is group owner
if ($COOKIE{'name'} eq $group[4]) { $gowner=1; }
# Send Cookie
my @cookie_tmp = ("name=$COOKIE{'name'}","group=$FORM{'newgroup'}","realname=$COOKIE{'realname'}","multigroups=$newmulti","gowner=$gowner","suser=$COOKIE{'suser'}","gname=$group[1]","gid=$group[4]","gemail=$group[5]");
set_cookie(@cookie_tmp);

print "Location: $classboardcgi?act=main\n\n";

}

##############
# Show_Group #
##############

sub show_group {
	
# Read Group Data Base
open (GROUP,"$groupreal") || die "Can't Open $groupreal: $!\n";
flock(GROUP,1);
@GROUPS=<GROUP>;
flock(GROUP,8);
close(GROUP);

&html_top($listname6);

# Display Output HTML Page
print <<FRONT;
<center>
<br>
請選擇您欲更換的群組
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="chgroup">
<select name=newgroup>
FRONT

   @allgroups = split(/:/, $COOKIE{'multigroups'});
   for ($k=0;$k<@allgroups;$k++) {
      for ($j=0;$j<@GROUPS;$j++) {
            if ($GROUPS[$j] =~ /^#/) { next; }
            $groups = $GROUPS[$j];
            chomp $groups;
            @group = split(/&&/, $groups);
            if ($group[0] eq $allgroups[$k]) {
               print "<option value=\"$group[0]\">$group[1]\n";
               last;
            }
      }
   }

# Display End Part
print <<BACK;
</select>
<p><input type=submit value="確定更換"></form>
</center>
BACK

&html_bottom;

}

############
# Add_News #
############

sub add_news {

print <<HTML;
<div align=center><table border=0 width=80%><tr><td><br>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="maintain">
<input type=hidden name=mode value="addnews">
<input type=hidden name=edit value="true">
<p>主標題：<input type=text name=title size=60>
<p>若您需要進一步說明，請選擇使用連結以開啟說明視窗：
<p><input type=radio name=iflink value=yes>使用 <input type=radio name=iflink value=no checked>不使用
<p>若您選擇使用連結，請輸入說明視窗內欲顯示之內容：
<p><textarea cols=70 rows=3 name=message wrap=soft></textarea>
<p><div align=right><input type=submit value="確定新增"> <input type=reset value="重新輸入"></div></form>
</td></tr></table></div>
HTML
	
&html_bottom;	
	
}

##############
# Write_News #
##############

sub write_news {
	
# Read News Database
$newsreal = "$newsrealbase/$COOKIE{'group'}.txt";
sysopen(NEWS,$newsreal,O_RDWR) || die "Can't Open $newsreal: $!\n";
flock(NEWS,2);
@NEWS=<NEWS>;

# Write New Database
if ($FORM{'iflink'} eq "yes") {
   &textarea_input("message");
   $addnewsreal = "$newsrealbase/$COOKIE{'group'}_$nowtime1.html";
   sysopen(ADD,$addnewsreal,O_WRONLY|O_CREAT) || die "Can't Open $addnewsreal: $!\n";
   flock(ADD,2);
   truncate(ADD,0) || die "Can't Truncate $addnewsreal: $!\n";
   print ADD<<CONTENT;
<html>
<head>
<title>$FORM{'title'}</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<style type=text/css>
A:link { TEXT-DECORATION: none }
A:visited { COLOR: #0000ff; TEXT-DECORATION: none }
A:hover { TEXT-DECORATION: underline }
</style>
</head>
<body bgcolor=white><font size=-1>
<center><a href="javascript:window.close()">關閉視窗</a></center><br>
$FORM{'message'}
</font></body>
</html>   
CONTENT

   flock(ADD,8);
   close(ADD);
}

&clear_input;
truncate(NEWS,0) || die "Can't Truncate $newsreal: $!\n";
seek(NEWS,0,0) || die "Can't Seek $newsreal: $!\n";
if ($FORM{'iflink'} eq "yes") {
   print NEWS "$today1 <a href=\"javascript:ShowNews(\'$newsurlbase/$COOKIE{'group'}_$nowtime1.html\')\">$FORM{'title'} <img src=\"$imageurlbase/icon_next.gif\" border=0 align=top></a>\n";
 } else {
   print NEWS "$today1 <font color=blue>$FORM{'title'}</font>\n";
}
print NEWS @NEWS;
flock(NEWS,8);
close(NEWS);
	
}

#############
# Show_News #
#############

sub show_news {

# Read News Database
$newsreal = "$newsrealbase/$COOKIE{'group'}.txt";
open (NEWS,"$newsreal") || die "Can't Open $newsreal: $!\n";
flock(NEWS,1);
@NEWS=<NEWS>;
flock(NEWS,8);
close(NEWS);

print <<HTML;
<div align=center><table border=0 width=80%><tr><td><br>
<script language="JavaScript">
<!--
function ShowNews(file) {
   window.open(file,"_blank","height=200,width=300,left=400,top=20,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no,location=no")
// -->
}
</script>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="maintain">
<input type=hidden name=mode value="editnews">
<input type=hidden name=edit value="true">
<font size=-1>
HTML

$lines = @NEWS;
if ($lines>10) { $lines=10; }
for ($m=0;$m<$lines;$m++) {
   if ($NEWS[$m] =~ /^#/) { next; }
   $news = $NEWS[$m];
   chomp $news;
   if ($news =~ /^&&/) {
      @tmp = split(/&&/,$news);
      print "$m. <input type=checkbox name=line$m value=\"yes\"> $tmp[1]<br>\n";
    } else {
      print "$m. <input type=checkbox name=line$m value=\"yes\" checked> $news<br>\n";
   }
}


print <<HTML;
</font>
<p><div align=right><input type=submit value="確定更改"> <input type=reset value="重新修改"></div></form>
</td></tr></table></div>
HTML
	
&html_bottom;	
	
}

#############
# Edit_News #
#############

sub edit_news {

# Read News Database
$newsreal = "$newsrealbase/$COOKIE{'group'}.txt";
sysopen(NEWS,$newsreal,O_RDWR) || die "Can't Open $newsreal: $!\n";
flock(NEWS,2);
@NEWS=<NEWS>;

truncate(NEWS,0) || die "Can't Truncate $newsreal: $!\n";
seek(NEWS,0,0) || die "Can't Seek $newsreal: $!\n";
for ($w=0;$w<@NEWS;$w++) {
   if ($w<10) {
      if ($NEWS[$w] =~ /^&&/) {
         @tmp = split(/&&/,$NEWS[$w]);
         $NEWS[$w] = $ tmp[1];
      }
      if ($FORM{"line$w"} eq "yes") {
         print NEWS $NEWS[$w];
       } else {
       	 print NEWS "&&$NEWS[$w]";
      }
    } else {
      print NEWS $NEWS[$w];
   }
}
flock(NEWS,8);
close(NEWS);

}

#############
# Edit_Addr #
#############

sub edit_addr {

# Read Data Base
$datareal="$datarealbase/$COOKIE{'group'}.txt";
open (FILE,"$datareal") || die "Can't Open $datareal: $!\n";
flock(FILE,1);
@LINES=<FILE>;
flock(FILE,8);
close(FILE);

print <<HTML;
<div align=center><table border=0 width=80%><tr><td><br>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="maintain">
<input type=hidden name=mode value="listaddr">
<p><table border=0 width=100%>
HTML

# Display Main Part of Output HTML Page
$cols = 99;
for ($i=0;$i<@LINES;$i++) {
   if ($LINES[$i] =~ /^#/) { next; }
   if ($cols>5) {
      if ($color eq "#D8EFD8") {
        $color = "#E6E8FA";
       } else {
        $color = "#D8EFD8";
      }
      if ($cols==99) {
         print "<tr bgcolor=\"$color\">\n";
       } else {
         print "</tr>\n<tr bgcolor=\"$color\">\n";
      }
      $cols = 1;
   }
   $user = $LINES[$i];
   chomp $user;
   @data = split(/&&/, $user);
   print "<td><input type=radio name=uid value=\"$data[0]\">$data[0]</td>\n";
   $cols++;
}

# Display End Part of Output HTML Page
print <<HTML;
</table>
<p><div align=right><input type=submit value="確定選擇"> <input type=reset value="重新選擇"></div></form>
</td></tr></table></div>
HTML
	
&html_bottom;	
	
}

#############
# List_Addr #
#############

sub list_addr {

my @info_tmp=("除永久資料務必填寫外，其他欄位沒有請空白。","若目前資料與永久資料相同，請將目前資料欄位空白。");
my $link_tmp = &get_ln7_link;

# Read Data Base
$datareal="$datarealbase/$COOKIE{'group'}.txt";
open (FILE,"$datareal") || die "Can't Open $datareal: $!\n";
flock(FILE,1);
@LINES=<FILE>;
flock(FILE,8);
close(FILE);
for($p=0;$p<@LINES;$p++) {
   $user = $LINES[$p];
   chomp $user;
   @data = split(/&&/, $user);
   if($data[0] eq $FORM{'uid'}) { last; }
}

&html_top($listname7,"",$link_tmp,@info_tmp);

print <<HTML;
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="maintain">
<input type=hidden name=mode value="editaddr">
<input type=hidden name=edit value="true">
<form method=POST action="$chaddr2cgi">
<table border=0 width=100%>
<tr bgcolor="#FFFFB9"><td align=center>姓名</td><td align=center>$data[0]<input type=hidden name=uid value="$FORM{'uid'}"></td></tr>
HTML

print "<tr bgcolor=\"#D8EFD8\"><td align=center>性別與血型</td><td>\n<select name=bloodtype>\n";
foreach $blood ("A","B","O","AB","other") {
   if ($data[2] eq $blood) {
      print "<option value=\"$data[2]\" selected>$data[2]\n";
    } else {
      print "<option value=\"$blood\">$blood\n";
   }
}
print "</select> 型的 <select name=sex>\n";
if ($data[1] eq "M") {
      print "<option value=\"M\" selected>男士<option value=\"F\">女士\n</select></td></tr>\n";
 } else {
      print "<option value=\"M\">男士<option value=\"F\" selected>女士\n</select></td></tr>\n";
}
print "<tr bgcolor=\"#E6E8FA\"><td align=center>生日</td><td>\n<select name=year>\n";
@birth = split(/\//, $data[3]);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
for ($y=1960;$y<=$year+1900;$y++) {
   if ($birth[0] == $y) {
      print "<option value=\"$y\" selected>$y\n";
    } else {
      print "<option value=\"$y\">$y\n";
   }
}
print "</select>年<select name=month>\n";
for ($x=1;$x<=12;$x++) {
   if (length($x) == 1) { $x = "0".$x; }
   if ($birth[1] == $x) {
      print "<option value=\"$x\" selected>$x\n";
    } else {
      print "<option value=\"$x\">$x\n";
   }
}
print "</select>月<select name=day>\n";
for ($z=1;$z<=31;$z++) {
   if (length($z) == 1) { $z = "0".$z; }
   if ($birth[2] == $z) {
      print "<option value=\"$z\" selected>$z\n";
    } else {
      print "<option value=\"$z\">$z\n";
   }
}
print <<HTML;
</select>日</td></tr>
<tr bgcolor="#D8EFD8"><td align=center>永久地址</td><td>（<input type=text size=3 name=code1 value="$data[4]">）<input type=text size=50 name=addr1 value="$data[5]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>永久電話</td><td><input type=text name=tel1 value="$data[6]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>目前地址</td><td>（<input type=text size=3 name=code2 value="$data[7]">）<input type=text size=50 name=addr2 value="$data[8]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>目前電話</td><td><input type=text name=tel2 value="$data[9]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>目前地址二</td><td>（<input type=text size=3 name=code3 value="$data[10]">）<input type=text size=50 name=addr3 value="$data[11]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>目前電話二</td><td><input type=text name=tel3 value="$data[12]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>扣機號碼</td><td><input type=text name=bbc value="$data[13]"></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>手機號碼</td><td><input type=text name=talker value="$data[14]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>個人網頁</td><td><input type=text size=40 name=web value="$data[15]"><br>
<font size=-1>（請以 http:// 開頭，目前僅支援一個網址！ ）</font></td></tr>
<tr bgcolor="#E6E8FA"><td align=center>電子信箱</td><td><input type=text size=50 name=email value="$data[16]"><br>
<font size=-1>（若您欲輸入一個以上的電子信箱，請用半形 ; 隔開！ ）</font></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>ＩＣＱ</td><td><input type=text name=icq value="$data[17]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>ＭＳＮ</td><td><input type=text name=msn value="$data[18]"></td></tr>
<tr bgcolor="#D8EFD8"><td align=center>Ｙａｈｏｏ</td><td><input type=text name=yahoo value="$data[19]"></td></tr>
<tr bgcolor="#FFFFB9"><td align=right colspan=2><font sise=-1>最後更新日期：$data[20]</font></td></tr>
</table>
<p><div align=right><input type=submit value="確定更改"> <input type=reset value="重新更改"></form></div>
HTML

&html_bottom;
	
}

###############
# Update_Addr #
###############

sub update_addr {

# Read Data Base
$datareal="$datarealbase/$COOKIE{'group'}.txt";
sysopen(DEST,$datareal,O_RDWR) || die "Can't Open $datareal: $!\n";
flock(DEST,2);
@LINES=<DEST>;

# Write New Database
truncate(DEST,0) || die "Can't Truncate $datareal: $!\n";
seek(DEST,0,0) || die "Can't Seek $datareal: $!\n";
for ($i=0;$i<@LINES;$i++) {
    $line=$LINES[$i];
    chomp $line;
    @data=split(/&&/,$line);
    if ( $data[0] eq $FORM{'uid'}) {
	print DEST "$FORM{'uid'}&&$FORM{'sex'}&&$FORM{'bloodtype'}&&$FORM{'year'}\/$FORM{'month'}\/$FORM{'day'}&&$FORM{'code1'}&&$FORM{'addr1'}&&$FORM{'tel1'}&&$FORM{'code2'}&&$FORM{'addr2'}&&$FORM{'tel2'}&&$FORM{'code3'}&&$FORM{'addr3'}&&$FORM{'tel3'}&&$FORM{'bbc'}&&$FORM{'talker'}&&$FORM{'web'}&&$FORM{'email'}&&$FORM{'icq'}&&$FORM{'msn'}&&$FORM{'yahoo'}&&$today2\n";
    } else {
	print DEST $LINES[$i];
    }
}
flock(DEST,8);
close(DEST);

# Update Password Data Base
sysopen(PASSWD,$passwdreal,O_RDWR) || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,2);
@PASSWDS=<PASSWD>;
truncate(PASSWD,0) || die "Can't Truncate $passwdreal: $!\n";
seek(PASSWD,0,0) || die "Can't Seek $passwdreal: $!\n";
for ($i=0;$i<@PASSWDS;$i++) {
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($user[3] eq $FORM{'uid'} && $user[2] =~ /$COOKIE{'group'}/) {
      print PASSWD "$user[0]&&$user[1]&&$user[2]&&$user[3]&&$user[4]&&$user[5]&&$user[6]&&$user[7]&&$FORM{'year'}\/$FORM{'month'}\/$FORM{'day'}&&$user[9]\n";
    } else {
      print PASSWD $PASSWDS[$i];
   }
}
flock(PASSWD,8);
close(PASSWD);

}

##################
# Change_Thought #
##################

sub change_thought {

print <<HTML;
<div align=center><table border=0 width=80%><tr><td><br>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="maintain">
<input type=hidden name=mode value="thought">
<input type=hidden name=edit value="true">
<p><textarea cols=80 rows=3 name=thought wrap=soft></textarea>
<p><div align=right><input type=submit value="確定更新"> <input type=reset value="重新輸入"></div></form>
</td></tr></table></div>
HTML
	
&html_bottom;	
	
}

#################
# Write_Thought #
#################

sub write_thought {

# Read File
sysopen(OUTPUT,$indexreal,O_RDWR) || die "Can't Open $indexreal: $!\n";
flock(OUTPUT,2);
@LINES=<OUTPUT>;

# Write New Database
truncate(OUTPUT,0) || die "Can't Truncate $indexreal: $!\n";
seek(OUTPUT,0,0) || die "Can't Seek $indexreal: $!\n";
for ($i=0;$i<@LINES;$i++) {
   $data = $LINES[$i];
   if ($data =~ /<!-- Thought for the Day Start-->/) {
      print OUTPUT "<!-- Thought for the Day Start-->\n";
      print OUTPUT "$FORM{'thought'}<br>\n";
      print OUTPUT "<div align=right><font color=\"#808080\" size=-2>$COOKIE{'name'} 于 $today</font></div>\n";
      $check="false";
      while($check eq "false") {
         if ($LINES[++$i] =~ /<!-- Thought for the Day End-->/) {
            print OUTPUT "<!-- Thought for the Day End-->\n";
            $check="true";
         }
      }
    } else {
      print OUTPUT $data;
   }
}

flock(OUTPUT,8);
close(OUTPUT);

}

##############
# Show_Other #
##############

sub show_other {

my $link_tmp = &get_ln7_link;   	
&html_top($listname7,"",$link_tmp);

print <<HTML;
<div align=center><table border=0 width=80%><tr><td><br>
<li><a href="$editcgi">瀏覽 網頁檔案</a><font size=-1>（僅可使用於Unix系統，Win32系統下將造成嚴重當機！）</font>
<br><br></td></tr></table></div>
HTML
	
&html_bottom;	
	
}

#################
# Register_Form #
#################

sub register_form {
	
print <<HTML;
<table width=100% border=0 cellpadding=1 cellspacing=0><tr><td bgcolor="#F5F561">
<table bgcolor="#FFFFE8" width=100% border=0 cellpadding=3 cellspacing=0>
<tr><td height=30 colspan=4>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="register">
<input type=hidden name=edit value="true">
</td></tr>
<tr><td width=30%></td><td width=20%>註冊群組：</td><td width=20%>
<select name=group>
<option value="phys99">清華物理一九九九級
<option value="hsnu783">師大附中七八三班
</select>
</td><td width=30%></td></tr>
<tr><td></td><td>真實姓名：</td><td>
<input type=text name=realname size=10>
</td><td></td></tr>
<tr><td></td><td>性別：</td><td>
<select name=sex>
<option value="M">男士<option value="F">女士
</select>
</td><td></td></tr>
<tr><td></td><td>血型：</td><td>
<select name=bloodtype>
<option value="A">A
<option value="B">B
<option value="O">O
<option value="AB">AB
<option value="other">other
</select> 型
</td><td></td></tr>
<tr><td></td><td>生日：</td><td>
<select name=month>
HTML

for (my $a=1;$a<13;$a++) {
   if (length($a) == 1) { $a = "0".$a; }	
   print "<option value=\"$a\">$a\n";
}

print "</select>月<select name=day>\n";

for (my $b=1;$b<32;$b++) {
   if (length($b) == 1) { $b = "0".$b; }	
   print "<option value=\"$b\">$b\n";
}

print <<HTML;
</select>日
</td><td></td></tr>
<tr><td></td><td height=50 colspan=2 align=center valign=bottom><input type=submit value="確定"> <input type=reset value="清除"></td><td></td></tr>
<tr><td height=30 colspan=4></form></td></tr>
</table></td></tr></table>
HTML

&html_bottom;  
	
}

##################
# Check_Register #
##################

sub check_register {

my $noname="您所註冊的姓名 <font color=blue>$FORM{'realname'}</font> 並未在 <font color=blue>$FORM{'group'}</font> 群組名單中！<br>\n請再次確認您輸入的真實姓名及所選擇的群組正確後，重新嘗試註冊！<br>\n若您確定您的輸入皆正確，請來信 <a href=\"mailto:$sysemail\">服務信箱</a> ！<br>\n我們將儘速為您處理，謝謝！\n";
my $inuse="您所註冊的姓名 <font color=blue>$FORM{'realname'}</font> 已經註冊使用中！<br>\n請再次確認您輸入的真實姓名及所選擇的群組正確後，重新嘗試註冊！<br>\n若您確定您的輸入皆正確，請來信 <a href=\"mailto:$sysemail\">服務信箱</a> ！<br>\n我們將儘速為您處理，謝謝！\n";
my $wrong="您所註冊的姓名 <font color=blue>$FORM{'realname'}</font> 在 <font color=blue>$FORM{'group'}</font> 群組中的基本資料與您輸入的不吻合！<br>\n請再次確認您輸入的基本資料正確後，重新嘗試註冊！<br>\n若您確定您的輸入皆正確，請來信 <a href=\"mailto:$sysemail\">服務信箱</a> ！<br>\n我們將儘速為您處理，謝謝！\n";

if ($FORM{'realname'} eq "") {
   return $noname;
}   

# Read Passwd Data Base
open (PASSWD,"$passwdreal") || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,1);
@PASSWDS=<PASSWD>;
flock(PASSWD,8);
close(PASSWD);

for ($i=0;$i<@PASSWDS;$i++) {
   if ($PASSWDS[$i] =~ /^#/) { next; }
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($FORM{'realname'} eq $user[3]) {
      @allgroups = split(/:/, $user[2]);
      for ($a=0;$a<@allgroups;$a++) {
         if ($allgroups[$a] eq $FORM{'group'}) {
            if ($user[9] eq "true") {
               return $inuse;
             } else {             
               # Read Data Base
               $datareal="$datarealbase/$FORM{'group'}.txt";
               open (FILE,"$datareal") || die "Can't Open $datareal: $!\n";
               flock(FILE,1);
               @LINES=<FILE>;
               flock(FILE,8);
               close(FILE);
               for ($i=0;$i<@LINES;$i++) {
                  $user=$LINES[$i];
                  chomp $user;
                  @data = split(/&&/, $user);
                  if ($data[0] eq $FORM{'realname'}) {
                     last;
                  }
               }
               @birth = split(/\//, $data[3]);
               if ($FORM{'sex'} eq $data[1] && $FORM{'month'} eq $birth[1] && $FORM{'day'} eq $birth[2]) {
                  &show_register;
                  exit 0;
                } else {
                  return $wrong;
               }                                            
            }
         }
      }
   }
}

return $noname;
	
}

#################
# Show_Register #
#################

sub show_register {
	
my ($error_tmp)=@_;
	
my @info_tmp=(	
"請輸入您往後登入本站欲使用的帳號密碼，及個人資料以方便更新線上通訊錄。",
"除永久資料務必填寫外，其他欄位沒有請空白。",
"請盡可能填妥您的電子信箱，以便寄發通告時能快速通知到您。",
"若您的目前資料與永久資料相同，請將目前資料欄位空白。",
);
		
&html_top($sysename." ".$sysname." 會員註冊",$error_tmp,"",@info_tmp);
&close_link;

# Read Group Data Base
open (GROUP,"$groupreal") || die "Can't Open $groupreal: $!\n";
flock(GROUP,1);
@GROUPS=<GROUP>;
flock(GROUP,8);
close(GROUP);

print <<HTML;
<div align=center><br>
<form method=POST action="$classboardcgi">
<input type=hidden name=act value="write_register">
<table width=90% border=0>
<tr><td>

<p>帳號：<input type=text name=nickname size=10>
<p>密碼：<input type=password name=passwd size=10>
<p>密碼確認：<input type=password name=repasswd size=10>
<p><hr noshade size=1 color=#000080>
<p>註冊群組：<select name=group>
HTML

      for ($j=0;$j<@GROUPS;$j++) {
         if ($GROUPS[$j] =~ /^#/) { next; }
         $groups = $GROUPS[$j];
         chomp $groups;
         @group = split(/&&/, $groups);
         if ($group[0] eq $FORM{'group'}) {
            print "<option value=\"$group[0]\">$group[1]\n";
            last;
         }
      }
   
print <<HTML;
</select>
<p>真實姓名：<select name=realname><option value="$FORM{'realname'}">$FORM{'realname'}</select>
<p>性別：<select name=sex>
HTML

      if ($FORM{'sex'} eq "M") {
         print "<option value=\"M\">男士";
       } else {
         print "<option value=\"F\">女士";
      }

print <<HTML;
</select>
<p>血型：<select name=bloodtype><option value="$FORM{'bloodtype'}">$FORM{'bloodtype'}</select> 型
<p>生日：<select name=year>
HTML

for ($y=1960;$y<=$year;$y++) {
   if ($birth[0] == $y) {
      print "<option value=\"$y\" selected>$y\n";
    } else {
      print "<option value=\"$y\">$y\n";
   }
}

print <<HTML;
</select>年<select name=month><option value="$FORM{'month'}">$FORM{'month'}</select>
月<select name=day><option value="$FORM{'day'}">$FORM{'day'}</select>日
<p>永久地址：（<input type=text size=3 name=code1 value="$data[4]">）<input type=text size=50 name=addr1 value="$data[5]">
<p>永久電話：<input type=text name=tel1 value="$data[6]">
<p>目前地址：（<input type=text size=3 name=code2 value="$data[7]">）<input type=text size=50 name=addr2 value="$data[8]">
<p>目前電話：<input type=text name=tel2 value="$data[9]">
<p>目前地址二：（<input type=text size=3 name=code3 value="$data[10]">）<input type=text size=50 name=addr3 value="$data[11]">
<p>目前電話二：<input type=text name=tel3 value="$data[12]">
<p>扣機號碼：<input type=text name=bbc value="$data[13]">
<p>手機號碼：<input type=text name=talker value="$data[14]">
<p>個人網頁：<input type=text size=40 name=web value="$data[15]"> ( 請以 http:// 開頭 ）
<p>電子信箱：<input type=text size=50 name=email value="$data[16]">
<p>ＩＣＱ號碼：<input type=text name=icq value="$data[17]">
</td></tr></table>
<p><input type=submit value="確定"> <input type=reset value="清除">
</form></div>
HTML

&html_bottom;	
		
}	

##################
# Write_Register #
##################

sub write_register {

# Read Passwd Data Base
sysopen(PASSWD,$passwdreal,O_RDWR) || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,2);
@PASSWDS=<PASSWD>;

# Check if the nickname is used
for ($i=0;$i<@PASSWDS;$i++) {
   if ($PASSWDS[$i] =~ /^#/) { next; }
   $lines = $PASSWDS[$i];
   chomp $lines;
   @data = split(/&&/,$lines);
   if ($data[0] eq $FORM{'nickname'}) {
      $used=true;
      last;
   }
}
if ($used) {
   flock(PASSWD,8);
   close(PASSWD);
   &show_register("您所輸入的帳號已被其他使用者使用！<br>請再次更換您的帳號名稱後，重新嘗試註冊！<br>");
   exit 0;
}

truncate(PASSWD,0) || die "Can't Truncate $passwdreal: $!\n";
seek(PASSWD,0,0) || die "Can't Seek $passwdreal: $!\n";
for ($i=0;$i<@PASSWDS;$i++) {
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   if ($user[3] eq $FORM{'realname'} && $user[2] =~ /$FORM{'group'}/) {
      $groups=$user[2];
      print PASSWD "$FORM{'nickname'}&&$FORM{'passwd'}&&$user[2]&&$user[3]&&$user[4]&&$user[5]&&$user[6]&&$today3&&$FORM{'year'}\/$FORM{'month'}\/$FORM{'day'}&&true\n";
    } else {
      print PASSWD $PASSWDS[$i];
   }
}
flock(PASSWD,8);
close(PASSWD);

@allgroup = split(/:/, $groups);
# Multi Group
foreach $each (@allgroup) {

# Read Data Base
$datareal="$datarealbase/$each.txt";
sysopen(DEST,$datareal,O_RDWR) || die "Can't Open $datareal: $!\n";
flock(DEST,2);
@LINES=<DEST>;

# Write New Database
truncate(DEST,0) || die "Can't Truncate $datareal: $!\n";
seek(DEST,0,0) || die "Can't Seek $datareal: $!\n";
for ($i=0;$i<@LINES;$i++) {
    $lines=$LINES[$i];
    chomp $lines;
    @line = split(/&&/,$lines);
    if ( $line[0] eq $FORM{'realname'}) {
	print DEST "$FORM{'realname'}&&$FORM{'sex'}&&$FORM{'bloodtype'}&&$FORM{'year'}\/$FORM{'month'}\/$FORM{'day'}&&$FORM{'code1'}&&$FORM{'addr1'}&&$FORM{'tel1'}&&$FORM{'code2'}&&$FORM{'addr2'}&&$FORM{'tel2'}&&$FORM{'code3'}&&$FORM{'addr3'}&&$FORM{'tel3'}&&$FORM{'bbc'}&&$FORM{'talker'}&&$FORM{'web'}&&$FORM{'email'}&&$FORM{'icq'}&&$line[18]&&$line[19]&&$today2\n";
    } else {
	print DEST $LINES[$i];
    }

}
flock(DEST,8);
close(DEST);

}

&html_top($sysename." ".$sysname);
&close_link;
print "<br><br><br><div align=center><p>親愛的<font color=blue> $FORM{'nickname'} ( $FORM{'realname'} ) </font>，您已經完成註冊程序！<p><h3>歡迎您的加入！</h3><p>您可以使用您剛剛註冊的帳號與密碼至本站 <a href=\"$indexurl\">主網頁</a> 登入！</div><br><br><br>\n";
&html_bottom; 
&update_rate; 
               
} 

################
# Update_Top10 #
################

sub update_top10 {

# Read Passwd Data Base
open (PASSWD,"$passwdreal") || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,1);
@PASSWDS=<PASSWD>;
flock(PASSWD,8);
close(PASSWD);

# Check Users' Information
for ($i=0;$i<@PASSWDS;$i++) {
   if ($PASSWDS[$i] =~ /^#/) { next; }
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   $top[11] = $user[6];
   $name[11] = $user[0];
   for ($j=11;$j>0;$j--) {
      if ($top[$j] > $top[$j-1]) {
         $temp[0] = $top[$j];
         $top[$j] = $top[$j-1];
         $top[$j-1] = $temp[0];
         $temp[1] = $name[$j];
         $name[$j] = $name[$j-1];
         $name[$j-1] = $temp[1];
      }
   }
}

# OUTPUT
sysopen(OUTPUT,$indexreal,O_RDWR) || die "Can't Open $indexreal: $!\n";
flock(OUTPUT,2);
@LINES=<OUTPUT>;

truncate(OUTPUT,0) || die "Can't Truncate $indexreal: $!\n";
seek(OUTPUT,0,0) || die "Can't Seek $indexreal: $!\n";
for ($i=0;$i<@LINES;$i++) {
   $data = $LINES[$i];
   if ($data =~ /<!-- System Login Top10 Start-->/) {
      print OUTPUT "<!-- System Login Top10 Start-->\n";
      for ($k=1;$k<11;$k++) {
      	 print OUTPUT "<tr align=center><td><font size=-1>$k</font></td><td><font color=blue size=-1>$name[$k-1]</font></td><td><font color=orange size=-1>$top[$k-1]</font></td></tr>\n";
      }
      $check="false";
      while($check eq "false") {
         if ($LINES[++$i] =~ /<!-- System Login Top10 End-->/) {
            print OUTPUT "<!-- System Login Top10 End-->\n";
            $check="true";
         }
      }
    } else {
      print OUTPUT $data;
   }
}

flock(OUTPUT,8);
close(OUTPUT);

}

###############
# Update_Rate #
###############

sub update_rate {
	
# Read Group Data Base
open (GROUP,"$groupreal") || die "Can't Open $groupreal: $!\n";
flock(GROUP,1);
@GROUPS=<GROUP>;
flock(GROUP,8);
close(GROUP);

$z=0;
for ($j=0;$j<@GROUPS;$j++) {
   if ($GROUPS[$j] =~ /^#/) { next; }
   $groups = $GROUPS[$j];
   chomp $groups;
   @group = split(/&&/, $groups);
   $gid[$z++]=$group[0];
   $gname{"$group[0]"}=$group[1];
   $gtotal{"$group[0]"}=0;
   $greg{"$group[0]"}=0;
   $gcanreg{"$group[0]"}=0;
}

# Read Passwd Data Base
open (PASSWD,"$passwdreal") || die "Can't Open $passwdreal: $!\n";
flock(PASSWD,1);
@PASSWDS=<PASSWD>;
flock(PASSWD,8);
close(PASSWD);

for ($i=0;$i<@PASSWDS;$i++) {
   if ($PASSWDS[$i] =~ /^#/) { next; }
   $passwds = $PASSWDS[$i];
   chomp $passwds;
   @user = split(/&&/, $passwds);
   @group = split(/:/, $user[2]);
   foreach $each(@group) {
      for ($k=0;$k<@gid;$k++) {
         if ($each eq $gid[$k]) {
            $gtotal{"$gid[$k]"}++;
            if ($user[9] eq true) {
               $greg{"$gid[$k]"}++;
             } else {
               if ($user[8] ne "") {
                  $gcanreg{"$gid[$k]"}++;
               }
            }
         }   
      }
   }
}

# OUTPUT
sysopen(OUTPUT,$indexreal,O_RDWR) || die "Can't Open $indexreal: $!\n";
flock(OUTPUT,2);
@LINES=<OUTPUT>;

truncate(OUTPUT,0) || die "Can't Truncate $indexreal: $!\n";
seek(OUTPUT,0,0) || die "Can't Seek $indexreal: $!\n";
@colors = (orange,green);
for ($i=0;$i<@LINES;$i++) {
   $data = $LINES[$i];
   if ($data =~ /<!-- System Register Rate Start-->/) {
      print OUTPUT "<!-- System Register Rate Start-->\n";
      for ($k=0;$k<@gid;$k++) {
         $up1=$greg{"$gid[$k]"};
         $up2=$greg{"$gid[$k]"}+$gcanreg{"$gid[$k]"};
         $down=$gtotal{"$gid[$k]"};
         $rate1=$up1/$gtotal{"$gid[$k]"}*100;
         $rate2=$up2/$gtotal{"$gid[$k]"}*100;
         printf OUTPUT "<td valign=bottom><font size=-1>%5.1f%<table bgcolor=$colors[0] width=10 height=%d><tr><td></td></tr></table></td>\n",$rate1,$rate1;
         printf OUTPUT "<td valign=bottom><font size=-1>%5.1f%<table bgcolor=$colors[1] width=10 height=%d><tr><td></td></tr></table></td>\n",$rate2,$rate2;
      }
      print OUTPUT "</tr>\n<tr align=center>";
      for ($k=0;$k<@gid;$k++) {
         $up1=$greg{"$gid[$k]"};
         $up2=$greg{"$gid[$k]"}+$gcanreg{"$gid[$k]"};
         $down=$gtotal{"$gid[$k]"};
         print OUTPUT "<td><font size=-1>$up1/$down</td><td><font size=-1>$up2/$down</td>";
      }
      print OUTPUT "</tr>\n<tr align=center>";
      for ($k=0;$k<@gid;$k++) {
         $name=$gname{"$gid[$k]"};
         print OUTPUT "<td colspan=2><font color=blue size=-1>$name</td>";
      }     
      $tt = @gid * 2;
      print OUTPUT "</tr>\n<tr><td colspan=$tt>\n";
      $check="false";
      while($check eq "false") {
         if ($LINES[++$i] =~ /<!-- System Register Rate End-->/) {
            print OUTPUT "<!-- System Register Rate End-->\n";
            $check="true";
         }
      }
    } else {
      print OUTPUT $data;
   }
}

flock(OUTPUT,8);
close(OUTPUT);	
	
}	
