Changeset 19995


Ignore:
Timestamp:
2011/01/20 03:03:24 (11 years ago)
Author:
AMUAMU
Message:

#335 (パスワードリマインダの改修) の解決

Location:
branches/version-2_5-dev/data
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/Smarty/templates/default/forgot/index.tpl

    r19983 r19995  
    2323 
    2424  <div id="windowarea"> 
    25     <h2>パスワードを忘れた方</h2> 
    26     <p>ご登録時のメールアドレスを入力して「次へ」ボタンをクリックしてください。<br /> 
     25    <h2>パスワードの再発行</h2> 
     26    <p>ご登録時のメールアドレスと、ご登録されたお名前を入力して「次へ」ボタンをクリックしてください。<br /> 
    2727      <span class="attention">※新しくパスワードを発行いたしますので、お忘れになったパスワードはご利用できなくなります。</span></p> 
    2828    <form action="?" method="post" name="form1"> 
    2929      <input type="hidden" name="mode" value="mail_check" /> 
     30      <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
    3031      <div id="completebox"> 
    31         <p>メールアドレス:&nbsp;<!--★メールアドレス入力★--><input type="text" name="email" value="<!--{$tpl_login_email|h}-->" size="40" class="box300" style="<!--{$errmsg|sfGetErrorColor}-->; ime-mode: disabled;" /></p> 
     32        <p>メールアドレス:&nbsp; 
     33            <span class="attention"><!--{$arrErr.email}--></span> 
     34            <input type="text" name="email" value="<!--{$arrForm.email|default:$tpl_login_email|h}-->" size="40" class="box300" style="<!--{$arrErr.email|sfGetErrorColor}-->; ime-mode: disabled;" /><br /> 
     35        <br /> 
     36        お名前:&nbsp; 
     37          <span class="attention"><!--{$arrErr.name01}--><!--{$arrErr.name02}--></span> 
     38          姓&nbsp;<input type="text" 
     39                         class="box120" 
     40                         name="name01" 
     41                         value="<!--{$arrForm.name01|default:''|h}-->" 
     42                         maxlength="<!--{$smarty.const.STEXT_LEN}-->" 
     43                         style="<!--{$arrErr.name01|sfGetErrorColor}-->; ime-mode: active;" />  
     44          名&nbsp;<input type="text" class="box120" name="name02" 
     45                         value="<!--{$arrForm.name02|default:''|h}-->" 
     46                         maxlength="<!--{$smarty.const.STEXT_LEN}-->" 
     47                         style="<!--{$arrErr.name02|sfGetErrorColor}-->; ime-mode: active;" /> 
     48        </p> 
    3249        <span class="attention"><!--{$errmsg}--></span> 
    3350      </div> 
  • branches/version-2_5-dev/data/Smarty/templates/default/forgot/secret.tpl

    r19983 r19995  
    2323 
    2424  <div id="windowarea"> 
    25     <h2>パスワードを忘れた方</h2> 
     25    <h2>パスワードの再発行 秘密の質問の確認</h2> 
    2626    <p>ご登録時に入力した下記質問の答えを入力して「次へ」ボタンをクリックしてください。<br /> 
    2727      ※下記質問の答えをお忘れになられた場合は、<a href="mailto:<!--{$arrSiteInfo.email02|escape:'hex'}-->"><!--{$arrSiteInfo.email02|escape:'hexentitiy'}--></a>までご連絡ください。</p> 
     
    2929    <form action="?" method="post" name="form1"> 
    3030      <input type="hidden" name="mode" value="secret_check" /> 
     31      <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
     32      <!--{foreach key=key item=item from=$arrForm}--> 
     33        <!--{if $key ne 'reminder_answer'}--> 
     34      <input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 
     35        <!--{/if}--> 
     36      <!--{/foreach}--> 
     37 
    3138      <div id="completebox"> 
    32         <p><!--{$Reminder}-->:&nbsp;<!--★答え入力★--><input type="text" name="input_reminder" value="" size="40" class="box300" style="<!--{$errmsg|sfGetErrorColor}-->" /></p> 
     39        <p> 
     40          <span class="attention"><!--{$arrErr.reminder}--><!--{$arrErr.reminder_answer}--></span> 
     41          <!--{$arrReminder[$arrForm.reminder]}-->:&nbsp;<!--★答え入力★--><input type="text" name="reminder_answer" value="" size="40" class="box300" style="<!--{$arrErr.reminder_answer|sfGetErrorColor}-->" /></p> 
    3342        <span class="attention"><!--{$errmsg}--></span> 
    3443      </div> 
  • branches/version-2_5-dev/data/Smarty/templates/mobile/forgot/index.tpl

    r19961 r19995  
    3636<br> 
    3737 
    38 ■メールを送れない方は、ご登録時のメールアドレスを入力して「次へ」ボタンをクリックしてください。<br> 
     38■メールを送れない方は、ご登録時のメールアドレスとお名前を入力して「次へ」ボタンをクリックしてください。<br> 
    3939<!--{else}--> 
    40 ご登録時のメールアドレスを入力して「次へ」ボタンをクリックしてください。<br> 
     40ご登録時のメールアドレスとお名前を入力して「次へ」ボタンをクリックしてください。<br> 
    4141<!--{/if}--> 
    4242 
    4343<form action="?" method="post"> 
    4444<input type="hidden" name="mode" value="mail_check"> 
     45<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
    4546 
    46 メールアドレス:<input type="text" name="email" value="<!--{$tpl_login_email|h}-->" size="50" istyle="3"><br> 
     47メールアドレス:<font color="#FF0000"><!--{$arrErr.email}--></font><br> 
     48<input type="text" name="email" value="<!--{$arrForm.email|default:$tpl_login_email|h}-->" size="50" istyle="3"><br> 
     49<br> 
     50お名前:<font color="#FF0000"><!--{$arrErr.name01}--><!--{$arrErr.name02}--></font><br> 
     51 姓<input type="text" name="name01" value="<!--{$arrForm.name01|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" istyle="1"><br> 
     52 名<input type="text" name="name02" value="<!--{$arrForm.name02|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" istyle="1"><br> 
     53 
    4754 
    4855<center><input type="submit" value="次へ" name="next"></center> 
  • branches/version-2_5-dev/data/Smarty/templates/mobile/forgot/secret.tpl

    r19961 r19995  
    3030<br> 
    3131<form action="?" method="post"> 
     32<input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
    3233<input type="hidden" name="mode" value="secret_check"> 
     34      <!--{foreach key=key item=item from=$arrForm}--> 
     35        <!--{if $key ne 'reminder_answer'}--> 
     36      <input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 
     37        <!--{/if}--> 
     38      <!--{/foreach}--> 
    3339 
    34 <!--{$Reminder|h}-->:<input type="text" name="input_reminder" value="" size="40"><br> 
     40<!--{$arrReminder[$arrForm.reminder]|h}-->:<input type="text" name="reminder_answer" value="" size="40"><br> 
     41<font color="#FF0000"><!--{$arrErr.reminder}--><!--{$arrErr.reminder_answer}--></font><br> 
    3542 
    3643<center><input type="submit" value="次へ" name="next"></center> 
  • branches/version-2_5-dev/data/Smarty/templates/sphone/forgot/index.tpl

    r19983 r19995  
    2828    <form action="?" method="post" name="form1"> 
    2929      <input type="hidden" name="mode" value="mail_check" /> 
     30      <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
    3031      <div id="completebox"> 
    31         <p>メールアドレス:&nbsp;<!--★メールアドレス入力★--><input type="text" name="email" value="<!--{$tpl_login_email|h}-->" size="40" class="box300" style="<!--{$errmsg|sfGetErrorColor}-->; ime-mode: disabled;" /></p> 
     32        <p>メールアドレス:&nbsp;<!--★メールアドレス入力★--><input type="text" name="email" value="<!--{$tpl_login_email|h}-->" size="40" class="box300" style="<!--{$errmsg|sfGetErrorColor}-->; ime-mode: disabled;" /><br /> 
     33        <br /> 
     34        お名前:&nbsp; 
     35          <span class="attention"><!--{$arrErr.name01}--><!--{$arrErr.name02}--></span> 
     36          姓&nbsp;<input type="text" 
     37                         class="box120" 
     38                         name="name01" 
     39                         value="<!--{$arrForm.name01|default:''|h}-->" 
     40                         maxlength="<!--{$smarty.const.STEXT_LEN}-->" 
     41                         style="<!--{$arrErr.name01|sfGetErrorColor}-->; ime-mode: active;" />  
     42          名&nbsp;<input type="text" class="box120" name="name02" 
     43                         value="<!--{$arrForm.name02|default:''|h}-->" 
     44                         maxlength="<!--{$smarty.const.STEXT_LEN}-->" 
     45                         style="<!--{$arrErr.name02|sfGetErrorColor}-->; ime-mode: active;" /> 
     46        </p> 
    3247        <span class="attention"><!--{$errmsg}--></span> 
    3348      </div> 
  • branches/version-2_5-dev/data/Smarty/templates/sphone/forgot/secret.tpl

    r19983 r19995  
    2929    <form action="?" method="post" name="form1"> 
    3030      <input type="hidden" name="mode" value="secret_check" /> 
     31      <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 
     32      <!--{foreach key=key item=item from=$arrForm}--> 
     33        <!--{if $key ne 'reminder_answer'}--> 
     34      <input type="hidden" name="<!--{$key}-->" value="<!--{$item|h}-->" /> 
     35        <!--{/if}--> 
     36      <!--{/foreach}--> 
     37 
    3138      <div id="completebox"> 
    32         <p><!--{$Reminder}-->:&nbsp;<!--★答え入力★--><input type="text" name="input_reminder" value="" size="40" class="box300" style="<!--{$errmsg|sfGetErrorColor}-->" /></p> 
     39        <p> 
     40          <span class="attention"><!--{$arrErr.reminder}--><!--{$arrErr.reminder_answer}--></span> 
     41          <!--{$arrReminder[$arrForm.reminder]}-->:&nbsp;<!--★答え入力★--><input type="text" name="reminder_answer" value="" size="40" class="box300" style="<!--{$arrErr.reminder_answer|sfGetErrorColor}-->" /></p> 
    3342        <span class="attention"><!--{$errmsg}--></span> 
    3443      </div> 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_Customer.php

    r19986 r19995  
    9393        $array["update_date"] = "now()";    // 更新日 
    9494         
    95         //-- パスワードの更新がある場合は暗号化 
    96         $salt = ""; 
    97         if ($array["password"] != DEFAULT_PASSWORD) { 
     95        // salt値の生成(insert時)または取得(update時)。 
     96        if(is_numeric($customer_id)) { 
     97            $salt = $objQuery->get("salt", "dtb_customer", "customer_id = ? ", array($customer_id)); 
     98        }else{ 
    9899            $salt = SC_Utils_Ex::sfGetRandomString(10); 
    99100            $array["salt"] = $salt; 
     101        } 
     102        //-- パスワードの更新がある場合は暗号化 
     103        if ($array["password"] == DEFAULT_PASSWORD or $array["password"] == "") { 
     104            //更新しない 
     105            unset($array["password"]); 
     106        } else { 
    100107            $array["password"] = SC_Utils_Ex::sfGetHashString($array["password"], $salt); 
    101         } else { 
    102             unset($array["password"]); 
    103         } 
    104         if ($array["reminder_answer"] != DEFAULT_PASSWORD) { 
    105             if(is_numeric($customer_id) and $salt == "") { 
    106                 $salt = $objQuery->get("salt", "dtb_customer", "customer_id = ? ", array($array['customer_id'])); 
    107             } 
     108        } 
     109        //-- 秘密の質問の更新がある場合は暗号化 
     110        if ($array["reminder_answer"] == DEFAULT_PASSWORD or $array["reminder_answer"] == "") { 
     111            //更新しない 
     112            unset($array["reminder_answer"]); 
     113        } else { 
    108114            $array["reminder_answer"] = SC_Utils_Ex::sfGetHashString($array["reminder_answer"], $salt); 
    109115        } 
    110         
     116 
    111117        //-- 編集登録実行 
    112118        if (is_numeric($customer_id)){ 
     
    164170     *   @return integer  0:登録可能     1:登録済み   2:再登録制限期間内削除ユーザー  3:自分のアドレス 
    165171     */ 
    166     function lfCheckRegisterUserFromEmail($email){ 
     172    function sfCheckRegisterUserFromEmail($email){ 
    167173        $return = 0; 
    168174         
  • branches/version-2_5-dev/data/class/pages/entry/LC_Page_Entry.php

    r19979 r19995  
    307307         
    308308        // 現会員の判定 → 現会員もしくは仮登録中は、メアド一意が前提になってるので同じメアドで登録不可 
    309         $register_user_flg =  SC_Helper_Customer_Ex::lfCheckRegisterUserFromEmail($arrRet["email"]); 
     309        $register_user_flg =  SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($arrRet["email"]); 
    310310        switch($register_user_flg) { 
    311311            case 1: 
  • branches/version-2_5-dev/data/class/pages/forgot/LC_Page_Forgot.php

    r19961 r19995  
    3636    // {{{ properties 
    3737 
     38    /** フォームパラメータの配列 */ 
     39    var $objFormParam; 
     40     
     41    /** 秘密の質問の答え */ 
     42    var $arrReminder; 
     43 
     44    /** 変更後パスワード */ 
     45    var $temp_password; 
     46     
    3847    /** エラーメッセージ */ 
    3948    var $errmsg; 
    40  
    41     /** 秘密の質問の答え */ 
    42     var $arrReminder; 
    43  
    44     /** 変更後パスワード */ 
    45     var $temp_password; 
    4649 
    4750    // }}} 
     
    5861        $this->tpl_mainpage = 'forgot/index.tpl'; 
    5962        $this->tpl_mainno = ''; 
     63        $masterData = new SC_DB_MasterData_Ex(); 
     64        $this->arrReminder = $masterData->getMasterData("mtb_reminder"); 
     65        $this->isMobile = Net_UserAgent_Mobile::isMobile(); 
     66        $this->httpCacheControl('nocache'); 
    6067    } 
    6168 
     
    7784    function action() { 
    7885        $objQuery = new SC_Query(); 
    79         $objSess = new SC_Session(); 
    80  
    81         // 店舗基本情報を取得 
    82         $objDb = new SC_Helper_DB_Ex(); 
    83         $CONF = $objDb->sfGetBasisData(); 
    84  
    85         $masterData = new SC_DB_MasterData_Ex(); 
    86         $arrReminder = $masterData->getMasterData("mtb_reminder"); 
    87  
    88         // クッキー管理クラス 
    89         $objCookie = new SC_Cookie(COOKIE_EXPIRE); 
    90  
     86         
     87        if ($_SERVER["REQUEST_METHOD"] == "POST") { 
     88            if (!SC_Helper_Session_Ex::isValidToken()) { 
     89                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true); 
     90            } 
     91        } 
    9192        if (!isset($_POST['mode'])) $_POST['mode'] = ""; 
    92         if (!isset($_POST['email'])) $_POST['email'] = ""; 
    93  
    94         if ( $_POST['mode'] == 'mail_check' ){ 
    95             //メアド入力時 
    96             $_POST['email'] = strtolower($_POST['email']); 
    97             // FIXME DBチェックの前に妥当性チェックするべき 
    98             $sql = "SELECT * FROM dtb_customer WHERE (email = ? OR email_mobile = ?) AND status = 2 AND del_flg = 0"; 
    99             $result = $objQuery->getAll($sql, array($_POST['email'], $_POST['email']) ); 
    100  
    101             // 本会員登録済みの場合 
    102             if (isset($result[0]['reminder']) &&  $result[0]['reminder']){ 
    103                 // 入力emailが存在する 
    104                 $_SESSION['forgot']['email'] = $_POST['email']; 
    105                 $_SESSION['forgot']['reminder'] = $result[0]['reminder']; 
    106                 // ヒミツの答え入力画面 
    107                 $this->Reminder = $arrReminder[$_SESSION['forgot']['reminder']]; 
    108                 $this->tpl_mainpage = 'forgot/secret.tpl'; 
    109             } else { 
    110                 $sql = "SELECT customer_id FROM dtb_customer WHERE (email = ? OR email_mobile = ?) AND status = 1 AND del_flg = 0"; //仮登録中の確認 
    111                 $result = $objQuery->getAll($sql, array($_POST['email'], $_POST['email']) ); 
    112                 if ($result) { 
    113                     $this->errmsg = "ご入力のemailアドレスは現在仮登録中です。<br>登録の際にお送りしたメールのURLにアクセスし、<br>本会員登録をお願いします。"; 
    114                 } else {        // 登録していない場合 
    115                     $this->errmsg = "ご入力のemailアドレスは登録されていません"; 
    116                 } 
    117             } 
    118  
    119         } elseif( $_POST['mode'] == 'secret_check' ){ 
    120             //ヒミツの答え入力時 
    121  
    122             if ( $_SESSION['forgot']['email'] ) { 
    123                 // ヒミツの答えの回答が正しいかチェック 
    124  
    125                 $sql = "SELECT * FROM dtb_customer WHERE (email = ? OR email_mobile = ?) AND del_flg = 0"; 
    126                 $result = $objQuery->getAll($sql, array($_SESSION['forgot']['email'], $_SESSION['forgot']['email'])); 
    127                 $data = $result[0]; 
    128  
    129                 if ( $data['reminder_answer'] === $_POST['input_reminder'] ){ 
    130                     // ヒミツの答えが正しい 
    131  
    132                     // 新しいパスワードを設定する 
    133                     $this->temp_password = GC_Utils_Ex::gfMakePassword(8); 
    134  
    135                     if(FORGOT_MAIL == 1) { 
    136                         // メールで変更通知をする 
    137                         $this->lfSendMail($CONF, $_SESSION['forgot']['email'], $data['name01'], $this->temp_password); 
    138                     } 
    139  
    140                     // DBを書き換える 
    141                     $sql = "UPDATE dtb_customer SET password = ?, update_date = now() WHERE customer_id = ?"; 
    142                     $objQuery->query( $sql, array( sha1($this->temp_password . ":" . AUTH_MAGIC) ,$data['customer_id']) ); 
    143  
    144                     // 完了画面の表示 
    145                     $this->tpl_mainpage = 'forgot/complete.tpl'; 
    146  
    147                     // セッション変数の解放 
    148                     $_SESSION['forgot'] = array(); 
    149                     unset($_SESSION['forgot']); 
    150  
    151                 } else { 
    152                     // ヒミツの答えが正しくない 
    153  
    154                     $this->Reminder = $arrReminder[$_SESSION['forgot']['reminder']]; 
    155                     $this->errmsg = "パスワードを忘れたときの質問に対する回答が正しくありません"; 
    156                     $this->tpl_mainpage = 'forgot/secret.tpl'; 
    157  
    158                 } 
    159  
    160  
    161             } else { 
    162                 // アクセス元が不正または、セッション保持期間が切れている 
    163                 $this->errmsg = "emailアドレスを再度登録してください。<br />前回の入力から時間が経っていますと、本メッセージが表示される可能性があります。"; 
    164             } 
    165         } 
    166  
    167         // デフォルト入力 
    168         if($_POST['email'] != "") { 
    169             // POST値を入力 
    170             $this->tpl_login_email = $_POST['email']; 
    171         } else { 
    172             // クッキー値を入力 
    173             $this->tpl_login_email = $objCookie->getCookie('login_email'); 
    174         } 
    175  
    176         if (defined("MOBILE_SITE") && MOBILE_SITE) { 
     93 
     94        switch($_POST["mode"]) { 
     95            case 'mail_check': 
     96                $this->lfForgotMailCheck(); 
     97                break; 
     98            case 'secret_check': 
     99                $this->lfForgotSecretCheck(); 
     100                break; 
     101            default: 
     102                $this->lfForgotDefault(); 
     103                break; 
     104        } 
     105 
     106        $this->transactionid = SC_Helper_Session_Ex::getToken(); 
     107 
     108        if ($this->isMobile) { 
    177109            // モバイルサイトの場合はトークン生成 
    178110            $this->createMobileToken(); 
     
    182114        } 
    183115    } 
     116     
     117    // 最初に開いた時の処理(メールアドレス入力画面) 
     118    function lfForgotDefault() { 
     119        // クッキー管理クラス 
     120        $objCookie = new SC_Cookie(COOKIE_EXPIRE); 
     121        $this->tpl_login_email = $objCookie->getCookie('login_email'); 
     122    } 
     123     
     124    // メールアドレス確認(秘密の質問入力画面) 
     125    function lfForgotMailCheck() { 
     126        // パラメータ管理クラス,パラメータ情報の初期化 
     127        $this->objFormParam = new SC_FormParam(); 
     128        $this->lfMailCheckInitParam(); 
     129        // POST値の取得 
     130        $this->objFormParam->setParam($_POST); 
     131        $this->objFormParam->convParam(); 
     132        $this->objFormParam->toLower('email'); 
     133        $this->arrForm = $this->objFormParam->getHashArray(); 
     134        //エラーチェック 
     135        $this->arrErr = $this->lfMailCheckErrorCheck(); 
     136        if (count($this->arrErr) == 0) { 
     137            $email = $this->arrForm['email']; 
     138            $objQuery =& SC_Query::getSingletonInstance(); 
     139            $where = "(email Like ? OR email_mobile Like ?) AND name01 Like ? AND name02 Like ? AND del_flg = 0"; 
     140            $arrVal = array($this->arrForm['email'], $this->arrForm['email'], $this->arrForm['name01'], $this->arrForm['name02']); 
     141            $result = $objQuery->select("reminder, status", "dtb_customer", $where, $arrVal); 
     142            if (isset($result[0]['reminder']) and isset($this->arrReminder[$result[0]['reminder']])) { 
     143                if($result[0]['status'] == '2') { 
     144                    // 有効な情報であるため、秘密の質問確認へ遷移 
     145                    $this->tpl_mainpage = 'forgot/secret.tpl'; 
     146                    $this->arrForm['reminder'] = $result[0]['reminder']; 
     147                } else if ($result[0]['status'] == '1') { 
     148                    $this->errmsg = 'ご入力のemailアドレスは現在仮登録中です。<br/>登録の際にお送りしたメールのURLにアクセスし、<br/>本会員登録をお願いします。'; 
     149                } 
     150            } else { 
     151                $this->errmsg = 'お名前に間違いがあるか、このメールアドレスは登録されていません。'; 
     152            } 
     153        } 
     154    } 
     155 
     156    // メールアドレス確認におけるエラーチェック 
     157    function lfMailCheckErrorCheck() { 
     158        // 入力データを渡す 
     159        $arrRet = $this->objFormParam->getHashArray(); 
     160        $objErr = new SC_CheckError($arrRet); 
     161        $objErr->arrErr = $this->objFormParam->checkError(); 
     162        return $objErr->arrErr; 
     163    } 
     164     
     165    // メールアドレス確認におけるパラメーター情報の初期化 
     166    function lfMailCheckInitParam() { 
     167        $this->objFormParam->addParam("お名前(姓)", 'name01', STEXT_LEN, "aKV", array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK")); 
     168        $this->objFormParam->addParam("お名前(名)", 'name02', STEXT_LEN, "aKV", array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" , "MAX_LENGTH_CHECK")); 
     169        if ($this->isMobile == false){ 
     170            $this->objFormParam->addParam('メールアドレス', "email", MTEXT_LEN, "a", array("NO_SPTAB", "EXIST_CHECK", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); 
     171        } else { 
     172            $this->objFormParam->addParam('メールアドレス', "email", MTEXT_LEN, "a", array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK","MOBILE_EMAIL_CHECK")); 
     173        } 
     174         
     175    } 
     176 
     177    // 秘密の質問確認 
     178    function lfForgotSecretCheck() { 
     179        // パラメータ管理クラス,パラメータ情報の初期化 
     180        $this->objFormParam = new SC_FormParam(); 
     181        $this->lfSecretCheckInitParam(); 
     182        // POST値の取得 
     183        $this->objFormParam->setParam($_POST); 
     184        $this->objFormParam->convParam(); 
     185        $this->objFormParam->toLower('email'); 
     186        $this->arrForm = $this->objFormParam->getHashArray(); 
     187        //エラーチェック 
     188        $this->arrErr = $this->lfSecretCheckErrorCheck(); 
     189        if (count($this->arrErr) == 0) { 
     190            $email = $this->arrForm['email']; 
     191            $objQuery =& SC_Query::getSingletonInstance(); 
     192            $where = "(email Like ? OR email_mobile Like ?) AND name01 Like ? AND name02 Like ? AND status = 2 AND del_flg = 0"; 
     193            $arrVal = array($this->arrForm['email'], $this->arrForm['email'], $this->arrForm['name01'], $this->arrForm['name02']); 
     194            $result = $objQuery->select("customer_id, reminder, reminder_answer, salt", "dtb_customer", $where, $arrVal); 
     195            if (isset($result[0]['reminder']) and isset($this->arrReminder[$result[0]['reminder']]) 
     196                    and $result[0]['reminder'] == $this->arrForm['reminder']) { 
     197                 
     198                if (SC_Utils_Ex::sfIsMatchHashPassword($this->arrForm['reminder_answer'], $result[0]['reminder_answer'], $result[0]['salt'])) { 
     199                    // 秘密の答えが一致 
     200                    // 新しいパスワードを設定する 
     201                    $this->temp_password = GC_Utils_Ex::gfMakePassword(8); 
     202 
     203                    if(FORGOT_MAIL == 1) { 
     204                        // メールで変更通知をする 
     205                        $objDb = new SC_Helper_DB_Ex(); 
     206                        $CONF = $objDb->sfGetBasisData(); 
     207                        $this->lfSendMail($CONF, $this->arrForm['email'], $this->arrForm['name01'], $this->temp_password); 
     208                    } 
     209                    $sqlval = array(); 
     210                    $sqlval['password'] = $this->temp_password; 
     211                    SC_Helper_Customer_Ex::sfEditCustomerData($sqlval, $result[0]['customer_id']); 
     212 
     213                    // 完了ページへ移動する 
     214                    $this->tpl_mainpage = 'forgot/complete.tpl'; 
     215                    // transactionidの都合で呼び出し元をリロード。 
     216                    $this->tpl_onload .= 'opener.location.reload(true);'; 
     217                } else { 
     218                    // 秘密の答えが一致しなかった 
     219                    $this->tpl_mainpage = 'forgot/secret.tpl'; 
     220                    $this->errmsg = '秘密の質問が一致しませんでした。'; 
     221                } 
     222            } else { 
     223                //不正なアクセス 
     224                SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true); 
     225            } 
     226        } else { 
     227            $this->tpl_mainpage = 'forgot/secret.tpl'; 
     228        } 
     229    } 
     230     
     231    function lfSecretCheckInitParam() { 
     232        // メールチェックと同等のチェックを再度行う 
     233        $this->lfMailCheckInitParam(); 
     234        // 秘密の質問チェックの追加 
     235        $this->objFormParam->addParam("パスワード確認用の質問", "reminder", STEXT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK")); 
     236        $this->objFormParam->addParam("パスワード確認用の質問の答え", "reminder_answer", STEXT_LEN, "aKV", array("EXIST_CHECK","SPTAB_CHECK" , "MAX_LENGTH_CHECK")); 
     237    } 
     238 
     239    // 秘密の答え確認におけるエラーチェック 
     240    function lfSecretCheckErrorCheck() { 
     241        // 入力データを渡す 
     242        $arrRet = $this->objFormParam->getHashArray(); 
     243        $objErr = new SC_CheckError($arrRet); 
     244        $objErr->arrErr = $this->objFormParam->checkError(); 
     245        return $objErr->arrErr; 
     246    } 
    184247 
    185248    /** 
     
    200263     * @param string $temp_password 変更後のパスワード 
    201264     * @return void 
     265     * 
     266     * FIXME: メールテンプレート編集の方に足すのが望ましい? 
    202267     */ 
    203268    function lfSendMail($CONF, $email, $customer_name, $temp_password){ 
     
    230295     * 
    231296     * @return void 
     297     * 
     298     * FIXME: この処理の有効性が不明 
    232299     */ 
    233300    function createMobileToken() { 
     
    238305            if ($token !== false) { 
    239306                $objPage->tpl_kara_mail_to = MOBILE_KARA_MAIL_ADDRESS_USER . MOBILE_KARA_MAIL_ADDRESS_DELIMITER . 'forgot_' . $token . '@' . MOBILE_KARA_MAIL_ADDRESS_DOMAIN; 
    240     } 
    241 } 
     307            } 
     308        } 
    242309    } 
    243310} 
  • branches/version-2_5-dev/data/class/pages/mypage/LC_Page_Mypage_Change.php

    r19991 r19995  
    240240                 
    241241        // 現会員の判定 → 現会員もしくは仮登録中は、メアド一意が前提になってるので同じメアドで登録不可 
    242         $register_user_flg = SC_Helper_Customer_Ex::lfCheckRegisterUserFromEmail($arrRet["email"]); 
     242        $register_user_flg = SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($arrRet["email"]); 
    243243        switch($register_user_flg) { 
    244244            case 1: 
Note: See TracChangeset for help on using the changeset viewer.