<?php
/**
 * 
 * @copyright	2000-2006 LOCKON CO.,LTD. All Rights Reserved.
 * @version	CVS: $Id$
 * @link		http://www.lockon.co.jp/
 *
 */
 
require_once("../../require.php");
require_once(MODULE_PATH . "mdl_epsilon/mdl_epsilon.inc");

define("MDL_EPSILON_ID", 4);

$arrPayment = array(
	1 => 'クレジット',
	2 => 'コンビニ'
);

$arrCredit = array(
	1 => 'VISA, MASTER',
	2 => 'JCB, AMEX'
);

//ページ管理クラス
class LC_Page {
	//コンストラクタ
	function LC_Page() {
		//メインテンプレートの指定
		$this->tpl_mainpage = MODULE_PATH . 'mdl_epsilon/mdl_epsilon.tpl';
		$this->tpl_subtitle = 'イプシロン決済モジュール';
		global $arrPayment;
		$this->arrPayment = $arrPayment;
		global $arrCredit;
		$this->arrCredit = $arrCredit;
		global $arrConvenience;
		$this->arrConvenience = $arrConvenience;
	}
}
$objPage = new LC_Page();
$objView = new SC_AdminView();
$objQuery = new SC_Query();

// 認証確認
$objSess = new SC_Session();

sfIsSuccess($objSess);

// パラメータ管理クラス
$objFormParam = new SC_FormParam();
$objFormParam = lfInitParam($objFormParam);
// POST値の取得
$objFormParam->setParam($_POST);


// 汎用項目を追加(必須！！)
sfAlterMemo();

switch($_POST['mode']) {
case 'edit':
	// 入力エラー判定
	$objPage->arrErr = lfCheckError();
	
	if(count($objPage->arrErr) == 0) {
		// 利用コンビニにチェックが入っている場合には、ハイフン区切りに編集する
		$convCnt = count($_POST["convenience"]);
		if($convCnt > 0){
			$convenience = $_POST["convenience"][0];
			for($i = 1 ; $i < $convCnt ; $i++){
				$convenience .= "-" . $_POST["convenience"][$i];
			}
		}
		
		// del_flgを削除にしておく
		$del_sql = "UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ? ";
		$arrDel = array(MDL_EPSILON_ID);
		$objQuery->query($del_sql, $arrDel);
		
		// データ登録
		foreach($_POST["payment"] as $key => $val){
			// ランクの最大値を取得する
			$max_rank = $objQuery->getone("SELECT max(rank) FROM dtb_payment");
			
			// クレジットにチェックが入っていればクレジットを登録する
			if($val == 1){
				$visa = "1";
				$jcb = "0";
				$arrData = array(			
					"payment_method" => "Epsilonクレジット"
					,"fix" => 3
					,"creator_id" => $objSess->member_id
					,"create_date" => "now()"
					,"update_date" => "now()"
					,"upper_rule" => 500000
					,"module_id" => MDL_EPSILON_ID
					,"module_path" => MODULE_PATH . "mdl_epsilon/card.php"
					,"memo01" => $_POST["code"]
					,"memo02" => $_POST["url"]
					,"memo03" => $val
					,"memo04" => $visa . $jcb . "000-0000-00000"
					,"del_flg" => "0"
				);
			}

			// コンビニにチェックが入っていればコンビニを登録する
			if($val == 2){
				$arrData = array(			
					"payment_method" => "Epsilonコンビニ"
					,"fix" => 3
					,"creator_id" => $objSess->member_id
					,"create_date" => "now()"
					,"update_date" => "now()"
					,"upper_rule" => 500000
					,"module_id" => MDL_EPSILON_ID
					,"module_path" => MODULE_PATH . "mdl_epsilon/convenience.php"
					,"memo01" => $_POST["code"]
					,"memo02" => $_POST["url"]
					,"memo03" => $val
					,"memo04" => "00100-0000-00000"
					,"memo05" => $convenience
					,"del_flg" => "0"
				);
			}
			
			// データが存在していればUPDATE、無ければINSERT
			$arrPaymentData = lfGetPaymentDB("AND memo03 = ?", array($val));
			if(count($arrPaymentData) > 0){
				$objQuery->update("dtb_payment", $arrData, " module_id = '" . MDL_EPSILON_ID . "' AND memo03 = '" . $val ."'");
			}else{
				$arrData["rank"] = $max_rank + 1;
				$objQuery->insert("dtb_payment", $arrData);
			}
		}
		
		// javascript実行
		$objPage->tpl_onload = 'alert("登録完了しました。\n基本情報＞支払方法設定より詳細設定をしてください。"); window.close();';
	}
	break;
case 'module_del':
	// 汎用項目の存在チェック
	if(sfColumnExists("dtb_payment", "memo01")){
		// データの削除フラグをたてる
		$objQuery->query("UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ?", array(MDL_EPSILON_ID));
	}
	break;
default:
	// データのロード
	lfLoadData();	
	break;
}

$objPage->arrForm = $objFormParam->getFormParamList();

