<?php
$errorMsg = null;
$mail = new Mailsend();

class Mailsend{
	var $from_adr        = "sobaschool@soba-education.com";
	var $usrmail         = true;
	var $usrmail_postkey = "email-787";
	var $usermail_title  = null;
	var $usermail_body   = null;
	var $adminmail       = true;
	var $adminto_adr     = "sobaschool@soba-education.com";
	var $adminmail_title = null;
	var $adminmail_body  = null;

	var $err       = false;
	var $errMsg    = array();
	var $fd        = array();
	var $sf        = array(
	'text-402'    => null,
	'email-787'   => array(
		'need'      => 'メールアドレスが入力されていません。',
		'mail'      => 'メールアドレスに誤りがあります。'
	),
	'text-549'    => array(
		'need'      => 'お名前が入力されていません。',
		'type'      => 'text'
	),
	'tel-640'     => null,
	'zip11'       => null,
	'addr11'      => null,
	'question'    => array(
		'need'      => 'お問い合わせ内容が入力されていません。',
		'type'      => 'text'
	),
	'acceptance-0' => array(
		'need'     => 'チェックが入っていません。',
		'type'     => 'checkbox'
	),
	'hakubanya-demo'      => null,
	);

	public function __construct(){
		if ($_SERVER["REQUEST_METHOD"] == "POST") {
			//submitモード
			$this->getPostdata();//POSTデータ取得
			$this->Validation();//入力チェック
			if(!$this->err)
				$this->getMaildata();//メール用データ取得
			if(!$this->err)
				$this->sendMails();//メール送信
			if(!$this->err){
				header('Location: /contact_completed/');
				exit;
			}
			$errorMsg = $this->getErrmsg();

		}elseif($_GET && array_key_exists('js', $_GET)){
			//jsモード
			$this->jsoutput();
		}
	}
	
	public function getErrmsg(){
		return $this->errMsg;
	}

	public function getPostdata(){
		foreach($this->sf as $key=>$val){
			if(array_key_exists($key, $_POST)){
				$this->fd[$key] = $_POST[$key];
			}
		}
	}
	
	public function Validation(){
		foreach($this->sf as $key=>$val){
			if(!is_null($val)){
				$err_flg = false;
				foreach($val as $v_key=>$v_val){
					switch ($v_key) {
						case "need": //必須チェック
							if(!array_key_exists($key,$this->fd) || !$this->fd[$key]){
								$this->err = true;
								$err_flg   = true;
								$this->errMsg[] = $v_val;
							}
							break;

						case "mail": //メールアドレスチェック
							if(!preg_match("(^[^@]+@[^.]+\..+)", $this->fd[$key])){
								$this->err = true;
								$err_flg   = true;
								$this->errMsg[] = $v_val;
							}
							break;
						
						case null:
							break;
					}
					if($err_flg)
						break;
				}
			}
		}
	}
	
	public function getMaildata(){
		//リファラーチェック
		if(
			!isset($_SERVER["HTTP_REFERER"]) ||
			!preg_match("/".$_SERVER["HTTP_HOST"]."/",$_SERVER["HTTP_REFERER"])
		){
				header('Location: error.html');
				exit;
		}

		//ユーザー宛メールの取得
		if($this->usrmail){
			$title = null;
			$body  = null;
			$fp = fopen('data/usermail.txt','r');
			if($fp){
				$i = 0;
				while (!feof($fp)) {
					if($i==0){
						$title = fgets($fp);
					}else{
						$body .= fgets($fp);
					}
					$i++;
				}
			}else{
				$this->err      = true;
				$this->errMsg[] = "システムエラー　usermail not found";
			}
			fclose($fp);
			$this->usermail_title = $this->replaceText($title);
			$this->usermail_body  = $this->replaceText($body);
		}
		//ユーザー宛メールの取得
		if($this->adminmail){
			$title = null;
			$body  = null;
			$fp = fopen('data/adminmail.txt','r');
			if($fp){
				$i = 0;
				while (!feof($fp)) {
					if($i==0){
						$title = fgets($fp);
					}else{
						$body .= fgets($fp);
					}
					$i++;
				}
			}else{
				$this->err      = true;
				$this->errMsg[] = "システムエラー　adminmail not found";
			}
			fclose($fp);
			$this->adminmail_title = $this->replaceText($title);
			$this->adminmail_body  = $this->replaceText($body);
		}
	}
	
	public function replaceText($data){
		foreach($this->sf as $key=>$val){
			if(is_array($this->fd[$key])){
				$data = preg_replace('/___'.$key.'___/', implode("、", $this->fd[$key]), $data);
			}else{
				$data = preg_replace('/___'.$key.'___/', $this->fd[$key], $data);
			}
		}
		$data = preg_replace('/___TIMESTAMP___/', date("Y/m/d - G:i:s"), $data);
		$data = preg_replace('/___IPADDR___/', $_SERVER["REMOTE_ADDR"], $data);
		$data = preg_replace('/___HOST___/', $_SERVER["REMOTE_HOST"], $data);
		$data = preg_replace('/___USERAGENT___/', $_SERVER["HTTP_USER_AGENT"], $data);
		return $data;
	}
	
