<?php
// error_reporting(-1); // デバッグ用に。。。
date_default_timezone_set('Asia/Tokyo');    // 時間は日本でいいよね。。。

// 最低限、$toAddと$listDataは設定しないと動かないです。。。
// でも、そんなに項目多くないんだから、全部設定しましょ。。。
// そういえば、これから送られるメールはUTF-8なのです。
// メーラーによっては設定変えないと文字化けするかもね。。。

// たぽろだのURL
// 別に無くても良いけど、書かないと送信したあと、たぽろだに戻れなくなるよ。。。
$tapoloda 'http://example.org/script/tapoloda.cgi';

// 管理者ページのURL
// 通報メールの本文中リンクに使うのです。。。
$adminUrl 'http://example.org/script/admin.cgi';

// list.txtへのパス
// これが無いと本当にあるアイテムか分からない。。。
$listData '../updata/list.txt';

// 通報先メールアドレス
// このメールアドレスに通報しますよ。
// ちゃんと実在するアドレスじゃないと駄目なのです。。。
$toAddr 'abuse@example.org';

// 送信元アドレス
// fromはfrom。実在する方が良いけど、適当でもどうにかなったり。。。
$fromAddr 'tapoloda-abuse@example.org';




// ここから下はあまり下手に弄らない方が良いかも。。。
// というか、酷いコードだから見ない方が賢明じゃないかなぁ。。。

// HTMLのヘッダ部分とか
echo <<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
    <title>通報</title>
    <meta http-equiv="content-style-type" content="text/css" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
</head>
<body>
<div>
EOF;

// item idを取得
if (!empty($_POST['item_id'])) {
    
$item_id htmlspecialchars($_POST['item_id']);
} elseif (!empty(
$_GET['id'])) {
    
$item_id htmlspecialchars($_GET['id']);
} else {
  exit(
'あれ、何を通報しようとしたんですか? - ERROR: IDが指定されていません');
}

// idから情報を取得
$handle = @fopen($listData"r");
$item_name null;
if (
$handle) {
    while (!
feof($handle)) {
        
$buffer fgets($handle);
        
$buffer mb_convert_encoding($buffer'UTF-8''SJIS');
        
$itemData explode("\t"$buffer);
        
        if (
$itemData[0][0] == '#') {
            
// コメントアウトされた行はスキップ
            
continue;
        }
        
        if (
$itemData[1] == $item_id) {
            
$item_name  $itemData[1];    // ファイルのid
            
$item_term  $itemData[2];    // 購入期限
            
$item_file  $itemData[3];    // 元ファイル名
            
$item_title $itemData[6];    // 商品名
            
$item_owner $itemData[8];    // アップロード者名
            
$item_desc  $itemData[13];   // 説明
            
break;
        }
    }
    
    if (
is_null($item_name)) {
        exit(
'あれ、迷子になったみたいです。。。 - ERROR: 指定されたIDの商品が見つかりません');
    }
    
    
fclose($handle);
} else {
    
// list.txtが開けなかった。。。
    
exit('あれ、データが見つからなかったよ。。。 - ERROR: リストデータの取得に失敗しました');
}

if (
$item_term <= date('Ymd.His')) {
    exit(
'もう販売してないような。。。 - ERROR: 既に販売期限をすぎています');
}

// modeが指定されてるってことはきっとチェックとか。。。
if(!empty($_POST['mode'])){
    
$mode htmlspecialchars($_POST['mode']);
    if(empty(
$_POST['body'])){
        
// 最低限、なんで通報するのかは書いて欲しい。。。
        
$mode 'edit'// 編集画面にもどしちゃましょ。。
        
$nobody '<span style="color:red">せめて本文は書いてください。。。</span><br />';
    }else{
        
$body htmlspecialchars($_POST['body']);
        
$br_body nl2br($body);
    } 
} else {
    
$mode 'edit';
    
$body null;   // 一応nullで初期化しておくとNoticeが出なくて幸せ。。。
    
$nobody null;
}

