<?php
//_PAGE_ID
define('_PAGE_ID','spfesta2013_autumn_request_input');
define('_PAGE_GROUP','spfesta2013_autumn_request');
define('_PAGE_PATH','/req_reserve.php');

require './req.form.config.php';
require './req._c.config.php';

function config_controller( &$c )
{
	
	$st_time = strtotime('2013/10/26 21:00:00');
	$ed_time = strtotime('2013/10/28 10:00:00');
	$now_time = time();
	//print $st_time . ' - ' . $now_time;
	$form_open = false;
	if($st_time <= $now_time && $now_time <= $ed_time){
		$form_open = true;
	}
	$c->set('form_open',$form_open);
	
	
	//デフォルトテンプレートの設定
	$c->SetViewFile(TEMPLATEDIR . '/input.tpl');
	
	//HTML_TITLE
	$c->set('HTML_TITLE','入力画面');
	
	//pankuzu
	$_pankuzu = array();
	$_pankuzu[] = array('li_class'=>'here' ,'title'=>$c->get('HTML_TITLE') , 'path' => '#');
	$c->set('_pankuzu',$_pankuzu);
	
	//都道府県
	$c->set('m_pref',$c->mtb_pref->getlist());
	//商品一覧
	$c->set('m_item',$c->dtb_reserve_products_secret->getlist());
	
	//$c->set('store_list',explode(',',STORE_LIST));
}

function action( &$c )
{
	// a actの取得
	$_a = $c->s->a();
	switch ($_a) {
	case 'c':
		//確認画面表示処理
		_request($c);
		if(_validate($c)){
			if(!$c->a->is()){
				//認証されていなければ入力画面へ
				_request($c);
				$c->SetViewFile(TEMPLATEDIR . '/input.tpl');
				return false;
			}else{
				$c->SetViewFile(TEMPLATEDIR . '/check.tpl');
			}
		}
		break;
	case 'r':
		_request($c);
		//確認画面表示処理
		if(_validate($c)){
			if(!$c->a->is()){
				//認証されていなければ入力画面へ
				_request($c);
				$c->SetViewFile(TEMPLATEDIR . '/input.tpl');
				return false;
			}else{
				//実登録処理
				if(_regist($c)){
					$c->redirect('./req_finish.php');
				}else{
					//登録エラー
				}
			}
		}else{
			//入力エラー
			
		}
		break;
	case 'i':
		_request($c);
		break;
	default:
		_default($c);
		break;
	}
}

function _after_request( &$c ){
	$request = $c->get('request');
	if(!isset($request['login_id'])) $request['login_id'] = '';
	if(!isset($request['login_pw'])) $request['login_pw'] = '';
	//$request['store'])) $request['store'] = '';
	
	if(!isset($request['select_item'])) $request['select_item'] = array();
	$m_item = $c->get('m_item');
	foreach($m_item as $item){
		if(!isset($request['select_item'][$item['id']])) $request['select_item'][$item['id']] = 0;
	}
	
	$c->set('request',$request);
}

