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


/* 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_Check
{
    var $title;
    var $pagename;
//paymentかdestinationからきたかを識別する変数
    var $from;

//payment　支払方法を識別する変数　１はカード　２は代金引換　３は振込み
    var $payment_radio;
//カード名　カード番号　カードの名義　カードの有効期限の年と月
    var $card_company;
    var $card_number;
    var $card_name;
    var $exp_year;
    var $exp_month;
    var $dt;
    var $MI_SIG;
    var $price;
//コンビニ決済用
    var $cvs_shop;
    var $cvs_name1;
    var $cvs_name2;
    var $cvs_kana1;
    var $cvs_kana2;
    var $cvs_tel;
    var $CVS_SIG;

    var $actionChain;
    var $session;
    var $auth;

    var $c_pref;

    var $c_systeminfo;
    var $dlitem;
    var $c_cart;
    var $item_array;
    var $takkyubin_chk;
    var $pricedata;
    var $payment;
    var $sellerflg;
    var $totalprice;

    var $deposit;

    var $fix;
    var $from2;
    var $back;
    var $paymentflg;

    var $sum_quantity;

    var $sendmailaddr_user;
    var $sendmailaddr_domain;
    var $buyername;
    var $sendpost;
    var $sendpref;
    var $sendaddr1;
    var $sendaddr2;
    var $sendtelno1;
    var $addressee;

    var $buynote;

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

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

        $res = false;

        $errorList =& $this->actionChain->getCurErrorList();

        if (strlen($this->sendmailaddr_user) == 0) {
            $errorList->add(1, "メールアドレス（前）を入力してください。");
            return $re_str ."input";
        }
        if (strlen($this->sendmailaddr_domain) == 0) {
            $errorList->add(1, "メールアドレス（後）を入力してください。");
            return $re_str ."input";
        }
        if (!preg_match("/^[0-9a-z.\-_]+$/", $this->sendmailaddr_user)) {
            $errorList->add(1, "メールアドレス（前）は半角英数字にしてください。");
            return $re_str ."input";
        }
        if (!preg_match("/^[0-9a-z.\-_]+$/", $this->sendmailaddr_domain)) {
            $errorList->add(1, "メールアドレス（後）は半角英数字にしてください。");
            return $re_str ."input";
        }
        if (strlen($this->buyername) == 0) {
            $errorList->add(1, "氏名を入力してください。");
            return $re_str ."input";
        }
        foreach ($this->sendpost as $val) {
            if (strlen($val) == 0) {
                $errorList->add(1, "郵便番号を入力してください");
                return $re_str ."input";
            }
        }
        foreach ($this->sendpost as $val) {
            if (!is_numeric($val) && $val != "") {
                $errorList->add(1, "郵便番号は半角数字にしてください");
                return $re_str ."input";
            }
        }
        if (strlen($this->sendpref) == 0) {
            $errorList->add(1, "都道府県を入力してください。");
            return $re_str ."input";
        }
        if (!is_numeric($this->sendpref)) {
            $errorList->add(1, "都道府県は半角数字にしてください");
            return $re_str ."input";
        }
        if (strlen($this->sendaddr1) == 0) {
            $errorList->add(1, "住所１を入力してください。");
            return $re_str ."input";
        }
        foreach ($this->sendtelno1 as $val) {
            if (strlen($val) == 0) {
                $errorList->add(1, "電話番号を入力してください");
                return $re_str ."input";
            }
        }
        foreach ($this->sendtelno1 as $val) {
            if (!is_numeric($val) && $val != "") {
                $errorList->add(1, "電話番号は半角数字にしてください");
                return $re_str ."input";
            }
        }
        if ($errorList->isExists()) {
            return $re_str ."input";
        }


        if ($this->payment_radio == 1 && !$this->payment->checkSignature($this->price)){
            $errorList -> add(1, "エラーが発生しました。正しい情報を入力してください。");
            return $re_str ."input";
        }
        if ($this->payment_radio == 4 && !$this->payment->checkCVSSig()){
            $errorList->add(1, "エラーが発生しました。正しい情報を入力してください。");
            return $re_str ."input";
        }
        $r = $this->makeItemarray();
        if ($r=="error") return $r;

        $res = $this->check_params();

        // 備考の初期値を取得
        $data = $this->c_systeminfo->selectAll();
        $this->buynote = $data[0]["buynote"];
        //--

        if($res) return $re_str .'success';
        else     return $re_str .'input';
    }

    function makeItemarray() {
        $log =& LogFactory::getLog();

        $this->payment->setSouryouDest($this->sendpref);

        $this->sellerflg = false;
        $this->totalprice = 0;

        $items = $this->session->getParameter('cart_items');

        if($items == NULL) return "error";


        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->makeItemArrayForCheck($item_array,
                                                       $this->item_array,
                                                       $this->pricedata,
                                                       $this->totalprice,
                                                       $this->paymentflg,
                                                       $this->sellerflg, 
                                                       0);

        }
        // 代引手数料
        if ($this->payment_radio==2) {
            foreach ($this->pricedata as $key => $val) { 
                if ($this->paymentflg) break; 
                if ($key == 0) { 
                    $daibiki_cost = $this->payment->getDaibikiCost($this->pricedata[$key]["totalprice"]); 

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

                        $this->pricedata[$key][$k]["daibiki"] = $daibiki_cost; 
                        $this->pricedata[$key][$k]["totalprice"] += $daibiki_cost; 
                        $this->totalprice += $daibiki_cost; 
                    } 
                } 
            } 
        }
        // 郵便振替手数料
        if ($this->payment_radio==5) {
            foreach ($this->pricedata as $key => $val) { 
                if ($this->paymentflg) break; 
                if ($key == 0) { 
                    $this->pricedata[$key]["yuubin"] = SITE_YUUBIN; 
                    $this->pricedata[$key]["totalprice"] += SITE_YUUBIN; 
                    $this->totalprice += SITE_YUUBIN; 
                } else { 
                    foreach ($this->pricedata[$key] as $k => $v) { 
                        $this->pricedata[$key][$k]["yuubin"] = SITE_YUUBIN; 
                        $this->pricedata[$key][$k]["totalprice"] += SITE_YUUBIN; 
                        $this->totalprice += SITE_YUUBIN; 
                    } 
                } 
            } 
        }

        return $r;
    }

    function getCart_items()
    {
        return $this->item_array;
    }

    function getPaymentarray()
    {
        $this->set_payment();
        return $this->session->getParameter('payment');
    }

//支払方法の入力値をSESSIONに保存する関数
    function set_payment()
    {
        $payment_array = array();
        if(isset($this->payment_radio))
        {
            $payment_array[0] = $this->payment_radio;
            $payment_array[6] = $this->dt;
            $payment_array[7] = $this->MI_SIG;
            $payment_array[8] = $this->price;
            if($this->payment_radio == 1)
            {
                $payment_array[1] = $this->card_company;
                $payment_array[2] = $this->card_number;
                $payment_array[3] = $this->card_name;
                $payment_array[4] = $this->exp_year;
                $payment_array[5] = $this->exp_month;
            }
            if($this->payment_radio == 4) // コンビニ
            {
                $payment_array[9]  = $this->cvs_shop;
                $payment_array[10] = mb_convert_kana($this->cvs_name1, 'KV', 'UTF-8');
                $payment_array[11] = mb_convert_kana($this->cvs_name2, 'KV', 'UTF-8');
                $payment_array[12] = mb_convert_kana($this->cvs_kana1, 'KV', 'UTF-8');
                $payment_array[13] = mb_convert_kana($this->cvs_kana2, 'KV', 'UTF-8');
                $payment_array[14] = $this->cvs_tel;
                $payment_array[15] = $this->CVS_SIG;
            }
        }
        $this->session->setParameter('payment',$payment_array);
    }

//支払方法の入力値に空白がないかどうかを確かめる変数
    function check_params()
    {
        $errorList =& $this->actionChain->getCurErrorList();
        if($this->payment_radio == "1")
        {
            if (PAY_MERCHANT=='veritrans') {

            if(empty($this->card_company)) {
                $errorList->add(1, "カード会社が正しくありません。正しいカード会社を入力してください。");
                return false;
            }
            if(empty($this->card_number) || !is_numeric($this->card_number)) {
                $errorList->add(1, "カード番号が正しくありません。正しいカード番号を入力してください。");
                return false;
            }
            if(empty($this->card_name)) {
                $errorList->add(1, "カード名義が正しくありません。正しいカード名義を入力してください。");
                return false;
            }
            $d1 = mktime(0,0,0,$this->exp_month,1,$this->exp_year);
            $d2 = mktime(0,0,0,date("m"),1,date("Y"));
            if ($d1 < $d2) {
                $errorList->add(1, "カード有効期限が正しくありません。正しい有効期限を入力してください。");
                return false;
            }

            }
            return true;
        }
        elseif($this->payment_radio == "2" || $this->payment_radio == "3" || $this->payment_radio == "5")
        {
            if ($this->paymentflg) return false; 
            return true;
        }
        elseif($this->payment_radio == "4")
        {
            if (USE_CVS===false) return false;
            if ($this->paymentflg) return false;
            if (PAY_MERCHANT=='veritrans') {
                if(!($this->cvs_shop=="01" || $this->cvs_shop=="02" || $this->cvs_shop=="03" || $this->cvs_shop=="04")) {
                    $errorList->add(1, "コンビニ決済「コンビニ店指定」が正しくありません。正しい店舗を指定してください。");
                    return false;
                }
            }
            if(empty($this->cvs_name1)) {
                $errorList->add(1, "コンビニ決済「姓」が正しくありません。正しい姓を入力してください。");
                return false;
            }
            if (!empty($this->cvs_name1)) {
                $this->cvs_name1 = mb_convert_kana($this->cvs_name1, 'KV', 'UTF-8');
                if (mb_strlen($this->cvs_name1, "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「姓」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($this->cvs_name2)) {
                $errorList->add(1, "コンビニ決済「名」が正しくありません。正しい名を入力してください。");
                return false;
            }
            if (!empty($this->cvs_name2)) {
                $this->cvs_name2 = mb_convert_kana($this->cvs_name2, 'KV', 'UTF-8');
                if (mb_strlen($this->cvs_name2, "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「名」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($this->cvs_kana1)) {
                $errorList->add(1, "コンビニ決済「姓(カナ)」が正しくありません。正しい姓名(カナ)を入力してください。");
                return false;
            }
            if (!empty($this->cvs_kana1)) {
                $this->cvs_kana1 = mb_convert_kana($this->cvs_kana1, 'KV', 'UTF-8');

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

                mb_regex_encoding("UTF-8");
                if (!mb_ereg("^[ァ-ヶー]+$", $this->cvs_kana2)) {
                    $errorList->add(1, "コンビニ決済「名(カナ)」が正しくありません。全角カナを入力してください。");
                    return false;
                }
                if (mb_strlen($this->cvs_kana2, "UTF-8") > 10) {
                    $errorList->add(1, "コンビニ決済「名(カナ)」は全角10文字以内で入力してください。");
                    return false;
                }
            }
            if(empty($this->cvs_tel)) {
                $errorList->add(1, "コンビニ決済「電話番号」が正しくありません。正しい電話番号を入力してください。");
                return false;
            }
            if (!empty($this->cvs_tel)) {
                if(!preg_match("/^([0-9\-])+$/", $this->cvs_tel)) {
                    $errorList->add(1, "コンビニ決済「電話番号」が正しくありません。半角数字、ハイフン区切りで入力してください。");
                    return false;
                }
            }
            return true;
        }
        else
        {
            return false;
        }
    }

  
    function getPrefData()
    {
        return $this->c_pref->selectAll();
    }
    
    function getAddress()
    {
        $this->set_destination();
        $destination = $this->session->getParameter('destination');

        if (!empty($destination["sendpref"])) {
            $pref = $this->c_pref->selectKey($destination["sendpref"]);
            $destination["sendprefnm"] = $pref["prefnm"];
        }
        return $destination;
    }

    function set_destination()
    {
        $array = array();
        $array["sendmailaddr_user"]    = $this->sendmailaddr_user;
        $array["sendmailaddr_domain"]    = $this->sendmailaddr_domain;
        $array["buyername"]    = $this->buyername;
        $array["sendpost"]    = $this->sendpost;
        $array["sendpref"] = $this->sendpref;
        $array["sendaddr1"] = $this->sendaddr1;
        $array["sendaddr2"] = $this->sendaddr2;
        $array["sendtelno1"] = $this->sendtelno1;
        $array["addressee"] = $this->addressee;
        $this->session->setParameter('destination',$array);
    }


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

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

    function getCardNumberHide() {
        $payment = $this->session->getParameter('payment');
        $cardnumber = $payment[2];
        $hide = "";
        if (!empty($cardnumber)) {
            $hide .= substr($cardnumber, -4) ."(下4桁のみ表示)";
        }
        return $hide;
    }

    function getBack() {
        $this->back = "nonmember";
        return $this->back;
    }

    function getPrice() {
        return $this->price;
    }

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