<?php

//**********************************************************************
//
// レビューの追加・修正・削除
//
// Copyright (C) GOMI Hisashi 2002-2010 All rights reserved.
//
//**********************************************************************

//******************************
// 設定
//******************************

include("../lib.php");
include("revcom.php");
$url_self = "edit.php";


//******************************
// 入力
//******************************

// 親レビューID
if ( isset($_REQUEST['f_parent']) ){
  $f_parent = (int)$_REQUEST['f_parent'];
}else{
  $f_parent = -1;
}

// クラスID
if ( isset($_REQUEST['f_class']) ){
  $f_class = (int)$_REQUEST['f_class'];
}else{
  $f_class = REVIEW_CLASS_ARTICLE;
}
if ( !in_array($f_class, array(REVIEW_CLASS_ARTICLE, REVIEW_CLASS_FOLLOW, REVIEW_CLASS_TRACKBACK, REVIEW_CLASS_CATEGORY, REVIEW_CLASS_IMAGE)) ){
  error("<P>カテゴリクラスの値が異常です.</P>\n");
}

// アップロードファイル
if ( isset($_FILES["f_file"]["tmp_name"]) && is_uploaded_file($_FILES["f_file"]["tmp_name"]) ){
  if ( isset($_REQUEST['f_file_uploaded']) ){
    unlink(TEMPORARY_UPLOAD_DIRECTORY_PATH . basename($_REQUEST['f_file_uploaded']));
  }
  $file_uploaded = basename($_FILES["f_file"]["tmp_name"]) . "_" . basename($_FILES["f_file"]["name"]);
  if ( move_uploaded_file($_FILES["f_file"]["tmp_name"], TEMPORARY_UPLOAD_DIRECTORY_PATH . $file_uploaded) ){
    $f_file_uploaded = $file_uploaded;
  }else{
    //error("アップロードに失敗しました.");
  }
}else
if ( isset($_REQUEST['f_file_uploaded']) ){
  $f_file_uploaded = $_REQUEST['f_file_uploaded'];
}


if ( !isset($_REQUEST['f_author']) ) $f_author = '';
if ( !isset($_REQUEST['f_email']) ) $f_email = '';
if ( !isset($_REQUEST['f_title']) ) $f_title = '';
if ( !isset($_REQUEST['f_msg']) ) $f_msg = '';
if ( !isset($_REQUEST['f_related_url']) ) $f_related_url = '';
if ( !isset($_REQUEST['f_msg_url']) ) $f_msg_url = '';
if ( !isset($_REQUEST['f_creator']) ) $f_creator = '';
//if ( !isset($_REQUEST['f_axslvl']) ) $f_axslvl = '';
//if ( !isset($_REQUEST['f_caxslvl']) ) $f_caxslvl = '';
if ( !isset($_REQUEST['f_score']) ) $f_score = '';
//if ( !isset($_REQUEST['f_revid']) ) $f_revid = '';


if ( isset($_REQUEST['f_author']) ) $f_author = $_REQUEST['f_author'];
if ( isset($_REQUEST['f_email']) ) $f_email = $_REQUEST['f_email'];
if ( isset($_REQUEST['f_title']) ) $f_title = $_REQUEST['f_title'];
if ( isset($_REQUEST['f_msg']) ) $f_msg = $_REQUEST['f_msg'];
if ( isset($_REQUEST['f_related_url']) ) $f_related_url = $_REQUEST['f_related_url'];
if ( isset($_REQUEST['f_msg_url']) ) $f_msg_url = $_REQUEST['f_msg_url'];
if ( isset($_REQUEST['f_creator']) ) $f_creator = $_REQUEST['f_creator'];
if ( isset($_REQUEST['f_axslvl']) ) $f_axslvl = (int)$_REQUEST['f_axslvl'];
if ( isset($_REQUEST['f_caxslvl']) ) $f_caxslvl = (int)$_REQUEST['f_caxslvl'];
if ( isset($_REQUEST['f_score']) ) $f_score = (int)$_REQUEST['f_score'];

if ( isset($_REQUEST['f_revid']) ) $f_revid = (int)$_REQUEST['f_revid'];

// IPアドレス
$ip_address = getenv("REMOTE_ADDR");


//**************************************************
//
// サブルーチン
//
//**************************************************

function make_status_str($errflg, $errmsg, $value = 'dummy')
{
  if ( $value != '' || $errflg < 0 ){
    if ( $errflg ){
      if ( strlen($errmsg) > 0 ){
        return "<FONT color=\"red\">NG</FONT> (" . quote_html($errmsg) . ")";
      }else{
        return "<FONT color=\"red\">NG</FONT>";
      }
    }else{
      return "OK";
    }
  }else{
    if ( $errflg ){
      return '*';
    }else{
      return '&nbsp;';
    }
  }
}

//******************************
// 一行入力
//******************************
function html_form_string($label, $variable, $value, $size, $maxlength, $errflg, $errmsg, $ispassword = 0)
{
  $label = quote_html($label);
  $variable = quote_html_param($variable);
  $value = quote_html_param($value);
  $errstr = make_status_str($errflg, $errmsg, $value);
  if ( !$ispassword ){
    $typestr = "text";
  }else{
    $typestr = "password";
  }
  print "<TR><TD nowrap>$label</TD><TD><INPUT size=\"$size\" type=\"$typestr\" name=\"$variable\" maxlength=\"$maxlength\" value=\"$value\"></TD><TD>$errstr</TD></TR>\n";
}

//******************************
// 複数行入力
//******************************
function html_form_text($label, $variable, $value, $rows, $cols, $errflg = 0, $errmsg = '')
{
  $value = quote_html_textarea($value);
  $errstr = make_status_str($errflg, $errmsg, $value);
  print "    <TR><TD nowrap>$label</TD><TD><TEXTAREA rows=\"$rows\" cols=\"$cols\" name=\"$variable\">$value</TEXTAREA></TD><TD>$errstr</TD></TR>\n";
}

