Changeset 20104
- Timestamp:
- 2011/02/06 22:31:40 (13 years ago)
- Location:
- branches/version-2_5-dev/data
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/Smarty/templates/default/forgot/complete.tpl
r19983 r20104 28 28 <form action="?" method="post" name="form1"> 29 29 <div id="completebox"> 30 <p><em><!--{$temp_password}--></em></p> 30 <!--{if $smarty.const.FORGOT_MAIL != 1}--> 31 <p><em><!--{$arrForm.new_password}--></em></p> 32 <!--{else}--> 33 <p><em>ご登録メールアドレスに送付致しました。</em></p> 34 <!--{/if}--> 31 35 </div> 32 36 <div class="btn"> -
branches/version-2_5-dev/data/class/pages/forgot/LC_Page_Forgot.php
r20041 r20104 63 63 $masterData = new SC_DB_MasterData_Ex(); 64 64 $this->arrReminder = $masterData->getMasterData("mtb_reminder"); 65 $this-> isMobile = Net_UserAgent_Mobile::isMobile();65 $this->device_type = SC_Display::detectDevice(); 66 66 $this->httpCacheControl('nocache'); 67 // デフォルトログインアドレスロード 68 $objCookie = new SC_Cookie(COOKIE_EXPIRE); 69 $this->tpl_login_email = $objCookie->getCookie('login_email'); 67 70 } 68 71 … … 83 86 */ 84 87 function action() { 85 $objQuery = new SC_Query(); 86 88 // 不正アクセスチェック 87 89 if ($_SERVER["REQUEST_METHOD"] == "POST") { 88 90 if (!SC_Helper_Session_Ex::isValidToken()) { … … 90 92 } 91 93 } 94 95 // パラメータ管理クラス 96 $objFormParam = new SC_FormParam(); 97 92 98 switch($this->getMode()) { 93 99 case 'mail_check': 94 $this->lfForgotMailCheck(); 100 $this->lfInitMailCheckParam($objFormParam, $this->device_type); 101 $objFormParam->setParam($_POST); 102 $objFormParam->convParam(); 103 $objFormParam->toLower('email'); 104 $this->arrForm = $objFormParam->getHashArray(); 105 $this->arrErr = $objFormParam->checkError(); 106 if (SC_Utils_Ex::isBlank($this->arrErr)) { 107 $this->errmsg = $this->lfCheckForgotMail($this->arrForm, $this->arrReminder); 108 if(SC_Utils_Ex::isBlank($this->errmsg)) { 109 $this->tpl_mainpage = 'forgot/secret.tpl'; 110 } 111 } 95 112 break; 96 113 case 'secret_check': 97 $this->lfForgotSecretCheck(); 114 $this->lfInitSecretCheckParam($objFormParam, $this->device_type); 115 $objFormParam->setParam($_POST); 116 $objFormParam->convParam(); 117 $objFormParam->toLower('email'); 118 $this->arrForm = $objFormParam->getHashArray(); 119 $this->arrErr = $objFormParam->checkError(); 120 if (SC_Utils_Ex::isBlank($this->arrErr)) { 121 $this->errmsg = $this->lfCheckForgotSecret($this->arrForm, $this->arrReminder); 122 if(SC_Utils_Ex::isBlank($this->errmsg)) { 123 // 完了ページへ移動する 124 $this->tpl_mainpage = 'forgot/complete.tpl'; 125 // transactionidを更新させたいので呼び出し元(ログインフォーム側)をリロード。 126 $this->tpl_onload .= 'opener.location.reload(true);'; 127 }else{ 128 // 秘密の答えが一致しなかった 129 $this->tpl_mainpage = 'forgot/secret.tpl'; 130 } 131 }else{ 132 // 入力値エラー 133 $this->tpl_mainpage = 'forgot/secret.tpl'; 134 } 98 135 break; 99 136 default: 100 $this->lfForgotDefault();101 137 break; 102 138 } 103 139 104 140 $this->transactionid = SC_Helper_Session_Ex::getToken(); 105 106 if ($this->isMobile) { 107 // モバイルサイトの場合はトークン生成 108 $this->createMobileToken(); 109 } else { 110 // モバイルサイト以外の場合、ポップアップ用テンプレートファイル設定 141 142 // ポップアップ用テンプレート設定 143 if($this->device_type == DEVICE_TYPE_PC) { 111 144 $this->setTemplate($this->tpl_mainpage); 112 145 } 113 146 } 114 147 115 // 最初に開いた時の処理(メールアドレス入力画面) 116 function lfForgotDefault() { 117 // クッキー管理クラス 118 $objCookie = new SC_Cookie(COOKIE_EXPIRE); 119 $this->tpl_login_email = $objCookie->getCookie('login_email'); 120 } 121 122 // メールアドレス確認(秘密の質問入力画面) 123 function lfForgotMailCheck() { 124 // パラメータ管理クラス,パラメータ情報の初期化 125 $this->objFormParam = new SC_FormParam(); 126 $this->lfMailCheckInitParam(); 127 // POST値の取得 128 $this->objFormParam->setParam($_POST); 129 $this->objFormParam->convParam(); 130 $this->objFormParam->toLower('email'); 131 $this->arrForm = $this->objFormParam->getHashArray(); 132 //エラーチェック 133 $this->arrErr = $this->lfMailCheckErrorCheck(); 134 if (count($this->arrErr) == 0) { 135 $email = $this->arrForm['email']; 136 $objQuery =& SC_Query::getSingletonInstance(); 137 $where = "(email Like ? OR email_mobile Like ?) AND name01 Like ? AND name02 Like ? AND del_flg = 0"; 138 $arrVal = array($this->arrForm['email'], $this->arrForm['email'], $this->arrForm['name01'], $this->arrForm['name02']); 139 $result = $objQuery->select("reminder, status", "dtb_customer", $where, $arrVal); 140 if (isset($result[0]['reminder']) and isset($this->arrReminder[$result[0]['reminder']])) { 141 if($result[0]['status'] == '2') { 142 // 有効な情報であるため、秘密の質問確認へ遷移 143 $this->tpl_mainpage = 'forgot/secret.tpl'; 144 $this->arrForm['reminder'] = $result[0]['reminder']; 145 } else if ($result[0]['status'] == '1') { 146 $this->errmsg = 'ご入力のemailアドレスは現在仮登録中です。<br/>登録の際にお送りしたメールのURLにアクセスし、<br/>本会員登録をお願いします。'; 147 } 148 } else { 149 $this->errmsg = 'お名前に間違いがあるか、このメールアドレスは登録されていません。'; 150 } 151 } 152 } 153 154 // メールアドレス確認におけるエラーチェック 155 function lfMailCheckErrorCheck() { 156 // 入力データを渡す 157 $arrRet = $this->objFormParam->getHashArray(); 158 $objErr = new SC_CheckError($arrRet); 159 $objErr->arrErr = $this->objFormParam->checkError(); 160 return $objErr->arrErr; 161 } 162 163 // メールアドレス確認におけるパラメーター情報の初期化 164 function lfMailCheckInitParam() { 165 $this->objFormParam->addParam("お名前(姓)", 'name01', STEXT_LEN, "aKV", array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK")); 166 $this->objFormParam->addParam("お名前(名)", 'name02', STEXT_LEN, "aKV", array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" , "MAX_LENGTH_CHECK")); 167 if ($this->isMobile == false){ 168 $this->objFormParam->addParam('メールアドレス', "email", MTEXT_LEN, "a", array("NO_SPTAB", "EXIST_CHECK", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); 169 } else { 170 $this->objFormParam->addParam('メールアドレス', "email", MTEXT_LEN, "a", array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK","MOBILE_EMAIL_CHECK")); 171 } 172 173 } 174 175 // 秘密の質問確認 176 function lfForgotSecretCheck() { 177 // パラメータ管理クラス,パラメータ情報の初期化 178 $this->objFormParam = new SC_FormParam(); 179 $this->lfSecretCheckInitParam(); 180 // POST値の取得 181 $this->objFormParam->setParam($_POST); 182 $this->objFormParam->convParam(); 183 $this->objFormParam->toLower('email'); 184 $this->arrForm = $this->objFormParam->getHashArray(); 185 //エラーチェック 186 $this->arrErr = $this->lfSecretCheckErrorCheck(); 187 if (count($this->arrErr) == 0) { 188 $email = $this->arrForm['email']; 189 $objQuery =& SC_Query::getSingletonInstance(); 190 $where = "(email Like ? OR email_mobile Like ?) AND name01 Like ? AND name02 Like ? AND status = 2 AND del_flg = 0"; 191 $arrVal = array($this->arrForm['email'], $this->arrForm['email'], $this->arrForm['name01'], $this->arrForm['name02']); 192 $result = $objQuery->select("customer_id, reminder, reminder_answer, salt", "dtb_customer", $where, $arrVal); 193 if (isset($result[0]['reminder']) and isset($this->arrReminder[$result[0]['reminder']]) 194 and $result[0]['reminder'] == $this->arrForm['reminder']) { 195 196 if (SC_Utils_Ex::sfIsMatchHashPassword($this->arrForm['reminder_answer'], $result[0]['reminder_answer'], $result[0]['salt'])) { 197 // 秘密の答えが一致 198 // 新しいパスワードを設定する 199 $this->temp_password = GC_Utils_Ex::gfMakePassword(8); 200 201 if(FORGOT_MAIL == 1) { 202 // メールで変更通知をする 203 $objDb = new SC_Helper_DB_Ex(); 204 $CONF = $objDb->sfGetBasisData(); 205 $this->lfSendMail($CONF, $this->arrForm['email'], $this->arrForm['name01'], $this->temp_password); 206 } 207 $sqlval = array(); 208 $sqlval['password'] = $this->temp_password; 209 SC_Helper_Customer_Ex::sfEditCustomerData($sqlval, $result[0]['customer_id']); 210 211 // 完了ページへ移動する 212 $this->tpl_mainpage = 'forgot/complete.tpl'; 213 // transactionidの都合で呼び出し元をリロード。 214 $this->tpl_onload .= 'opener.location.reload(true);'; 215 } else { 216 // 秘密の答えが一致しなかった 217 $this->tpl_mainpage = 'forgot/secret.tpl'; 218 $this->errmsg = '秘密の質問が一致しませんでした。'; 219 } 220 } else { 221 //不正なアクセス 222 SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true); 148 /** 149 * メールアドレス・名前確認 150 * 151 * @param array $arrForm フォーム入力値 152 * @param array $arrReminder リマインダー質問リスト 153 * @return string エラー文字列 問題が無ければNULL 154 */ 155 function lfCheckForgotMail(&$arrForm, &$arrReminder) { 156 $errmsg = NULL; 157 $objQuery =& SC_Query::getSingletonInstance(); 158 $where = "(email Like ? OR email_mobile Like ?) AND name01 Like ? AND name02 Like ? AND del_flg = 0"; 159 $arrVal = array($arrForm['email'], $arrForm['email'], $arrForm['name01'], $arrForm['name02']); 160 $result = $objQuery->select("reminder, status", "dtb_customer", $where, $arrVal); 161 if (isset($result[0]['reminder']) and isset($arrReminder[$result[0]['reminder']])) { 162 // 会員状態の確認 163 if($result[0]['status'] == '2') { 164 // 正会員 165 $arrForm['reminder'] = $result[0]['reminder']; 166 } else if ($result[0]['status'] == '1') { 167 // 仮会員 168 $errmsg = 'ご入力のemailアドレスは現在仮登録中です。<br/>登録の際にお送りしたメールのURLにアクセスし、<br/>本会員登録をお願いします。'; 223 169 } 224 170 } else { 225 $this->tpl_mainpage = 'forgot/secret.tpl'; 226 } 227 } 228 229 function lfSecretCheckInitParam() { 171 $errmsg = 'お名前に間違いがあるか、このメールアドレスは登録されていません。'; 172 } 173 return $errmsg; 174 } 175 176 /** 177 * メールアドレス確認におけるパラメーター情報の初期化 178 * 179 * @param array $objFormParam フォームパラメータークラス 180 * @param array $device_type デバイスタイプ 181 * @return void 182 */ 183 function lfInitMailCheckParam(&$objFormParam, $device_type) { 184 $objFormParam->addParam("お名前(姓)", 'name01', STEXT_LEN, "aKV", array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" ,"MAX_LENGTH_CHECK")); 185 $objFormParam->addParam("お名前(名)", 'name02', STEXT_LEN, "aKV", array("EXIST_CHECK", "NO_SPTAB", "SPTAB_CHECK" , "MAX_LENGTH_CHECK")); 186 if ($device_type === DEVICE_TYPE_MOBILE){ 187 $objFormParam->addParam('メールアドレス', "email", MTEXT_LEN, "a", array("EXIST_CHECK", "EMAIL_CHECK", "NO_SPTAB" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK","MOBILE_EMAIL_CHECK")); 188 } else { 189 $objFormParam->addParam('メールアドレス', "email", MTEXT_LEN, "a", array("NO_SPTAB", "EXIST_CHECK", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK")); 190 } 191 return; 192 } 193 194 /** 195 * 秘密の質問確認 196 * 197 * @param array $arrForm フォーム入力値 198 * @param array $arrReminder リマインダー質問リスト 199 * @return string エラー文字列 問題が無ければNULL 200 */ 201 function lfCheckForgotSecret(&$arrForm, &$arrReminder) { 202 $errmsg = ''; 203 $objQuery =& SC_Query::getSingletonInstance(); 204 $cols = "customer_id, reminder, reminder_answer, salt"; 205 $table = "dtb_customer"; 206 $where = "(email Like ? OR email_mobile Like ?)" 207 . " AND name01 Like ? AND name02 Like ?" 208 . " AND status = 2 AND del_flg = 0"; 209 $arrVal = array($arrForm['email'], $arrForm['email'], 210 $arrForm['name01'], $arrForm['name02']); 211 $result = $objQuery->select($cols, $table, $where, $arrVal); 212 if (isset($result[0]['reminder']) and isset($arrReminder[$result[0]['reminder']]) 213 and $result[0]['reminder'] == $arrForm['reminder']) { 214 215 if (SC_Utils_Ex::sfIsMatchHashPassword($arrForm['reminder_answer'], 216 $result[0]['reminder_answer'], $result[0]['salt'])) { 217 // 秘密の答えが一致 218 // 新しいパスワードを設定する 219 $new_password = GC_Utils_Ex::gfMakePassword(8); 220 if(FORGOT_MAIL == 1) { 221 // メールで変更通知をする 222 $objDb = new SC_Helper_DB_Ex(); 223 $CONF = $objDb->sfGetBasisData(); 224 $this->lfSendMail($CONF, $arrForm['email'], $arrForm['name01'], $new_password); 225 } 226 $sqlval = array(); 227 $sqlval['password'] = $new_password; 228 SC_Helper_Customer_Ex::sfEditCustomerData($sqlval, $result[0]['customer_id']); 229 $arrForm['new_password'] = $new_password; 230 } else { 231 // 秘密の答えが一致しなかった 232 $errmsg = '秘密の質問が一致しませんでした。'; 233 } 234 } else { 235 //不正なアクセス リマインダー値が前画面と異なる。 236 // 新リファクタリング基準ではここで遷移は不許可なのでエラー表示 237 //SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, "", true); 238 $errmsg = '秘密の質問が一致しませんでした。'; 239 } 240 return $errmsg; 241 } 242 243 /** 244 * 秘密の質問確認におけるパラメーター情報の初期化 245 * 246 * @param array $objFormParam フォームパラメータークラス 247 * @param array $device_type デバイスタイプ 248 * @return void 249 */ 250 function lfInitSecretCheckParam(&$objFormParam, $device_type) { 230 251 // メールチェックと同等のチェックを再度行う 231 $this->lf MailCheckInitParam();252 $this->lfInitMailCheckParam($objFormParam, $device_type); 232 253 // 秘密の質問チェックの追加 233 $this->objFormParam->addParam("パスワード確認用の質問", "reminder", STEXT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK")); 234 $this->objFormParam->addParam("パスワード確認用の質問の答え", "reminder_answer", STEXT_LEN, "aKV", array("EXIST_CHECK","SPTAB_CHECK" , "MAX_LENGTH_CHECK")); 235 } 236 237 // 秘密の答え確認におけるエラーチェック 238 function lfSecretCheckErrorCheck() { 239 // 入力データを渡す 240 $arrRet = $this->objFormParam->getHashArray(); 241 $objErr = new SC_CheckError($arrRet); 242 $objErr->arrErr = $this->objFormParam->checkError(); 243 return $objErr->arrErr; 254 $objFormParam->addParam("パスワード確認用の質問", "reminder", STEXT_LEN, "n", array("EXIST_CHECK", "NUM_CHECK")); 255 $objFormParam->addParam("パスワード確認用の質問の答え", "reminder_answer", STEXT_LEN, "aKV", array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK")); 256 return; 244 257 } 245 258 … … 259 272 * @param string $email 送信先メールアドレス 260 273 * @param string $customer_name 送信先氏名 261 * @param string $temp_password 変更後のパスワード 262 * @return void 263 * 264 * FIXME: メールテンプレート編集の方に足すのが望ましい? 265 */ 266 function lfSendMail($CONF, $email, $customer_name, $temp_password){ 267 // パスワード変更お知らせメール送信 268 $this->customer_name = $customer_name; 269 $this->temp_password = $temp_password; 274 * @param string $new_password 変更後の新パスワード 275 * @return void 276 * 277 * FIXME: メールテンプレート編集の方に足すのが望ましい 278 */ 279 function lfSendMail(&$CONF, $email, $customer_name, $new_password){ 280 // パスワード変更お知らせメール送信 270 281 $objMailText = new SC_SiteView(false); 271 $objMailText->assign obj($this);272 282 $objMailText->assign('customer_name', $customer_name); 283 $objMailText->assign('new_password', $new_password); 273 284 $toCustomerMail = $objMailText->fetch("mail_templates/forgot_mail.tpl"); 285 // メール送信オブジェクトによる送信処理 274 286 $objMail = new SC_SendMail(); 275 276 287 $objMail->setItem( 277 '' // 宛先 278 , "パスワードが変更されました" ."【" .$CONF["shop_name"]. "】" // サブジェクト 279 , $toCustomerMail // 本文 280 , $CONF["email03"] // 配送元アドレス 281 , $CONF["shop_name"] // 配送元 名前 282 , $CONF["email03"] // reply_to 283 , $CONF["email04"] // return_path 284 , $CONF["email04"] // Errors_to 285 286 ); 288 '' //宛先 289 , $toCustomerMail //本文 290 , $CONF['email03'] //配送元アドレス 291 , $CONF['shop_name'] // 配送元名 292 , $CONF['email03'] // reply to 293 , $CONF['email04'] //return_path 294 , $CONF['email04'] // errors_to 295 ); 287 296 $objMail->setTo($email, $customer_name ." 様"); 288 297 $objMail->sendMail(); 289 } 290 291 /** 292 * モバイル空メール用のトークン作成 293 * 294 * @return void 295 * 296 * FIXME: この処理の有効性が不明 297 */ 298 function createMobileToken() { 299 $objMobile = new SC_Helper_Mobile_Ex(); 300 // 空メール用のトークンを作成。 301 if (MOBILE_USE_KARA_MAIL) { 302 $token = $objMobile->gfPrepareKaraMail('forgot/' . DIR_INDEX_PATH); 303 if ($token !== false) { 304 $objPage->tpl_kara_mail_to = MOBILE_KARA_MAIL_ADDRESS_USER . MOBILE_KARA_MAIL_ADDRESS_DELIMITER . 'forgot_' . $token . '@' . MOBILE_KARA_MAIL_ADDRESS_DOMAIN; 305 } 306 } 307 } 298 return; 299 } 300 308 301 } 309 302 ?>
Note: See TracChangeset
for help on using the changeset viewer.