switch (
$mode){
    case 
'send':
        
// 確認してくれたらしいのでメール送りましょ。。。
    
        // 実際に送られるメールの件名。このままで困る事はあんまりないんじゃないなぁ。。。
        
$subject "[tapoloda abuse]{$item_id}";
        
        
// item_descは<br>付いてるので。。。
        
$item_desc preg_replace('/<br>\n$/'''$item_desc1);
        
$item_desc preg_replace('/<br>/'"\n"$item_desc);
        
        
// 日本語で1行1000文字以上入力されるとつむけどどうでもいいや。
        
$body  wordwrap($body70);
        
$body .= "\n\n";
        
$body .= "詳細: {$adminUrl}?mode=edt&id={$item_id}&p=t \n";
        
$body .= "論理削除: {$adminUrl}?mode=ldp&id={$item_id}&p=t \n";
        
$body .= "物理削除: {$adminUrl}?mode=pdp&id={$item_id}&p=t \n";
        
$body .= "DL: {$adminUrl}?mode=dwn&id={$item_id} \n";
        
$body .= "\n";
        
$body .= "アイテム情報: \n";
        
$body .= "アイテム名 [ {$item_title} ] \n";
        
$body .= "ファイル名 [ {$item_file} ] \n";
        
$body .= "アップロード者 [ {$item_owner} ] \n";
        
$body .= "説明 [ {$item_desc} ] \n";
        
$body .= "\n";
        
$body .= "通報者情報: \n";
        
$body .= "IPアドレス [ {$_SERVER['REMOTE_ADDR']} ] \n";
        
$body .= "ホスト [ " gethostbyaddr($_SERVER['REMOTE_ADDR']) . " ] \n";
        
$body .= "UA [ {$_SERVER['HTTP_USER_AGENT']} ] \n";
        
$body .= "通報日時 [ " date('Y/m/d H:i:s T(P)') ." ] \n";
        
        
$headers "From: {$fromAddr}\r\n" .
                   
"Mime-Version: 1.0\r\n" .
                   
"Content-Type: Text/Plain; charset=utf-8\r\n" 
                   
'X-Mailer: PHP/' phpversion();
        
$sendmail mail($toAddr$subject$body$headers);
        if(!
$sendmail){
            
// 送信に失敗したからエラーだしましょ。。。
            
exit("なんかメールの送信に失敗しちゃったみたいです><;<br />\nもう一度試して駄目だったら他の連絡先に連絡してください。。。");
        }else{
            
// 成功したから戻るリンクもいるよね。。。
            
echo("通報に成功したっぽいです(゚∀゚)<br />\n");
            echo(
"<a href=\"{$tapoloda}\">一覧に戻る?</a>");
        }
        break;
        
    case 
'check':
        
// 入力した内容が合ってるか確認してもらわないと。。。
        
echo <<<EOF
<table border="1" cellspacing="0" cellpadding="3" style="width:550px;word-break:break-all;table-layout:fixed;">
    <caption>Check!</caption>
    <tr>
        <th>ID</th>
        <td>
{$item_id}</td>
    </tr>
    <tr>
        <th>Title</th>
        <td>
{$item_title}</td>
    </tr>
    <tr>
        <th>Body</th>
        <td>
{$br_body}</td>
    </tr>
</table>

<form method="post" action="
{$_SERVER['SCRIPT_NAME']}">
    <input type="hidden" name="item_id" value="
{$item_id}" />
    <input type="hidden" name="body" value="
{$body}" />
    <input type="submit" name="mode" value="edit" />
    <input type="submit" name="mode" value="send" />
</form>

EOF;

        break;

    case 
'edit':        
    default:
        
// まず最初は通報内容とか書いてもらわないと。。。
        
echo <<<EOF
        {$nobody}
        <p>選択されたファイルを管理者に通報します</p>
<form method="post" action="
{$_SERVER['SCRIPT_NAME']}" style="width:550px;">
    <fieldset>
        <legend>Abuse</legend>
        Item ID: 
{$item_id}<br />
        <input type="hidden" name="item_id" value="
{$item_id}" />
        Item Title: 
{$item_title}<br />
        Body:<br />
        <span style="font-size:x-small"></span>通報内容を出来るだけ詳しく(必須)<br />
        <textarea cols="55" rows="10" name="body">
{$body}</textarea><br />
        <input type="submit" name="mode" value="check" />
    </fieldset>
</form>

        
EOF;
}

// なんか下の方に表示させるのです。。。
echo <<<EOF
<div style="font-size: x-small">
注意事項:<br />
・通報されたファイルの削除を保障する物では有りません。<br />
・通報はあくまでも参考情報として扱われます。<br />
・通報後即座に削除されるわけではありません。<br />
・確認後に処理するので若干の時間が掛かります。<br />
・<span style="color:red">管理者が一人である以上、24時間体制の対応は不可能です。</span><br />
</div>

<div style="font-size: x-small;text-align: right">
<!-- 別にどうでも良い表示だから消してもいいけどね。。。 -->
<a href="http://tapoloda.hitobashira.org/script/">tapoloda abuse form v2.0.1 by hitobashira.org</a>
</div>

</div>
</body>
</html>
EOF;