//******************************
// アクセスレベル選択
//******************************
function html_form_selectlevel($label, $variable, $value = -1, $max = 100, $errflg = 0, $errmsg = '')
{
  $level_unit = 10;

  $errstr = make_status_str($errflg, $errmsg, $value);
  print "<TR><TD nowrap>$label</TD><TD>\n";
  print "<SELECT name=\"$variable\">\n";
  $level = $max;
  $selected = 0;
  if ( $level % $level_unit > 0 ){
    print "<OPTION value=\"$level\" selected>$level</OPTION>\n";
    $level = ((int)($level / $level_unit)) * $level_unit;
    $selected = 1;
  }
  for ( ; $level >= 0 ; $level -= $level_unit ){
    if ( $level == 0 ){
      $level_str = "なし";
    }else{
      $level_str = $level;
    }
    if ( !$selected && $level <= $value ){
      $selected = 1;
      print "<OPTION value=\"$level\" selected>$level_str</OPTION>\n";
      if ( $level == $value ) continue;
    }
    print "<OPTION value=\"$level\">$level_str</OPTION>\n";
  }
  print "</SELECT>\n";
  print "</TD><TD>*</TD></TR>\n";
}


//******************************
// 評価選択
//******************************
function html_form_score($label, $variable, $value, $errflg, $errmsg)
{
  global $eval_val;

  print "<TR><TD nowrap>$label</TD><TD>\n";
  print "<SELECT name=\"$variable\">\n";

  $eval_val_keys = array_keys($eval_val);
  rsort($eval_val_keys, SORT_NUMERIC);
  for ( $i = 0, $n = count($eval_val_keys) ; $i < $n ; $i ++ ){
    $key = $eval_val_keys[$i];
    $str = quote_html($eval_val[$key]);
    if ( $value == $key ){
      print "<OPTION value=\"$key\" selected>$str</OPTION>\n";
    }else{
      print "<OPTION value=\"$key\">$str</OPTION>\n";
    }
  }

  print "</SELECT>\n";
  print "</TD><TD>*</TD></TR>\n";
}


//******************************
// 隠しパラメータ
//******************************
function html_hidden_string($variable, $value)
{
  $value_quoted = quote_html_param($value);
  print "<INPUT type=\"hidden\" name=\"$variable\" value=\"$value_quoted\">\n";
}


//******************************
// 一行確認と隠しパラメータ
//******************************
function html_view_string($label, $value)
{
  if ( strlen($value) > 0 ){
    $value_quoted = quote_html($value);
  }else{
    $value_quoted = "<FONT color=\"cyan\"><B>なし</B></FONT>";
  }
  print "<TR><TD nowrap>$label</TD><TD>$value_quoted</TD></TR>\n";
}


//******************************
// 複数行確認と隠しパラメータ
//******************************
function html_view_text($label, $value, $rows, $cols)
{
  if ( strlen($value) > 0 ){
    $value_quoted = quote_html($value);
  }else{
    $value_quoted = "<FONT color=\"cyan\"><B>なし</B></FONT>";
  }
  $value_quoted = url_replace($value_quoted);
  print "<TR><TD nowrap>$label</TD><TD>$value_quoted</TD></TR>\n";
}


//******************************
// アクセスレベル確認と隠しパラメータ
//******************************
function html_view_selectlevel($label, $value)
{
  if ( strlen($value) == 0 || $value == 0 ){
    $value_quoted = "なし";
  }else{
    $value_quoted = quote_html($value);
  }
  print "<TR><TD nowrap>$label</TD><TD>$value_quoted</TD></TR>\n";
}


//******************************
// 評価確認と隠しパラメータ
//******************************
function html_view_score($label, $value)
{
  global $eval_val;

  $value_int = (int)$value;
  if ( $value_int == 9999 ){
    $str = "なし";
  }else{
    $str = quote_html($eval_val[$value_int]);
  }
  print "<TR><TD nowrap>$label</TD><TD>$str</TD></TR>\n";
}


//**************************************************
//
// カテゴリー選択ルーチン
//
//**************************************************

//******************************
// リスト出力
//******************************
function put_category_select($revid = 1, $depth = 0)
{
  global $f_parent;
  global $review_titles, $review_authors, $review_class_ids, $child_review_ids;

  if ( $depth == 0 ){
    print "<SELECT name=\"f_parent\">\n";
  }

  if ( isset($review_titles[$revid]) ){
    $review_title_quoted = quote_html($review_titles[$revid]);
    $review_author_quoted = quote_html($review_authors[$revid]);
    if ( $revid == $f_parent ){
      print "<OPTION value=\"$revid\" selected>";
    }else{
      print "<OPTION value=\"$revid\">\n";
    }
    for ( $i = 0 ; $i < $depth - 1 ; $i ++ ) print "&nbsp; ";
    if ( $i < $depth ) print "+";
    print $review_title_quoted;
  }

  if ( isset($child_review_ids[$revid]) ){
    $childs = $child_review_ids[$revid];
    $n = count($childs);

    for ( $i = 0 ; $i < $n ; $i ++ ){
      put_category_select($childs[$i], $depth + 1);
    }
  }

  if ( $depth == 0 ){
    print "</SELECT>\n";
  }
}


