Page
[ class tree: Page ] [ index: Page ] [ all elements ]

Source for file LC_Page_Shopping_Complete.php

Documentation is available at LC_Page_Shopping_Complete.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26.  
  27. /**
  28.  * ご注文完了 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id:LC_Page_Shopping_Complete.php 15532 2007-08-31 14:39:46Z nanasess $
  33.  */
  34.  
  35.     // }}}
  36.     // {{{ functions
  37.  
  38.     /**
  39.      * Page を初期化する.
  40.      *
  41.      * @return void 
  42.      */
  43.     function init({
  44.         parent::init();
  45.         $this->tpl_mainpage = 'shopping/complete.tpl';
  46.         $this->tpl_title = "ご注文完了";
  47.         $this->tpl_column_num = 1;
  48.  
  49.         $masterData new SC_DB_MasterData_Ex();
  50.         $this->arrCONVENIENCE $masterData->getMasterData("mtb_convenience");
  51.         $this->arrCONVENIMESSAGE $masterData->getMasterData("mtb_conveni_message");
  52.  
  53.         $this->allowClientCache();
  54.     }
  55.  
  56.     /**
  57.      * Page のプロセス.
  58.      *
  59.      * @return void 
  60.      */
  61.     function process({
  62.         global $objCampaignSess;
  63.  
  64.         $conn new SC_DBConn();
  65.         $objView new SC_SiteView();
  66.         $this->objSiteSess new SC_SiteSession();
  67.         $this->objCartSess new SC_CartSession();
  68.         $this->objCampaignSess new SC_CampaignSession();
  69.         $objSiteInfo $objView->objSiteInfo;
  70.         $this->arrInfo $objSiteInfo->data;
  71.         $this->objCustomer new SC_Customer();
  72.         $mailHelper new SC_Helper_Mail_Ex();
  73.  
  74.         // 前のページで正しく登録手続きが行われたか判定
  75.         SC_Utils_Ex::sfIsPrePage($this->objSiteSess);
  76.         // ユーザユニークIDの取得と購入状態の正当性をチェック
  77.         $uniqid SC_Utils_Ex::sfCheckNormalAccess($this->objSiteSess$this->objCartSess);
  78.         if ($uniqid != ""{
  79.  
  80.             // 完了処理
  81.             $objQuery new SC_Query();
  82.             $objQuery->begin();
  83.             $order_id $this->lfDoComplete($objQuery$uniqid);
  84.             $objQuery->commit();
  85.  
  86.             // セッションに保管されている情報を更新する
  87.             $this->objCustomer->updateSession();
  88.  
  89.             // 完了メール送信
  90.             if($order_id != ""{
  91.                 $mailHelper->sfSendOrderMail($order_id'1');
  92.             }
  93.  
  94.             // その他情報の取得
  95.             $arrResults $objQuery->getAll("SELECT memo02, memo05 FROM dtb_order WHERE order_id = ? "array($order_id));
  96.  
  97.             if (count($arrResults0{
  98.                 if (isset($arrResults[0]["memo02"]|| isset($arrResults[0]["memo05"])) {
  99.                     // 完了画面で表示する決済内容
  100.                     $arrOther unserialize($arrResults[0]["memo02"]);
  101.                     // 完了画面から送信する決済内容
  102.                     $arrModuleParam unserialize($arrResults[0]["memo05"]);
  103.  
  104.                     // データを編集
  105.                     foreach($arrOther as $key => $val){
  106.                         // URLの場合にはリンクつきで表示させる
  107.                         if (preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/'$val["value"])) {
  108.                             $arrOther[$key]["value""<a href='#' onClick=\"window.open('"$val["value""'); \" >" $val["value"."</a>";
  109.                         }
  110.                     }
  111.  
  112.                     $this->arrOther $arrOther;
  113.                     $this->arrModuleParam $arrModuleParam;
  114.                 }
  115.             }
  116.  
  117.             // アフィリエイト用コンバージョンタグの設定
  118.             $this->tpl_conv_page AFF_SHOPPING_COMPLETE;
  119.             $this->tpl_aff_option "order_id=$order_id";
  120.             //合計価格の取得
  121.             $total $objQuery->get("dtb_order""total""order_id = ? "array($order_id));
  122.             if($total != ""{
  123.                 $this->tpl_aff_option.= "|total=$total";
  124.             }
  125.  
  126.             // TradeSafe連携用
  127.             if (function_exists('sfTSRequest')) {
  128.                 sfTSRequest($order_id);
  129.             }
  130.         }
  131.  
  132.         // キャンペーンからの遷移かチェック
  133.         $this->is_campaign $this->objCampaignSess->getIsCampaign();
  134.         $this->campaign_dir $this->objCampaignSess->getCampaignDir();
  135.  
  136.         $objView->assignobj($this);
  137.         // フレームを選択(キャンペーンページから遷移なら変更)
  138.         $this->objCampaignSess->pageView($objView);
  139.  
  140.         // セッション開放
  141.         $this->objCampaignSess->delCampaign();
  142.     }
  143.  
  144.     /**
  145.      * デストラクタ.
  146.      *
  147.      * @return void 
  148.      */
  149.     function destroy({
  150.         parent::destroy();
  151.     }
  152.  
  153.     /**
  154.      * モバイルページを初期化する.
  155.      *
  156.      * @return void 
  157.      */
  158.     function mobileInit({
  159.         $this->init();
  160.     }
  161.  
  162.     /**
  163.      * Page のプロセス(モバイル).
  164.      *
  165.      * @return void 
  166.      */
  167.     function mobileProcess({
  168.         $conn new SC_DBConn();
  169.         $objView new SC_MobileView();
  170.         $this->objSiteSess new SC_SiteSession();
  171.         $this->objCartSess new SC_CartSession();
  172.         $objSiteInfo $objView->objSiteInfo;
  173.         $this->arrInfo $objSiteInfo->data;
  174.         $this->objCustomer new SC_Customer();
  175.         $mailHelper new SC_Helper_Mail_Ex();
  176.  
  177.         // 前のページで正しく登録手続きが行われたか判定
  178.         SC_Utils_Ex::sfIsPrePage($this->objSiteSesstrue);
  179.         // ユーザユニークIDの取得と購入状態の正当性をチェック
  180.         $uniqid SC_Utils_Ex::sfCheckNormalAccess($this->objSiteSess$this->objCartSess);
  181.         if ($uniqid != ""{
  182.  
  183.             // 完了処理
  184.             $objQuery new SC_Query();
  185.             $objQuery->begin();
  186.             $order_id $this->lfDoComplete($objQuery$uniqid);
  187.             $objQuery->commit();
  188.  
  189.             // セッションに保管されている情報を更新する
  190.             $this->objCustomer->updateSession();
  191.  
  192.             // 完了メール送信
  193.             if($order_id != ""{
  194.                 $mailHelper->sfSendOrderMail($order_id'2');
  195.             }
  196.  
  197.             //その他情報の取得
  198.             $other_data $objQuery->get("dtb_order""memo02""order_id = ? "array($order_id));
  199.             if($other_data != ""{
  200.                 $arrOther unserialize($other_data);
  201.  
  202.                 // データを編集
  203.                 foreach($arrOther as $key => $val){
  204.                     // URLの場合にはリンクつきで表示させる
  205.                     if (preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/'$val["value"])) {
  206.                         $arrOther[$key]["value""<a href='"$val["value"]"'>"$val["value"]"</a>";
  207.                     }
  208.                 }
  209.  
  210.                 $this->arrOther $arrOther;
  211.  
  212.             }
  213.  
  214.             // アフィリエイト用コンバージョンタグの設定
  215.             $this->tpl_conv_page AFF_SHOPPING_COMPLETE;
  216.             $this->tpl_aff_option "order_id=$order_id";
  217.             //合計価格の取得
  218.             $total $objQuery->get("dtb_order""total""order_id = ? "array($order_id));
  219.             if($total != ""{
  220.                 $this->tpl_aff_option.= "|total=$total";
  221.             }
  222.  
  223.             // TS連携モジュールの実行
  224.             if (function_exists('sfTSRequest')) {
  225.                 sfTSRequest($order_id);
  226.             }
  227.         }
  228.  
  229.         $objView->assignobj($this);
  230.         $objView->display(SITE_FRAME);
  231.     }
  232.  
  233.  
  234.     // エビスタグ引渡し用データを生成する
  235.     function lfGetEbisData($order_id{
  236.         $objQuery new SC_Query();
  237.         $col "customer_id, total, order_sex, order_job, to_number(to_char(age(current_timestamp, order_birth), 'YYY'), 999) AS order_age";
  238.         $arrRet $objQuery->select($col"dtb_order""order_id = ?"array($order_id));
  239.  
  240.         if($arrRet[0]['customer_id'0{
  241.             // 会員番号
  242.             $arrEbis['m1id'$arrRet[0]['customer_id'];
  243.             // 非会員or会員
  244.             $arrEbis['o5id''1';
  245.         else {
  246.             // 会員番号
  247.             $arrEbis['m1id''';
  248.             // 非会員or会員
  249.             $arrEbis['o5id''2';
  250.         }
  251.  
  252.         // 購入金額
  253.         $arrEbis['a1id'$arrRet[0]['total'];
  254.         // 性別
  255.         $arrEbis['o2id'$arrRet[0]['order_sex'];
  256.         // 年齢
  257.         $arrEbis['o3id'$arrRet[0]['order_age'];
  258.         // 職業
  259.         $arrEbis['o4id'$arrRet[0]['order_job'];
  260.  
  261.         $objQuery->setGroupBy("product_id");
  262.         $arrRet $objQuery->select("product_id""dtb_order_detail""order_id = ?"array($order_id));
  263.         $arrProducts sfSwapArray($arrRet);
  264.  
  265.         $line "";
  266.         // 商品IDをアンダーバーで接続する。
  267.         foreach($arrProducts['product_id'as $val{
  268.             if($line != ""{
  269.                 $line .= "_$val";
  270.             else {
  271.                 $line .= "$val";
  272.             }
  273.         }
  274.  
  275.         // 商品ID
  276.         $arrEbis['o1id'$line;
  277.  
  278.         return $arrEbis;
  279.     }
  280.  
  281.     /**
  282.      * 購入完了処理
  283.      *
  284.      * @param object $objQuery 
  285.      * @param string $uniqid 
  286.      * @return string $order_id
  287.      */
  288.     function lfDoComplete(&$objQuery$uniqid{
  289.         $objDb new SC_Helper_DB_Ex();
  290.  
  291.         // 一時受注テーブルの読込
  292.         $arrData $objDb->sfGetOrderTemp($uniqid);
  293.  
  294.         // 会員情報登録処理
  295.         if ($this->objCustomer->isLoginSuccess(true)) {
  296.             // 新お届け先の登録
  297.             $this->lfSetNewAddr($uniqid$this->objCustomer->getValue('customer_id'));
  298.             // 購入集計を顧客テーブルに反映
  299.             $this->lfSetCustomerPurchase($this->objCustomer->getValue('customer_id')$arrData$objQuery);
  300.         else {
  301.             //購入時強制会員登録
  302.             switch(PURCHASE_CUSTOMER_REGIST{
  303.             //無効
  304.             case '0':
  305.                 // 購入時会員登録
  306.                 if(isset($arrData['member_check']&& $arrData['member_check'== '1'{
  307.                     // 会員登録
  308.                     $customer_id $this->lfRegistCustomer($arrData$this->arrInfo);
  309.                     // 購入集計を顧客テーブルに反映
  310.                     $this->lfSetCustomerPurchase($customer_id$arrData$objQuery);
  311.                 }
  312.                 break;
  313.             //有効
  314.             case '1':
  315.                 // 会員登録
  316.                 $customer_id $this->lfRegistCustomer($arrData$this->arrInfo);
  317.                 // 購入集計を顧客テーブルに反映
  318.                 $this->lfSetCustomerPurchase($customer_id$arrData$objQuery);
  319.                 break;
  320.             }
  321.  
  322.         }
  323.         // 一時テーブルを受注テーブルに格納する
  324.         if (defined("MOBILE_SITE")) {
  325.             $order_id $this->lfRegistOrder($objQuery$arrData);
  326.         else {
  327.             $order_id $this->lfRegistOrder($objQuery$arrData$this->objCampaignSess);
  328.         }
  329.         // カート商品を受注詳細テーブルに格納する
  330.         $this->lfRegistOrderDetail($objQuery$order_id$this->objCartSess);
  331.         // 受注一時テーブルの情報を削除する。
  332.         $this->lfDeleteTempOrder($objQuery$uniqid);
  333.         // キャンペーンからの遷移の場合登録する。
  334.         if (!defined("MOBILE_SITE")) {
  335.             if($this->objCampaignSess->getIsCampaign(and $this->objCartSess->chkCampaign($this->objCampaignSess->getCampaignId())) {
  336.                 $this->lfRegistCampaignOrder($objQuery$objCampaignSess$order_id);
  337.             }
  338.         }
  339.  
  340.         // セッションカート内の商品を削除する。
  341.         $this->objCartSess->delAllProducts();
  342.         // 注文一時IDを解除する。
  343.         $this->objSiteSess->unsetUniqId();
  344.  
  345.         return $order_id;
  346.     }
  347.  
  348.     // 会員登録
  349.     function lfRegistCustomer($arrData$arrInfo{
  350.         $objQuery new SC_Query();
  351.  
  352.         //会員登録時に仮会員確認用のメールを送付するか
  353.         $confirm_flg CUSTOMER_CONFIRM_MAIL;
  354.  
  355.         // 購入時の会員登録
  356.         $sqlval['name01'$arrData['order_name01'];
  357.         $sqlval['name02'$arrData['order_name02'];
  358.         $sqlval['kana01'$arrData['order_kana01'];
  359.         $sqlval['kana02'$arrData['order_kana02'];
  360.         $sqlval['zip01'$arrData['order_zip01'];
  361.         $sqlval['zip02'$arrData['order_zip02'];
  362.         $sqlval['pref'$arrData['order_pref'];
  363.         $sqlval['addr01'$arrData['order_addr01'];
  364.         $sqlval['addr02'$arrData['order_addr02'];
  365.         $sqlval['email'$arrData['order_email'];
  366.         $sqlval['tel01'$arrData['order_tel01'];
  367.         $sqlval['tel02'$arrData['order_tel02'];
  368.         $sqlval['tel03'$arrData['order_tel03'];
  369.         $sqlval['fax01'$arrData['order_fax01'];
  370.         $sqlval['fax02'$arrData['order_fax02'];
  371.         $sqlval['fax03'$arrData['order_fax03'];
  372.         $sqlval['sex'$arrData['order_sex'];
  373.         $sqlval['password'$arrData['password'];
  374.         $sqlval['reminder'$arrData['reminder'];
  375.         $sqlval['reminder_answer'$arrData['reminder_answer'];
  376.  
  377.         // 仮会員登録の場合
  378.         if($confirm_flg == true{
  379.             // 重複しない会員登録キーを発行する。
  380.             $count 1;
  381.             while ($count != 0{
  382.                 $uniqid SC_Utils_Ex::sfGetUniqRandomId("t");
  383.                 $count $objQuery->count("dtb_customer""secret_key = ?"array($uniqid));
  384.             }
  385.             $sqlval["status""1";    // 仮会員
  386.         //本会員登録
  387.         else {
  388.             // 重複しない会員登録キーを発行する。
  389.             $count 1;
  390.             while ($count != 0{
  391.                 $uniqid SC_Utils_Ex::sfGetUniqRandomId("r");
  392.                 $count $objQuery->count("dtb_customer""secret_key = ?"array($uniqid));
  393.             }
  394.             $sqlval["status""2";    // 本会員
  395.         }
  396.  
  397.         // メルマガフラグ
  398.         switch($arrData["mailmaga_flg"]{
  399.             case 1:
  400.                 $mail_flag 4;
  401.                 break;
  402.             case 2:
  403.                 $mail_flag 5;
  404.                 break;
  405.             default:
  406.                 $mail_flag 6;
  407.                 break;
  408.         }
  409.         $sqlval['mailmaga_flg'$mail_flag;
  410.  
  411.         // URL判定用キー
  412.         $sqlval['secret_key'SC_Utils_Ex::sfGetUniqRandomId("t");
  413.  
  414.         $sqlval['create_date'"now()";
  415.         $sqlval['update_date'"now()";
  416.         $objQuery->insert("dtb_customer"$sqlval);
  417.  
  418.         // 顧客IDの取得
  419.         $arrRet $objQuery->select("customer_id""dtb_customer""secret_key = ?"array($sqlval['secret_key']));
  420.         $customer_id $arrRet[0]['customer_id'];
  421.  
  422.         // 登録完了メール送信
  423.         $objMailPage $this;
  424.         $objMailPage->name01 $arrData['order_name01'];
  425.         $objMailPage->name02 $arrData['order_name02'];
  426.         $objMailPage->CONF $arrInfo;
  427.         $objMailPage->uniqid $sqlval['secret_key'];
  428.         $objMailView new SC_SiteView();
  429.         $objMailView->assignobj($objMailPage);
  430.         $body $objMailView->fetch("mail_templates/customer_mail.tpl");
  431.  
  432.         $mailHelper new SC_Helper_Mail_Ex();
  433.  
  434.         //仮会員メール
  435.         if($confirm_flg == true{
  436.             $subject $mailHelper->sfMakeSubject($objQuery,$objMailView,$objMailPage,"会員登録のご確認");
  437.             $body $objMailView->fetch("mail_templates/customer_mail.tpl");
  438.         //本会員メール
  439.         }else{
  440.             $subject $mailHelper->sfMakeSubject($objQuery,$objMailView,$objMailPage,'会員登録のご完了');
  441.             $body $objMailView->fetch("mail_templates/customer_regist_mail.tpl");
  442.             // ログイン状態にする
  443.             $this->objCustomer->setLogin($arrData['order_email']);
  444.         }
  445.  
  446.         $objMail new SC_SendMail();
  447.         $objMail->setItem(
  448.                             ''                                        // 宛先
  449.                             $subject                                // サブジェクト
  450.                             $body                                    // 本文
  451.                             $arrInfo['email03']                    // 配送元アドレス
  452.                             $arrInfo['shop_name']                    // 配送元 名前
  453.                             $arrInfo["email03"]                    // reply_to
  454.                             $arrInfo["email04"]                    // return_path
  455.                             $arrInfo["email04"]                    //  Errors_to
  456.                             $arrInfo["email01"]                    //  Bcc
  457.                                                             );
  458.         // 宛先の設定
  459.         $name $arrData['order_name01'$arrData['order_name02'." 様";
  460.         $objMail->setTo($arrData['order_email']$name);
  461.         $objMail->sendMail();
  462.  
  463.         return $customer_id;
  464.     }
  465.  
  466.     // 受注テーブルへ登録
  467.     function lfRegistOrder($objQuery$arrData$objCampaignSess null{
  468.         $sqlval $arrData;
  469.  
  470.         // 受注テーブルに書き込まない列を除去
  471.         unset($sqlval['mailmaga_flg']);        // メルマガチェック
  472.         unset($sqlval['deliv_check']);        // 別のお届け先チェック
  473.         unset($sqlval['point_check']);        // ポイント利用チェック
  474.         unset($sqlval['member_check']);        // 購入時会員チェック
  475.         unset($sqlval['password']);            // ログインパスワード
  476.         unset($sqlval['reminder']);            // リマインダー質問
  477.         unset($sqlval['reminder_answer']);    // リマインダー答え
  478.         unset($sqlval['mail_flag']);        // メールフラグ
  479.         unset($sqlval['session']);            // セッション情報
  480.  
  481.         // 注文ステータス:指定が無ければ新規受付に設定
  482.         if($sqlval["status"== ""){
  483.             $sqlval['status''1';
  484.         }
  485.  
  486.         // 別のお届け先を指定していない場合、お届け先に登録住所をコピーする。
  487.         if($arrData["deliv_check"== "-1"{
  488.             $sqlval['deliv_name01'$arrData['order_name01'];
  489.             $sqlval['deliv_name02'$arrData['order_name02'];
  490.             $sqlval['deliv_kana01'$arrData['order_kana01'];
  491.             $sqlval['deliv_kana02'$arrData['order_kana02'];
  492.             $sqlval['deliv_pref'$arrData['order_pref'];
  493.             $sqlval['deliv_zip01'$arrData['order_zip01'];
  494.             $sqlval['deliv_zip02'$arrData['order_zip02'];
  495.             $sqlval['deliv_addr01'$arrData['order_addr01'];
  496.             $sqlval['deliv_addr02'$arrData['order_addr02'];
  497.             $sqlval['deliv_tel01'$arrData['order_tel01'];
  498.             $sqlval['deliv_tel02'$arrData['order_tel02'];
  499.             $sqlval['deliv_tel03'$arrData['order_tel03'];
  500.         }
  501.  
  502.         $order_id $arrData['order_id'];        // 注文番号
  503.         $sqlval['create_date''now()';        // 受注日
  504.  
  505.         // キャンペーンID
  506.         if (!defined("MOBILE_SITE")) {
  507.             if($objCampaignSess->getIsCampaign()) $sqlval['campaign_id'$objCampaignSess->getCampaignId();
  508.         }
  509.  
  510.         // ゲットの値をインサート
  511.         //$sqlval = lfGetInsParam($sqlval);
  512.  
  513.         // INSERTの実行
  514.         $objQuery->insert("dtb_order"$sqlval);
  515.  
  516.         return $order_id;
  517.     }
  518.  
  519.     // 受注詳細テーブルへ登録
  520.     function lfRegistOrderDetail(&$objQuery$order_id&$objCartSess{
  521.         $objDb new SC_Helper_DB_Ex();
  522.         // カート内情報の取得
  523.         $arrCart $objCartSess->getCartList();
  524.         $max count($arrCart);
  525.  
  526.         // 既に存在する詳細レコードを消しておく。
  527.         $objQuery->delete("dtb_order_detail""order_id = $order_id");
  528.  
  529.         // 規格名一覧
  530.         $arrClassName $objDb->sfGetIDValueList("dtb_class""class_id""name");
  531.         // 規格分類名一覧
  532.         $arrClassCatName $objDb->sfGetIDValueList("dtb_classcategory""classcategory_id""name");
  533.  
  534.         for ($i 0$i $max$i++{
  535.             // 商品規格情報の取得
  536.             $arrData $objDb->sfGetProductsClass($arrCart[$i]['id']);
  537.  
  538.             // 存在する商品のみ表示する。
  539.             if($arrData != ""{
  540.                 $sqlval['order_id'$order_id;
  541.                 $sqlval['product_id'$arrCart[$i]['id'][0];
  542.                 $sqlval['classcategory_id1'$arrCart[$i]['id'][1];
  543.                 $sqlval['classcategory_id2'$arrCart[$i]['id'][2];
  544.                 $sqlval['product_name'$arrData['name'];
  545.                 $sqlval['product_code'$arrData['product_code'];
  546.                 $sqlval['classcategory_name1'$arrClassCatName[$arrData['classcategory_id1']];
  547.                 $sqlval['classcategory_name2'$arrClassCatName[$arrData['classcategory_id2']];
  548.                 $sqlval['point_rate'$arrCart[$i]['point_rate'];
  549.                 $sqlval['price'$arrCart[$i]['price'];
  550.                 $sqlval['quantity'$arrCart[$i]['quantity'];
  551.                 $this->lfReduceStock($objQuery$arrCart[$i]['id']$arrCart[$i]['quantity']);
  552.                 // INSERTの実行
  553.                 $objQuery->insert("dtb_order_detail"$sqlval);
  554.             else {
  555.                 if (defined("MOBILE_SITE")) {
  556.                     SC_Utils_Ex::sfDispSiteError(CART_NOT_FOUND""false""true);
  557.                 else {
  558.                     SC_Utils_Ex::sfDispSiteError(CART_NOT_FOUND);
  559.                 }
  560.             }
  561.         }
  562.     }
  563.  
  564.     // キャンペーン受注テーブルへ登録
  565.     function lfRegistCampaignOrder(&$objQuery&$objCampaignSess$order_id{
  566.  
  567.         // 受注データを取得
  568.         $cols "order_id, campaign_id, customer_id, message, order_name01, order_name02,".
  569.                 "order_kana01, order_kana02, order_email, order_tel01, order_tel02, order_tel03,".
  570.                 "order_fax01, order_fax02, order_fax03, order_zip01, order_zip02, order_pref, order_addr01,".
  571.                 "order_addr02, order_sex, order_birth, order_job, deliv_name01, deliv_name02, deliv_kana01,".
  572.                 "deliv_kana02, deliv_tel01, deliv_tel02, deliv_tel03, deliv_fax01, deliv_fax02, deliv_fax03,".
  573.                 "deliv_zip01, deliv_zip02, deliv_pref, deliv_addr01, deliv_addr02, payment_total";
  574.  
  575.         $arrOrder $objQuery->select($cols"dtb_order""order_id = ?"array($order_id));
  576.  
  577.         $sqlval $arrOrder[0];
  578.         $sqlval['create_date''now()';
  579.  
  580.         // INSERTの実行
  581.         $objQuery->insert("dtb_campaign_order"$sqlval);
  582.  
  583.         // 申し込み数の更新
  584.         $total_count $objQuery->get("dtb_campaign""total_count""campaign_id = ?"array($sqlval['campaign_id']));
  585.         $arrCampaign['total_count'$total_count += 1;
  586.         $objQuery->update("dtb_campaign"$arrCampaign"campaign_id = ?"array($sqlval['campaign_id']));
  587.  
  588.     }
  589.  
  590.  
  591.  
  592.     /* 受注一時テーブルの削除 */
  593.     function lfDeleteTempOrder(&$objQuery$uniqid{
  594.         $where "order_temp_id = ?";
  595.         $sqlval['del_flg'1;
  596.         $objQuery->update("dtb_order_temp"$sqlval$wherearray($uniqid));
  597.         // $objQuery->delete("dtb_order_temp", $where, array($uniqid));
  598.     }
  599.  
  600.     // 受注一時テーブルの住所が登録済みテーブルと異なる場合は、別のお届け先に追加する
  601.     function lfSetNewAddr($uniqid$customer_id{
  602.         $objQuery new SC_Query();
  603.         $diff false;
  604.         $find_same false;
  605.  
  606.         $col "deliv_name01,deliv_name02,deliv_kana01,deliv_kana02,deliv_tel01,deliv_tel02,deliv_tel03,deliv_zip01,deliv_zip02,deliv_pref,deliv_addr01,deliv_addr02";
  607.         $where "order_temp_id = ?";
  608.         $arrRet $objQuery->select($col"dtb_order_temp"$wherearray($uniqid));
  609.  
  610.         // 要素名のdeliv_を削除する。
  611.         foreach($arrRet[0as $key => $val{
  612.             $keyname ereg_replace("^deliv_"""$key);
  613.             $arrNew[$keyname$val;
  614.         }
  615.  
  616.         // 会員情報テーブルとの比較
  617.         $col "name01,name02,kana01,kana02,tel01,tel02,tel03,zip01,zip02,pref,addr01,addr02";
  618.         $where "customer_id = ?";
  619.         $arrCustomerAddr $objQuery->select($col"dtb_customer"$wherearray($customer_id));
  620.  
  621.         // 会員情報の住所と異なる場合
  622.         if($arrNew != $arrCustomerAddr[0]{
  623.             // 別のお届け先テーブルの住所と比較する
  624.             $col "name01,name02,kana01,kana02,tel01,tel02,tel03,zip01,zip02,pref,addr01,addr02";
  625.             $where "customer_id = ?";
  626.             $arrOtherAddr $objQuery->select($col"dtb_other_deliv"$wherearray($customer_id));
  627.  
  628.             foreach($arrOtherAddr as $arrval{
  629.                 if($arrNew == $arrval{
  630.                     // すでに同じ住所が登録されている
  631.                     $find_same true;
  632.                 }
  633.             }
  634.  
  635.             if(!$find_same{
  636.                 $diff true;
  637.             }
  638.         }
  639.  
  640.         // 新しいお届け先が登録済みのものと異なる場合は別のお届け先テーブルに登録する
  641.         if($diff{
  642.             $sqlval $arrNew;
  643.             $sqlval['customer_id'$customer_id;
  644.             $objQuery->insert("dtb_other_deliv"$sqlval);
  645.         }
  646.     }
  647.  
  648.     /* 購入情報を会員テーブルに登録する */
  649.     function lfSetCustomerPurchase($customer_id$arrData&$objQuery{
  650.         $col "first_buy_date, last_buy_date, buy_times, buy_total, point";
  651.         $where "customer_id = ?";
  652.         $arrRet $objQuery->select($col"dtb_customer"$wherearray($customer_id));
  653.         $sqlval $arrRet[0];
  654.  
  655.         if($sqlval['first_buy_date'== ""{
  656.             $sqlval['first_buy_date'"Now()";
  657.         }
  658.         $sqlval['last_buy_date'"Now()";
  659.         $sqlval['buy_times']++;
  660.         $sqlval['buy_total']+= $arrData['total'];
  661.         if (USE_POINT === false{
  662.             $sqlval['point'$sqlval['point'];
  663.         else {
  664.             //$sqlval['point'] = ($sqlval['point'] - $arrData['use_point']);
  665.             $sqlval['point'($sqlval['point'$arrData['add_point'$arrData['use_point']);
  666.         }
  667.  
  668.         // ポイントが不足している場合
  669.         if($sqlval['point'0{
  670.             $objQuery->rollback();
  671.             SC_Utils_Ex::sfDispSiteError(LACK_POINT);
  672.         }
  673.  
  674.         $objQuery->update("dtb_customer"$sqlval$wherearray($customer_id));
  675.     }
  676.  
  677.     // 在庫を減らす処理
  678.     function lfReduceStock(&$objQuery$arrID$quantity{
  679.         $where "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?";
  680.         $arrRet $objQuery->select("stock, stock_unlimited""dtb_products_class"$where$arrID);
  681.  
  682.         // 売り切れエラー
  683.         if(($arrRet[0]['stock_unlimited'!= '1' && $arrRet[0]['stock'$quantity|| $quantity == 0{
  684.             $objQuery->rollback();
  685.             SC_Utils_Ex::sfDispSiteError(SOLD_OUT""true);
  686.         // 無制限の場合、在庫はNULL
  687.         elseif($arrRet[0]['stock_unlimited'== '1'{
  688.             $sqlval['stock'null;
  689.             $objQuery->update("dtb_products_class"$sqlval$where$arrID);
  690.         // 在庫を減らす
  691.         else {
  692.             $sqlval['stock'($arrRet[0]['stock'$quantity);
  693.             if($sqlval['stock'== ""{
  694.                 $sqlval['stock''0';
  695.             }
  696.             $objQuery->update("dtb_products_class"$sqlval$where$arrID);
  697.         }
  698.     }
  699.  
  700.     // GETの値をインサート用に整える
  701.     function lfGetInsParam($sqlVal){
  702.         $objDb new SC_Helper_DB_Ex();
  703.         foreach($_GET as $key => $val){
  704.             // カラムの存在チェック
  705.             if($objDb->sfColumnExists("dtb_order"$key)) $sqlVal[$key$val;
  706.         }
  707.  
  708.         return $sqlVal;
  709.     }
  710. }
  711. ?>

Documentation generated on Fri, 24 Feb 2012 13:59:49 +0900 by Seasoft