// regist 登録処理
function _regist( &$c ){
	
	$err = array();
	
	
	$m_item = $c->get('m_item');
	$request = $c->get('request');
	$customer = $c->a->get('customer');
	
	$select_item = $request['select_item'];
	//tran
	$c->tran->begin();
	$request = $c->get('request');
	//在庫を減らす
	foreach($request['select_item'] as $_id => $cnt){
		if($cnt > 0){
			$sql = "update dtb_reserve_products_secret set stock = stock - ".$cnt." where id = " .$_id;
			$res = $c->tran->query($sql);
			if($res != ''){
				$err['select_item'] = '登録エラー';
				$c->set('err',$err);
				break;
			}
		}
	}
	
	//予約情報の登録
	$_param = array();
	$_param['customer_id'] = $customer['customer_id'];
	$_param['customer_no'] = $customer['customer_no'];
	$_param['name01'] = $customer['name01'];
	$_param['name02'] = $customer['name02'];
	$_param['email'] = $customer['email'];
	$_param['zip01'] = $customer['zip01'];
	$_param['zip02'] = $customer['zip02'];
	$_param['pref'] = $customer['pref'];
	$_param['addr01'] = $customer['addr01'];
	$_param['addr02'] = $customer['addr02'];
	$_param['tel01'] = $customer['tel01'];
	$_param['tel02'] = $customer['tel02'];
	$_param['tel03'] = $customer['tel03'];
	$_param['res_tenpo_name'] = $request['store'];
	//for($_product_id = 1 ; $_product_id <= 10 ; $_product_id++){
	foreach($m_item as $_product_id => $item){
		if(isset($select_item[$_product_id]) && $select_item[$_product_id] > 0){
			$_param['res_cnt' . $_product_id % 10] = $select_item[$_product_id];
		}else{
			$_param['res_cnt' . $_product_id % 10] = 0;
		}
	}
	$_param['res_date'] = 'NOW()';
	$_param['lockkey'] = session_id() . microtime(true);
	
	$res = $c->dtb_reserve_reserve_secret->insert($_param);
	
	if($res != 1){
		$err['select_item'] = '登録エラー2';
		$c->set('err',$err);
		//break;
	}
	
	if(count($err)>0){
		$c->tran->rollback();
		return false;
	}else{
		$c->tran->commit();
	}
	
	
	
	//csv出力
	$csv_list = array();
	$csv_list[] = date('Y-m-d H:i:s');
	$csv_list[] = $customer['customer_id'];
	$csv_list[] = $customer['customer_no'];
	$csv_list[] = $customer['name01'] . ' ' . $customer['name02'];
	$csv_list[] = $customer['email'];
	$csv_list[] = $customer['zip01'] . '-' . $customer['zip02'];
	$csv_list[] = $customer['pref_name'];
	$csv_list[] = $customer['addr01'];
	$csv_list[] = $customer['addr02'];
	$csv_list[] = $customer['tel01'] . '-' . $customer['tel02'] . '-' . $customer['tel03'];
	$csv_list[] = $request['store'];
	//for($_product_id = 1 ; $_product_id <= 10 ; $_product_id++){
	foreach($m_item as $_product_id => $item){
		if(isset($select_item[$_product_id]) && $select_item[$_product_id] > 0){
			$csv_list[] = $select_item[$_product_id];
		}else{
			$csv_list[] = 0;
		}
	}
	$csv = implode(',',$csv_list);
	$csv = mb_convert_encoding($csv,'SJIS','UTF8');
	if(is_file(OUTPUT_CSV_PATH)){//ファイルが存在する場合
		$fp = fopen(OUTPUT_CSV_PATH, "a");
		fputs($fp, "$csv\n");
	}else{
		$fp = fopen(OUTPUT_CSV_PATH, "a+");
		fputs($fp, "$csv\n");
	}
	fclose($fp);
	
	//メール送信
	$mail_subject = '［SnowPeak］「雪峰祭2013-秋」受注生産限定アイテムのご予約を承りました。';
	
	$mail_body = "";
	$mail_body .= "「雪峰祭2013-秋」受注生産限定アイテムのご予約を頂きまして誠にありがとうございます。" . "\n";
	$mail_body .= "" . "\n";
	$mail_body .= "以下の内容で、受注生産限定アイテムのご予約を承らせて頂きました。" . "\n";
	$mail_body .= "ご注文内容にお間違いがないか、今一度ご確認頂ければと思います。" . "\n";
	$mail_body .= "" . "\n";
	$mail_body .= "＜ご注文内容＞" . "\n";
	$mail_body .= "" . "\n";
	$_total_price = 0;
	foreach($m_item as $item){
		if(isset($select_item[$item['id']]) && $select_item[$item['id']] >= 1){
			$mail_body .= '　' . $item['product_name'] . ' ' . number_format($item['price']) . '円'."\n";// . $select_item[$item['id']] . "個\n";
			$_total_price += $item['price'];
		}
	}
	$mail_body .= "---------------------------------------" . "\n";
	$mail_body .= "合計：" . number_format($_total_price) . "円" . "\n";
	$mail_body .= "---------------------------------------" . "\n";
	$mail_body .= "" . "\n";
	$mail_body .= "発送の準備が出来次第（来年3月頃予定）、ご決済に関しましてメールにて" . "\n";
	$mail_body .= "ご連絡させて頂きますので、その際にご決済を頂きますようお願い致します。" . "\n";
	$mail_body .= "" . "\n";
	$mail_body .= "※受注生産のためキャンセルはできませんので予めご了承ください。" . "\n";
	$mail_body .= "※お支払方法は弊社オンラインショッピングと同様となります。" . "\n";
	$mail_body .= "http://www.snowpeak.co.jp/guide/online_payment.html" . "\n";
	$mail_body .= "※ご注文合計が5,000円以下の場合には、送料500円を別途頂戴致します。" . "\n";
	$mail_body .= "※スノーピークポイントにつきましては、商品発送完了後に付与させて頂きます。" . "\n";
	$mail_body .= "" . "\n";
	$mail_body .= "以上となりますが、ご不明な点などございました際には" . "\n";
	$mail_body .= "お気軽にお問い合わせ頂ければと存じます。" . "\n";
	$mail_body .= "ご連絡お待ち申し上げておりますので、何卒宜しくお願いいたします。" . "\n";
	$mail_body .= "" . "\n";
	$mail_body .= "------------------------------------------------------------" . "\n";
	$mail_body .= "株式会社スノーピーク" . "\n";
	$mail_body .= "カスタマーリレーション課　カスタマーサービスチーム" . "\n";
	$mail_body .= "〒955－8616 新潟県三条市中野原456" . "\n";
	$mail_body .= "TEL: 0256-46-5858   FAX: 0256-46-5860" . "\n";
	$mail_body .= "e-mail: userservice@snowpeak.co.jp" . "\n";
	$mail_body .= "オフィシャルサイト：http://www.snowpeak.co.jp" . "\n";
	$mail_body .= "facebook：http://www.facebook.com/SnowPeakJapan" . "\n";
	$mail_body .= "------------------------------------------------------------" . "\n";

	//管理者宛送信
	$c->ml->clearAll();
	$c->ml->setTo(FORM_MAIL_TO);
	$c->ml->setFrom(FORM_MAIL_FROM);
	$c->ml->setSubject($mail_subject);
	$c->ml->setBody($mail_body);
	$s_res = $c->ml->send();
	$c->ml->clearAll();
	
	//申込者宛送信
	$c->ml->clearAll();
	$c->ml->setTo($customer['email']);
	$c->ml->setFrom(FORM_MAIL_FROM);
	$c->ml->setSubject($mail_subject);
	$c->ml->setBody($mail_body);
	$s_res = $c->ml->send();
	$c->ml->clearAll();
	
	return true;
}