//******************************
// カテゴリを読み込む
//******************************
function prepare_category_select($db, $review_id = 1)
{
  global $access_level;
  global $review_titles, $review_authors, $review_class_ids, $child_review_ids;

  $review_class_category = REVIEW_CLASS_CATEGORY;

  // 取得対象レビューID
  $revids = array();

  $review_titles = array();
  $review_authors = array();
  $review_class_ids = array();
  $child_review_ids = array();

  $sql = <<<EOB
SELECT
  r.ReviewClassID AS ReviewClassID
, r.Title AS Title
, r.Author AS Author
, r.ChildAccessLevel AS ChildAccessLevel
FROM
  Reviews r
WHERE
    r.ReviewID = $review_id
AND r.ReviewClassID = $review_class_category
EOB
;
  $row = db_query_single_record($db, $sql);

  if ( $row == false ){
    error("<P>ローカルルートとなる対象カテゴリがありません.</P>");
  }

  $this_revids = array( $review_id );

  if ( $access_level >= (int)$row['ChildAccessLevel'] ){
    $revids[] = $review_id;
    $review_titles[$review_id] = $row['Title'];
    $review_authors[$review_id] = $row['Author'];
    $review_class_ids[$review_id]  = (int)$row['ReviewClassID'];
  }


  for ( $i = 1 ; ; $i ++ ){
    $this_revids_list = join(", ", $this_revids);
    $sql = <<<EOB
SELECT
  r.ReviewID AS ReviewID
, r.ParentReviewID AS ParentReviewID
, r.ReviewClassID AS ReviewClassID
, r.Title AS Title
, r.Author AS Author
, r.ChildAccessLevel AS ChildAccessLevel
FROM
  Reviews r
WHERE
    r.ParentReviewID IN ( $this_revids_list )
AND r.ReviewClassID = $review_class_category
EOB
;
    $result = db_query($db, $sql);
    $num = mysqli_num_rows($result);
    if ( $num == 0 ) break;
    $this_revids = array();
    while ( ($row = mysqli_fetch_array($result)) ){
      $revid = (int)$row['ReviewID'];
      if ( in_array($revid, $revids) ){
        error("<P>カテゴリの親子関係が壊れています.</P>");
      }
      $previd = (int)$row['ParentReviewID'];
      $this_revids[] = $revid;
      if ( $access_level >= $row['ChildAccessLevel'] ){
        $revids[] = $revid;
        $review_titles[$revid] = $row['Title'];
        $review_authors[$revid] = $row['Author'];
        $review_class_ids[$revid] = $row['ReviewClassID'];
        if ( isset($child_review_ids[$previd]) ){
          array_push($child_review_ids[$previd], $revid);
        }else{
          $child_review_ids[$previd] = array($revid);
        }
      }
    }
    mysqli_free_result($result);
  }
}



//**************************************************
//
// メイン
//
//**************************************************

// ステータス
$stat = 0;


//******************************
// 処理方法
//******************************
if ( $f_class == REVIEW_CLASS_ARTICLE ){
  $sub_title = "評";
}else
if ( $f_class == REVIEW_CLASS_FOLLOW ){
  $sub_title = "評への評";
}else
if ( $f_class == REVIEW_CLASS_TRACKBACK ){
  $sub_title = "トラックバック";
}else
if ( $f_class == REVIEW_CLASS_CATEGORY ){
  $sub_title = "カテゴリ";
}else
if ( $f_class == REVIEW_CLASS_IMAGE ){
  $sub_title = "イメージ";
}else{
  error("<P>種類がわかりません.</P>");
}

if ( isset($_REQUEST['f_revid']) ){
  $sub_title .= "の修正";
}else{
  $sub_title .= "の作成";
}


//******************************
// レビューの読み込み(修正時)
//******************************

if ( isset($_REQUEST['f_revid']) ){
  if ( !isset($_REQUEST['f_title']) ){
    $sql = <<<EOB
SELECT
  Author
, EmailAddress
, Title
, Creator
, RelatedLinkURL
, Message
, AuthorLinkURL
, Score
, AccessLevel
, ChildAccessLevel
, UserID
, ReviewClassID
, ParentReviewID
, IFNULL(DATE_FORMAT(CreatedDate, '%Y年%c月%e日'), '') AS CreatedDate
FROM
  Reviews
WHERE
  ReviewID = $f_revid
EOB
;
    $row = db_query_single_record($db, $sql);
    $f_author = $row['Author'];
    $f_email = $row['EmailAddress'];
    $f_title = $row['Title'];
    $f_creator = $row['Creator'];
    $f_related_url = $row['RelatedLinkURL'];
    $f_msg = $row['Message'];
    $f_msg_url = $row['AuthorLinkURL'];
    $f_score = $row['Score'];
    $f_axslvl = (int)$row['AccessLevel'];
    $f_caxslvl = (int)$row['ChildAccessLevel'];
    $target_user_id = $row['UserID'];
    $f_class = (int)$row['ReviewClassID'];
    $f_parent = (int)$row['ParentReviewID'];
    $created_date = $row['CreatedDate'];
    if ( $f_score == '' ){
      $f_score = 9999;
    }else{
      $f_score = (float)$f_score;
    }
  }else{
    $sql = <<<EOB
SELECT
  Author
, IFNULL(DATE_FORMAT(CreatedDate, '%Y年%c月%e日'), '') AS CreatedDate
, UserID
, ParentReviewID
FROM
  Reviews
WHERE
  ReviewID = $f_revid
EOB
;
    $row = db_query_single_record($db, $sql);
    $created_date = $row['CreatedDate'];
    $f_author = $row['Author'];
    $target_user_id = $row['UserID'];
    $f_parent_old = $row['ParentReviewID'];
  }
}


//******************************
// ユーザの読み込み
//******************************

if ( $user_id > 0 ){
  $sql = <<<EOB
SELECT
  u.UserName AS UserName
, u.EmailAddress AS EmailAddress
, DATE_FORMAT(NOW(), '%Y年%c月%e日') AS NowDate
FROM
  Users u
WHERE
    u.UserID = $user_id
EOB
;
  $row = db_query_single_record($db, $sql);
  if ( !$row ){
    error("<P>ユーザIDが異常です.</P>");
  }
  $f_author = $row['UserName'];
  $f_email = $row['EmailAddress'];
}else{
  $sql = "SELECT DATE_FORMAT(NOW(), '%Y年%c月%e日') AS NowDate";
  $row = db_query_single_record($db, $sql);
}
$now_date = $row['NowDate'];


//******************************
// 親レビューの読み込み
//******************************

if ( $f_parent > 0 ){
  // 追加を実行する前ならば、ロックをかけておく(親だけの行ロックが望ましいが…)
  if ( isset($_REQUEST['f_input']) ){
    db_query_update($db, "LOCK TABLE Reviews write, Ancestors write, Ancestors a read, Reviews r read, TmpAncestors write, TmpAncestors t read");
  }
  $sql = <<<EOB
SELECT
  ChildAccessLevel AS ChildAccessLevel
, Title AS Title
, ReviewClassID AS ReviewClassID
, Message AS Message
FROM
  Reviews
WHERE
    ReviewID = $f_parent
EOB
;
  $row = db_query_single_record($db, $sql);
  if ( !$row ){
    error("<P>親がありません.</P>");
  }
  $required_access_level = $row['ChildAccessLevel'];
  if ( $f_class == REVIEW_CLASS_CATEGORY ){
    $required_access_level += 10;
  }
  $parent_title = $row['Title'];
  $parent_class = $row['ReviewClassID'];
  $parent_message = $row['Message'];
}else
if ( $f_parent == 0 ){
  // ルート
  $required_access_level = 100;
  $parent_title = '';
  $parent_message = '';
}else{
  $required_access_level = 0;
}


