[Svn-src-all:1207] [version-2_5-dev 20095] リファクタリング方針に従って修正 #979

kimoto admin @ mail.ec-cube.net
2011年 2月 4日 (金) 18:46:46 JST


Subversion committed to /home/svn/open 20095
http://svn.ec-cube.net/open_trac/changeset/20095
┌────────────────────────────┐
│更新者 :  kimoto                                       │
│更新日時:  2011-02-04 18:46:46 +0900 (金, 04  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
リファクタリング方針に従って修正 #979


Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/class/pages/entry/LC_Page_Entry.php

変更: branches/version-2_5-dev/data/class/pages/entry/LC_Page_Entry.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/entry/LC_Page_Entry.php	2011-02-04 09:31:34 UTC (rev 20094)
+++ branches/version-2_5-dev/data/class/pages/entry/LC_Page_Entry.php	2011-02-04 09:46:46 UTC (rev 20095)
@@ -103,7 +103,7 @@
         $this->objFormParam->addParam("日", "day", INT_LEN, "n", array("MAX_LENGTH_CHECK"), "", false);
         $this->objFormParam->addParam("メールマガジン", "mailmaga_flg", INT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK"));
 
-        if ($this->isMobile === false){
+        if (SC_Display::detectDevice() !== DEVICE_TYPE_MOBILE){
             $this->objFormParam->addParam("FAX番号1", 'fax01', TEL_ITEM_LEN, "n", array("SPTAB_CHECK"));
             $this->objFormParam->addParam("FAX番号2", 'fax02', TEL_ITEM_LEN, "n", array("SPTAB_CHECK"));
             $this->objFormParam->addParam("FAX番号3", 'fax03', TEL_ITEM_LEN, "n", array("SPTAB_CHECK"));
@@ -120,13 +120,32 @@
      * @return void
      */
     function action() {
-        $this->lfPreMode();
+        // PC時は規約ページからの遷移でなければエラー画面へ遷移する
+        if ($this->lfCheckReferer($_POST, $_SERVER['HTTP_REFERER']) === false) {
+            SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
+        }
+
+        // mobile用(戻るボタンでの遷移かどうかを判定)
+        if (!empty($_POST["return"])) {
+            $_POST["mode"] = "return";
+        }
+
+        if ($_SERVER["REQUEST_METHOD"] == "POST") {
+            if (!SC_Helper_Session_Ex::isValidToken()) {
+                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
+            }
+        }
+
+        $this->objFormParam->setParam($_POST);    // POST値の取得
+        $this->objFormParam->convParam();
+        $this->objFormParam->toLower('email');
+        $this->objFormParam->toLower('email02');
         $this->arrForm  = $this->objFormParam->getHashArray();
 
         switch ($this->getMode()) {
         case 'confirm':
-        //-- 確認
-            $this->arrErr = $this->lfErrorCheck();
+            //-- 確認
+            $this->arrErr = $this->lfErrorCheck($this->arrForm);
             // 入力エラーなし
             if(empty($this->arrErr)) {
                 //パスワード表示
@@ -138,14 +157,20 @@
             break;
         case 'complete':
             //-- 会員登録と完了画面
-            $this->arrErr = $this->lfErrorCheck();
+            $this->arrErr = $this->lfErrorCheck($this->arrForm);
             if(empty($this->arrErr)) {
-                $uniqid             = $this->lfRegistData();
+                $uniqid             = $this->lfRegistData($this->arrForm, $this->objFormParam->getDbArray());
 
                 $this->tpl_mainpage = 'entry/complete.tpl';
                 $this->tpl_title    = '会員登録(完了ページ)';
+                $this->lfSendMail($uniqid, $this->arrForm);
 
-                $this->lfSendMail($uniqid);
+                // 仮会員が無効の場合
+                if(CUSTOMER_CONFIRM_MAIL == false) {
+                    // ログイン状態にする
+                    $objCustomer = new SC_Customer();
+                    $objCustomer->setLogin($this->arrForm["email"]);
+                }
 
                 // 完了ページに移動させる。
                 SC_Response_Ex::sendRedirect('complete.php', array("ci" => SC_Helper_Customer_Ex::sfGetCustomerId($uniqid)));
@@ -169,34 +194,7 @@
 
     // }}}
     // {{{ protected functions
-
-
     /**
-     * lfPreMode
-     *
-     * @access public
-     * @return void
-     */
-    function lfPreMode() {
-        // PC時は規約ページからの遷移でなければエラー画面へ遷移する
-        $this->lfCheckReferer();
-
-        // mobile用(戻るボタンでの遷移かどうかを判定)
-        if (!empty($_POST["return"])) {
-            $_POST["mode"] = "return";
-        }
-
-        //CSRF対策
-        $this->lfCheckCSRF();
-
-        $this->objFormParam->setParam($_POST);    // POST値の取得
-        $this->objFormParam->convParam();
-        $this->objFormParam->toLower('email');
-        $this->objFormParam->toLower('email02');
-    }
-
-
-    /**
      * lfRegistData
      *
      * 会員情報の登録
@@ -204,10 +202,10 @@
      * @access public
      * @return void
      */
-    function lfRegistData() {
-        $objQuery   = new SC_Query();
+    function lfRegistData($arrForm, $arrResults) {
+        $objQuery   = SC_Query::getSingletonInstance();
         //-- 登録実行
-        $sqlval     = $this->lfMakeSqlVal();
+        $sqlval     = $this->lfMakeSqlVal($arrForm, $arrResults);
         $objQuery->begin();
         SC_Helper_Customer_Ex::sfEditCustomerData($sqlval);
         $objQuery->commit();
@@ -217,89 +215,88 @@
 
 
     /**
-     * lfMakeSqlVal
+     * 会員登録に必要なSQLパラメータの配列を生成する.
      *
-     * 会員登録に必要なsqlを作成する
+     * フォームに入力された情報を元に, SQLパラメータの配列を生成する.
+     * モバイル端末の場合は, email を email_mobile にコピーし,
+     * mobile_phone_id に携帯端末IDを格納する.
      *
-     * @access public
-     * @return void
+     * @access protected
+     * @param array $arrForm フォームパラメータの配列
+     * @param array $arrResults 結果用の配列. SC_FormParam::getDbArray() の結果
+     * @return array SQLパラメータの配列
+     * @see SC_FormParam::getDbArray()
      */
-    function lfMakeSqlVal() {
-        $arrRet     = $this->objFormParam->getHashArray();
-        $sqlval     = $this->objFormParam->getDbArray();
+    function lfMakeSqlVal($arrForm, $arrResults) {
+        // 生年月日の作成
+        $arrResults['birth']  = SC_Utils_Ex::sfGetTimestamp($arrForm['year'], $arrForm['month'], $arrForm['day']);
 
-        // 登録データの作成
-        $sqlval['birth']  = SC_Utils_Ex::sfGetTimestamp($arrRet['year'], $arrRet['month'], $arrRet['day']);
-
         // 仮会員 1 本会員 2
-        $sqlval["status"] = (CUSTOMER_CONFIRM_MAIL == true) ? "1" : "2";
+        $arrResults["status"] = (CUSTOMER_CONFIRM_MAIL == true) ? "1" : "2";
 
         /*
-          secret_keyは、テーブルで重複許可されていない場合があるので、
-                          本会員登録では利用されないがセットしておく。
-        */
-        $sqlval["secret_key"] = SC_Helper_Customer_Ex::sfGetUniqSecretKey();		// 会員登録キー
+         * secret_keyは、テーブルで重複許可されていない場合があるので、
+         * 本会員登録では利用されないがセットしておく。
+         */
+        $arrResults["secret_key"] = SC_Helper_Customer_Ex::sfGetUniqSecretKey();
 
+        // 入会時ポイント
         $CONF = SC_Helper_DB_Ex::sfGetBasisData();
-        $sqlval["point"] = $CONF["welcome_point"]; // 入会時ポイント
+        $arrResults["point"] = $CONF["welcome_point"];
 
-        if ($this->isMobile === true) {
+        if (SC_Display::detectDevice() == DEVICE_TYPE_MOBILE) {
             // 携帯メールアドレス
-            $sqlval['email_mobile']     = $sqlval['email'];
-            //PHONE_IDを取り出す
-            $sqlval['mobile_phone_id']  =  SC_MobileUserAgent::getId();
+            $arrResults['email_mobile']     = $arrResults['email'];
+            // PHONE_IDを取り出す
+            $arrResults['mobile_phone_id']  =  SC_MobileUserAgent::getId();
         }
-
-        return $sqlval;
+        return $arrResults;
     }
 
 
     /**
-     * lfSendMail
+     * 会員登録完了メール送信する
      *
      * @access public
      * @return void
      */
-    function lfSendMail($uniqid){
-        // 完了メール送信
-        $arrRet         = $this->objFormParam->getHashArray();
-        $this->name01   = $arrRet['name01'];
-        $this->name02   = $arrRet['name02'];
-        $this->uniqid   = $uniqid;
+    function lfSendMail($uniqid, $arrForm){
         $CONF           = SC_Helper_DB_Ex::sfGetBasisData();
-        $this->CONF     = $CONF;
+
         $objMailText    = new SC_SiteView();
+        $objMailText->assign("CONF", $CONF);
+        $objMailText->assign("name01", $arrForm['name01']);
+        $objMailText->assign("name02", $arrForm['name02']);
+        $objMailText->assign("uniqid", $uniqid);
         $objMailText->assignobj($this);
 
         $objHelperMail  = new SC_Helper_Mail_Ex();
 
         // 仮会員が有効の場合
         if(CUSTOMER_CONFIRM_MAIL == true) {
-            $subject = $objHelperMail->sfMakeSubject('会員登録のご確認');
+            $subject        = $objHelperMail->sfMakeSubject('会員登録のご確認');
             $toCustomerMail = $objMailText->fetch("mail_templates/customer_mail.tpl");
         } else {
-            $subject = $objHelperMail->sfMakeSubject('会員登録のご完了');
+            $subject        = $objHelperMail->sfMakeSubject('会員登録のご完了');
             $toCustomerMail = $objMailText->fetch("mail_templates/customer_regist_mail.tpl");
-            // ログイン状態にする
-            $objCustomer = new SC_Customer();
-            $objCustomer->setLogin($arrRet["email"]);
         }
 
         $objMail = new SC_SendMail();
         $objMail->setItem(
-                              ''                    // 宛先
-                            , $subject              // サブジェクト
-                            , $toCustomerMail       // 本文
-                            , $CONF["email03"]      // 配送元アドレス
-                            , $CONF["shop_name"]    // 配送元 名前
-                            , $CONF["email03"]      // reply_to
-                            , $CONF["email04"]      // return_path
-                            , $CONF["email04"]      // Errors_to
-                            , $CONF["email01"]      // Bcc
+            ''                    // 宛先
+            , $subject              // サブジェクト
+            , $toCustomerMail       // 本文
+            , $CONF["email03"]      // 配送元アドレス
+            , $CONF["shop_name"]    // 配送元 名前
+            , $CONF["email03"]      // reply_to
+            , $CONF["email04"]      // return_path
+            , $CONF["email04"]      // Errors_to
+            , $CONF["email01"]      // Bcc
         );
         // 宛先の設定
-        $name = $arrRet["name01"] . $arrRet["name02"] ." 様";
-        $objMail->setTo($arrRet["email"], $name);
+        $objMail->setTo($arrForm["email"],
+                        $arrForm["name01"] . $arrForm["name02"] ." 様");
+
         $objMail->sendMail();
     }
 
@@ -312,17 +309,17 @@
      * @access public
      * @return void
      */
-    function lfErrorCheck($array) {
+    function lfErrorCheck($arrForm) {
 
         // 入力データを渡す。
-        $arrRet = $this->objFormParam->getHashArray();
-        $objErr = new SC_CheckError($arrRet);
+        $objErr = new SC_CheckError($arrForm);
         $objErr->arrErr = $this->objFormParam->checkError();
 
         $objErr->doFunc(array("お電話番号", "tel01", "tel02", "tel03"),array("TEL_CHECK"));
         $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
         $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_BIRTHDAY"));
-        if ($this->isMobile === false){
+
+        if (SC_Display::detectDevice() !== DEVICE_TYPE_MOBILE){
             $objErr->doFunc(array('パスワード', 'パスワード(確認)', "password", "password02") ,array("EQUAL_CHECK"));
             $objErr->doFunc(array('メールアドレス', 'メールアドレス(確認)', "email", "email02") ,array("EQUAL_CHECK"));
             $objErr->doFunc(array("FAX番号", "fax01", "fax02", "fax03") ,array("TEL_CHECK"));
@@ -335,35 +332,25 @@
     }
 
     /**
-     * lfCheckReferer
+     * kiyaku.php からの遷移の妥当性をチェックする
      *
-     * @access public
-     * @return void
-     */
-    function lfCheckReferer(){
-    	/**
-    	 * 規約ページからの遷移でなければエラー画面へ遷移する
-    	 */
-        if ($this->isMobile === FALSE
-        	 && empty($_POST)
-        	 && !preg_match('/kiyaku.php/', basename($_SERVER['HTTP_REFERER']))
-        	) {
-            SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
-        }
-    }
-
-
-    /**
-     * lfCheckCSRF
+     * 以下の内容をチェックし, 妥当であれば true を返す.
+     * 1. 規約ページからの遷移かどうか
+     * 2. PC及びスマートフォンかどうか
+     * 3. $post に何も含まれていないかどうか
      *
-     * @access public
-     * @return void
+     * @access protected
+     * @param array $post $_POST のデータ
+     * @param string $referer $_SERVER['HTTP_REFERER'] のデータ
+     * @return boolean kiyaku.php からの妥当な遷移であれば true
      */
-    function lfCheckCSRF() {
-        if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            if (!SC_Helper_Session_Ex::isValidToken()) {
-                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
+    function lfCheckReferer(&$post, $referer){
+
+        if (SC_Display::detectDevice() !== DEVICE_TYPE_MOBILE
+            && empty($post)
+            && (preg_match('/kiyaku.php/', basename($referer)) === 0)) {
+            return false;
             }
-        }
+        return true;
     }
 }




Svn-src-all メーリングリストの案内