<?php
/**
 * @copyright ONE/DEPO Project
 * @license   PHP License 3.01 <http://www.php.net/license/3_01.txt>
 */


//JSONを扱うためのパーサ
//require_once(WEBAPP_DIR."/JSON.php");

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
require_once 'Net/UserAgent/Mobile.php';

/**
 * [[機能説明]]
 *
 * @package     [[package名]]
 * @author      Your Name <mail@example.com>
 * @access      public
 */
class Customer_Itembuy_Nonmember_Done
{
    var $title;
    var $pagename;

    var $actionChain;
    var $session;
    var $auth;
    var $c_cart;
    var $c_pref;
    var $deposit;
    var $dlitem;

    var $item_array;
    var $takkyubin_chk;
    var $sum_quantity;
    var $payment;

    var $from;
    var $beforeorder;
    
    var $errer_return;

    var $note;
    
    /**
     * [[機能説明]]
     *
     * @access  public
     */
    function execute()
    {
        $mobile = &Net_UserAgent_Mobile::isMobile();
        $re_str = ($mobile) ? "mobile_" : "";

        $errorList =& $this->actionChain->getCurErrorList();
        $log =& LogFactory::getLog();
        $log->debug("Customer_Itembuy_Nonmember_Doneが実行されました", "Customer_Itembuy_Nonmember_Done#execute");

        $payment_data = $this->session->getParameter("payment");
        if (PAY_MERCHANT=='veritrans') {
        if ($payment_data[0] == 1 && 
            !is_numeric($payment_data[2])) {
            $errorList -> add(1, "カード番号が正しくありません。正しいカード番号を入力してください。");
            $this->errer_return = "customer_itembuy_nonmember";
            return $re_str ."input";
        }
        if ($payment_data[0] == 1) {
            $d1 = mktime(0,0,0,$payment_data[5],1,$payment_data[4]);
            $d2 = mktime(0,0,0,date("m"),1,date("Y"));
            if ($d1 < $d2) {
                $errorList -> add(1, "カード有効期限が正しくありません。正しい有効期限を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
        }

        if ($payment_data[0] == 1){
            $_POST["card_number"] = $payment_data[2];
            $_POST["card_name"]   = $payment_data[3];
            $_POST["exp_year"]    = $payment_data[4];
            $_POST["exp_month"]   = $payment_data[5];
            $_POST["dt"]          = $payment_data[6];
            $_POST["MI_SIG"]      = $payment_data[7];
            $_POST["price"]       = $payment_data[8];
            if (!$this->payment->checkSignature()) {
                $errorList -> add(1, "エラーが発生しました。正しい情報を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
        }
        }
        if($payment_data[0] == 4)
        {
            if (USE_CVS===false) return false;
            if (PAY_MERCHANT=='veritrans') {
                if(!($payment_data[9]=="01" || $payment_data[9]=="02" || $payment_data[9]=="03" || $payment_data[9]=="04")) {
                    $errorList->add(1, "コンビニ決済「コンビニ店指定」が正しくありません。正しい店舗を指定してください。");
                    $this->errer_return = "customer_itembuy_nonmember";
                    return $re_str ."input";
                }
            }
            if(empty($payment_data[10])) {
                $errorList->add(1, "コンビニ決済「姓」が正しくありません。正しい姓を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
            if (!empty($payment_data[10])) {
                $payment_data[10] = mb_convert_kana($payment_data[10], 'KV', 'UTF-8');
                if (mb_strlen($payment_data[10], "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「姓」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($payment_data[11])) {
                $errorList->add(1, "コンビニ決済「名」が正しくありません。正しい名を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
            if (!empty($payment_data[11])) {
                $payment_data[11] = mb_convert_kana($payment_data[11], 'KV', 'UTF-8');
                if (mb_strlen($payment_data[11], "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「名」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($payment_data[12])) {
                $errorList->add(1, "コンビニ決済「姓(カナ)」が正しくありません。正しい姓名(カナ)を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
            if (!empty($payment_data[12])) {
                $payment_data[12] = mb_convert_kana($payment_data[12], 'KV', 'UTF-8');

                mb_regex_encoding("UTF-8");
                if (!mb_ereg("^[ァ-ヶー]+$", $payment_data[12])) {
                    $errorList->add(1, "コンビニ決済「姓(カナ)」が正しくありません。全角カナを入力してください。");
                    return false;
                }
                if (mb_strlen($payment_data[12], "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「姓(カナ)」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($payment_data[13])) {
                $errorList->add(1, "コンビニ決済「名(カナ)」が正しくありません。正しい姓名(カナ)を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
            if (!empty($payment_data[13])) {
                $payment_data[13] = mb_convert_kana($payment_data[13], 'KV', 'UTF-8');

                mb_regex_encoding("UTF-8");
                if (!mb_ereg("^[ァ-ヶー]+$", $payment_data[13])) {
                    $errorList->add(1, "コンビニ決済「名(カナ)」が正しくありません。全角カナを入力してください。");
                    return false;
                }
                if (mb_strlen($payment_data[13], "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「名(カナ)」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($payment_data[14])) {
                $errorList->add(1, "コンビニ決済「電話番号」が正しくありません。正しい電話番号を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
        }
        if ($payment_data[0] == 4){
            $_POST["dt"]          = $payment_data[6];
            $_POST["price"]       = $payment_data[8];
            $_POST["CVS_SIG"]     = $payment_data[14];
            if (!$this->payment->checkCVSSig()) {
                $errorList -> add(1, "エラーが発生しました。正しい情報を入力してください。");
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            }
        }

        $r = $this->makeItemarray();
        if ($r=="error") return $r;


        $destination = $this->session->getParameter('destination');
        $note = (!empty($this->note)) ? $this->note : NULL;

        $r = $this->payment->doTransaction($ret, 
                                           $payment_data, 
                                           $this->item_array, 
                                           NULL,//$this->membercd, 
                                           $destination, 
                                           $this->beforeorder, 
                                           0,
                                           0,
                                           $destination,
                                           $note);
        if (!$r) {
            if (!empty($ret["MErrMsg"])) {
                // カード情報が不正
                $errorList -> add(1,
                                  mb_convert_encoding($ret["MErrMsg"], 
                                  "UTF-8", "UTF-8,EUC-JP")
                                 );
                $this->errer_return = "customer_itembuy_nonmember";
                return $re_str ."input";
            } else {
                trigger_error("item buy error", E_USER_ERROR);
            }
        }
        $this->session->removeParameter("payment");
        $this->session->removeParameter("destination");
        $this->session->removeParameter("cart_items");
        $this->session->removeParameter("takkyubin");

        return $re_str .'success';
    }

    function makeItemarray() {
        $items = $this->session->getParameter('cart_items');
        if($items == NULL) return false;

        $destination = $this->session->getParameter('destination');
        $this->payment->setSouryouDest($destination['sendpref']);

        $pa = $this->session->getParameter('payment');

        foreach($items as $item) {
            $item_array[] = array($item[0], $item[1], $item[2], $item[3]);

            // ダウンロード商品は会員のみ
            $data = $this->dlitem->getDownloadItem($item[0], $item[1]);
            if ($data!==FALSE && !is_null($data)) {
                return "error";
            }
            //--
        }

        if($item_array != NULL)
        {
            $r = $this->payment->makeItemArrayForDone($item_array,
                                             $this->item_array,
                                             $pa,
                                             0);
        }

        if ($r=="error") return $r;
        // 代引手数料
        $p = $this->session->getParameter('payment');
        if ($p[0]==2) {
            foreach ($this->item_array as $key => $val) { 
                $total = 0; 
                if ($key == 0) { 
                    $total = $this->item_array[$key]["totalprice"]+$this->item_array[$key]["souryouprc"]; 
                    $daibiki_cost = $this->payment->getDaibikiCost($total); 

                    $this->item_array[$key]["daibiki"] = $daibiki_cost; 
                } else if ($key == 1) { 
                    foreach ($this->item_array[$key] as $k => $v) { 
                        $total = $this->item_array[$key][$k]["totalprice"]+$this->item_array[$key][$k]["souryouprc"]; 
                        $daibiki_cost = $this->payment->getDaibikiCost($total); 

                        $this->item_array[$key][$k]["daibiki"] = $daibiki_cost; 
                    } 
                } else if ($key == 2) { 
                    foreach ($this->item_array[$key] as $k => $v) { 
                        foreach ($this->item_array[$key][$k] as $i => $d) { 
                            $total = $this->item_array[$key][$k][$i]["totalprice"]+$this->item_array[$key][$k]["souryouprc"]; 
                            $daibiki_cost = $this->payment->getDaibikiCost($total); 

                            $this->item_array[$key][$k]["daibiki"] = $daibiki_cost; 
                        } 
                   } 
                } 
            } 
        }
        //--
        // 郵便振替手数料
        $p = $this->session->getParameter('payment');
        if ($p[0]==5) {
            if (isset($this->item_array[0])) { 
                $this->item_array[0]["yuubin"] = SITE_YUUBIN; 
            } 
            foreach ($this->item_array[1] as $key => $val) { 
                $this->item_array[1][$key]["yuubin"] = SITE_YUUBIN; 
            } 
            foreach ($this->item_array[2] as $key => $val) { 
                $this->item_array[2][$key]["yuubin"] = SITE_YUUBIN; 
            } 
        }
        //--
        return $r;
    }

    function getCardmessage() { 
        return $this->payment->getCardmessages();
    }
    function getDaibikimessage() { 
        return $this->payment->getDaibikimessages();
    }
    function getBankmessage() { 
        return $this->payment->getBankmessages();
    }
    function getCVSmessage() { 
        return $this->payment->getCVSmessages();
    }
    function getYuubinmessage() { 
        return $this->payment->getYuubinmessages();
    }
    function getDl() { 
        return ;
    }
    function getTrackerdata() { 
        return $this->payment->getTrackerdata(); 
    } 

    function getMi() { 
        return $this->payment->getMi($this->sum_quantity);
    }

    function getMiSig() {
        return $this->payment->getMiSig();
    }
}
?>