	public function sendMails(){
		if($this->usrmail){
			$mail_to = $this->fd[$this->usrmail_postkey];
			if(!$this->mailsend($this->from_adr,$mail_to, $this->usermail_title, stripslashes($this->usermail_body))){
				$this->err   = true;
				$this->errMsg[] = "システムエラー　ユーザー宛メール送信失敗";
			}
		}
		if($this->adminmail){
			if(!$this->mailsend($mail_to,$this->adminto_adr, $this->adminmail_title, stripslashes($this->adminmail_body))){
				$this->err   = true;
				$this->errMsg[] = "システムエラー　管理者宛メール送信失敗";
			}
		}
	}
	
	public function mailsend($from, $to, $subject, $body){
		mb_language("Ja") ;
		mb_internal_encoding("UTF-8");
		$headers = 'From: '.$from."\n".'Reply-To: '.$from."\n".'X-Mailer: webmail/0.2';
		$ret = mb_send_mail($to, $subject, $body, $headers);
		return $ret;
	}

	public function jsoutput(){
//入力チェック用JS出力
header("Content-type: application/x-javascript");
echo '
$(document).ready(function(){
	$(".contact").submit(function(){
		console.log($(".ErrMsg"));
		$(".ErrMsg").empty();
		console.log("empyty");
		$('."'".'input[type="text"]:enabled'."'".').css("background-color","#fff");
		var flg = true;
';
foreach($this->sf as $key => $val){
	if(!is_null($val)){
		if(array_key_exists('need', $val)){
			if(array_key_exists('mail', $val)){
				//メールアドレスチェック
echo '
		if($("#'.$key.'").val() == ""){
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}else if(!$("#'.$key.'").val().match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/)){
			dispErMsg($("#'.$key.'"),"'.$val["mail"].'");
			flg = false;
		}
';
			}elseif(array_key_exists('type', $val)){
				//テキストボックスの入力チェック
				if($val['type'] == 'text'){
echo '
		if($("#'.$key.'").val() == ""){
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}
';
				}elseif($val['type'] == 'radio'){
				//ラジオボタンの入力チェック
echo '
		if(!$("input[name='."'".$key."'".']:checked").val()){
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}
';
				}elseif($val['type'] == 'checkbox'){
				//チェックボタンの入力チェック
echo '
		if(!$("input[name='."'".$key."'".']:checked").val()){
			console.log("ERROR");
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}
';
				}elseif($val['type'] == 'select'){
				//セレクトボックスの入力チェック
echo '
		if(!$("select[name='."'".$key."'".'] option:seleced").val()){
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}
';
				}elseif($val['type'] == 'tel'){
				//電話番号の入力チェック
echo '
		if($("#telno").val() == ""){
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}
		if($("#'.$key.'").val() != "" && !$("#'.$key.'").val().match(/^[0-9\-]+$/) && !$("#'.$key.'").val().match(/^[0-9]+$/)){
			dispErMsg($("#'.$key.'"),"'.$val["need"].'");
			flg = false;
		}
';
				}
			}
		}
	}
}
echo '
		return flg;
	});
});

function dispErMsg(obj,msg){
	obj.css("background-color","#fdd");
	console.log(obj.parent().find(".ErrMsg"));
	obj.parent().find(".ErrMsg").append(msg);
	obj.parent().find(".ErrMsg").css("display","block");
	obj.focus();
}';
	}
}

/*　フォーム出力用ショートカット関数　*/
	//　指定したKeyの内容をHTMLエスケープして出力
	function ecp($key){
		if(array_key_exists($key, $_POST)){
			return htmlspecialchars($_POST[$key]);
		}
		return null;
	}

	//　指定したKeyの内容をHTMLエスケープせずに出力
	function vl($key){
		if(array_key_exists($key, $_POST)){
			return $_POST[$key];
		}
		return null;
	}

	//　指定したKeyの内容が$valと同様なら　checked="checked"　を返す radio用
	function rbck($key,$val){
		if(array_key_exists($key, $_POST) && $_POST[$key] == $val){
			return 'checked="checked"';
		}
		return null;
	}

	//　指定したKeyの内容が$valと同様なら　checked="checked"　を返す checkbox用
	function cbck($key,$val){
		if(array_key_exists($key, $_POST) && in_array($val, $_POST["$key"])){
			return 'checked="checked"';
		}
		return null;
	}

	//　指定したKeyの内容が$valと同様なら　selected="selected"　を返す select用
	function slck($key,$val){
		if(array_key_exists($key, $_POST) && in_array($val, $_POST["$key"])){
			return 'selected="selected"';
		}
		return null;
	}
