Written by Manabu Bannai

ECCUBEで『会員登録時のメール重複チェック(バリデーション)を解除する』方法

PROGRAMMING

ECCUBEの会員登録画面にはメール重複チェックのバリデーションが入っています。場合によっては必要ではなくなるので、解除するためのプログラムを配布します。※かなり適当なプログラムなので、利用には注意してください。

使っているECCUBEの環境は以下のとおりです。

EC-CUBEバージョン 2.13.1
PHPバージョン PHP 5.3.15
DBバージョン PostgreSQL 8.4.8

編集ファイルは2つあります。

編集ファイルその1

ファイルのpath:/data/class/helper/SC_Helper_Customer.php
場所:156行目あたり

/**
 * emailアドレスから、登録済み会員や退会済み会員をチェックする
 *
 * XXX SC_CheckError からしか呼び出されず, 本クラスの中で SC_CheckError を呼び出している
 *
 * @param  string  $email メールアドレス
 * @return integer 0:登録可能     1:登録済み   2:再登録制限期間内削除ユーザー  3:自分のアドレス
 */
public function sfCheckRegisterUserFromEmail($email)
{
    $objCustomer = new SC_Customer_Ex();
    $objQuery =& SC_Query_Ex::getSingletonInstance();

    // ログインしている場合、すでに登録している自分のemailの場合
    if ($objCustomer->isLoginSuccess(true)
        && SC_Helper_Customer_Ex::sfCustomerEmailDuplicationCheck($objCustomer->getValue('customer_id'), $email)) {
        // 自分のアドレス
        return 0;
    }

    $arrRet = $objQuery->select('email, update_date, del_flg',
        'dtb_customer',
        'email = ? OR email_mobile = ? ORDER BY del_flg',
        array($email, $email));

    if (count($arrRet) > 0) {
        // 会員である場合
        if ($arrRet[0]['del_flg'] != '1') {
            // 登録済み
            return 0;
        } else {
            // 退会した会員である場合
            $leave_time = SC_Utils_Ex::sfDBDatetoTime($arrRet[0]['update_date']);
            $now_time   = time();
            $pass_time  = $now_time - $leave_time;
            // 退会から何時間-経過しているか判定する。
            $limit_time = ENTRY_LIMIT_HOUR * 3600;
            if ($pass_time < $limit_time) {
                // 再登録制限期間内削除ユーザー
                return 0;
            }
        }
    }

    // 登録可能
    return 0;
}

編集ファイルその2

ファイルのpath:/data/class/helper/SC_Helper_Customer.php
場所:453行目あたり

/*
 * 会員登録エラーチェック
 * @param SC_FormParam $objFormParam SC_FormParam インスタンス
 * @access public
 * @return array エラーの配列
 */
public function sfCustomerEntryErrorCheck(&$objFormParam)
{
    $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam);
    $objErr = SC_Helper_Customer_Ex::sfCustomerRegisterErrorCheck($objErr);

    /*
     * sfCustomerRegisterErrorCheck() では, ログイン中の場合は重複チェック
     * されないので, 再度チェックを行う
     */
    $objCustomer = new SC_Customer_Ex();
    if ($objCustomer->isLoginSuccess(true)
        && SC_Helper_Customer_Ex::sfCustomerEmailDuplicationCheck($objCustomer->getValue('customer_id'), $objFormParam->getValue('email'))) {
        $objErr->arrErr['email'] .= '※ すでに会員登録で使用されているメールアドレスです。
'; } if ($objCustomer->isLoginSuccess(true) && SC_Helper_Customer_Ex::sfCustomerEmailDuplicationCheck($objCustomer->getValue('customer_id'), $objFormParam->getValue('email_mobile'))) { $objErr->arrErr['email_mobile'] .= '※ すでに会員登録で使用されているメールアドレスです。
'; } return 0; }

以上です。
これでメールのバリデーションが外れました。