//******************************
// 権限のチェック
//******************************

if ( isset($_REQUEST['f_revid']) ){
  if ( $user_id == 0 ) $stat = 4;
  if ( $user_id != $target_user_id ){
    if ( isset($_REQUEST['f_delete']) && $access_level < $f_axslvl + 30 ){
      $stat = 4;
    }else
    if ( !isset($_REQUEST['f_delete']) && $access_level < $f_axslvl + 20 ){
      $stat = 4;
    }
  }
}else{
  // 作成時
  if ( $access_level < $required_access_level ){
    $stat = 4;
  }
}


//******************************
// 入力のチェック
//******************************

$invalid_n = 0;
$invalid_flags = array();
for ( $i = 0 ; $i <= 13 ; $i ++ ){
  $invalid_flags[$i] = 0;
}

//if ( $user_id == 0 && (!isset($f_author) || strlen($f_author) == 0 || strlen($f_author) > 64) ){
if ( $user_id == 0 && isset($f_author) && strlen($f_author) > 64 ){
  $invalid_n ++;
  $invalid_flags[0] = 1;
}

//if ( $user_id == 0 && (!isset($f_email) || strlen($f_email) == 0 || strlen($f_email) > 255 || !mb_ereg("@", $f_email)) ){
if ( $user_id == 0 && isset($f_email) && (strlen($f_email) > 255 || ($f_email != '' && !mb_ereg("@", $f_email))) ){
  $invalid_n ++;
  $invalid_flags[1] = 1;
}

if ( !isset($f_title) || strlen($f_title) == 0 || strlen($f_title) > 255 ){
  $invalid_n ++;
  $invalid_flags[2] = 1;
}

if ( $f_class == REVIEW_CLASS_ARTICLE && (isset($f_creator) && strlen($f_creator) > 255) ){
  $invalid_n ++;
  $invalid_flags[3] = 1;
}

if ( $f_class == REVIEW_CLASS_ARTICLE && (isset($f_related_url) && strlen($f_related_url) > 1024) ){
  $invalid_n ++;
  $invalid_flags[4] = 1;
}

if ( $f_class != REVIEW_CLASS_CATEGORY && (!isset($f_msg) || strlen($f_msg) == 0) ){
  $invalid_n ++;
  $invalid_flags[5] = 1;
}

if ( isset($f_msg_url) && strlen($f_msg_url) > 255 ){
  $invalid_n ++;
  $invalid_flags[6] = 1;
}

if ( $f_class != REVIEW_CLASS_CATEGORY && isset($f_score) && !in_array($f_score, array_keys($eval_val)) ){
  $invalid_n ++;
  $invalid_flags[7] = 1;
}

if ( !isset($f_axslvl) || $f_axslvl < 0 || $f_axslvl > $access_level ){
  $invalid_n ++;
  $invalid_flags[8] = 1;
}

if ( !isset($f_caxslvl) || $f_caxslvl < 0 || $f_caxslvl > $access_level ){
  $invalid_n ++;
  $invalid_flags[9] = 1;
}

if ( !isset($f_parent) || $f_parent < 0 ){
  $invalid_n ++;
  $invalid_flags[10] = 1;
}

foreach ($ng_words as $ng_word){
  if ( isset($f_msg) && mb_ereg($ng_word, $f_msg) ){
    $invalid_n ++;
    $invalid_flags[11] = 1;
    break;
  }
}

if ( isset($f_msg) && url_count($f_msg) > 6 ){
  $invalid_n ++;
  $invalid_flags[12] = 1;
}

if ( isset($f_msg) && !mb_ereg("[ぁ-ヶ]|[亜-黑]", $f_msg) ){
  $invalid_n ++;
  $invalid_flags[13] = 1;
}

// 書き込みが押されてかつエラーがない場合はステータスを 1 にする
if ( isset($_REQUEST['f_preview']) && $stat == 0 ){
  if ( $invalid_n == 0 || isset($_REQUEST['f_delete']) ){
    $stat = 1;
  }else{
    // フラグを -1 にして、たとえ空白でもエラーメッセージを出すようにする
    foreach ($invalid_flags as $colno => $val){
      if ( $invalid_flags[$colno] != 0 ) $invalid_flags[$colno] = -1;
    }
  }
}


//******************************
// 書き込み
//******************************
if ( !isset($_REQUEST['f_revid']) && isset($_REQUEST['f_input']) && $invalid_n == 0 && $stat == 0 ){
  if ( !isset($_POST['f_input']) ) error("<P>正しい手続きを取ってください.</P>");
  $author_quoted = quote_sql_string($f_author);
  $email_address_quoted = quote_sql_string($f_email);
  if ( !isset($f_score) || $f_score == 9999 ){
    $score_quoted = "NULL";
  }else{
    $score_quoted = (int)$f_score;
  }
  $f_title_quoted = quote_sql_string($f_title);
  $f_creator_quoted = quote_sql_string($f_creator);
  if ( $f_class == REVIEW_CLASS_IMAGE && isset($f_file_uploaded) ){
    $f_related_url_quoted = quote_sql_string($f_file_uploaded);
    rename(TEMPORARY_UPLOAD_DIRECTORY_PATH . $f_file_uploaded, UPLOAD_DIRECTORY_PATH . $f_file_uploaded);
  }else{
    $f_related_url_quoted = quote_sql_string($f_related_url);
  }
  $f_msg_url_quoted = quote_sql_string($f_msg_url);
  $f_msg_quoted = quote_sql_string($f_msg);
  $sql = <<<EOB
INSERT INTO Reviews (
  ParentReviewID
, ReviewClassID
, Score
, CreatedDate
, AccessLevel
, ChildAccessLevel
, UserID
, IPAddress
, Author
, EmailAddress
, Title
, Creator
, RelatedLinkURL
, AuthorLinkURL
, Message
) VALUES (
  $f_parent
, $f_class
, $score_quoted
, NOW()
, $f_axslvl
, $f_caxslvl
, $user_id
, '$ip_address'
, '$author_quoted'
, '$email_address_quoted'
, '$f_title_quoted'
, '$f_creator_quoted'
, '$f_related_url_quoted'
, '$f_msg_url_quoted'
, '$f_msg_quoted'
)
EOB
;
  db_query_update($db, $sql);

  // 子孫関係の構築
  include("ancestors.inc");
  $id = mysqli_insert_id($db);
  get_path_list($db, $id);

  $stat = 2;
}


