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-2007 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($arrResults) > 0) {
  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='". $val["value"] . "' target=\"_blank\">" . $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->objSiteSess, true);
  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->lfRegistPreCustomer($arrData, $this->arrInfo);
  309.                     // 購入集計を顧客テーブルに反映
  310.                     $this->lfSetCustomerPurchase($customer_id, $arrData, $objQuery);
  311.                 }
  312.                 break;
  313.             //有効
  314.             case '1':
  315.                 // 仮会員登録
  316.                 $customer_id = $this->lfRegistPreCustomer($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 lfRegistPreCustomer($arrData, $arrInfo) {
  350.         // 購入時の会員登録
  351.         $sqlval['name01'] = $arrData['order_name01'];
  352.         $sqlval['name02'] = $arrData['order_name02'];
  353.         $sqlval['kana01'] = $arrData['order_kana01'];
  354.         $sqlval['kana02'] = $arrData['order_kana02'];
  355.         $sqlval['zip01'] = $arrData['order_zip01'];
  356.         $sqlval['zip02'] = $arrData['order_zip02'];
  357.         $sqlval['pref'] = $arrData['order_pref'];
  358.         $sqlval['addr01'] = $arrData['order_addr01'];
  359.         $sqlval['addr02'] = $arrData['order_addr02'];
  360.         $sqlval['email'] = $arrData['order_email'];
  361.         $sqlval['tel01'] = $arrData['order_tel01'];
  362.         $sqlval['tel02'] = $arrData['order_tel02'];
  363.         $sqlval['tel03'] = $arrData['order_tel03'];
  364.         $sqlval['fax01'] = $arrData['order_fax01'];
  365.         $sqlval['fax02'] = $arrData['order_fax02'];
  366.         $sqlval['fax03'] = $arrData['order_fax03'];
  367.         $sqlval['sex'] = $arrData['order_sex'];
  368.         $sqlval['password'] = $arrData['password'];
  369.         $sqlval['reminder'] = $arrData['reminder'];
  370.         $sqlval['reminder_answer'] = $arrData['reminder_answer'];
  371.  
  372.         // メルマガ配信用フラグの判定
  373.         switch($arrData['mail_flag']) {
  374.         case '1':    // HTMLメール
  375.             $mail_flag = 4;
  376.             break;
  377.         case '2':    // TEXTメール
  378.             $mail_flag = 5;
  379.             break;
  380.         case '3':    // 希望なし
  381.             $mail_flag = 6;
  382.             break;
  383.         default:
  384.             $mail_flag = 6;
  385.             break;
  386.         }
  387.         // メルマガフラグ
  388.         $sqlval['mailmaga_flg'] = $mail_flag;
  389.  
  390.         // 会員仮登録
  391.         $sqlval['status'] = 1;
  392.         // URL判定用キー
  393.         $sqlval['secret_key'] = SC_Utils_Ex::sfGetUniqRandomId("t");
  394.  
  395.         $objQuery = new SC_Query();
  396.         $sqlval['create_date'] = "now()";
  397.         $sqlval['update_date'] = "now()";
  398.         $objQuery->insert("dtb_customer", $sqlval);
  399.  
  400.         // 顧客IDの取得
  401.         $arrRet = $objQuery->select("customer_id", "dtb_customer", "secret_key = ?", array($sqlval['secret_key']));
  402.         $customer_id = $arrRet[0]['customer_id'];
  403.  
  404.         // 仮登録完了メール送信
  405.         $objMailPage = $this;
  406.         $objMailPage->to_name01 = $arrData['order_name01'];
  407.         $objMailPage->to_name02 = $arrData['order_name02'];
  408.         $objMailPage->CONF = $arrInfo;
  409.         $objMailPage->uniqid = $sqlval['secret_key'];
  410.         $objMailView = new SC_SiteView();
  411.         $objMailView->assignobj($objMailPage);
  412.         $body = $objMailView->fetch("mail_templates/customer_mail.tpl");
  413.  
  414.         $mailHelper = new SC_Helper_Mail_Ex();
  415.  
  416.         $objMail = new SC_SendMail();
  417.         $objMail->setItem(
  418.                             ''                                        // 宛先
  419.                             , $mailHelper->sfMakeSubject("会員登録のご確認")        // サブジェクト
  420.                             , $body                                    // 本文
  421.                             , $arrInfo['email03']                    // 配送元アドレス
  422.                             , $arrInfo['shop_name']                    // 配送元 名前
  423.                             , $arrInfo["email03"]                    // reply_to
  424.                             , $arrInfo["email04"]                    // return_path
  425.                             , $arrInfo["email04"]                    //  Errors_to
  426.                             , $arrInfo["email01"]                    //  Bcc
  427.                                                             );
  428.         // 宛先の設定
  429.         $name = $arrData['order_name01'] . $arrData['order_name02'] ." 様";
  430.         $objMail->setTo($arrData['order_email'], $name);
  431.         $objMail->sendMail();
  432.  
  433.         return $customer_id;
  434.     }
  435.  
  436.     // 受注テーブルへ登録
  437.     function lfRegistOrder($objQuery, $arrData, $objCampaignSess = null) {
  438.         $sqlval = $arrData;
  439.  
  440.         // 受注テーブルに書き込まない列を除去
  441.         unset($sqlval['mailmaga_flg']);        // メルマガチェック
  442.         unset($sqlval['deliv_check']);        // 別のお届け先チェック
  443.         unset($sqlval['point_check']);        // ポイント利用チェック
  444.         unset($sqlval['member_check']);        // 購入時会員チェック
  445.         unset($sqlval['password']);            // ログインパスワード
  446.         unset($sqlval['reminder']);            // リマインダー質問
  447.         unset($sqlval['reminder_answer']);    // リマインダー答え
  448.         unset($sqlval['mail_flag']);        // メールフラグ
  449.         unset($sqlval['session']);            // セッション情報
  450.  
  451.         // 注文ステータス:指定が無ければ新規受付に設定
  452.         if($sqlval["status"] == ""){
  453.             $sqlval['status'] = '1';
  454.         }
  455.  
  456.         // 別のお届け先を指定していない場合、配送先に登録住所をコピーする。
  457.         if($arrData["deliv_check"] == "-1") {
  458.             $sqlval['deliv_name01'] = $arrData['order_name01'];
  459.             $sqlval['deliv_name02'] = $arrData['order_name02'];
  460.             $sqlval['deliv_kana01'] = $arrData['order_kana01'];
  461.             $sqlval['deliv_kana02'] = $arrData['order_kana02'];
  462.             $sqlval['deliv_pref'] = $arrData['order_pref'];
  463.             $sqlval['deliv_zip01'] = $arrData['order_zip01'];
  464.             $sqlval['deliv_zip02'] = $arrData['order_zip02'];
  465.             $sqlval['deliv_addr01'] = $arrData['order_addr01'];
  466.             $sqlval['deliv_addr02'] = $arrData['order_addr02'];
  467.             $sqlval['deliv_tel01'] = $arrData['order_tel01'];
  468.             $sqlval['deliv_tel02'] = $arrData['order_tel02'];
  469.             $sqlval['deliv_tel03'] = $arrData['order_tel03'];
  470.         }
  471.  
  472.         $order_id = $arrData['order_id'];        // オーダーID
  473.         $sqlval['create_date'] = 'now()';        // 受注日
  474.  
  475.         // キャンペーンID
  476.         if (!defined("MOBILE_SITE")) {
  477.             if($objCampaignSess->getIsCampaign()) $sqlval['campaign_id'] = $objCampaignSess->getCampaignId();
  478.         }
  479.  
  480.         // ゲットの値をインサート
  481.         //$sqlval = lfGetInsParam($sqlval);
  482.  
  483.         // INSERTの実行
  484.         $objQuery->insert("dtb_order", $sqlval);
  485.  
  486.         return $order_id;
  487.     }
  488.  
  489.     // 受注詳細テーブルへ登録
  490.     function lfRegistOrderDetail(&$objQuery, $order_id, &$objCartSess) {
  491.         $objDb = new SC_Helper_DB_Ex();
  492.         // カート内情報の取得
  493.         $arrCart = $objCartSess->getCartList();
  494.         $max = count($arrCart);
  495.  
  496.         // 既に存在する詳細レコードを消しておく。
  497.         $objQuery->delete("dtb_order_detail", "order_id = $order_id");
  498.  
  499.         // 規格名一覧
  500.         $arrClassName = $objDb->sfGetIDValueList("dtb_class", "class_id", "name");
  501.         // 規格分類名一覧
  502.         $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
  503.  
  504.         for ($i = 0; $i < $max; $i++) {
  505.             // 商品規格情報の取得
  506.             $arrData = $objDb->sfGetProductsClass($arrCart[$i]['id']);
  507.  
  508.             // 存在する商品のみ表示する。
  509.             if($arrData != "") {
  510.                 $sqlval['order_id'] = $order_id;
  511.                 $sqlval['product_id'] = $arrCart[$i]['id'][0];
  512.                 $sqlval['classcategory_id1'] = $arrCart[$i]['id'][1];
  513.                 $sqlval['classcategory_id2'] = $arrCart[$i]['id'][2];
  514.                 $sqlval['product_name'] = $arrData['name'];
  515.                 $sqlval['product_code'] = $arrData['product_code'];
  516.                 $sqlval['classcategory_name1'] = $arrClassCatName[$arrData['classcategory_id1']];
  517.                 $sqlval['classcategory_name2'] = $arrClassCatName[$arrData['classcategory_id2']];
  518.                 $sqlval['point_rate'] = $arrCart[$i]['point_rate'];
  519.                 $sqlval['price'] = $arrCart[$i]['price'];
  520.                 $sqlval['quantity'] = $arrCart[$i]['quantity'];
  521.                 $this->lfReduceStock($objQuery, $arrCart[$i]['id'], $arrCart[$i]['quantity']);
  522.                 // INSERTの実行
  523.                 $objQuery->insert("dtb_order_detail", $sqlval);
  524.             } else {
  525.                 if (defined("MOBILE_SITE")) {
  526.                     SC_Utils_Ex::sfDispSiteError(CART_NOT_FOUND, "", false, "", true);
  527.                 } else {
  528.                     SC_Utils_Ex::sfDispSiteError(CART_NOT_FOUND);
  529.                 }
  530.             }
  531.         }
  532.     }
  533.  
  534.     // キャンペーン受注テーブルへ登録
  535.     function lfRegistCampaignOrder(&$objQuery, &$objCampaignSess, $order_id) {
  536.  
  537.         // 受注データを取得
  538.         $cols = "order_id, campaign_id, customer_id, message, order_name01, order_name02,".
  539.                 "order_kana01, order_kana02, order_email, order_tel01, order_tel02, order_tel03,".
  540.                 "order_fax01, order_fax02, order_fax03, order_zip01, order_zip02, order_pref, order_addr01,".
  541.                 "order_addr02, order_sex, order_birth, order_job, deliv_name01, deliv_name02, deliv_kana01,".
  542.                 "deliv_kana02, deliv_tel01, deliv_tel02, deliv_tel03, deliv_fax01, deliv_fax02, deliv_fax03,".
  543.                 "deliv_zip01, deliv_zip02, deliv_pref, deliv_addr01, deliv_addr02, payment_total";
  544.  
  545.         $arrOrder = $objQuery->select($cols, "dtb_order", "order_id = ?", array($order_id));
  546.  
  547.         $sqlval = $arrOrder[0];
  548.         $sqlval['create_date'] = 'now()';
  549.  
  550.         // INSERTの実行
  551.         $objQuery->insert("dtb_campaign_order", $sqlval);
  552.  
  553.         // 申し込み数の更新
  554.         $total_count = $objQuery->get("dtb_campaign", "total_count", "campaign_id = ?", array($sqlval['campaign_id']));
  555.         $arrCampaign['total_count'] = $total_count += 1;
  556.         $objQuery->update("dtb_campaign", $arrCampaign, "campaign_id = ?", array($sqlval['campaign_id']));
  557.  
  558.     }
  559.  
  560.  
  561.  
  562.     /* 受注一時テーブルの削除 */
  563.     function lfDeleteTempOrder(&$objQuery, $uniqid) {
  564.         $where = "order_temp_id = ?";
  565.         $sqlval['del_flg'] = 1;
  566.         $objQuery->update("dtb_order_temp", $sqlval, $where, array($uniqid));
  567.         // $objQuery->delete("dtb_order_temp", $where, array($uniqid));
  568.     }
  569.  
  570.     // 受注一時テーブルの住所が登録済みテーブルと異なる場合は、別のお届け先に追加する
  571.     function lfSetNewAddr($uniqid, $customer_id) {
  572.         $objQuery = new SC_Query();
  573.         $diff = false;
  574.         $find_same = false;
  575.  
  576.         $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";
  577.         $where = "order_temp_id = ?";
  578.         $arrRet = $objQuery->select($col, "dtb_order_temp", $where, array($uniqid));
  579.  
  580.         // 要素名のdeliv_を削除する。
  581.         foreach($arrRet[0] as $key => $val) {
  582.             $keyname = ereg_replace("^deliv_", "", $key);
  583.             $arrNew[$keyname] = $val;
  584.         }
  585.  
  586.         // 会員情報テーブルとの比較
  587.         $col = "name01,name02,kana01,kana02,tel01,tel02,tel03,zip01,zip02,pref,addr01,addr02";
  588.         $where = "customer_id = ?";
  589.         $arrCustomerAddr = $objQuery->select($col, "dtb_customer", $where, array($customer_id));
  590.  
  591.         // 会員情報の住所と異なる場合
  592.         if($arrNew != $arrCustomerAddr[0]) {
  593.             // 別のお届け先テーブルの住所と比較する
  594.             $col = "name01,name02,kana01,kana02,tel01,tel02,tel03,zip01,zip02,pref,addr01,addr02";
  595.             $where = "customer_id = ?";
  596.             $arrOtherAddr = $objQuery->select($col, "dtb_other_deliv", $where, array($customer_id));
  597.  
  598.             foreach($arrOtherAddr as $arrval) {
  599.                 if($arrNew == $arrval) {
  600.                     // すでに同じ住所が登録されている
  601.                     $find_same = true;
  602.                 }
  603.             }
  604.  
  605.             if(!$find_same) {
  606.                 $diff = true;
  607.             }
  608.         }
  609.  
  610.         // 新しいお届け先が登録済みのものと異なる場合は別のお届け先テーブルに登録する
  611.         if($diff) {
  612.             $sqlval = $arrNew;
  613.             $sqlval['customer_id'] = $customer_id;
  614.             $objQuery->insert("dtb_other_deliv", $sqlval);
  615.         }
  616.     }
  617.  
  618.     /* 購入情報を会員テーブルに登録する */
  619.     function lfSetCustomerPurchase($customer_id, $arrData, &$objQuery) {
  620.         $col = "first_buy_date, last_buy_date, buy_times, buy_total, point";
  621.         $where = "customer_id = ?";
  622.         $arrRet = $objQuery->select($col, "dtb_customer", $where, array($customer_id));
  623.         $sqlval = $arrRet[0];
  624.  
  625.         if($sqlval['first_buy_date'] == "") {
  626.             $sqlval['first_buy_date'] = "Now()";
  627.         }
  628.         $sqlval['last_buy_date'] = "Now()";
  629.         $sqlval['buy_times']++;
  630.         $sqlval['buy_total']+= $arrData['total'];
  631.         if (USE_POINT !== false) {
  632.             $sqlval['point'] -= $arrData['use_point'];
  633.         }
  634.  
  635.         // ポイントが不足している場合
  636.         if($sqlval['point'] < 0) {
  637.             $objQuery->rollback();
  638.             SC_Utils_Ex::sfDispSiteError(LACK_POINT);
  639.         }
  640.  
  641.         $objQuery->update("dtb_customer", $sqlval, $where, array($customer_id));
  642.     }
  643.  
  644.     // 在庫を減らす処理
  645.     function lfReduceStock(&$objQuery, $arrID, $quantity) {
  646.         $objDb = new SC_Helper_DB_Ex();
  647.         
  648.         $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?";
  649.         $arrRet = $objQuery->select("stock, stock_unlimited", "dtb_products_class", $where, $arrID);
  650.  
  651.         // 売り切れエラー
  652.         if(($arrRet[0]['stock_unlimited'] != '1' && $arrRet[0]['stock'] < $quantity) || $quantity == 0) {
  653.             $objQuery->rollback();
  654.             SC_Utils_Ex::sfDispSiteError(SOLD_OUT, "", true);
  655.         // 無制限の場合、在庫はNULL
  656.         } elseif($arrRet[0]['stock_unlimited'] == '1') {
  657.             $sqlval['stock'] = null;
  658.             $objQuery->update("dtb_products_class", $sqlval, $where, $arrID);
  659.         // 在庫を減らす
  660.         } else {
  661.             $sqlval['stock'] = ($arrRet[0]['stock'] - $quantity);
  662.             if($sqlval['stock'] == "") {
  663.                 $sqlval['stock'] = '0';
  664.             }
  665.             $objQuery->update("dtb_products_class", $sqlval, $where, $arrID);
  666.         }
  667.         
  668.         // 在庫無し商品の非表示対応
  669.         if (NOSTOCK_HIDDEN === true) {
  670.             // 件数カウントバッチ実行
  671.             $objDb->sfCategory_Count($objQuery);
  672.         }
  673.         
  674.     }
  675.  
  676.     // GETの値をインサート用に整える
  677.     function lfGetInsParam($sqlVal){
  678.         $objDb = new SC_Helper_DB_Ex();
  679.         foreach($_GET as $key => $val){
  680.             // カラムの存在チェック
  681.             if($objDb->sfColumnExists("dtb_order", $key)) $sqlVal[$key] = $val;
  682.         }
  683.  
  684.         return $sqlVal;
  685.     }
  686. }
  687. ?>

Documentation generated on Tue, 28 Apr 2009 18:12:53 +0900 by phpDocumentor 1.4.2