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($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='"$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->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->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$wherearray($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"$wherearray($uniqid));
  579.  
  580.         // 要素名のdeliv_を削除する。
  581.         foreach($arrRet[0as $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"$wherearray($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"$wherearray($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"$wherearray($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$wherearray($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