<?php
    // 設定
    require_once (dirname(__FILE__). '/config.php');

    session_start();
    session_regenerate_id(true);

    // 定数展開
    $formItem = unserialize(FORM_ITEM);
    $errMsg = array();

    checkToken();
    // 入力フォーム画面からの遷移

    // バリデーション
    $errMsg = validate($_POST, $formItem);
    $_SESSION['data'] = $_POST;


    // ファイルのアップロード
    // 暗号化して保存
    // ファイル名を変更して保存してるのでhiddenでファイル名を持たせるために返り値としてファイル名の配列を受け取る
    $file_names = fileUpload($_FILES);

    // チェックトークン
    function checkToken() {
        if (empty($_SESSION['token']) || ($_SESSION['token'] !== $_POST['token'])) {
            header('Location: '. CONTACT_URL);
            exit;
        }
    }

    // バリデーション
    function validate(&$data, $formItem) {
        $errMsg = [];
        // 入力チェック
        /*foreach($data as $key => $val) {

            if(isset($formItem[$key])) {

                // 必須チェック
                if($formItem[$key]['required'] == true) {
                    if($val == "" || is_null($val)) {
                            $errMsg[$key] = "この項目は必須です。";
                    }
                }

                // 入力チェック
                switch($formItem[$key]['option']) {
                    // 数字チェック
                    case 1:
                        // 全角数字を半角数字に変換
                        $val = mb_convert_kana($val, "n");
                        if(preg_match("/\D/", $val) && $val != ""){
                            $errMsg[$key] = $formItem[$key]['name'] . "は数字で入力して下さい。";
                        }
                    break;

                    // ふりがなチェック
                    case 2:
                        // 半角カタカナ、全角カタカナを全角ひらがなに変換
                        $val = mb_convert_kana($val, "Hc");
                        mb_regex_encoding("UTF-8");
                        if (!mb_ereg("^[ぁ-ん]+$", $val) && $val != "") {
                            $errMsg[$key] = $formItem[$key]['name'] . "はひらがなで入力して下さい。";
                        }
                    break;

                    // カタカナチェック
                    case 3:
                        // 半角カタカナ、全角ひらがなを全角カタカナに変換
                        $val = mb_convert_kana($val, "KC");
                        mb_regex_encoding("UTF-8");
                        if (!mb_ereg("^[ァ-ヶー]+$", $val) && $val != "") {
                            $errMsg[$key] = $formItem[$key]['name'] . "はカタカナで入力して下さい。";
                        }
                    break;

                    // メールアドレスチェック
                    case 4:
                        if (!preg_match("/^[-+.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]{2,6}$/i", $val) && $val != "") {
                            $errMsg[$key] = $formItem[$key]['name'] . "を正しく入力して下さい。";
                        }
                    break;

                    // 電話（FAX）番号チェック
                    case 5:
                        // 全角数字を半角数字に変換
                        $val = mb_convert_kana($val, "n");
                        if (!preg_match('/^\d{2,5}-?\d{2,5}-?\d{4,5}$/', $val) && $val != "") {
                            $errMsg[$key] = "不正な数値です";
                        }
                    break;

                    // 郵便番号チェック
                    case 6:
                        // 全角数字を半角数字に変換
                        $val = mb_convert_kana($val, "n");
                        if (!preg_match("/^[0-9]{3}-?[0-9]{4}$/", $val) && $val != "") {
                            $errMsg[$key] = $formItem[$key]['name'] . "を正しく入力して下さい。";
                        }
                    break;

                    // URLチェック
                    case 7:
                        // 全角英数字を半角英数字に変換
                        $val = mb_convert_kana($val, "a");
                        if (!preg_match("/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/", $val) && $val != "") {
                            $errMsg[$key] = $formItem[$key]['name'] . "を正しく入力して下さい。";
                        }
                    break;

                    // チェックなし
                    case 0:
                    default:
                    break;
                }

                // 変換したものをPOSTに戻す
                $data[$key] = $val;
            }
        }*/
        return $errMsg;
    }

    /**
     * データを暗号化する
     * @param  [type] $plain_file [description]
     * @return [type]             [description]
     */
    function encData($plain_data)
    {
        //パラメータ設定
        $password = PASSWORD;
        $method   = 'aes-256-cbc';
        $options  = OPENSSL_RAW_DATA;
        $iv       = IV;
 
        //暗号化
        $enc_data = openssl_encrypt(
                        $plain_data,
                        $method,
                        $password,
                        $options, 
                        $iv
                    );
 
        //暗号化済みデータを返す
        return $enc_data;
    }

    /**
     * @param array $files
     * @return string
     */
    function fileUpload($files) {
        $_SESSION['errmsg'] = [];
        $file_names = [];
        foreach ($files as $key => $file_data) {
            if( !empty($file_data['tmp_name']) ) {
                $tmp_file = $file_data['tmp_name'];
                $file_size = $file_data['size'];

                if (($file_size > 4194304)){      
                    // ファイルサイズ超過
                    $_SESSION['errmsg'] = 'ファイルサイズは4M以下にしてください。';

                    header('Location: '. CONTACT_URL);
                    exit;
                }

                // 暗号化して保存
                $file_name = $key. '_'. time(). '.'. pathinfo($file_data['name'], PATHINFO_EXTENSION);
                file_put_contents($tmp_file, encData(file_get_contents($tmp_file)));
                $upload_res = move_uploaded_file( $tmp_file, UPLOAD_DIR. $file_name);
                $file_names[$key] = $file_name;

                if( $upload_res !== true ) {
                    // ファイルアップ失敗
                    $_SESSION['errmsg'] = 'ファイルのアップロードに失敗しました。';

                    header('Location: '. CONTACT_URL);
                    exit;
                } else {
                    //$_SESSION['file_names'][$key] = $file_data['name'];
                }
            }
        }

        return $file_names;
    }

?>