$objView->assignobj($objPage);					//変数をテンプレートにアサインする
$objView->display($objPage->tpl_mainpage);		//テンプレートの出力
//-------------------------------------------------------------------------------------------------------
/* パラメータ情報の初期化 */
function lfInitParam($objFormParam) {
	$objFormParam->addParam("契約コード", "code", INT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
	$objFormParam->addParam("接続先URL", "url", URL_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK"));
	$objFormParam->addParam("利用決済", "payment", "", "", array("EXIST_CHECK"));
	$objFormParam->addParam("利用コンビニ", "convenience");	
	return $objFormParam;
}

// エラーチェックを行う
function lfCheckError(){
	global $objFormParam;
	
	$arrErr = $objFormParam->checkError();
	
	// 利用クレジット、利用コンビニのエラーチェック
	$arrChkPay = $_POST["payment"];
	foreach((array)$arrChkPay as $key => $val){
		// 利用コンビニ
		if($val == 2 and count($_POST["convenience"]) <= 0){
			$arrErr["convenience"] = "利用コンビニが選択されていません。<br />";
		}
	}
	
	// 接続チェックを行う
	$arrErr = lfChkConnect();

	sfprintr($arrErr);
	return $arrErr;
}

// 接続チェックを行う
function lfChkConnect(){
	global $objQuery;
	global $objPage;
	
	$arrRet = array();
	
	// メールアドレス取得
	$email = $objQuery->getone("SELECT email03 FROM dtb_baseinfo");

	// 契約コード	
	(in_array(1, (array)$_POST["payment"])) ? $cre = "1" : $cre = "0";
	(in_array(2, (array)$_POST["payment"])) ? $con = "1" : $con = "0";
	$st_code = $cre . "0" . $con . "00-0000-00000";
	
	// 送信データ生成
	$arrSendData = array(
		'contract_code' => $_POST["code"],		// 契約コード
		'user_id' => "connect_test",			// ユーザID
		'user_name' => "接続テスト",			// ユーザ名
		'user_mail_add' => $email,				// メールアドレス
		'st_code' => $st_code,					// 決済区分
		'process_code' => '3',					// 処理区分(固定)
		'xml' => '1',							// 応答形式(固定)
	);
	
	// データ送信
	$arrXML = sfPostPaymentData($_POST["url"], $arrSendData, false);
	if($arrXML == "") {
		$arrRet["url"] = "接続できませんでした。";
		return $arrRet;	
	}
	
	// エラーがあるかチェックする
	$err_code = sfGetXMLValue($arrXML,'RESULT','ERR_CODE');
	switch ($err_code) {
		case "":
			break;
		case "607":
			$arrRet["code"] = "契約コードが違います。";
			return $arrRet;
		default :
			$arrRet["service"] = sfGetXMLValue($arrXML,'RESULT','ERR_DETAIL');
			return $arrRet;
	}
	
	// コンビニ指定があればコンビニ分ループし、チェックを行う
	if(count($_POST["convenience"]) > 0){
		foreach($_POST["convenience"] as $key => $val){
			// 送信データ生成
			$arrSendData['conveni_code'] = $val;			// コンビニコード
			$arrSendData['user_tel'] = "0300000000";		// 電話番号
			$arrSendData['user_name_kana'] = "送信テスト";	// 氏名(カナ)
			$arrSendData['haraikomi_mail'] = 0;				// 払込メール(送信しない)
			
			// データ送信
			$arrXML = sfPostPaymentData($_POST["url"], $arrSendData, false);
			if($arrXML == "") {
				$arrRet["url"] = "接続できませんでした。";
				return $arrRet;	
			}
			
			// エラーがあるかチェックする
			$err_code = sfGetXMLValue($arrXML,'RESULT','ERR_CODE');
			if($err_code != ""){
				$arrRet["service"] = sfGetXMLValue($arrXML,'RESULT','ERR_DETAIL');
				return $arrRet;
			}
		}
	}
	
	return $arrRet;	
}

// 登録データを読み込む
function lfLoadData(){
	global $objFormParam;
	
	//データを取得
	$arrRet = lfGetPaymentDB(" AND del_flg = '0'");
	
	// 値をセット
	$objFormParam->setParam($arrRet[0]);

	// 画面表示用にデータを変換
	$arrDisp = array();
	foreach($arrRet as $key => $val){
		// 利用決済を表示用に変換
		$arrDisp["payment"][$key] = $val["payment"];
		
		// クレジットの決済区分を取得
		if($val["payment"] == 1) $credit = $val["payment_code"];
		
		// コンビニ
		if($val["payment"] == 2) $arrDisp["convenience"] = $val["convenience"];
	}
	$objFormParam->setParam($arrDisp);
	$objFormParam->splitParamCheckBoxes("convenience");
	
	// クレジット
	if(substr($credit, 0, 1)) $arrCredit["credit"][] = 1;
	if(substr($credit, 1, 1)) $arrCredit["credit"][] = 2;
	$objFormParam->setParam($arrCredit);
}

// DBからデータを取得する
function lfGetPaymentDB($where = "", $arrWhereVal = array()){
	global $objQuery;
	
	$arrVal = array(MDL_EPSILON_ID);
	$arrVal = array_merge($arrVal, $arrWhereVal);
	
	$arrRet = array();
	$sql = "SELECT 
				module_id, 
				memo01 as code, 
				memo02 as url, 
				memo03 as payment,
				memo04 as payment_code, 
				memo05 as convenience
			FROM dtb_payment WHERE module_id = ? " . $where;
	$arrRet = $objQuery->getall($sql, $arrVal);
		
	return $arrRet;
}

?>