開発メモ

開発用のメモです。

ECCUBE 会員種別を追加した場合に 本会員であることを 仮会員でないことに変更する

<?php
<?php
/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) 2000-2014 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

require_once CLASS_REALDIR . 'SC_Customer.php';

class SC_Customer_Ex extends SC_Customer {

    /**
    * @param string $email
    * @param string $pass
    */
    public function getCustomerDataFromEmailPass( $pass, $email, $mobile = false ) {
        // 小文字に変換
        $email = strtolower( $email );
        $sql_mobile = $mobile ? ' OR email_mobile = ?' : '';
        $arrValues = array( $email );
        if( $mobile ) {
            $arrValues[ ] = $email;
        }
        // 本登録された会員のみ
        $sql = 'SELECT * FROM dtb_customer WHERE (email = ?' . $sql_mobile . ') AND del_flg = 0 AND status <> 1';
        $objQuery = &SC_Query_Ex::getSingletonInstance( );
        $result = $objQuery->getAll( $sql, $arrValues );
        if( empty( $result ) ) {
            return false;
        } else {
            $data = $result[ 0 ];
        }

        // パスワードが合っていれば会員情報をcustomer_dataにセットしてtrueを返す
        if( SC_Utils_Ex::sfIsMatchHashPassword( $pass, $data[ 'password' ], $data[ 'salt' ] ) ) {
            $this->customer_data = $data;
            $this->startSession( );

            return true;
        }

        return false;
    }

    /**
    * 携帯端末IDが一致する会員が存在するかどうかをチェックする。
    * FIXME
    * @return boolean 該当する会員が存在する場合は true、それ以外の場合
    *                 は false を返す。
    */
    public function checkMobilePhoneId( ) {
        //docomo用にデータを取り出す。
        if( SC_MobileUserAgent_Ex::getCarrier( ) == 'docomo' ) {
            if( $_SESSION[ 'mobile' ][ 'phone_id' ] == '' && strlen( $_SESSION[ 'mobile' ][ 'phone_id' ] ) == 0 ) {
                $_SESSION[ 'mobile' ][ 'phone_id' ] = SC_MobileUserAgent_Ex::getId( );
            }
        }
        if( ! isset( $_SESSION[ 'mobile' ][ 'phone_id' ] ) || $_SESSION[ 'mobile' ][ 'phone_id' ] === false ) {
            return false;
        }

        // 携帯端末IDが一致し、本登録された会員を検索する。
        $objQuery = &SC_Query_Ex::getSingletonInstance( );
        $exists = $objQuery->exists( 'dtb_customer', 'mobile_phone_id = ? AND del_flg = 0 AND status <> 1', array( $_SESSION[ 'mobile' ][ 'phone_id' ] ) );

        return $exists;
    }

    /**
    * 携帯端末IDを使用して会員を検索し、パスワードの照合を行う。
    * パスワードが合っている場合は会員情報を取得する。
    *
    * @param  string  $pass パスワード
    * @return boolean 該当する会員が存在し、パスワードが合っている場合は true、
    *                 それ以外の場合は false を返す。
    */
    public function getCustomerDataFromMobilePhoneIdPass( $pass ) {
        //docomo用にデータを取り出す。
        if( SC_MobileUserAgent_Ex::getCarrier( ) == 'docomo' ) {
            if( $_SESSION[ 'mobile' ][ 'phone_id' ] == '' && strlen( $_SESSION[ 'mobile' ][ 'phone_id' ] ) == 0 ) {
                $_SESSION[ 'mobile' ][ 'phone_id' ] = SC_MobileUserAgent_Ex::getId( );
            }
        }
        if( ! isset( $_SESSION[ 'mobile' ][ 'phone_id' ] ) || $_SESSION[ 'mobile' ][ 'phone_id' ] === false ) {
            return false;
        }

        // 携帯端末IDが一致し、本登録された会員を検索する。
        $sql = 'SELECT * FROM dtb_customer WHERE mobile_phone_id = ? AND del_flg = 0 AND status <> 1';
        $objQuery = &SC_Query_Ex::getSingletonInstance( );
        @list( $data ) = $objQuery->getAll( $sql, array( $_SESSION[ 'mobile' ][ 'phone_id' ] ) );

        // パスワードが合っている場合は、会員情報をcustomer_dataに格納してtrueを返す。
        if( SC_Utils_Ex::sfIsMatchHashPassword( $pass, $data[ 'password' ], $data[ 'salt' ] ) ) {
            $this->customer_data = $data;
            $this->startSession( );

            return true;
        }

        return false;
    }

    /**
    * 携帯端末IDを登録する。
    *
    * @return void
    */
    public function updateMobilePhoneId( ) {
        if( ! isset( $_SESSION[ 'mobile' ][ 'phone_id' ] ) || $_SESSION[ 'mobile' ][ 'phone_id' ] === false ) {
            return;
        }

        if( $this->customer_data[ 'mobile_phone_id' ] == $_SESSION[ 'mobile' ][ 'phone_id' ] ) {
            return;
        }

        $objQuery = &SC_Query_Ex::getSingletonInstance( );
        $sqlval = array( 'mobile_phone_id' => $_SESSION[ 'mobile' ][ 'phone_id' ] );
        $where = 'customer_id = ? AND del_flg = 0 AND status <> 1';
        $objQuery->update( 'dtb_customer', $sqlval, $where, array( $this->customer_data[ 'customer_id' ] ) );

        $this->customer_data[ 'mobile_phone_id' ] = $_SESSION[ 'mobile' ][ 'phone_id' ];
    }

    // パスワードを確認せずにログイン
    public function setLogin( $email ) {
        // 本登録された会員のみ
        $sql = 'SELECT * FROM dtb_customer WHERE (email = ? OR email_mobile = ?) AND del_flg = 0 AND status <> 1';
        $objQuery = &SC_Query_Ex::getSingletonInstance( );
        $result = $objQuery->getAll( $sql, array( $email, $email ) );
        $data = isset( $result[ 0 ] ) ? $result[ 0 ] : '';
        $this->customer_data = $data;
        $this->startSession( );
    }

}
Twitter: @asahina_alice