<?php
//===================初期設定====================
$data_file = './chat.dat'; //データファイル名
$title = 'KOMOチャット'; //タイトル名
$data_max = 30; //データ最大記録数
//===============================================

//スーパーグローバル変数対策
if(!isset($PHP_SELF)){ $PHP_SELF = $_SERVER["PHP_SELF"]; }
if(!isset(
$action)){ $action = $_POST['action']; }
if(!isset(
$mode)){
    if(
$_GET['mode']){
        
$mode = $_GET['mode'];
    }else{
        
$mode = $_POST['mode'];
    }
}
if(!isset(
$name)){
    if(
$_GET['name']){
        
$name = $_GET['name'];
    }else{
        
$name = $_POST['name'];
    }
}
if(!isset(
$ncolor)){
    if(
$_GET['ncolor']){
        
$ncolor = $_GET['ncolor'];
    }else{
        
$ncolor = $_POST['ncolor'];
    }
}
if(!isset(
$refresh)){
    if(
$_GET['refresh']){
        
$refresh = $_GET['refresh'];
    }else{
        
$refresh = $_POST['refresh'];
    }
}
if(!isset(
$message)){ $message = $_POST['message']; }
//エスケープ記号対策
$name = stripslashes($name);
$message = stripslashes($message);

//===================フレーム生成関数======================
function MakeFrame() {
    global
$title,$PHP_SELF;
    print
"<HTML><HEAD><TITLE>$title</TITLE></HEAD>\n";
    print
"<FRAMESET rows=20%,80%>\n";
    print
"<FRAME src=$PHP_SELF?mode=entry name=up>\n";
    print
"<FRAME src=$PHP_SELF?mode=output name=bottom>\n";
    print
"</FRAMESET></HTML>\n";
}
//===================エントリーフォーム生成関数=======================
function EntryPage() {
    global
$title,$PHP_SELF;
    print
"<HTML><HEAD><TITLE>$title</TITLE></HEAD>\n";
    print
"<BODY text=#000000 bgcolor=#ffffee>\n";
    print
"<FORM method=POST action=$PHP_SELF target=up>\n";
    print
"<INPUT type=hidden name=mode value=input>\n";
    print
"<H3>$title</H3>\n";
    print
"<BLOCKQUOTE>\n";
    print
"<TABLE BORDER=0 CELLSPACING=1 WIDTH=80%>\n";
    print
"<TR><TD WIDTH=11%><P ALIGN=RIGHT>お名前:</TD>\n";
    print
"<TD WIDTH=89%><INPUT type=text name=name size=20>\n";
    print
"<input type=radio name=ncolor value=#0000ff checked><font color=#0000ff><b>青</b></font>\n";
    print
" <input type=radio name=ncolor value=#ff0000><font color=#ff0000><b>赤</b></font>\n";
    print
" <input type=radio name=ncolor value=#008000><font color=#008000><b>緑</b></font>\n";
    print
" <input type=radio name=ncolor value=#800000><font color=#800000><b>茶</b></font>\n";
    print
" <input type=radio name=ncolor value=#800080><font color=#800080><b>紫</b></font>\n";
    print
"<INPUT type=submit value=エントリー></TD></TR></TABLE></BLOCKQUOTE>\n";
    print
"</FORM></BODY></HTML>\n";
}
//===================入力フォーム生成関数=======================
function InputPage() {
    global
$title,$name,$ncolor,$refresh,$PHP_SELF;
    print
"<HTML><HEAD><TITLE>$title</TITLE></HEAD>\n";
    print
"<BODY text=#000000 bgcolor=#ffffee>\n";
    print
"<FORM name=form1 method=POST action=$PHP_SELF target=bottom>\n";
    print
"<INPUT type=hidden name=mode value=post>\n";
    print
"<BLOCKQUOTE>\n";
    print
"<TABLE BORDER=0 CELLSPACING=1 WIDTH=88%>\n";
    if(
$name != ""){
        print
"<TR><TD>$name :<INPUT type=hidden name=name value=\"$name\">\n";
    } else {
        print
"<TR><TD>身元不明人:<INPUT type=hidden name=name value=身元不明人>\n";
    }
    print
"<INPUT type=hidden name=ncolor value=\"$ncolor\">\n";
    print
"<INPUT type=text name=message size=50>\n";
    print
" リフレッシュ:<SELECT NAME=refresh><OPTION>60</OPTION><OPTION>45</OPTION><OPTION>30</OPTION></SELECT> 秒\n";
    print
" <INPUT type=submit value=送信></TD></TR></FORM>\n";
    print
"<TR><TD><FORM method=POST action=$PHP_SELF target=up>\n";
    print
"<INPUT type=hidden name=mode value=return>\n";
    if(
$name != ""){
        print
"<INPUT type=hidden name=name value=$name>\n";
    } else {
        print
"<INPUT type=hidden name=name value=身元不明人>\n";
    }
    print
"<INPUT type=submit value=エントリーページへ戻る></TD></TR></FORM>\n";
    print
"</TABLE></BLOCKQUOTE></BODY></HTML>\n";
}
//===================メッセージ表示関数=====================
function OutputPage() {
    global
$title,$data_file,$refresh,$PHP_SELF;
    if(!
$refresh){ $refresh = 60; }
    print
"<HTML><HEAD><TITLE>$title</TITLE></HEAD>\n";
    print
"<META HTTP-EQUIV=refresh CONTENT=$refresh;URL=$PHP_SELF?mode=output>\n";
    print
"<BODY text=#000000 bgcolor=#ffffee link=#ff0000 vlink=#ff0000>\n";
    print
"<SCRIPT language=JavaScript>\n";
    print
"parent.up.document.form1.message.value=\"\";\n";
    print
"</SCRIPT>\n";
    
$datalog = file($data_file);
    
$msg_count = count($datalog);
    for(
$i = 0; $i < $msg_count; $i++){
        list(
$name2,$ncolor2,$message2,$now2) = split( ",", $datalog[$i]);
        
//記事表示部を生成
        
print "<font color=$ncolor2><b>$name2</b></font>\n";
        print
" $message2\n";
        print
" <font size=2 color='green'>$now2</font>\n";
        print
"<hr>\n";
    }
    print
"<div align=right><font size=-1>Powered by <a href=http://www.komonet.ne.jp/ target=_blank>KOMONET</a></font></div>\n";
    print
"</BODY></HTML>\n";
}
//===================メッセージ書き込み関数=====================
function PostMessage() {
    global
$name,$ncolor,$message,$data_file,$data_max;
    if(
$message != ""){
        
//現在時刻の取得
        
$now = date("Y/m/d H:i:s");
        
//ここから書き込みデータの調整
        
$name = htmlspecialchars($name); //特殊文字のHTMLエントリへの変換
        
$ncolor = htmlspecialchars($ncolor);
        
$message = htmlspecialchars($message);
        
$message = nl2br($message); //HTML改行文字の挿入
        
$message = str_replace("\r", "", $message); //文字列の置換
        
$message = str_replace("\n", "", $message);
        
//ログファイルの区切文字(",")と区別するために文字コード(&#44)に書き換える。
        
$name = str_replace(",", "&#44;",$name);
        
$message = str_replace(",", "&#44;",$message);
        
//配列要素を文字列により連結
        
$input_msg = implode(",", array($name,$ncolor,$message,$now));
        
$datalog = file($data_file);
        
$fp = fopen($data_file, "w");
        
rewind($fp);
        
fputs($fp, "$input_msg\n");
        
//最大記録数の調整
        
if($data_max < sizeof($datalog))
            
$msg_num = $data_max - 1;
        else
            
$msg_num = sizeof($datalog);
        for(
$i = 0; $i < $msg_num; $i++){
            
fputs($fp, $datalog[$i]);
        }
        
fclose($fp);
        unset(
$datalog);
    }
    
OutputPage();
}
//==================メイン処理=====================
if($mode == ""){ MakeFrame(); }
elseif(
$mode == "entry") { EntryPage(); }
elseif(
$mode == "output") { OutputPage(); }
elseif(
$mode == "input") { InputPage(); }
elseif(
$mode == "post") { PostMessage(); }
elseif(
$mode == "return") { EntryPage(); }
else { }
?>