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

Source for file SC_Helper_Customer.php

Documentation is available at SC_Helper_Customer.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2011 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. /**
  25.  * 会員情報の登録・編集・検索ヘルパークラス.
  26.  *
  27.  *
  28.  * @package Helper
  29.  * @author Hirokazu Fukuda
  30.  * @version $Id: SC_Helper_Customer.php 21221 2011-08-26 01:36:12Z sire $
  31.  */
  32.  
  33.     /**
  34.      * 会員情報の登録・編集処理を行う.
  35.      *
  36.      * @param array $array 登録するデータの配列(SC_FormParamのgetDbArrayの戻り値)
  37.      * @param array $customer_id nullの場合はinsert, 存在する場合はupdate
  38.      * @access public
  39.      * @return integer 登録編集したユーザーのcustomer_id
  40.      */
  41.     function sfEditCustomerData($array, $customer_id = null) {
  42.         $objQuery =& SC_Query_Ex::getSingletonInstance();
  43.         $objQuery->begin();
  44.  
  45.         $array["update_date"] = 'CURRENT_TIMESTAMP';    // 更新日
  46.  
  47.         // salt値の生成(insert時)または取得(update時)。
  48.         if(is_numeric($customer_id)) {
  49.             $salt = $objQuery->get('salt', "dtb_customer", "customer_id = ? ", array($customer_id));
  50.  
  51.             // 旧バージョン(2.11未満)からの移行を考慮
  52.             if (empty($salt)) $old_version_flag = true;
  53.         }else{
  54.             $salt = SC_Utils_Ex::sfGetRandomString(10);
  55.             $array['salt'] = $salt;
  56.         }
  57.         //-- パスワードの更新がある場合は暗号化
  58.         if ($array['password'] == DEFAULT_PASSWORD or $array['password'] == "") {
  59.             //更新しない
  60.             unset($array['password']);
  61.         } else {
  62.             // 旧バージョン(2.11未満)からの移行を考慮
  63.             if ($old_version_flag) {
  64.                 $is_password_updated = true;
  65.                 $salt = SC_Utils_Ex::sfGetRandomString(10);
  66.                 $array['salt'] = $salt;
  67.             }
  68.  
  69.             $array['password'] = SC_Utils_Ex::sfGetHashString($array['password'], $salt);
  70.         }
  71.         //-- 秘密の質問の更新がある場合は暗号化
  72.         if ($array["reminder_answer"] == DEFAULT_PASSWORD or $array["reminder_answer"] == "") {
  73.             //更新しない
  74.             unset($array["reminder_answer"]);
  75.  
  76.             // 旧バージョン(2.11未満)からの移行を考慮
  77.             if ($old_version_flag && $is_password_updated) {
  78.                 // パスワードが更新される場合は、平文になっている秘密の質問を暗号化する
  79.                 $reminder_answer = $objQuery->get('reminder_answer', "dtb_customer", "customer_id = ? ", array($customer_id));
  80.                 $array["reminder_answer"] = SC_Utils_Ex::sfGetHashString($reminder_answer, $salt);
  81.             }
  82.         } else {
  83.             // 旧バージョン(2.11未満)からの移行を考慮
  84.             if ($old_version_flag && !$is_password_updated) {
  85.                 // パスワードが更新されない場合は、平文のままにする
  86.                 unset($array['salt']);
  87.             } else {
  88.                 $array["reminder_answer"] = SC_Utils_Ex::sfGetHashString($array["reminder_answer"], $salt);
  89.             }
  90.         }
  91.  
  92.         //-- 編集登録実行
  93.         if (is_numeric($customer_id)){
  94.             // 編集
  95.             $objQuery->update("dtb_customer", $array, "customer_id = ? ", array($customer_id));
  96.         } else {
  97.             // 新規登録
  98.  
  99.             // 顧客ID
  100.             $customer_id = $objQuery->nextVal('dtb_customer_customer_id');
  101.             $array['customer_id'] = $customer_id;
  102.             // 作成日
  103.             if (is_null($array["create_date"])){
  104.                 $array["create_date"] = 'CURRENT_TIMESTAMP';
  105.             }
  106.             $objQuery->insert("dtb_customer", $array);
  107.         }
  108.  
  109.         $objQuery->commit();
  110.         return $customer_id;
  111.     }
  112.  
  113.     /**
  114.      * 注文番号、利用ポイント、加算ポイントから最終ポイントを取得する.
  115.      *
  116.      * @param integer $order_id 注文番号
  117.      * @param integer $use_point 利用ポイント
  118.      * @param integer $add_point 加算ポイント
  119.      * @return array 最終ポイントの配列
  120.      */
  121.     function sfGetCustomerPoint($order_id, $use_point, $add_point) {
  122.         $objQuery =& SC_Query_Ex::getSingletonInstance();
  123.         $arrRet = $objQuery->select("customer_id", "dtb_order", "order_id = ?", array($order_id));
  124.         $customer_id = $arrRet[0]['customer_id'];
  125.         if ($customer_id != "" && $customer_id >= 1) {
  126.             if (USE_POINT !== false) {
  127.                 $arrRet = $objQuery->select('point', "dtb_customer", "customer_id = ?", array($customer_id));
  128.                 $point = $arrRet[0]['point'];
  129.                 $total_point = $arrRet[0]['point'] - $use_point + $add_point;
  130.             } else {
  131.                 $total_point = 0;
  132.                 $point = 0;
  133.             }
  134.         } else {
  135.             $total_point = "";
  136.             $point = "";
  137.         }
  138.         return array($point, $total_point);
  139.     }
  140.  
  141.     /**
  142.      * emailアドレスから、登録済み会員や退会済み会員をチェックする
  143.      *
  144.      * XXX SC_CheckError からしか呼び出されず, 本クラスの中で SC_CheckError を呼び出している
  145.      *
  146.      * @param string $email  メールアドレス
  147.      * @return integer  0:登録可能     1:登録済み   2:再登録制限期間内削除ユーザー  3:自分のアドレス
  148.      */
  149.     function sfCheckRegisterUserFromEmail($email) {
  150.         $objCustomer = new SC_Customer_Ex();
  151.         $objQuery =& SC_Query_Ex::getSingletonInstance();
  152.  
  153.         // ログインしている場合、すでに登録している自分のemailの場合
  154.         if ($objCustomer->isLoginSuccess(true)
  155.             && SC_Helper_Customer_Ex::sfCustomerEmailDuplicationCheck($objCustomer->getValue('customer_id'), $email)) {
  156.             // 自分のアドレス
  157.             return 3;
  158.         }
  159.  
  160.         $arrRet = $objQuery->select("email, update_date, del_flg",
  161.             "dtb_customer",
  162.             "email = ? OR email_mobile = ? ORDER BY del_flg",
  163.             array($email, $email));
  164.  
  165.         if (count($arrRet) > 0) {
  166.             // 会員である場合
  167.             if ($arrRet[0]['del_flg'] != '1') {
  168.                 // 登録済み
  169.                 return 1;
  170.             } else {
  171.                 // 退会した会員である場合
  172.                 $leave_time = SC_Utils_Ex::sfDBDatetoTime($arrRet[0]['update_date']);
  173.                 $now_time   = time();
  174.                 $pass_time  = $now_time - $leave_time;
  175.                 // 退会から何時間-経過しているか判定する。
  176.                 $limit_time = ENTRY_LIMIT_HOUR * 3600;
  177.                 if($pass_time < $limit_time) {
  178.                     // 再登録制限期間内削除ユーザー
  179.                     return 2;
  180.                 }
  181.             }
  182.         }
  183.  
  184.         // 登録可能
  185.         return 0;
  186.     }
  187.  
  188.     /**
  189.      * ログイン時メールアドレス重複チェック.
  190.      *
  191.      * 会員の保持する email, mobile_email が, 引数 $email と一致するかチェックする
  192.      *
  193.      * @param integer $customer_id チェック対象顧客の顧客ID
  194.      * @param string $email チェック対象のメールアドレス
  195.      * @return boolean メールアドレスが重複する場合 true
  196.      */
  197.     function sfCustomerEmailDuplicationCheck($customer_id, $email) {
  198.         $objQuery =& SC_Query_Ex::getSingletonInstance();
  199.  
  200.         $arrResults = $objQuery->getRow('email, email_mobile',
  201.                                         'dtb_customer', 'customer_id = ?',
  202.                                         array($customer_id));
  203.         $return =
  204.                strlen($arrResults['email']) >= 1 && $email === $arrResults['email']
  205.             || strlen($arrResults['email_mobile']) >= 1 &&  $email === $arrResults['email_mobile']
  206.         ;
  207.         return $return;
  208.     }
  209.  
  210.     /**
  211.      * customer_idから会員情報を取得する
  212.      *
  213.      * @param mixed $customer_id 
  214.      * @param mixed $mask_flg 
  215.      * @access public
  216.      * @return array 会員情報の配列を返す
  217.      */
  218.     function sfGetCustomerData($customer_id, $mask_flg = true) {
  219.         $objQuery       =& SC_Query_Ex::getSingletonInstance();
  220.  
  221.         // 会員情報DB取得
  222.         $ret        = $objQuery->select("*","dtb_customer","customer_id=?", array($customer_id));
  223.         $arrForm    = $ret[0];
  224.  
  225.         // 確認項目に複製
  226.         $arrForm['email02'] = $arrForm['email'];
  227.         $arrForm['email_mobile02'] = $arrForm['email_mobile'];
  228.  
  229.         // 誕生日を年月日に分ける
  230.         if (isset($arrForm['birth'])){
  231.             $birth = explode(" ", $arrForm['birth']);
  232.             list($arrForm['year'], $arrForm['month'], $arrForm['day']) = explode("-",$birth[0]);
  233.         }
  234.  
  235.         if ($mask_flg) {
  236.             $arrForm['password']          = DEFAULT_PASSWORD;
  237.             $arrForm['password02']        = DEFAULT_PASSWORD;
  238.             $arrForm['reminder_answer']   = DEFAULT_PASSWORD;
  239.         }
  240.         return $arrForm;
  241.     }
  242.  
  243.     /**
  244.      * 顧客ID指定またはwhere条件指定での会員情報取得(単一行データ)
  245.      *
  246.      * TODO: sfGetCustomerDataと統合したい
  247.      *
  248.      * @param integer $customer_id 顧客ID (指定無しでも構わないが、Where条件を入れる事)
  249.      * @param string $add_where 追加WHERE条件
  250.      * @param array $arrAddVal 追加WHEREパラメーター
  251.      * @access public
  252.      * @return array 対象会員データ
  253.      */
  254.     function sfGetCustomerDataFromId($customer_id, $add_where = '', $arrAddVal = array()) {
  255.         $objQuery   =& SC_Query_Ex::getSingletonInstance();
  256.         if($add_where == '') {
  257.             $where = 'customer_id = ?';
  258.             $arrData = $objQuery->getRow("*", "dtb_customer", $where, array($customer_id));
  259.         }else{
  260.             $where = $add_where;
  261.             if(SC_Utils_Ex::sfIsInt($customer_id)) {
  262.                 $where .= ' AND customer_id = ?';
  263.                 $arrAddVal[] = $customer_id;
  264.             }
  265.             $arrData = $objQuery->getRow("*", "dtb_customer", $where, $arrAddVal);
  266.         }
  267.         return $arrData;
  268.     }
  269.  
  270.     /**
  271.      * 重複しない会員登録キーを発行する。
  272.      *
  273.      * @access public
  274.      * @return string 会員登録キーの文字列
  275.      */
  276.     function sfGetUniqSecretKey() {
  277.         $objQuery   =& SC_Query_Ex::getSingletonInstance();
  278.         $count      = 1;
  279.         while ($count != 0) {
  280.             $uniqid = SC_Utils_Ex::sfGetUniqRandomId('r');
  281.             $count  = $objQuery->count("dtb_customer", "secret_key = ?", array($uniqid));
  282.         }
  283.         return $uniqid;
  284.     }
  285.  
  286.     /**
  287.      * 会員登録キーから顧客IDを取得する.
  288.      *
  289.      * @param string $uniqid 会員登録キー
  290.      * @param boolean $check_status 本会員のみを対象とするか
  291.      * @access public
  292.      * @return integer 顧客ID
  293.      */
  294.     function sfGetCustomerId($uniqid, $check_status = false) {
  295.         $objQuery   =& SC_Query_Ex::getSingletonInstance();
  296.         $where      = "secret_key = ?";
  297.  
  298.         if ($check_status) {
  299.             $where .= ' AND status = 1 AND del_flg = 0';
  300.         }
  301.  
  302.         return $objQuery->get("customer_id", "dtb_customer", $where, array($uniqid));
  303.     }
  304.  
  305.     /**
  306.      * 会員登録時フォーム初期化
  307.      *
  308.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  309.      * @param boolean $isAdmin true:管理者画面 false:顧客向け
  310.      * @access public
  311.      * @return void 
  312.      */
  313.     function sfCustomerEntryParam (&$objFormParam, $isAdmin = false) {
  314.         SC_Helper_Customer_Ex::sfCustomerCommonParam($objFormParam);
  315.         SC_Helper_Customer_Ex::sfCustomerRegisterParam($objFormParam, $isAdmin);
  316.         if ($isAdmin) {
  317.             $objFormParam->addParam("顧客ID", "customer_id", INT_LEN, 'n', array("NUM_CHECK"));
  318.             $objFormParam->addParam('携帯メールアドレス', "email_mobile", null, 'a', array("NO_SPTAB", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MOBILE_EMAIL_CHECK"));
  319.             $objFormParam->addParam("会員状態", 'status', INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  320.             $objFormParam->addParam("SHOP用メモ", 'note', LTEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK"));
  321.             $objFormParam->addParam("所持ポイント", 'point', INT_LEN, 'n', array("NUM_CHECK"));
  322.         }
  323.  
  324.         if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE) {
  325.             // 登録確認画面の「戻る」ボタンのためのパラメーター
  326.             $objFormParam->addParam("戻る", "return", '', '', array(), '', false);
  327.         }
  328.     }
  329.  
  330.     /**
  331.      * 会員情報変更フォーム初期化
  332.      *
  333.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  334.      * @access public
  335.      * @return void 
  336.      */
  337.     function sfCustomerMypageParam (&$objFormParam) {
  338.         SC_Helper_Customer_Ex::sfCustomerCommonParam($objFormParam);
  339.         SC_Helper_Customer_Ex::sfCustomerRegisterParam($objFormParam, false, true);
  340.         if (SC_Display_Ex::detectDevice() !== DEVICE_TYPE_MOBILE){
  341.             $objFormParam->addParam('携帯メールアドレス', "email_mobile", null, 'a', array("NO_SPTAB", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MOBILE_EMAIL_CHECK"));
  342.             $objFormParam->addParam('携帯メールアドレス(確認)', "email_mobile02", null, 'a', array("NO_SPTAB", "EMAIL_CHECK","SPTAB_CHECK" , "EMAIL_CHAR_CHECK", "MOBILE_EMAIL_CHECK"), "", false);
  343.         } else {
  344.             $objFormParam->addParam('携帯メールアドレス', "email_mobile", null, 'a', array("EXIST_CHECK", "NO_SPTAB", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MOBILE_EMAIL_CHECK"));
  345.             $objFormParam->addParam('メールアドレス', 'email', null, 'a', array("NO_SPTAB", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK"));
  346.         }
  347.     }
  348.  
  349.     /**
  350.      * お届け先フォーム初期化
  351.      *
  352.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  353.      * @access public
  354.      * @return void 
  355.      */
  356.     function sfCustomerOtherDelivParam (&$objFormParam) {
  357.         SC_Helper_Customer_Ex::sfCustomerCommonParam($objFormParam);
  358.         $objFormParam->addParam("", 'other_deliv_id');
  359.     }
  360.  
  361.     /**
  362.      * 会員共通
  363.      *
  364.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  365.      * @access public
  366.      * @return void 
  367.      */
  368.     function sfCustomerCommonParam (&$objFormParam) {
  369.         $objFormParam->addParam("お名前(姓)", 'name01', STEXT_LEN, 'aKV', array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
  370.         $objFormParam->addParam("お名前(名)", 'name02', STEXT_LEN, 'aKV', array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" , "MAX_LENGTH_CHECK"));
  371.         $objFormParam->addParam("お名前(フリガナ・姓)", 'kana01', STEXT_LEN, 'CKV', array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
  372.         $objFormParam->addParam("お名前(フリガナ・名)", 'kana02', STEXT_LEN, 'CKV', array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK", "KANA_CHECK"));
  373.         $objFormParam->addParam("郵便番号1", "zip01", ZIP01_LEN, 'n', array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
  374.         $objFormParam->addParam("郵便番号2", "zip02", ZIP02_LEN, 'n', array("EXIST_CHECK", "SPTAB_CHECK" ,"NUM_CHECK", "NUM_COUNT_CHECK"));
  375.         $objFormParam->addParam("都道府県", 'pref', INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK"));
  376.         $objFormParam->addParam("住所1", "addr01", MTEXT_LEN, 'aKV', array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
  377.         $objFormParam->addParam("住所2", "addr02", MTEXT_LEN, 'aKV', array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
  378.         $objFormParam->addParam("お電話番号1", 'tel01', TEL_ITEM_LEN, 'n', array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  379.         $objFormParam->addParam("お電話番号2", 'tel02', TEL_ITEM_LEN, 'n', array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  380.         $objFormParam->addParam("お電話番号3", 'tel03', TEL_ITEM_LEN, 'n', array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  381.     }
  382.  
  383.     /**
  384.      * 会員登録共通
  385.      *
  386.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  387.      * @param boolean $isAdmin true:管理者画面 false:会員向け
  388.      * @param boolean $is_mypage マイページの場合 true
  389.      * @return void 
  390.      */
  391.     function sfCustomerRegisterParam (&$objFormParam, $isAdmin = false, $is_mypage = false) {
  392.         $objFormParam->addParam("パスワード", 'password', STEXT_LEN, 'a', array("EXIST_CHECK", "SPTAB_CHECK", "ALNUM_CHECK", "MAX_LENGTH_CHECK"));
  393.         $objFormParam->addParam("パスワード確認用の質問の答え", "reminder_answer", STEXT_LEN, 'aKV', array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
  394.         $objFormParam->addParam("パスワード確認用の質問", 'reminder', STEXT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  395.         $objFormParam->addParam("性別", 'sex', INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  396.         $objFormParam->addParam("職業", 'job', INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"));
  397.         $objFormParam->addParam("年", 'year', 4, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"), "", false);
  398.         $objFormParam->addParam("月", 'month', 2, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"), "", false);
  399.         $objFormParam->addParam("日", 'day', 2, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"), "", false);
  400.         $objFormParam->addParam("メールマガジン", "mailmaga_flg", INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
  401.  
  402.         if (SC_Display_Ex::detectDevice() !== DEVICE_TYPE_MOBILE){
  403.             $objFormParam->addParam("FAX番号1", 'fax01', TEL_ITEM_LEN, 'n', array("SPTAB_CHECK"));
  404.             $objFormParam->addParam("FAX番号2", 'fax02', TEL_ITEM_LEN, 'n', array("SPTAB_CHECK"));
  405.             $objFormParam->addParam("FAX番号3", 'fax03', TEL_ITEM_LEN, 'n', array("SPTAB_CHECK"));
  406.             $objFormParam->addParam('メールアドレス', 'email', null, 'a', array("NO_SPTAB", "EXIST_CHECK", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK"));
  407.             if(!$isAdmin) {
  408.                 $objFormParam->addParam("パスワード(確認)", 'password02', STEXT_LEN, 'a', array("EXIST_CHECK", "SPTAB_CHECK" ,"ALNUM_CHECK"), "", false);
  409.                 $objFormParam->addParam('メールアドレス(確認)', "email02", null, 'a', array("NO_SPTAB", "EXIST_CHECK", "EMAIL_CHECK","SPTAB_CHECK" , "EMAIL_CHAR_CHECK"), "", false);
  410.             }
  411.         } else {
  412.             if (!$is_mypage) {
  413.                 $objFormParam->addParam('メールアドレス', 'email', null, 'a', array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MOBILE_EMAIL_CHECK"));
  414.             }
  415.         }
  416.     }
  417.  
  418.     function sfCustomerOtherDelivErrorCheck(&$objFormParam) {
  419.         $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam);
  420.         return $objErr->arrErr;
  421.     }
  422.  
  423.     /**
  424.      * 会員登録エラーチェック
  425.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  426.      * @access public
  427.      * @return array エラーの配列
  428.      */
  429.     function sfCustomerEntryErrorCheck(&$objFormParam) {
  430.         $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam);
  431.         $objErr = SC_Helper_Customer_Ex::sfCustomerRegisterErrorCheck($objErr);
  432.  
  433.         /*
  434.          * sfCustomerRegisterErrorCheck() では, ログイン中の場合は重複チェック
  435.          * されないので, 再度チェックを行う
  436.          */
  437.         $objCustomer = new SC_Customer_Ex();
  438.         if ($objCustomer->isLoginSuccess(true)
  439.             && SC_Helper_Customer_Ex::sfCustomerEmailDuplicationCheck($objCustomer->getValue('customer_id'), $objFormParam->getValue('email'))) {
  440.             $objErr->arrErr['email'] .= "※ すでに会員登録で使用されているメールアドレスです。<br />";
  441.         }
  442.         if ($objCustomer->isLoginSuccess(true)
  443.             && SC_Helper_Customer_Ex::sfCustomerEmailDuplicationCheck($objCustomer->getValue('customer_id'), $objFormParam->getValue('email_mobile'))) {
  444.             $objErr->arrErr['email_mobile'] .= "※ すでに会員登録で使用されているメールアドレスです。<br />";
  445.         }
  446.  
  447.         return $objErr->arrErr;
  448.     }
  449.  
  450.     /**
  451.      * 会員情報変更エラーチェック
  452.      *
  453.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  454.      * @param boolean $isAdmin 管理画面チェック時:true
  455.      * @access public
  456.      * @return array エラーの配列
  457.      */
  458.     function sfCustomerMypageErrorCheck(&$objFormParam, $isAdmin = false) {
  459.  
  460.         $objFormParam->toLower('email_mobile');
  461.         $objFormParam->toLower('email_mobile02');
  462.  
  463.         $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam);
  464.         $objErr = SC_Helper_Customer_Ex::sfCustomerRegisterErrorCheck($objErr, $isAdmin);
  465.  
  466.         if (isset($objErr->arrErr['password'])
  467.              && $objFormParam->getValue('password') == DEFAULT_PASSWORD) {
  468.             unset($objErr->arrErr['password']);
  469.             unset($objErr->arrErr['password02']);
  470.         }
  471.         if (isset($objErr->arrErr['reminder_answer'])
  472.                 && $objFormParam->getValue('reminder_answer') == DEFAULT_PASSWORD) {
  473.             unset($objErr->arrErr['reminder_answer']);
  474.         }
  475.         return $objErr->arrErr;
  476.     }
  477.  
  478.     /**
  479.      * 会員エラーチェック共通
  480.      *
  481.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  482.      * @access private
  483.      * @return array エラー情報の配列
  484.      */
  485.     function sfCustomerCommonErrorCheck(&$objFormParam) {
  486.         $objFormParam->convParam();
  487.         $objFormParam->toLower('email');
  488.         $objFormParam->toLower('email02');
  489.         $arrParams = $objFormParam->getHashArray();
  490.  
  491.         // 入力データを渡す。
  492.         $objErr = new SC_CheckError_Ex($arrParams);
  493.         $objErr->arrErr = $objFormParam->checkError();
  494.  
  495.         $objErr->doFunc(array("お電話番号", "tel01", "tel02", "tel03"),array("TEL_CHECK"));
  496.         $objErr->doFunc(array("郵便番号", "zip01", "zip02"), array("ALL_EXIST_CHECK"));
  497.  
  498.         return $objErr;
  499.     }
  500.  
  501.     /**
  502.      * 会員登録編集共通の相関チェック
  503.      *
  504.      * @param SC_CheckError $objErr SC_CheckError インスタンス
  505.      * @param boolean $isAdmin 管理画面チェック時:true
  506.      * @return SC_CheckError $objErr エラー情報
  507.      */
  508.     function sfCustomerRegisterErrorCheck(&$objErr, $isAdmin = false) {
  509.         $objErr->doFunc(array("生年月日", 'year', 'month', 'day'), array("CHECK_BIRTHDAY"));
  510.  
  511.         if (SC_Display_Ex::detectDevice() !== DEVICE_TYPE_MOBILE) {
  512.             if (!$isAdmin) {
  513.                 $objErr->doFunc(array('パスワード', 'パスワード(確認)', 'password', "password02") ,array("EQUAL_CHECK"));
  514.                 $objErr->doFunc(array('メールアドレス', 'メールアドレス(確認)', 'email', "email02") ,array("EQUAL_CHECK"));
  515.             }
  516.             $objErr->doFunc(array("FAX番号", "fax01", "fax02", "fax03") ,array("TEL_CHECK"));
  517.         }
  518.  
  519.         if (!$isAdmin) {
  520.             // 現会員の判定 → 現会員もしくは仮登録中は、メアド一意が前提になってるので同じメアドで登録不可
  521.             $objErr->doFunc(array("メールアドレス", 'email'), array("CHECK_REGIST_CUSTOMER_EMAIL"));
  522.             $objErr->doFunc(array("携帯メールアドレス", 'email_mobile'), array("CHECK_REGIST_CUSTOMER_EMAIL", "MOBILE_EMAIL_CHECK"));
  523.         }
  524.         return $objErr;
  525.     }
  526.  
  527.     /**
  528.      * 顧客検索パラメーター(管理画面用)
  529.      *
  530.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  531.      * @access public
  532.      * @return void 
  533.      */
  534.     function sfSetSearchParam(&$objFormParam) {
  535.         $objFormParam->addParam('顧客ID', 'search_customer_id', ID_MAX_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  536.         $objFormParam->addParam('お名前', 'search_name', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
  537.         $objFormParam->addParam('お名前(フリガナ)', 'search_kana', STEXT_LEN, 'CKV', array("SPTAB_CHECK", "MAX_LENGTH_CHECK", "KANABLANK_CHECK"));
  538.         $objFormParam->addParam('都道府県', 'search_pref', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  539.         $objFormParam->addParam('誕生日(開始年)', 'search_b_start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  540.         $objFormParam->addParam('誕生日(開始月)', 'search_b_start_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  541.         $objFormParam->addParam('誕生日(開始日)', 'search_b_start_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  542.  
  543.         $objFormParam->addParam('誕生日(終了年)', 'search_b_end_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  544.         $objFormParam->addParam('誕生日(終了月)', 'search_b_end_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  545.         $objFormParam->addParam('誕生日(終了日)', 'search_b_end_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  546.         $objFormParam->addParam('誕生月', 'search_birth_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  547.         $objFormParam->addParam('メールアドレス', 'search_email', MTEXT_LEN, 'a', array("SPTAB_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
  548.         $objFormParam->addParam('携帯メールアドレス', 'search_email_mobile', MTEXT_LEN, 'a', array("SPTAB_CHECK", "EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK"));
  549.         $objFormParam->addParam('電話番号', 'search_tel', TEL_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  550.         $objFormParam->addParam('購入金額(開始)', 'search_buy_total_from', PRICE_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  551.         $objFormParam->addParam('購入金額(終了)', 'search_buy_total_to', PRICE_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  552.         $objFormParam->addParam('購入回数(開始)', 'search_buy_times_from', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  553.         $objFormParam->addParam('購入回数(終了)', 'search_buy_times_to', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  554.         $objFormParam->addParam('登録・更新日(開始年)', 'search_start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  555.         $objFormParam->addParam('登録・更新日(開始月)', 'search_start_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  556.         $objFormParam->addParam('登録・更新日(開始日)', 'search_start_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  557.         $objFormParam->addParam('登録・更新日(終了年)', 'search_end_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  558.         $objFormParam->addParam('登録・更新日(終了月)', 'search_end_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  559.         $objFormParam->addParam('登録・更新日(終了日)', 'search_end_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  560.         $objFormParam->addParam('表示件数', 'search_page_max', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"), 1, false);
  561.         $objFormParam->addParam('ページ番号', 'search_pageno', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"), 1, false);
  562.         $objFormParam->addParam('最終購入日(開始年)', 'search_buy_start_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  563.         $objFormParam->addParam('最終購入日(開始月)', 'search_buy_start_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  564.         $objFormParam->addParam('最終購入日(開始日)', 'search_buy_start_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  565.         $objFormParam->addParam('最終購入日(終了年)', 'search_buy_end_year', 4, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  566.         $objFormParam->addParam('最終購入日(終了月)', 'search_buy_end_month', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  567.         $objFormParam->addParam('最終購入日(終了日)', 'search_buy_end_day', 2, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  568.         $objFormParam->addParam('購入商品コード', 'search_buy_product_code', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
  569.         $objFormParam->addParam('購入商品名', 'search_buy_product_name', STEXT_LEN, 'KVa', array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
  570.         $objFormParam->addParam('カテゴリ', 'search_category_id', INT_LEN, 'n', array("NUM_CHECK","MAX_LENGTH_CHECK"));
  571.         $objFormParam->addParam('性別', 'search_sex', INT_LEN, 'n', array("MAX_LENGTH_CHECK"));
  572.         $objFormParam->addParam('会員状態', 'search_status', INT_LEN, 'n', array("MAX_LENGTH_CHECK"));
  573.         $objFormParam->addParam('職業', 'search_job', INT_LEN, 'n', array("MAX_LENGTH_CHECK"));
  574.     }
  575.  
  576.     /**
  577.      * 顧客検索パラメーター エラーチェック(管理画面用)
  578.      *
  579.      * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  580.      * @access public
  581.      * @return array エラー配列
  582.      */
  583.     function sfCheckErrorSearchParam(&$objFormParam) {
  584.         // パラメーターの基本チェック
  585.         $arrErr = $objFormParam->checkError();
  586.         // 拡張エラーチェック初期化
  587.         $objErr = new SC_CheckError_Ex($objFormParam->getHashArray());
  588.         // 拡張エラーチェック
  589.         $objErr->doFunc(array("誕生日(開始日)", "search_b_start_year", "search_b_start_month", "search_b_start_day"), array("CHECK_DATE"));
  590.         $objErr->doFunc(array("誕生日(終了日)", "search_b_end_year", "search_b_end_month", "search_b_end_day"), array("CHECK_DATE"));
  591.  
  592.         $objErr->doFunc(array("誕生日(開始日)","誕生日(終了日)", "search_b_start_year", "search_b_start_month", "search_b_start_day", "search_b_end_year", "search_b_end_month", "search_b_end_day"), array("CHECK_SET_TERM"));
  593.         $objErr->doFunc(array("登録・更新日(開始日)", "search_start_year", "search_start_month", "search_start_day",), array("CHECK_DATE"));
  594.         $objErr->doFunc(array("登録・更新日(終了日)", "search_end_year", "search_end_month", "search_end_day"), array("CHECK_DATE"));
  595.         $objErr->doFunc(array("登録・更新日(開始日)","登録・更新日(終了日)", "search_start_year", "search_start_month", "search_start_day", "search_end_year", "search_end_month", "search_end_day"), array("CHECK_SET_TERM"));
  596.         $objErr->doFunc(array("最終購入日(開始日)", "search_buy_start_year", "search_buy_start_month", "search_buy_start_day",), array("CHECK_DATE"));
  597.         $objErr->doFunc(array("最終購入(終了日)", "search_buy_end_year", "search_buy_end_month", "search_buy_end_day"), array("CHECK_DATE"));
  598.         //購入金額(from) > 購入金額(to) の場合はエラーとする
  599.         $objErr->doFunc(array("最終購入日(開始日)","登録・更新日(終了日)", "search_buy_start_year", "search_buy_start_month", "search_buy_start_day", "search_buy_end_year", "search_buy_end_month", "search_buy_end_day"), array("CHECK_SET_TERM"));
  600.  
  601.         if ((SC_Utils_Ex::sfIsInt($array["search_buy_total_from"])
  602.              && SC_Utils_Ex::sfIsInt($array["search_buy_total_to"]))
  603.              && ($array["search_buy_total_from"] > $array["buy_total_to"])) {
  604.             $objErr->arrErr["search_buy_total_from"] .= "※ 購入金額の指定範囲が不正です。";
  605.         }
  606.  
  607.         if ((SC_Utils_Ex::sfIsInt($array["search_buy_times_from"])
  608.              && SC_Utils_Ex::sfIsInt($array["search_buy_times_to"]))
  609.              && ($array["search_buy_times_from"] > $array["search_buy_times_to"])) {
  610.             $objErr->arrErr["search_buy_times_from"] .= "※ 購入回数の指定範囲が不正です。";
  611.         }
  612.         if(!SC_Utils_Ex::isBlank($objErr->arrErr)) {
  613.             $arrErr = array_merge($arrErr, $objErr->arrErr);
  614.         }
  615.         return $arrErr;
  616.     }
  617.  
  618.     /**
  619.      * 顧客一覧検索をする処理(ページング処理付き、管理画面用共通処理)
  620.      *
  621.      * @param array $arrParam 検索パラメーター連想配列
  622.      * @param string $limitMode ページングを利用するか判定用フラグ
  623.      * @return array( integer 全体件数, mixed 顧客データ一覧配列, mixed SC_PageNaviオブジェクト)
  624.      */
  625.     function sfGetSearchData($arrParam, $limitMode = '') {
  626.         $objQuery =& SC_Query_Ex::getSingletonInstance();
  627.         $objSelect = new SC_CustomerList_Ex($arrParam, 'customer');
  628.         $page_max = SC_Utils_Ex::sfGetSearchPageMax($arrParam['search_page_max']);
  629.         $disp_pageno = $arrParam['search_pageno'];
  630.         if($disp_pageno == 0) {
  631.             $disp_pageno = 1;
  632.         }
  633.         $offset = intval($page_max) * (intval($disp_pageno) - 1);
  634.         if ($limitMode == '') {
  635.             $objSelect->setLimitOffset($page_max, $offset);
  636.         }
  637.         $arrData = $objQuery->getAll($objSelect->getList(), $objSelect->arrVal);
  638.  
  639.         // 該当全体件数の取得
  640.         $linemax = $objQuery->getOne($objSelect->getListCount(), $objSelect->arrVal);
  641.  
  642.         // ページ送りの取得
  643.         $objNavi = new SC_PageNavi_Ex($arrParam['search_pageno'],
  644.                                     $linemax,
  645.                                     $page_max,
  646.                                     'fnNaviSearchOnlyPage',
  647.                                     NAVI_PMAX);
  648.         return array($linemax, $arrData, $objNavi);
  649.     }
  650. }

Documentation generated on Fri, 24 Feb 2012 14:02:40 +0900 by Seasoft