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

Source for file LC_Page_Forgot.php

Documentation is available at LC_Page_Forgot.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. // {{{ requires
  25. require_once CLASS_EX_REALDIR 'page_extends/LC_Page_Ex.php';
  26.  
  27. /**
  28.  * パスワード発行 のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id: LC_Page_Forgot.php 20970 2011-06-10 10:27:24Z Seasoft $
  33.  */
  34. class LC_Page_Forgot extends LC_Page_Ex {
  35.  
  36.     // {{{ properties
  37.  
  38.     /** フォームパラメーターの配列 */
  39.     var $objFormParam;
  40.  
  41.     /** 秘密の質問の答え */
  42.     var $arrReminder;
  43.  
  44.     /** 変更後パスワード */
  45.     var $temp_password;
  46.  
  47.     /** エラーメッセージ */
  48.     var $errmsg;
  49.  
  50.     // }}}
  51.     // {{{ functions
  52.  
  53.     /**
  54.      * Page を初期化する.
  55.      *
  56.      * @return void 
  57.      */
  58.     function init({
  59.         parent::init();
  60.         $this->tpl_title "パスワードを忘れた方";
  61.         $this->tpl_mainpage 'forgot/index.tpl';
  62.         $this->tpl_mainno '';
  63.         $masterData new SC_DB_MasterData_Ex();
  64.         $this->arrReminder = $masterData->getMasterData("mtb_reminder");
  65.         $this->device_type SC_Display_Ex::detectDevice();
  66.         $this->httpCacheControl('nocache');
  67.         // デフォルトログインアドレスロード
  68.         $objCookie new SC_Cookie_Ex(COOKIE_EXPIRE);
  69.         $this->tpl_login_email $objCookie->getCookie('login_email');        
  70.     }
  71.  
  72.     /**
  73.      * Page のプロセス.
  74.      *
  75.      * @return void 
  76.      */
  77.     function process({
  78.         $this->action();
  79.         $this->sendResponse();
  80.     }
  81.  
  82.     /**
  83.      * Page のアクション.
  84.      *
  85.      * @return void 
  86.      */
  87.     function action({
  88.         // パラメーター管理クラス
  89.         $objFormParam new SC_FormParam_Ex();
  90.  
  91.         switch($this->getMode()) {
  92.             case 'mail_check':
  93.                 $this->lfInitMailCheckParam($objFormParam$this->device_type);
  94.                 $objFormParam->setParam($_POST);
  95.                 $objFormParam->convParam();
  96.                 $objFormParam->toLower('email');
  97.                 $this->arrForm $objFormParam->getHashArray();
  98.                 $this->arrErr $objFormParam->checkError();
  99.                 if (SC_Utils_Ex::isBlank($this->arrErr)) {
  100.                     $this->errmsg = $this->lfCheckForgotMail($this->arrForm$this->arrReminder);
  101.                     if(SC_Utils_Ex::isBlank($this->errmsg)) {
  102.                         $this->tpl_mainpage 'forgot/secret.tpl';
  103.                     }
  104.                 }
  105.                 break;
  106.             case 'secret_check':
  107.                 $this->lfInitSecretCheckParam($objFormParam$this->device_type);
  108.                 $objFormParam->setParam($_POST);
  109.                 $objFormParam->convParam();
  110.                 $objFormParam->toLower('email');
  111.                 $this->arrForm $objFormParam->getHashArray();
  112.                 $this->arrErr $objFormParam->checkError();
  113.                 if (SC_Utils_Ex::isBlank($this->arrErr)) {
  114.                     $this->errmsg = $this->lfCheckForgotSecret($this->arrForm$this->arrReminder);
  115.                     if(SC_Utils_Ex::isBlank($this->errmsg)) {
  116.                         // 完了ページへ移動する
  117.                         $this->tpl_mainpage 'forgot/complete.tpl';
  118.                         // transactionidを更新させたいので呼び出し元(ログインフォーム側)をリロード。
  119.                         $this->tpl_onload .= 'opener.location.reload(true);';
  120.                     }else{
  121.                         // 秘密の答えが一致しなかった
  122.                         $this->tpl_mainpage 'forgot/secret.tpl';
  123.                     }
  124.                 }else{
  125.                     // 入力値エラー
  126.                     $this->tpl_mainpage 'forgot/secret.tpl';
  127.                 }
  128.                 break;
  129.             default:
  130.                 break;
  131.         }
  132.  
  133.         // ポップアップ用テンプレート設定
  134.         if($this->device_type == DEVICE_TYPE_PC{
  135.             $this->setTemplate($this->tpl_mainpage);
  136.         }
  137.     }
  138.  
  139.     /**
  140.      * メールアドレス・名前確認
  141.      *
  142.      * @param array $arrForm フォーム入力値
  143.      * @param array $arrReminder リマインダー質問リスト
  144.      * @return string エラー文字列 問題が無ければNULL
  145.      */
  146.     function lfCheckForgotMail(&$arrForm&$arrReminder{
  147.         $errmsg NULL;
  148.         $objQuery =SC_Query_Ex::getSingletonInstance();
  149.         $where "(email Like ? OR email_mobile Like ?) AND name01 Like ? AND name02 Like ? AND del_flg = 0";
  150.         $arrVal array($arrForm['email']$arrForm['email']$arrForm['name01']$arrForm['name02']);
  151.         $result $objQuery->select("reminder, status""dtb_customer"$where$arrVal);
  152.         if (isset($result[0]['reminder']and isset($arrReminder[$result[0]['reminder']])) {
  153.             // 会員状態の確認
  154.             if($result[0]['status'== '2'{
  155.                 // 正会員
  156.                 $arrForm['reminder'$result[0]['reminder'];
  157.             else if ($result[0]['status'== '1'{
  158.                 // 仮会員
  159.                 $errmsg 'ご入力のemailアドレスは現在仮登録中です。<br/>登録の際にお送りしたメールのURLにアクセスし、<br/>本会員登録をお願いします。';
  160.             }
  161.         else {
  162.             $errmsg 'お名前に間違いがあるか、このメールアドレスは登録されていません。';
  163.         }
  164.         return $errmsg;
  165.     }
  166.  
  167.     /**
  168.      * メールアドレス確認におけるパラメーター情報の初期化
  169.      *
  170.      * @param array $objFormParam フォームパラメータークラス
  171.      * @param array $device_type デバイスタイプ
  172.      * @return void 
  173.      */
  174.     function lfInitMailCheckParam(&$objFormParam$device_type{
  175.         $objFormParam->addParam("お名前(姓)"'name01'STEXT_LEN'aKV'array("EXIST_CHECK""NO_SPTAB""SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
  176.         $objFormParam->addParam("お名前(名)"'name02'STEXT_LEN'aKV'array("EXIST_CHECK""NO_SPTAB""SPTAB_CHECK" "MAX_LENGTH_CHECK"));
  177.         if ($device_type === DEVICE_TYPE_MOBILE){
  178.             $objFormParam->addParam('メールアドレス''email'null'a'array("EXIST_CHECK""EMAIL_CHECK""NO_SPTAB" ,"EMAIL_CHAR_CHECK""MOBILE_EMAIL_CHECK"));
  179.         else {
  180.             $objFormParam->addParam('メールアドレス''email'null'a'array("NO_SPTAB""EXIST_CHECK""EMAIL_CHECK""SPTAB_CHECK" ,"EMAIL_CHAR_CHECK"));
  181.         }
  182.         return;
  183.     }
  184.  
  185.     /**
  186.      * 秘密の質問確認
  187.      *
  188.      * @param array $arrForm フォーム入力値
  189.      * @param array $arrReminder リマインダー質問リスト
  190.      * @return string エラー文字列 問題が無ければNULL
  191.      */
  192.     function lfCheckForgotSecret(&$arrForm&$arrReminder{
  193.         $errmsg '';
  194.         $objQuery =SC_Query_Ex::getSingletonInstance();
  195.         $cols "customer_id, reminder, reminder_answer, salt";
  196.         $table "dtb_customer";
  197.         $where "(email Like ? OR email_mobile Like ?)"
  198.                     . " AND name01 Like ? AND name02 Like ?"
  199.                     . " AND status = 2 AND del_flg = 0";
  200.         $arrVal array($arrForm['email']$arrForm['email'],
  201.                             $arrForm['name01']$arrForm['name02']);
  202.         $result $objQuery->select($cols$table$where$arrVal);
  203.         if (isset($result[0]['reminder']and isset($arrReminder[$result[0]['reminder']])
  204.                 and $result[0]['reminder'== $arrForm['reminder']{
  205.  
  206.             $is_authorized false;
  207.             if (empty($result[0]['salt'])) {
  208.                 // 旧バージョン(2.11未満)からの移行を考慮
  209.                 if ($result[0]['reminder_answer'== $arrForm['reminder_answer']{
  210.                     $is_authorized true;
  211.                 }
  212.             }
  213.             elseif (SC_Utils_Ex::sfIsMatchHashPassword($arrForm['reminder_answer'],
  214.                      $result[0]['reminder_answer']$result[0]['salt'])) {
  215.                 $is_authorized true;
  216.             }
  217.  
  218.             if ($is_authorized{
  219.                 // 秘密の答えが一致
  220.                 // 新しいパスワードを設定する
  221.                 $new_password GC_Utils_Ex::gfMakePassword(8);
  222.                 if(FORGOT_MAIL == 1{
  223.                     // メールで変更通知をする
  224.                     $objDb new SC_Helper_DB_Ex();
  225.                     $CONF $objDb->sfGetBasisData();
  226.                     $this->lfSendMail($CONF$arrForm['email']$arrForm['name01']$new_password);
  227.                 }
  228.                 $sqlval array();
  229.                 $sqlval['password'$new_password;
  230.                 SC_Helper_Customer_Ex::sfEditCustomerData($sqlval$result[0]['customer_id']);
  231.                 $arrForm['new_password'$new_password;
  232.             else {
  233.                 // 秘密の答えが一致しなかった
  234.                 $errmsg '秘密の質問が一致しませんでした。';
  235.             }
  236.         else {
  237.             //不正なアクセス リマインダー値が前画面と異なる。
  238.             // 新リファクタリング基準ではここで遷移は不許可なのでエラー表示
  239.             //SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true);
  240.             $errmsg '秘密の質問が一致しませんでした。';
  241.         }
  242.         return $errmsg;
  243.     }
  244.  
  245.     /**
  246.      * 秘密の質問確認におけるパラメーター情報の初期化
  247.      *
  248.      * @param array $objFormParam フォームパラメータークラス
  249.      * @param array $device_type デバイスタイプ
  250.      * @return void 
  251.      */
  252.     function lfInitSecretCheckParam(&$objFormParam$device_type{
  253.         // メールチェックと同等のチェックを再度行う
  254.         $this->lfInitMailCheckParam($objFormParam$device_type);
  255.         // 秘密の質問チェックの追加
  256.         $objFormParam->addParam("パスワード確認用の質問"'reminder'STEXT_LEN'n'array("EXIST_CHECK""NUM_CHECK"));
  257.         $objFormParam->addParam("パスワード確認用の質問の答え""reminder_answer"STEXT_LEN'aKV'array("EXIST_CHECK""SPTAB_CHECK""MAX_LENGTH_CHECK"));
  258.         return;
  259.     }
  260.  
  261.     /**
  262.      * デストラクタ.
  263.      *
  264.      * @return void 
  265.      */
  266.     function destroy({
  267.         parent::destroy();
  268.     }
  269.  
  270.     /**
  271.      * パスワード変更お知らせメールを送信する.
  272.      *
  273.      * @param array $CONF 店舗基本情報の配列
  274.      * @param string $email 送信先メールアドレス
  275.      * @param string $customer_name 送信先氏名
  276.      * @param string $new_password 変更後の新パスワード
  277.      * @return void 
  278.      *
  279.      *  FIXME: メールテンプレート編集の方に足すのが望ましい
  280.      */
  281.     function lfSendMail(&$CONF$email$customer_name$new_password){
  282.         // パスワード変更お知らせメール送信
  283.         $objMailText new SC_SiteView_Ex(false);
  284.         $objMailText->assign('customer_name'$customer_name);
  285.         $objMailText->assign('new_password'$new_password);
  286.         $toCustomerMail $objMailText->fetch("mail_templates/forgot_mail.tpl");
  287.         $objHelperMail  new SC_Helper_Mail_Ex();
  288.         // メール送信オブジェクトによる送信処理
  289.         $objMail new SC_SendMail();
  290.         $objMail->setItem(
  291.             '' //宛先
  292.             $objHelperMail->sfMakeSubject('パスワードを変更いたしました。')
  293.             $toCustomerMail //本文
  294.             $CONF['email03'//配送元アドレス
  295.             $CONF['shop_name'// 配送元名
  296.             $CONF['email03'// reply to
  297.             $CONF['email04'//return_path
  298.             $CONF['email04'// errors_to
  299.             );
  300.         $objMail->setTo($email$customer_name ." 様");
  301.         $objMail->sendMail();
  302.         return;
  303.     }
  304.  
  305. }
  306. ?>

Documentation generated on Fri, 24 Feb 2012 14:01:58 +0900 by Seasoft