//******************************
// 更新
//******************************
if ( isset($_REQUEST['f_revid']) && isset($_REQUEST['f_input']) && $invalid_n == 0 && $stat == 0 ){
  if ( !isset($_POST['f_input']) ) error("<P>正しい手続きを取ってください.</P>");
  if ( !isset($f_score) || $f_score == 9999 ){
    $score_quoted = "NULL";
  }else{
    $score_quoted = (int)$f_score;
  }
  $f_title_quoted = quote_sql_string($f_title);
  $f_creator_quoted = quote_sql_string($f_creator);
  if ( $f_class == REVIEW_CLASS_IMAGE && isset($f_file_uploaded) ){
    $f_related_url_quoted = quote_sql_string($f_file_uploaded);
    rename(TEMPORARY_UPLOAD_DIRECTORY_PATH . $f_file_uploaded, UPLOAD_DIRECTORY_PATH . $f_file_uploaded);
  }else{
    $f_related_url_quoted = quote_sql_string($f_related_url);
  }
  $f_msg_url_quoted = quote_sql_string($f_msg_url);
  $f_msg_quoted = quote_sql_string($f_msg);

  // 子孫関係の破壊
  if ( $f_parent != $f_parent_old ){
    include("ancestors.inc");
    destroy_ancestors($db, $f_revid);
  }

  $sql = <<<EOB
UPDATE
  Reviews
SET
  Score = $score_quoted
, ParentReviewID = $f_parent
, UpdatedDate = NOW()
, AccessLevel = $f_axslvl
, ChildAccessLevel = $f_caxslvl
, UpdatedUserID = $user_id
, UpdatedIPAddress = '$ip_address'
, Title = '$f_title_quoted'
, Creator = '$f_creator_quoted'
, RelatedLinkURL = '$f_related_url_quoted'
, AuthorLinkURL = '$f_msg_url_quoted'
, Message = '$f_msg_quoted'

EOB
;
/* 原作者が変わると困るのでコメントアウト
  if ( isset($f_author) ){
    $author_quoted = quote_sql_string($f_author);
    $sql .= ", Author = '$author_quoted' ";
  }
*/
  $sql .= <<<EOB
WHERE
  ReviewID = $f_revid
EOB
;
  db_query_update($db, $sql);

  // 子孫関係の再構築
  if ( $f_parent != $f_parent_old ){
    get_path_list($db, $f_revid);
    build_ancestors($db, $f_revid);
    // 新旧の親カテゴリにタッチ
    db_query_update($db, "UPDATE Reviews SET UpdatedDate = NOW(), UpdatedUserID = $user_id, UpdatedIPAddress = '$ip_address' WHERE ReviewID IN ( $f_parent, $f_parent_old )");
  }

  $stat = 2;
}


//******************************
// 削除
//******************************
if ( isset($_REQUEST['f_revid']) && isset($_REQUEST['f_delete']) && !isset($_REQUEST['f_preview']) && $stat == 0 ){
  $sql = <<<EOB
DELETE FROM
  Reviews
WHERE
  ReviewID = $f_revid
EOB
;
  db_query_update($db, $sql);

  // 子孫関係の破壊
  include("ancestors.inc");
  destroy_ancestors($db, $f_revid);

  // 親カテゴリにタッチ
  db_query_update($db, "UPDATE Reviews SET UpdatedDate = NOW(), UpdatedUserID = $user_id, UpdatedIPAddress = '$ip_address' WHERE ReviewID = $f_parent");

  $stat = 2;
}


//******************************
// 出力開始
//******************************

ob_start();

html_header("review edit", SCREEN_REVIEW);

// 二三段組の開始
print "<TABLE border=\"0\" width=\"100%\"><TBODY><TR valign=\"top\">\n";


// 左の段組の開始
print "<TD class=\"leftsidebar\" width=\"120\">\n";

// メニュー
print "<H4>Menu</H4>\n";
if ( $f_parent <= 0 ){
  print "<A href=\"index.php?f_revid=1\">戻る</A>\n";
}else{
  if ( $parent_class == REVIEW_CLASS_CATEGORY ){
    print "<A href=\"index.php?f_revid=$f_parent\">戻る</A>\n";
  }else{
    print "<A href=\"view.php?f_revid=$f_parent\">戻る</A>\n";
  }
}

// 左の段組の終了
print "</TD>\n";

// 段組の区切り線
print "<TD width=\"1\" height=\"100%\" bgcolor=\"#FFFFFF\"></TD>\n";

// 中央の段組の開始
if ( $stat == 1 ){ $content_width = "50%"; }else{ $content_width = "80%"; }
print "<TD class=\"content\" width=\"$content_width\" style=\"min-width: 0; overflow-wrap: break-word; word-break: break-all;\">\n";