function _validate( &$c ){
	$err = array();
	$_a = $c->s->a();
	$request = $c->get('request');
	
	
	if($_a == 'c'){
		//ユーザ情報取得
		if(!$c->v->notempty($request['login_id'])) $err['login_id'] = "必須項目です";
		if(!$c->v->notempty($request['login_pw'])) $err['login_pw'] = "必須項目です";
		if(!isset($err['login_id']) && !isset($err['login_pw'])){
			$customer = __login( $c, $c->s->post('login_id'), $c->s->post('login_pw') );
			if( $customer ){
//				if($customer['customer_rank'] != '5'){
//					$err['login_id'] = '先行予約はブラック会員様限定となっております。';
//				}else{
				// 承認状態をセット
				$c->a->setAuth();
				$c->a->set('customer_id',$customer['customer_id']);
				$c->a->set('customer',$customer);
				$c->set('customer',$customer);
//				}
			}else{
				$err['login_id'] = '入力されたメールアドレス・パスワードでログイン出来ませんでした。';
				$c->set('err',$err);
			}
		}
	}
	
	if(!$c->v->notempty($request['store'])) $err['store'] = "お受取店舗を選択してください。";

	if(!isset($request['select_item']) || !is_array($request['select_item'])){
		$err['select_item'] = "予約希望商品を選択してください。";
	}elseif(count($request['select_item']) == 0){
		$err['select_item'] = "予約希望商品を選択してください。";
	}else{
		$select_item = $request['select_item'];
		$_total = 0;
		foreach($select_item as $_val){
			if(!$c->v->number($_val)){
				$err['select_item'] = "予約希望商品を選択してください。";
			}else{
				$_total += $_val;
			}
		}
		if(!isset($err['select_item']) && $_total == 0){
			$err['select_item'] = "予約希望商品を選択してください。";
		}
	}
	
	if(count($err) == 0){
		//在庫数チェック
		$err = __stock_check($c,$request['select_item']);
	}
	
	// エラーをセット
	$c->set('err',$err);
	if(count($err) > 0){
		return false;
	}
	return true;
}

function _default( &$c ){
	$request = array();
	$request['login_id'] = '';
	$request['login_pw'] = '';
	$request['store'] = '';
	$default_array = array();
	$m_item = $c->get('m_item');
	foreach($m_item as $item){
		$default_array[$item['id']] = 0;
	}
	$request['select_item'] = $default_array;
	$c->set('request',$request);
}

//-----ログイン認証-----
function __login( &$c, $_id, $_pw ) {
    // 本登録された会員のみ
    $_sql = "SELECT cust.*";
    $_sql .= " ,pref.pref_name";
    $_sql .= " FROM dtb_customer cust";
    $_sql .= " LEFT JOIN mtb_pref pref ON cust.pref = pref.pref_id";
	$_sql .= " WHERE cust.email = '".$c->db->escape($_id)."'";
	$_sql .= " AND cust.del_flg = 0";
	$_sql .= " AND cust.status = 2";
	$_sql .= " AND cust.enable = 1";
	$_sql .= " AND cust.customer_no IS NOT NULL";//ポイント会員のみ
	$customer = $c->dtb_customer->findquery($_sql);
	
	if(count($customer) != 1){
		return false;
	}
	$customer = $customer[0];
	
    // パスワードが合っていれば顧客情報をセット、trueを返す
    if ( sha1($_pw . ":" . ECCUBE_AUTH_MAGIC) == $customer['password'] ){
    	return $customer;
    }else{
    	return false;
    }
}

function __stock_check( &$c ,$select_item ) {
	$err = array();
	$m_item = $c->dtb_reserve_products_secret->getlist();
	$c->set('m_item',$m_item);
	foreach($select_item as $_id => $cnt){
		if($cnt > 0){
			if($m_item[$_id]['stock'] < $cnt){
				$err['select_item'] = '大変申し訳ございません、在庫数が減少したため、申し込みを受付を続行できませんでした。';
			}
		}
	}
	return $err;
}

?>