// 中央の段組の中身
if ( $stat == 0 ){
  // 正常時
  print "<H3>$sub_title</H3>\n";
  print "<FORM action=\"$url_self\" method=\"POST\" enctype=\"multipart/form-data\">\n";
  print "<TABLE border=\"0\"><TBODY>\n";
  if ( $f_class != REVIEW_CLASS_CATEGORY ){
    if ( $user_id == 0 ){
      html_form_string("あなたの名前", "f_author", $f_author, 32, 64, $invalid_flags[0], "64バイト以内");
    }else{
      $author_quoted = quote_html($f_author);
      print "<TR><TD nowrap>あなたの名前</TD><TD>$author_quoted</TD></TR>\n";
    }
    if ( $user_id == 0 ){
      html_form_string("あなたのメール", "f_email", $f_email, 40, 255, $invalid_flags[1], "255バイト以内で@を含む必要あり");
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">未登録またはログインしないままで評を書くと、その評は登録者によって書き換えられたり、準管理者によって削除されたりする可能性があります。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }else{
      $email_address_quoted = quote_html($f_email);
      print "<TR><TD nowrap>あなたのメール</TD><TD>$email_address_quoted</TD></TR>\n";
    }
  }
  print "</TBODY></TABLE>\n";
  print "<TABLE border=\"0\"><TBODY>\n";
  if ( $f_parent > 0 ){
    if ( $parent_title != '' ){
      $parent_title_quoted = quote_html($parent_title);
      $parent_message_quoted = quote_html($parent_message);
      print <<<EOB
<TR><TD colspan="2">
  <TABLE width="100%"><TBODY><TR><TD>
   <TABLE width="80%" bgcolor="#2fdd2f" cellpadding="3"><TBODY>
    <TR cellpadding="0"><TD><FONT color="#ffffff" size="+1"><B>$parent_title_quoted</B></FONT></TD></TR>
    <TR bgcolor="#ffffff"><TD>$parent_message_quoted</TD></TR>
   </TBODY></TABLE>
  </TD></TR></TBODY></TABLE>
</TR></TD>
EOB
;
    }
    if ( isset($f_parent) ) html_hidden_string("f_parent", $f_parent);
  }
  if ( ($f_class == REVIEW_CLASS_CATEGORY && isset($_REQUEST['f_revid']) && $_REQUEST['f_revid'] != 1) || $f_class == REVIEW_CLASS_ARTICLE ){
    $errstr = make_status_str($invalid_flags[10], "カテゴリを選択してください", '');
    print "<TR><TD nowrap>親カテゴリ</TD><TD>";
    prepare_category_select($db);
    put_category_select(1);
    print "</TD><TD>$errstr</TD></TR>\n";
    if ( !isset($_REQUEST['f_parent']) || $_REQUEST['f_parent'] < 0 ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">関連するカテゴリを上記から選択してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }else{
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">関連するカテゴリが上記で適切かどうかを確認してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
  }
  if ( $f_class == REVIEW_CLASS_CATEGORY ){
    html_form_string("カテゴリ名", "f_title", $f_title, 48, 255, $invalid_flags[2], "255バイト以内");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">作成したいカテゴリの名称を入力してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }else
  if ( $f_class == REVIEW_CLASS_ARTICLE ){
    html_form_string("名称", "f_title", $f_title, 48, 255, $invalid_flags[2], "255バイト以内");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">評価(レビュー)したい事物の名称を入力してください。正式名称であることが望ましいのですが、広く知られていれば俗称でもかまいません。また、詳しい名称をご存じない場合は、ごく簡単にとどめた説明文でも問題ありません。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }else{
    html_form_string("題名", "f_title", $f_title, 48, 255, $invalid_flags[2], "255バイト以内");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">コメントを一言で要約して題をつけて入力してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }
  if ( $f_class == REVIEW_CLASS_ARTICLE ){
    html_form_string("誰の", "f_creator", $f_creator, 32, 255, $invalid_flags[3], "255バイト以内");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">作った人や団体などの主体を入力してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }
  if ( $f_class == REVIEW_CLASS_ARTICLE ){
    html_form_string("関連リンク", "f_related_url", $f_related_url, 64, 1024, $invalid_flags[4], "1024バイト以内");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">この事物に関連した情報がインターネット上にあれば、上にその URL を入力してください。ただし、できればリンク拒否の URL は入力しないでください(リンク拒否に関する法的根拠はありませんので強制はいたしません)。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }
  if ( $f_class == REVIEW_CLASS_IMAGE ){
    if ( isset($f_file_uploaded) ){
      print "<TR><TD>ファイル</TD><TD><SPAN class=\"subdesc\">アップロード済み(" . quote_html($f_file_uploaded) . ")</SPAN></TD><TD>&nbsp;</TD></TR>\n";
      html_hidden_string("f_file_uploaded", $f_file_uploaded);
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\"><input type=\"file\" name=\"f_file\" size=\"30\"/></SPAN></TD><TD>&nbsp;</TD></TR>\n";
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">アップロードしなおしたい場合は、画像ファイルを入力してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }else
    if ( isset($f_related_url) && strlen($f_related_url) > 0 ){
      print "<TR><TD>ファイル</TD><TD><SPAN class=\"subdesc\">アップロード済み(" . quote_html($f_related_url) . ")</SPAN></TD><TD>&nbsp;</TD></TR>\n";
      html_hidden_string("f_related_url", $f_related_url);
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\"><input type=\"file\" name=\"f_file\" size=\"30\"/></SPAN></TD><TD>&nbsp;</TD></TR>\n";
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">アップロードしなおしたい場合は、画像ファイルを入力してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }else{
      print "<TR><TD>ファイル</TD><TD><SPAN class=\"subdesc\"><input type=\"file\" name=\"f_file\" size=\"30\"/></SPAN></TD><TD>&nbsp;</TD></TR>\n";
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">アップロードしたい画像ファイルを入力してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
  }
  if ( $f_class == REVIEW_CLASS_CATEGORY ){
    html_form_text("説明", "f_msg", $f_msg, 10, 48, $invalid_flags[5] || $invalid_flags[11] || $invalid_flags[12] || $invalid_flags[13], "問題あり");
    if ( $invalid_flags[11] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">単語「" . quote_html($ng_word) . "」は書き込み出来ません。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    if ( $invalid_flags[12] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">URLは文中に6つ以内に収めてください（SPAM対策）。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    if ( $invalid_flags[13] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">必ず日本語を入れてください（SPAM対策）。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">カテゴリの説明を書いてください。ここに書いた内容は、カテゴリの説明文としていくつかの画面で全文表示されるため、長すぎないようにしてください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }else
  if ( $f_class == REVIEW_CLASS_ARTICLE ){
    html_form_text("評", "f_msg", $f_msg, 10, 48, $invalid_flags[5] || $invalid_flags[11] || $invalid_flags[12] || $invalid_flags[13], "問題あり");
    if ( $invalid_flags[11] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">単語「" . quote_html($ng_word) . "」は書き込み出来ません。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    if ( $invalid_flags[12] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">URLは文中に3つ以内に収めてください（SPAM対策）。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    if ( $invalid_flags[13] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">必ず日本語を入れてください（SPAM対策）。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">この事物に関する評価(レビュー)を書いてください。字数制限はないに等しいのですが、長すぎると転送に時間が掛かることがあります。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }else{
    html_form_text("中身", "f_msg", $f_msg, 10, 48, $invalid_flags[5] || $invalid_flags[11] || $invalid_flags[12] || $invalid_flags[13], "問題あり");
    if ( $invalid_flags[11] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">単語「" . quote_html($ng_word) . "」は書き込み出来ません。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    if ( $invalid_flags[12] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">URLは文中に3つ以内に収めてください（SPAM対策）。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    if ( $invalid_flags[13] ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdescerr\">必ず日本語を入れてください（SPAM対策）。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">コメントを書いてください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }
  if ( $f_class == REVIEW_CLASS_ARTICLE || $f_class == REVIEW_CLASS_IMAGE ){
    html_form_string("続きリンク", "f_msg_url", $f_msg_url, 64, 255, $invalid_flags[6], "255バイト以内");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">上に URL を入力しておくと、上の文章のあとにその URL に飛ぶ「続き」というリンクが作成されます。読者を他のページに案内したい場合に利用してください。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }
  if ( $f_class != REVIEW_CLASS_CATEGORY ){
    html_form_score("評価", "f_score", $f_score, $invalid_flags[7], "要選択");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">この事物に明確な評価を与えてください。現在のところ 最高(+50) 傑作(+30) まあまあ(+10) いまいち(-10) 駄作(-30) 最低(-50) の六段階評価となっています。0 つまり平凡だという評価を下すことはできませんが、省略することもできます。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }
  if ( !isset($f_axslvl) ) $f_axslvl = ($access_level > 30 ? 30 : $access_level);
  if ( $access_level > 0 ){
    html_form_selectlevel("改変可権限", "f_axslvl", $f_axslvl, $access_level, $invalid_flags[8], "要選択");
    print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">この評価(レビュー)をあなた以外の人が編集または削除するために必要な権限レベルの基準となるレベルを設定してください。権限レベルは、基準レベル +10 で追加が、+20 で編集が、+30 で削除ができます。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
  }else{
    html_hidden_string("f_axslvl", 0);
  }
  if ( !isset($f_caxslvl) ) $f_caxslvl = 0;
  if ( $access_level > 0 ){
    html_form_selectlevel("子追加権限", "f_caxslvl", $f_caxslvl, $access_level, $access_level, $invalid_flags[9], "要選択");
    if ( $f_class == REVIEW_CLASS_CATEGORY ){
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">このカテゴリの下に評(レビュー)を書くために必要な権限レベルを設定してください。この権限レベルを「なし」に設定しておかないと、未登録者またはログインしていない人がこのカテゴリの下に評(レビュー)を書くことができなくなります。10に設定しておくと、登録者だけが書き込めるようになります。20以上に設定すると、通常の登録者では書き込みができなくなり、特別なカテゴリとなります。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }else{
      print "<TR><TD>&nbsp;</TD><TD><SPAN class=\"subdesc\">この下にコメントを書くために必要な権限レベルを設定してください。この権限レベルを「なし」に設定しておかないと、未登録者またはログインしていない人がこの下にコメントをつけることができなくなります。10に設定すると、登録者だけがコメントできるようになります。20以上に設定すると、通常の登録者からのコメントを許さなくすることができます。ただし、自分の権限レベル以上には設定できません。</SPAN></TD><TD>&nbsp;</TD></TR>\n";
    }
  }else{
    html_hidden_string("f_caxslvl", 0);
  }
  print "</TBODY></TABLE>\n";
  // 隠しパラメータ
  if ( isset($f_class) ) html_hidden_string("f_class", $f_class);
  if ( isset($_REQUEST['f_revid']) ) html_hidden_string("f_revid", $f_revid);
  // 書き込みボタン(実際は確認ボタンのようなもの)
  print "<P><INPUT type=\"submit\" name=\"f_preview\" value=\"書き込む\"><BR>確認画面(プレビュー)があります</P>\n";
  print "</FORM>\n";
}else
if ( $stat == 1 ){
  // 確認画面
  $title_quoted = quote_html($f_title);
  $creator_quoted = quote_html($f_creator);
  $msg_quoted = quote_html($f_msg);
  if ( $f_class == REVIEW_CLASS_ARTICLE ){
    $author_quoted = "<SPAN class=\"author\">" . quote_html($f_author) . "</SPAN>";
    if ( isset($created_date) ){
      $created_date_quoted = quote_html($created_date) . "<BR>";
    }else{
      $created_date_quoted = quote_html($now_date) . "<BR>";
    }
    // 評価
    if ( isset($f_score) && $f_score != 9999 ){
      if ( isset($eval_val[$f_score]) ){
        $score_quoted = $eval_val[$f_score] . "(${f_score}点)<BR>";
      }else{
        $score_quoted = "(${f_score}点)<BR>";
      }
    }else{
      $score_quoted = '';
    }
    print "<H3>$title_quoted</H3>\n";
    print "<H4>$creator_quoted</H4>\n";
    print "<P align=\"right\">$score_quoted$created_date_quoted$author_quoted</P>\n";
    $msg_quoted = url_replace($msg_quoted);
    //$msg_quoted = mb_ereg_replace("(s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)", "<A href=\"\\1\" target=\"_blank\"><IMG src=\"jump.gif\" alt=\"\\1\" title=\"\\1\" border=\"0\"></A>", $msg_quoted);
    print "<P>$msg_quoted</P>\n";
    if ( strlen($f_msg_url) > 0 ){
      $f_msg_url_quote = quote_html_param($f_msg_url);
      print "<P align=\"right\"><A href=\"$f_msg_url_quote\">続き</A></P>\n";
    }
    if ( strlen($f_related_url) > 0 ){
      $f_related_url_quote = url_replace($f_related_url);
      print "<P><B>[参考]</B><BR>$f_related_url_quote</P>\n";
      //$f_related_url_quote1 = quote_html($f_related_url);
      //$f_related_url_quote2 = quote_html_param($f_related_url);
      //print "<P>[参考]<BR><A href=\"$f_related_url_quote2\" target=\"_blank\">$f_related_url_quote1</A></P>\n";
    }
    if ( isset($created_date) ){
      $updated_date_quoted = quote_html($now_date);
      if ( $f_author != '' ){
        $updated_user_name_quoted = " by " . quote_html($f_author);
      }else{
        $updated_user_name_quoted = '';
      }
      print "<P><I>(最終更新日: $updated_date_quoted$updated_user_name_quoted)</I></P>\n";
    }
  }else{
    print "<TABLE border=\"1\"><TBODY>\n";
    if ( strlen($parent_title) > 0 ){
      $parent_title_quoted = quote_html($parent_title);
      print "<TR><TD nowrap>親</TD><TD>$parent_title_quoted</TD></TR>\n";
    }
    if ( isset($f_author) ){
      html_view_string("あなたの名前", $f_author);
    }
    if ( isset($f_email) ){
      html_view_string("あなたのメール", $f_email);
    }
    if ( $f_class == REVIEW_CLASS_CATEGORY ){
      html_view_string("カテゴリ名", $f_title);
    }else
    if ( $f_class == REVIEW_CLASS_ARTICLE ){
      html_view_string("作品名", $f_title);
    }else{
      html_view_string("題名", $f_title);
    }
    if ( $f_class == REVIEW_CLASS_ARTICLE ){
      html_view_string("作者", $f_creator);
      html_view_string("関連リンク", $f_related_url);
    }
    if ( $f_class == REVIEW_CLASS_IMAGE ){
      if ( isset($f_file_uploaded) ){
        html_view_string("ファイル名", $f_file_uploaded);
      }else
      if ( isset($f_related_url) ){
        html_view_string("ファイル名", $f_related_url);
      }
    }
    if ( $f_class == REVIEW_CLASS_CATEGORY ){
      html_view_text("説明", $f_msg, 10, 48);
    }else
    if ( $f_class == REVIEW_CLASS_ARTICLE ){
      html_view_text("評", $f_msg, 10, 48);
    }else{
      html_view_text("中身", $f_msg, 10, 48);
    }
    if ( $f_class == REVIEW_CLASS_ARTICLE ){
      html_view_string("続きリンク", $f_msg_url);
    }
    if ( $f_class != REVIEW_CLASS_CATEGORY ){
      html_view_score("評価", $f_score);
    }
    html_view_selectlevel("改変可権限", $f_axslvl);
    html_view_selectlevel("子追加権限", $f_caxslvl);
    print "</TBODY></TABLE>\n";
    if ( $f_class == REVIEW_CLASS_COMMENT && !isset($f_delete) ){
      if ( strlen($f_msg) >= MAX_COMMENT_LENGTH_ONSIDE ){
        print "<P>本文が " . MAX_COMMENT_LENGTH_ONSIDE . "文字以上ありますので、このコメントは元の評と同じページには表示されません。</P>\n";
      }else{
        print "<P>本文が " . MAX_COMMENT_LENGTH_ONSIDE . "文字未満なので、このコメントは元の評の右端に表示されます。</P>\n";
      }
    }
  }
  // 中央の段組の終了
  print "</TD>\n";
  // 段組の区切り線
  print "<TD width=\"1\" height=\"100%\" bgcolor=\"#FFFFFF\"></TD>\n";
  // 右の段組の開始
  print "<TD class=\"rightsidebar\" width=\"240\">\n";
  // 右の段組の中身
  print "<H2>確認</H3>\n";
  print "<FORM action=\"$url_self\" method=\"POST\">\n";
  if ( isset($_REQUEST['f_author']) ) html_hidden_string("f_author", $f_author);
  if ( isset($_REQUEST['f_email']) ) html_hidden_string("f_email", $f_email);
  if ( isset($f_title) ) html_hidden_string("f_title", $f_title);
  if ( isset($f_creator) ) html_hidden_string("f_creator", $f_creator);
  if ( isset($f_related_url) ) html_hidden_string("f_related_url", $f_related_url);
  if ( isset($f_file_uploaded) ) html_hidden_string("f_file_uploaded", $f_file_uploaded);
  if ( isset($f_msg) ) html_hidden_string("f_msg", $f_msg);
  if ( isset($f_msg_url) ) html_hidden_string("f_msg_url", $f_msg_url);
  if ( isset($f_score) ) html_hidden_string("f_score", $f_score);
  if ( isset($f_axslvl) ) html_hidden_string("f_axslvl", $f_axslvl);
  if ( isset($f_caxslvl) ) html_hidden_string("f_caxslvl", $f_caxslvl);
  if ( isset($f_parent) ) html_hidden_string("f_parent", $f_parent);
  if ( isset($f_class) ) html_hidden_string("f_class", $f_class);
  if ( isset($_REQUEST['f_revid']) ) html_hidden_string("f_revid", $f_revid);
  if ( isset($_REQUEST['f_delete']) ){
    print "<P><INPUT type=\"submit\" name=\"f_delete\" value=\"削除する\"></P>\n";
  }else{
    print "<P><INPUT type=\"submit\" name=\"f_input\" value=\"書き込む\">\n";
    print "<INPUT type=\"submit\" name=\"f_again\" value=\"修正する\"></P>\n";
  }
  print "</FORM>\n";
}else
if ( $stat == 2 ){
  // 作成完了
  if ( isset($_REQUEST['f_delete']) ){
    print "<P>削除しました.</P>\n";
  }else{
    print "<P>書き込みました.</P>\n";
  }
  if ( $f_parent <= 0 ){
    print "<P><A href=\"index.php?f_revid=1\">back</A></P>\n";
  }else
  if ( $parent_class == REVIEW_CLASS_CATEGORY ){
    print "<P><A href=\"index.php?f_revid=$f_parent\">戻る</A></P>\n";
  }else{
    print "<P><A href=\"view.php?f_revid=$f_parent\">戻る</A></P>\n";
  }
}else
if ( $stat == 4 ){
  // 権限エラー
  print "<P>書き込む権限がありません.</P>\n";
  print "<P>あなたの権限レベル ... $access_level<BR>必要な権限レベル ... $required_access_level</P>\n";
  print "<P><A href=\"index.php?f_revid=$f_parent\">戻る</A></P>\n";
}else{
  error("続行不能なエラーが発生しました.");
}


// 中央(または右)の段組の終了
print "</TD>\n";


//******************************
// 出力終了
//******************************

// 三段組の終了
print "</TR></TBODY></TABLE>\n";

html_footer();

ob_end_flush();


//******************************
// データベース切断
//******************************

db_disconnect($db);


?>
