/** * Page のアクション. * * @return void */ function action() { parent::action(); $objQuery = SC_Query_Ex::getSingletonInstance(); if (is_array($this->arrHidden['search_customer_type'])) { $cnt = array_sum($this->arrHidden['search_customer_type']); // tpl表示切換用 $this->search_customer_type = $cnt; } elseif (is_array($this->arrForm['search_customer_type']['value'])) { $cnt = array_sum($this->arrForm['search_customer_type']['value']); // tpl表示切換用 $this->search_customer_type = $cnt; } else { $this->search_customer_type = 1; } if (is_array($this->arrData)) { foreach ($this->arrData as &$customer) { $customer_id = $customer["customer_id"]; if ($this->objDb->sfColumnExists("cp_dtb_customer_docomo_mymenu", "customer_id")) { $customer = array_merge(SC_Helper_Customer_Ex::sfGetCustomerData($customer_id), $customer); $customer["mymenu"] = call_user_func("CarrierPay::getCustomerMymenu", array($customer_id)); } if ($this->objDb->sfColumnExists("cp_dtb_point_history", "id")) { $point = $objQuery->getRow(implode(",", array("sum(add_point ) AS add_point", "sum(use_point ) AS use_point", "sum(lost_point) AS lost_point")), "cp_dtb_point_history", "customer_id = ?", array($customer_id)); foreach ($point as $key => $value) { $customer[$key] = $value; } } if ($this->objDb->sfColumnExists("cp_dtb_customer_transaction", "id")) { $customer["transaction"] = $objQuery->select("*", "cp_dtb_customer_transaction", "customer_id = ? AND del_flg = 0 AND continue_account_id IS NOT NULL", array($customer_id)); } } } }
/** * CHECK_REGIST_CUSTOMER_EMAIL * * メールアドレスが会員登録されているか調べる * @param array $value value[0] = 項目名 value[1] = 判定対象メールアドレス * @access public * @return void */ function CHECK_REGIST_CUSTOMER_EMAIL($value) { if (isset($this->arrErr[$value[1]])) { return; } $this->createParam($value); $register_user_flg = SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($this->arrParam[$value[1]]); switch ($register_user_flg) { case 1: $this->arrErr[$value[1]] .= t('c_* T_ARG1 already used in member registration. <br />_01', array('T_ARG1' => $value[0])); break; case 2: $this->arrErr[$value[1]] .= t('c_* For a certain period of time after membership withdrawal, it is not possible to use the same T_ARG1. <br />_01', array('T_ARG1' => $value[0])); break; default: break; } }
/** * 受注データを取得して, SC_FormParam へ設定する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param integer $order_id 取得元の受注ID * @return void */ function setOrderToFormParam(&$objFormParam, $order_id) { $objPurchase = new SC_Helper_Purchase_Ex(); // 受注詳細を設定 $arrOrderDetail = $objPurchase->getOrderDetail($order_id, false); $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrOrderDetail)); $arrShippingsTmp = $objPurchase->getShippings($order_id); $arrShippings = array(); foreach ($arrShippingsTmp as $row) { // お届け日の処理 if (!SC_Utils_Ex::isBlank($row['shipping_date'])) { $ts = strtotime($row['shipping_date']); $row['shipping_date_year'] = date('Y', $ts); $row['shipping_date_month'] = date('n', $ts); $row['shipping_date_day'] = date('j', $ts); } $arrShippings[$row['shipping_id']] = $row; } $objFormParam->setValue('shipping_quantity', count($arrShippings)); $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrShippings)); /* * 配送商品を設定 * * $arrShipmentItem['shipment_(key)'][$shipping_id][$item_index] = 値 * $arrProductQuantity[$shipping_id] = 配送先ごとの配送商品数量 */ $arrProductQuantity = array(); $arrShipmentItem = array(); foreach ($arrShippings as $shipping_id => $arrShipping) { $arrProductQuantity[$shipping_id] = count($arrShipping['shipment_item']); foreach ($arrShipping['shipment_item'] as $item_index => $arrItem) { foreach ($arrItem as $item_key => $item_val) { $arrShipmentItem['shipment_' . $item_key][$shipping_id][$item_index] = $item_val; } } } $objFormParam->setValue('shipping_product_quantity', $arrProductQuantity); $objFormParam->setParam($arrShipmentItem); /* * 受注情報を設定 * $arrOrderDetail と項目が重複しており, $arrOrderDetail は連想配列の値 * が渡ってくるため, $arrOrder で上書きする. */ $arrOrder = $objPurchase->getOrder($order_id); $objFormParam->setParam($arrOrder); // ポイントを設定 list($db_point, $rollback_point) = SC_Helper_DB_Ex::sfGetRollbackPoint($order_id, $arrOrder['use_point'], $arrOrder['add_point'], $arrOrder['status']); $objFormParam->setValue('total_point', $db_point); $objFormParam->setValue('point', $rollback_point); if (!SC_Utils_Ex::isBlank($objFormParam->getValue('customer_id'))) { $arrCustomer = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($objFormParam->getValue('customer_id')); $objFormParam->setValue('customer_point', $arrCustomer['point']); } }
/** * 会員一覧を検索する処理 * * @param array $arrParam 検索パラメーター連想配列 * @return array( integer 全体件数, mixed 会員データ一覧配列, mixed SC_PageNaviオブジェクト) */ public function lfDoSearch($arrParam) { return SC_Helper_Customer_Ex::sfGetSearchData($arrParam); }
/** * 登録メールを送信する。 * * @param string $secret_key 会員固有キー * @param integer $customer_id 顧客ID * @param boolean $is_mobile false(default):PCアドレスにメールを送る true:携帯アドレスにメールを送る * @return boolean true:成功 false:失敗 */ function sfSendRegistMail($secret_key, $customer_id = '', $is_mobile = false) { // 会員データの取得 if (SC_Utils_Ex::sfIsInt($customer_id)) { $arrCustomerData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id); } else { $arrCustomerData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId('', "secret_key = ?", array($secret_key)); } if (SC_Utils_Ex::isBlank($arrCustomerData)) { return false; } $CONF = SC_Helper_DB_Ex::sfGetBasisData(); $objMailText = new SC_SiteView_Ex(); $objMailText->assign('CONF', $CONF); $objMailText->assign("name01", $arrCustomerData['name01']); $objMailText->assign("name02", $arrCustomerData['name02']); $objMailText->assign('uniqid', $arrCustomerData['secret_key']); $objMailText->assignobj($arrCustomerData); $objMailText->assignobj($this); $objHelperMail = new SC_Helper_Mail_Ex(); // 仮会員が有効の場合 if (CUSTOMER_CONFIRM_MAIL == true and $arrCustomerData['status'] == 1) { $subject = $objHelperMail->sfMakeSubject('会員登録のご確認', $objMailText); $toCustomerMail = $objMailText->fetch("mail_templates/customer_mail.tpl"); } else { $subject = $objHelperMail->sfMakeSubject('会員登録のご完了', $objMailText); $toCustomerMail = $objMailText->fetch("mail_templates/customer_regist_mail.tpl"); } $objMail = new SC_SendMail(); $objMail->setItem('', $subject, $toCustomerMail, $CONF["email03"], $CONF["shop_name"], $CONF["email03"], $CONF["email04"], $CONF["email04"], $CONF["email01"]); // 宛先の設定 if ($is_mobile) { $to_addr = $arrCustomerData["email_mobile"]; } else { $to_addr = $arrCustomerData['email']; } $objMail->setTo($to_addr, $arrCustomerData["name01"] . $arrCustomerData["name02"] . " 様"); $objMail->sendMail(); return true; }
/** * 会員情報を登録する * * @param mixed $objFormParam * @param mixed $customer_id * @access private * @return void */ function lfRegistCustomerData(&$objFormParam, $customer_id) { $arrRet = $objFormParam->getHashArray(); $sqlval = $objFormParam->getDbArray(); $sqlval['birth'] = SC_Utils_Ex::sfGetTimestamp($arrRet['year'], $arrRet['month'], $arrRet['day']); SC_Helper_Customer_Ex::sfEditCustomerData($sqlval, $customer_id); }
/** * 会員情報をフォームに設定する. * * @param integer $customer_id 会員ID * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ function setCustomerTo($customer_id, &$objFormParam) { $arrCustomer = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id); foreach ($arrCustomer as $key => $val) { $objFormParam->setValue('order_' . $key, $val); } $objFormParam->setValue('customer_id', $customer_id); $objFormParam->setValue('customer_point', $arrCustomer['point']); }
/** * 秘密の質問確認 * * @param array $arrForm フォーム入力値 * @param array $arrReminder リマインダー質問リスト * @return string エラー文字列 問題が無ければNULL */ function lfCheckForgotSecret(&$arrForm, &$arrReminder) { $errmsg = ''; $objQuery =& SC_Query_Ex::getSingletonInstance(); $cols = 'customer_id, reminder, reminder_answer, salt'; $table = 'dtb_customer'; $where = '(email Like ? OR email_mobile Like ?)' . ' AND name01 Like ? AND name02 Like ?' . ' AND status = 2 AND del_flg = 0'; $arrVal = array($arrForm['email'], $arrForm['email'], $arrForm['name01'], $arrForm['name02']); $result = $objQuery->select($cols, $table, $where, $arrVal); if (isset($result[0]['reminder']) and isset($arrReminder[$result[0]['reminder']]) and $result[0]['reminder'] == $arrForm['reminder']) { $is_authorized = false; if (empty($result[0]['salt'])) { // 旧バージョン(2.11未満)からの移行を考慮 if ($result[0]['reminder_answer'] == $arrForm['reminder_answer']) { $is_authorized = true; } } elseif (SC_Utils_Ex::sfIsMatchHashPassword($arrForm['reminder_answer'], $result[0]['reminder_answer'], $result[0]['salt'])) { $is_authorized = true; } if ($is_authorized) { // 秘密の答えが一致 // 新しいパスワードを設定する $new_password = GC_Utils_Ex::gfMakePassword(8); if (FORGOT_MAIL == 1) { // メールで変更通知をする $objDb = new SC_Helper_DB_Ex(); $CONF = $objDb->sfGetBasisData(); $this->lfSendMail($CONF, $arrForm['email'], $arrForm['name01'], $new_password); } $sqlval = array(); $sqlval['password'] = $new_password; SC_Helper_Customer_Ex::sfEditCustomerData($sqlval, $result[0]['customer_id']); $arrForm['new_password'] = $new_password; } else { // 秘密の答えが一致しなかった $errmsg = '秘密の質問が一致しませんでした。'; } } else { //不正なアクセス リマインダー値が前画面と異なる。 // 新リファクタリング基準ではここで遷移は不許可なのでエラー表示 //SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true); $errmsg = '秘密の質問が一致しませんでした。'; } return $errmsg; }
/** * 会員情報変更エラーチェック * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @param boolean $isAdmin 管理画面チェック時:true * @access public * @return array エラーの配列 */ function sfCustomerMypageErrorCheck(&$objFormParam, $isAdmin = false) { $objFormParam->toLower('email_mobile'); $objFormParam->toLower('email_mobile02'); $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam); $objErr = SC_Helper_Customer_Ex::sfCustomerRegisterErrorCheck($objErr, $isAdmin); if (isset($objErr->arrErr['password']) && $objFormParam->getValue('password') == DEFAULT_PASSWORD) { unset($objErr->arrErr['password']); unset($objErr->arrErr['password02']); } if (isset($objErr->arrErr['reminder_answer']) && $objFormParam->getValue('reminder_answer') == DEFAULT_PASSWORD) { unset($objErr->arrErr['reminder_answer']); } return $objErr->arrErr; }
/** * Page のプロセス. * * @return void */ function action() { $objSiteSess = new SC_SiteSession_Ex(); $objCartSess = new SC_CartSession_Ex(); $objCustomer = new SC_Customer_Ex(); $objCookie = new SC_Cookie_Ex(); $objPurchase = new SC_Helper_Purchase_Ex(); $objFormParam = new SC_FormParam_Ex(); $nonmember_mainpage = 'shopping/nonmember_input.tpl'; $nonmember_title = 'お客様情報入力'; $this->tpl_uniqid = $objSiteSess->getUniqId(); $objPurchase->verifyChangeCart($this->tpl_uniqid, $objCartSess); $this->cartKey = $objCartSess->getKey(); // ログイン済みの場合は次画面に遷移 if ($objCustomer->isLoginSuccess(true)) { SC_Response_Ex::sendRedirect($this->getNextlocation($this->cartKey, $this->tpl_uniqid, $objCustomer, $objPurchase, $objSiteSess)); SC_Response_Ex::actionExit(); } else { if ($this->cartKey == PRODUCT_TYPE_DOWNLOAD) { $msg = 'ダウンロード商品を含むお買い物は、会員登録が必要です。<br/>' . 'お手数ですが、会員登録をお願いします。'; SC_Utils_Ex::sfDispSiteError(FREE_ERROR_MSG, $objSiteSess, false, $msg); SC_Response_Ex::actionExit(); } } switch ($this->getMode()) { // ログイン実行 case 'login': $this->lfInitLoginFormParam($objFormParam); $objFormParam->setParam($_POST); $objFormParam->trimParam(); $objFormParam->convParam(); $objFormParam->toLower('login_email'); $this->arrErr = $objFormParam->checkError(); // ログイン判定 if (SC_Utils_Ex::isBlank($this->arrErr) && $objCustomer->doLogin($objFormParam->getValue('login_email'), $objFormParam->getValue('login_pass'))) { // モバイルサイトで携帯アドレスの登録が無い場合、携帯アドレス登録ページへ遷移 if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE) { if (!$objCustomer->hasValue('email_mobile')) { SC_Response_Ex::sendRedirectFromUrlPath('entry/email_mobile.php'); SC_Response_Ex::actionExit(); } } elseif (SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE) { echo SC_Utils_Ex::jsonEncode(array('success' => $this->getNextLocation($this->cartKey, $this->tpl_uniqid, $objCustomer, $objPurchase, $objSiteSess))); SC_Response_Ex::actionExit(); } SC_Response_Ex::sendRedirect($this->getNextLocation($this->cartKey, $this->tpl_uniqid, $objCustomer, $objPurchase, $objSiteSess)); SC_Response_Ex::actionExit(); } else { // 仮登録の場合 if (SC_Helper_Customer_Ex::checkTempCustomer($objFormParam->getValue('login_email'))) { if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE) { echo $this->lfGetErrorMessage(TEMP_LOGIN_ERROR); SC_Response_Ex::actionExit(); } else { SC_Utils_Ex::sfDispSiteError(TEMP_LOGIN_ERROR); SC_Response_Ex::actionExit(); } } else { if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE) { echo $this->lfGetErrorMessage(SITE_LOGIN_ERROR); SC_Response_Ex::actionExit(); } else { SC_Utils_Ex::sfDispSiteError(SITE_LOGIN_ERROR); SC_Response_Ex::actionExit(); } } } break; // お客様情報登録 // お客様情報登録 case 'nonmember_confirm': $this->tpl_mainpage = $nonmember_mainpage; $this->tpl_title = $nonmember_title; $this->lfInitParam($objFormParam); $objFormParam->setParam($_POST); $this->arrErr = $this->lfCheckError($objFormParam); if (SC_Utils_Ex::isBlank($this->arrErr)) { $this->lfRegistData($this->tpl_uniqid, $objPurchase, $objCustomer, $objFormParam); $arrParams = $objFormParam->getHashArray(); $shipping_id = $arrParams['deliv_check'] == '1' ? 1 : 0; $objPurchase->setShipmentItemTempForSole($objCartSess, $shipping_id); $objSiteSess->setRegistFlag(); SC_Response_Ex::sendRedirect(SHOPPING_PAYMENT_URLPATH); SC_Response_Ex::actionExit(); } break; // 前のページに戻る // 前のページに戻る case 'return': SC_Response_Ex::sendRedirect(CART_URLPATH); SC_Response_Ex::actionExit(); break; // 複数配送ページへ遷移 // 複数配送ページへ遷移 case 'multiple': // 複数配送先指定が無効な場合はエラー if (USE_MULTIPLE_SHIPPING === false) { SC_Utils_Ex::sfDispSiteError(PAGE_ERROR, '', true); SC_Response_Ex::actionExit(); } $this->lfInitParam($objFormParam); $objFormParam->setParam($_POST); $this->arrErr = $this->lfCheckError($objFormParam); if (SC_Utils_Ex::isBlank($this->arrErr)) { $this->lfRegistData($this->tpl_uniqid, $objPurchase, $objCustomer, $objFormParam, true); $objSiteSess->setRegistFlag(); SC_Response_Ex::sendRedirect(MULTIPLE_URLPATH); SC_Response_Ex::actionExit(); } $this->tpl_mainpage = $nonmember_mainpage; $this->tpl_title = $nonmember_title; break; // お客様情報入力ページの表示 // お客様情報入力ページの表示 case 'nonmember': $this->tpl_mainpage = $nonmember_mainpage; $this->tpl_title = $nonmember_title; $this->lfInitParam($objFormParam); // ※breakなし // ※breakなし default: // 前のページから戻ってきた場合は, お客様情報入力ページ if (isset($_GET['from']) && $_GET['from'] == 'nonmember') { $this->tpl_mainpage = $nonmember_mainpage; $this->tpl_title = $nonmember_title; $this->lfInitParam($objFormParam); } else { $this->lfInitLoginFormParam($objFormParam); } $this->setFormParams($objFormParam, $objPurchase, $this->tpl_uniqid); break; } // 記憶したメールアドレスを取得 $this->tpl_login_email = $objCookie->getCookie('login_email'); if (!SC_Utils_Ex::isBlank($this->tpl_login_email)) { $this->tpl_login_memory = '1'; } // 入力値の取得 $this->arrForm = $objFormParam->getFormParamList(); // 携帯端末IDが一致する会員が存在するかどうかをチェックする。 if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) { $this->tpl_valid_phone_id = $objCustomer->checkMobilePhoneId(); } }
/** * Page のAction. * * @return void */ function action() { $objCustomer = new SC_Customer_Ex(); $ParentPage = MYPAGE_DELIVADDR_URLPATH; // GETでページを指定されている場合には指定ページに戻す if (isset($_GET['page'])) { $ParentPage = htmlspecialchars($_GET['page'], ENT_QUOTES); } else { if (isset($_POST['ParentPage'])) { $ParentPage = htmlspecialchars($_POST['ParentPage'], ENT_QUOTES); } } $this->ParentPage = $ParentPage; /* * ログイン判定 及び 退会判定 * 未ログインでも, 複数配送設定ページからのアクセスの場合は表示する * * TODO 購入遷移とMyPageで別クラスにすべき */ if (!$objCustomer->isLoginSuccess(true) && $ParentPage != MULTIPLE_URLPATH) { $this->tpl_onload = "fnUpdateParent('" . $this->getLocation($_POST['ParentPage']) . "'); window.close();"; } // other_deliv_id のあるなしで追加か編集か判定しているらしい $_SESSION['other_deliv_id'] = $_REQUEST['other_deliv_id']; // パラメーター管理クラス,パラメーター情報の初期化 $objFormParam = new SC_FormParam_Ex(); SC_Helper_Customer_Ex::sfCustomerOtherDelivParam($objFormParam); $objFormParam->setParam($_POST); $this->arrForm = $objFormParam->getHashArray(); switch ($this->getMode()) { // 入力は必ずedit case 'edit': $this->arrErr = SC_Helper_Customer_Ex::sfCustomerOtherDelivErrorCheck($objFormParam); // 入力エラーなし if (empty($this->arrErr)) { // TODO ここでやるべきではない if (in_array($_POST['ParentPage'], $this->validUrl)) { $this->tpl_onload = "fnUpdateParent('" . $this->getLocation($_POST['ParentPage']) . "'); window.close();"; } else { SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR); } if ($objCustomer->isLoginSuccess(true)) { $this->lfRegistData($objFormParam, $objCustomer->getValue("customer_id")); } else { $this->lfRegistDataNonMember($objFormParam); } if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) { // モバイルの場合、元のページに遷移 SC_Response_Ex::sendRedirect($this->getLocation($_POST['ParentPage'])); exit; } } break; case 'multiple': // 複数配送先用 break; default: if ($_GET['other_deliv_id'] != "") { $arrOtherDeliv = $this->lfGetOtherDeliv($objCustomer->getValue("customer_id"), $_SESSION['other_deliv_id']); //不正アクセス判定 if (!$objCustomer->isLoginSuccess(true) || count($arrOtherDeliv) == 0) { SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR); } //別のお届け先情報取得 $this->arrForm = $arrOtherDeliv[0]; } break; } if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_MOBILE) { $this->tpl_mainpage = 'mypage/delivery_addr.tpl'; } else { $this->setTemplate('mypage/delivery_addr.tpl'); } }
/** * 退会手続き完了メール送信する * * @access private * @param integer $customer_id 会員ID * @return void */ public function lfSendRefusalMail($customer_id) { // 会員データの取得 if (SC_Utils_Ex::sfIsInt($customer_id)) { $arrCustomerData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id); } if (SC_Utils_Ex::isBlank($arrCustomerData)) { return false; } $CONF = SC_Helper_DB_Ex::sfGetBasisData(); $objMailText = new SC_SiteView_Ex(); $objMailText->setPage($this); $objMailText->assign('CONF', $CONF); $objMailText->assign('name01', $arrCustomerData['name01']); $objMailText->assign('name02', $arrCustomerData['name02']); $objMailText->assignobj($this); $objHelperMail = new SC_Helper_Mail_Ex(); $objHelperMail->setPage($this); $subject = $objHelperMail->sfMakeSubject('退会手続きのご完了', $objMailText); $toCustomerMail = $objMailText->fetch('mail_templates/customer_refusal_mail.tpl'); $objMail = new SC_SendMail_Ex(); $objMail->setItem('', $subject, $toCustomerMail, $CONF['email03'], $CONF['shop_name'], $CONF['email03'], $CONF['email04'], $CONF['email04'], $CONF['email01']); $objMail->setTo($arrCustomerData['email'], $arrCustomerData['name01'] . $arrCustomerData['name02'] . ' 様'); $objMail->sendMail(); }
function lfGetOrderData($order_id) { if (SC_Utils_Ex::sfIsInt($order_id)) { // DBから受注情報を読み込む $objQuery = new SC_Query_Ex(); $where = "order_id = ?"; $arrRet = $objQuery->select("*", "dtb_order", $where, array($order_id)); $this->arrDisp = $arrRet[0]; list($point) = SC_Helper_Customer_Ex::sfGetCustomerPoint($order_id, $arrRet[0]['use_point'], $arrRet[0]['add_point']); $this->arrDisp['point'] = $point; // 受注詳細データの取得 $arrRet = $this->lfGetOrderDetail($order_id); $arrRet = SC_Utils_Ex::sfSwapArray($arrRet); $this->arrDisp = array_merge($this->arrDisp, $arrRet); // その他支払い情報を表示 if ($this->arrDisp["memo02"] != "") { $this->arrDisp["payment_info"] = unserialize($this->arrDisp["memo02"]); } $this->arrDisp["payment_type"] = "お支払い"; } }
/** * 入力内容のチェックを行う. * * 追加の必須チェック, 相関チェックを行うため, SC_CheckError を使用する. * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return array エラー情報の配 */ public function lfCheckError(&$objFormParam) { $arrParams = $objFormParam->getHashArray(); $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam, 'order_'); // 別のお届け先チェック if (isset($arrParams['deliv_check']) && $arrParams['deliv_check'] == '1') { $objErr2 = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam, 'shipping_'); $objErr->arrErr = array_merge((array) $objErr->arrErr, (array) $objErr2->arrErr); } else { // shipping系のエラーは無視 foreach ($objErr->arrErr as $key => $val) { if (substr($key, 0, strlen('shipping_')) == 'shipping_') { unset($objErr->arrErr[$key]); } } } // 複数項目チェック $objErr->doFunc(array('生年月日', 'order_year', 'order_month', 'order_day'), array('CHECK_BIRTHDAY')); $objErr->doFunc(array('メールアドレス', 'メールアドレス(確認)', 'order_email', 'order_email02'), array('EQUAL_CHECK')); return $objErr->arrErr; }
/** * * @deprecated 重複決済される * @param unknown $accountDay */ function doContBillResult($accountDay) { if ($accountDay == null) { $accountDay = $this->getAccountDay(); } $objQuery = SC_Query_Ex::getSingletonInstance(); $curl = $this->curl_init(); do { $zip_file = CSV_TEMP_REALDIR . "auone/" . date("Y/m/d/His") . ".zip"; if (file_exists($zip_file)) { sleep(5); } } while (file_exists($zip_file)); SC_Utils_Ex::recursiveMkdir(dirname($zip_file)); $fp = fopen($zip_file, "w"); // FIXME 決済認可 $curl = $this->curl_init(false, true); // $post_history = array (); $post = $this->getPost("ContBillResult", $this->config, compact("accountDay")); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post)); curl_setopt($curl, CURLOPT_HEADER, FALSE); curl_setopt($curl, CURLOPT_FILE, $fp); curl_exec($curl); $zip = new ZipArchive(); if (!$zip->open($zip_file)) { SC_Utils_Ex::sfDispSiteError(PAGE_ERROR); } $extr = dirname($zip_file) . "/" . basename($zip_file, ".zip") . "/"; SC_Utils_Ex::recursiveMkdir($extr); if (!$zip->extractTo($extr)) { SC_Utils_Ex::sfDispSiteError(PAGE_ERROR); } $files = glob($extr . "*.csv"); foreach ($files as $file) { $enc_filepath = SC_Utils_Ex::sfEncodeFile($file, CHAR_CODE, dirname($file) . DIRECTORY_SEPARATOR); $fp2 = fopen($enc_filepath, "r"); fgetcsv($fp2); while ($arrCsv = fgetcsv($fp2)) { if (count($arrCsv) == 0) { // 空の列 continue; } if ($arrCsv[4] != $this->config["serviceId"]) { // 別サービス・チェック continue; } if ($arrCsv[8] != 'MPL01000') { // 取消レコード continue; } $pay_info_no = $arrCsv[1]; $amount_in_tax = $arrCsv[2]; $service_id = $arrCsv[4]; $au_open_id = $arrCsv[5]; $member_manage_no = $arrCsv[6]; $process_day = $arrCsv[11]; $cont_bill_regst_day = $arrCsv[13]; $continue_account_id = $arrCsv[19]; $amount = $amount_in_tax - $amount_in_tax % 100; $add_point = $amount; $where = "au_open_id =? AND status = 2 AND del_flg = 0"; $arrWhereVal = (array) $au_open_id; $customer = SC_Helper_Customer_Ex::sfGetCustomerDataFromId(null, $where, $arrWhereVal); if (SC_Utils_Ex::isBlank($customer)) { // ユーザー復旧は手動の方がいいかもしれない。 continue; } $name = "継続(" . $amount_in_tax . "円)"; $customer_id = $customer["customer_id"]; if ($add_point) { $lost_point = 0; // 更新後ポイント $updatePoint = array("point" => min($customer["point"] + $add_point, AU_MAXPOINT)); // 最大ポイントへ変更している場合は失効ポイントを計算 if ($updatePoint["point"] == AU_MAXPOINT) { $lost_point = max($customer["point"] + $add_point, AU_MAXPOINT) - AU_MAXPOINT; } SC_Helper_Customer_Ex::sfEditCustomerData($updatePoint, $customer_id); $objQuery->insert("cp_dtb_point_history", array("id" => $objQuery->nextVal("cp_dtb_point_history_id"), "customer_id" => $customer_id, "add_point" => $add_point, "use_point" => 0, "lost_point" => $lost_point, "order_id" => 0, "name" => $name, "create_date" => "NOW()", "update_date" => "NOW()")); $arrWhereVal[] = $continue_account_id; if ($objQuery->exists("cp_dtb_customer_transaction", "au_open_id=? AND del_flg=0 AND continue_account_id =?", $arrWhereVal)) { // 何かしらの影響で削除された場合後続処理を行う continue; } $objQuery->insert("cp_dtb_customer_transaction", array("id" => $objQuery->nextVal("cp_dtb_customer_transaction_id"), "customer_id" => $customer_id, "au_open_id" => $au_open_id, "transaction_id" => "", "transaction_status" => "40", "pay_info_no" => $pay_info_no, "pay_status" => 20, "continue_account_id" => $continue_account_id, "member_manage_no" => $member_manage_no, "process_day" => $process_day, "process_time" => "000000", "cont_bill_regst_day" => $cont_bill_regst_day, "cont_bill_regst_time" => "000000", "ammount" => $amount, "ammount_in_tax" => $amount_in_tax, "del_flg" => 0, "contents_id" => sprintf("%05d%09d", $service_id, $add_point), "status" => 0)); } } } }
/** * CHECK_REGIST_CUSTOMER_EMAIL * * メールアドレスが会員登録されているか調べる * @param array $value value[0] = 項目名 value[1] = 判定対象メールアドレス * @access public * @return void */ public function CHECK_REGIST_CUSTOMER_EMAIL($value) { $disp_name = $value[0]; $keyname = $value[1]; if (isset($this->arrErr[$keyname])) { return; } $this->createParam($value); $register_user_flg = SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($this->arrParam[$keyname]); switch ($register_user_flg) { case 1: $this->arrErr[$keyname] .= "※ すでに会員登録で使用されている{$disp_name}です。<br />"; break; case 2: $this->arrErr[$keyname] .= "※ 退会から一定期間の間は、同じ{$disp_name}を使用することはできません。<br />"; break; default: break; } }
/** * 会員情報をフォームに設定する. * * @param integer $customer_id 会員ID * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ public function setCustomerTo($customer_id, &$objFormParam) { $arrCustomer = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id); foreach ($arrCustomer as $key => $val) { $objFormParam->setValue('order_' . $key, $val); } // 誕生日の処理 if (!SC_Utils_Ex::isBlank($objFormParam->getValue('order_birth'))) { $order_birth = substr($objFormParam->getValue('order_birth'), 0, 10); $arrOrderBirth = explode("-", $order_birth); $objFormParam->setValue('order_birth_year', intval($arrOrderBirth[0])); $objFormParam->setValue('order_birth_month', intval($arrOrderBirth[1])); $objFormParam->setValue('order_birth_day', intval($arrOrderBirth[2])); } $objFormParam->setValue('customer_id', $customer_id); $objFormParam->setValue('customer_point', $arrCustomer['point']); }
/** * お届け先フォームエラーチェック * * @param SC_FormParam $objFormParam SC_FormParam インスタンス * @return void */ public function errorCheck(&$objFormParam) { $objErr = SC_Helper_Customer_Ex::sfCustomerCommonErrorCheck($objFormParam); return $objErr->arrErr; }
/** * 登録処理 * * @param array $objFormParam フォームパラメータークラス * @return array エラー配列 */ public function lfRegistData(&$objFormParam) { // 登録用データ取得 $arrData = $objFormParam->getDbArray(); // 足りないものを作る if (!SC_Utils_Ex::isBlank($objFormParam->getValue('year'))) { $arrData['birth'] = $objFormParam->getValue('year') . '/' . $objFormParam->getValue('month') . '/' . $objFormParam->getValue('day') . ' 00:00:00'; } if (!is_numeric($arrData['customer_id'])) { $arrData['secret_key'] = SC_Utils_Ex::sfGetUniqRandomId('r'); } else { $arrOldCustomerData = SC_Helper_Customer_Ex::sfGetCustomerData($arrData['customer_id']); if ($arrOldCustomerData['status'] != $arrData['status']) { $arrData['secret_key'] = SC_Utils_Ex::sfGetUniqRandomId('r'); } } return SC_Helper_Customer_Ex::sfEditCustomerData($arrData, $arrData['customer_id']); }
function lfGetOrderData($order_id) { if (SC_Utils_Ex::sfIsInt($order_id)) { // DBから受注情報を読み込む $objQuery =& SC_Query_Ex::getSingletonInstance(); $where = 'order_id = ?'; $arrRet = $objQuery->select('*', 'dtb_order', $where, array($order_id)); $this->arrDisp = $arrRet[0]; list($point) = SC_Helper_Customer_Ex::sfGetCustomerPoint($order_id, $arrRet[0]['use_point'], $arrRet[0]['add_point']); $this->arrDisp['point'] = $point; // 受注詳細データの取得 $arrRet = $this->lfGetOrderDetail($order_id); $arrRet = SC_Utils_Ex::sfSwapArray($arrRet); $this->arrDisp = array_merge($this->arrDisp, $arrRet); // その他支払い情報を表示 if ($this->arrDisp['memo02'] != '') { $this->arrDisp['payment_info'] = unserialize($this->arrDisp['memo02']); } $this->arrDisp['payment_type'] = 'お支払い'; } }
/** * CHECK_REGIST_CUSTOMER_EMAIL * * メールアドレスが会員登録されているか調べる * @param array $value value[0] = 項目名 value[1] = 判定対象メールアドレス * @access public * @return void */ function CHECK_REGIST_CUSTOMER_EMAIL($value) { if (isset($this->arrErr[$value[1]])) { return; } $this->createParam($value); $register_user_flg = SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($this->arrParam[$value[1]]); switch ($register_user_flg) { case 1: $this->arrErr[$value[1]] .= '※ すでに会員登録で使用されている' . $value[0] . 'です。<br />'; break; case 2: $this->arrErr[$value[1]] .= '※ 退会から一定期間の間は、同じ' . $value[0] . 'を使用することはできません。<br />'; break; default: break; } }
/** * 会員登録に必要なSQLパラメーターの配列を生成する. * * フォームに入力された情報を元に, SQLパラメーターの配列を生成する. * モバイル端末の場合は, email を email_mobile にコピーし, * mobile_phone_id に携帯端末IDを格納する. * * @param mixed $objFormParam * @access private * @return $arrResults */ public function lfMakeSqlVal(&$objFormParam) { $arrForm = $objFormParam->getHashArray(); $arrResults = $objFormParam->getDbArray(); // 生年月日の作成 $arrResults['birth'] = SC_Utils_Ex::sfGetTimestamp($arrForm['year'], $arrForm['month'], $arrForm['day']); // 仮会員 1 本会員 2 $arrResults['status'] = CUSTOMER_CONFIRM_MAIL == true ? '1' : '2'; /* * secret_keyは、テーブルで重複許可されていない場合があるので、 * 本会員登録では利用されないがセットしておく。 */ $arrResults['secret_key'] = SC_Helper_Customer_Ex::sfGetUniqSecretKey(); // 入会時ポイント $CONF = SC_Helper_DB_Ex::sfGetBasisData(); $arrResults['point'] = $CONF['welcome_point']; if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE) { // 携帯メールアドレス $arrResults['email_mobile'] = $arrResults['email']; // PHONE_IDを取り出す $arrResults['mobile_phone_id'] = SC_MobileUserAgent_Ex::getId(); } return $arrResults; }
/** * テスト用 会員データ を生成する. * * @return void */ function createCustomers() { lfPrintLog("createCustomers START.(" . CUSTOMERS_VOLUME . " data)"); for ($i = 0; $i < CUSTOMERS_VOLUME; $i++) { lfPrintLog("----------"); lfPrintLog("creating customer data count:[" . ($i + 1) . "] start."); $sqlval['name01'] = "検証"; $sqlval['name02'] = sprintf("太郎%05d", $i + 1); $sqlval['kana01'] = "ケンショウ"; $sqlval['kana02'] = "タロウ"; $sqlval['zip01'] = '101'; $sqlval['zip02'] = '0051'; $sqlval['pref'] = '13'; // 13:東京都 $sqlval['addr01'] = "千代田区神田神保町"; $sqlval['addr02'] = "1-3-5"; $sqlval['tel01'] = '012'; $sqlval['tel02'] = '3456'; $sqlval['tel03'] = '7890'; $sqlval['email'] = EMAIL_ADDRESS_ACCOUNT . "+" . sprintf("%05d", $i + 1) . EMAIL_ADDRESS_DOMAIN; $sqlval['sex'] = '1'; // 1:男性 2:女性 $sqlval['password'] = '******'; $sqlval['reminder'] = '1'; // 1:「母親の旧姓は?」 $sqlval['reminder_answer'] = "てすと"; $sqlval['mailmaga_flg'] = (string) '1'; // 1:HTMLメール 2:テキストメール 3:希望しない // 生年月日の作成 $sqlval['birth'] = SC_Utils_Ex::sfGetTimestamp(2006, 9, 1); // 仮会員 1 本会員 2 $sqlval['status'] = '2'; /* * secret_keyは、テーブルで重複許可されていない場合があるので、 * 本会員登録では利用されないがセットしておく。 */ $sqlval['secret_key'] = SC_Helper_Customer_Ex::sfGetUniqSecretKey(); // 入会時ポイント $CONF = SC_Helper_DB_Ex::sfGetBasisData(); $sqlval['point'] = $CONF['welcome_point']; // 会員データの生成 SC_Helper_Customer_Ex::sfEditCustomerData($sqlval); print "*"; lfPrintLog("creating customer data count:[" . ($i + 1) . "] end."); } print "\n"; lfPrintLog("createCustomers DONE.(" . CUSTOMERS_VOLUME . " data created)"); }
/** * 会員情報を削除する * * @access private * @return void */ public function lfDeleteCustomer($customer_id) { return SC_Helper_Customer_Ex::delete($customer_id); }
/** * 入力エラーチェック * * @param mixed $array * @access private * @return array エラーの配列 */ public function lfCheckError($array) { $objErr = new SC_CheckError_Ex($array); if (preg_match("/^[[:alnum:]]+\$/", $array['id'])) { if (!is_numeric(SC_Helper_Customer_Ex::sfGetCustomerId($array['id'], true))) { $objErr->arrErr['id'] = '※ 既に会員登録が完了しているか、無効なURLです。<br>'; } } else { $objErr->arrErr['id'] = '無効なURLです。メールに記載されている本会員登録用URLを再度ご確認ください。'; } return $objErr->arrErr; }
/** * Page のアクション. * * @return void */ public function action() { $objQuery = SC_Query_Ex::getSingletonInstance(); parent::action(); switch ($this->getMode()) { case "operate_cancel_cont_bill": $objFormParam = new SC_FormParam_Ex(); $objFormSearchParam = new SC_FormParam_Ex(); // パラメーター処理 $this->lfInitParam($objFormParam); $objFormParam->setParam($_POST); $objFormParam->convParam(); // 入力パラメーターチェック $this->arrErr = $this->lfCheckError($objFormParam); $this->arrForm = $objFormParam->getHashArray(); // 検索引き継ぎ用パラメーター処理 $this->lfInitSearchParam($objFormSearchParam); $objFormSearchParam->setParam($objFormParam->getValue('search_data')); $this->arrSearchErr = $this->lfCheckErrorSearchParam($objFormSearchParam); $this->arrSearchData = $objFormSearchParam->getSearchArray(); break; } GC_Utils_Ex::gfDebugLog($this->arrErr); $objDb = new SC_Helper_DB_Ex(); $this->customer_id = $this->arrForm['customer_id']; $this->customer = SC_Helper_Customer_Ex::sfGetCustomerData($this->customer_id); // モードによる処理切り替え switch ($this->getMode()) { case 'confirm': // 購入履歴情報の取得 (ポイント付与でエラーチェックに通らない時用) list($this->tpl_linemax, $this->arrPurchaseHistory, $this->objNavi) = $this->lfPurchaseHistory($this->customer_id); break; case "operate_cancel_cont_bill": list($this->tpl_linemax, $this->arrPurchaseHistory, $this->objNavi) = $this->lfPurchaseHistory($this->customer_id); $curl = $this->curl_init(true, false); $transactionId = $_REQUEST["au_payment_transaction_id"]; $config = SC_AuonePayment_Ex::getConfig(); if (strlen($transactionId) == 32) { $post = $this->getPost("OperateCancelContBill", $config, compact("transactionId")); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post)); $result = $this->curl_result($curl); $result["post_history"] = $post; $this->arrErr["au_payment_transaction_id"] = $this->check_result($result, array()); $this->arrErr = array_filter($this->arrErr); if (!isset($this->arrErr["au_payment_transaction_id"])) { $curl = $this->curl_init(true); // FIXME 状態確認 $post = $this->getPost("ConditionInquiryForPayTranStat", $config, compact("transactionId")); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post)); $result = $this->curl_result($curl); $arrWhereVal = array("del_flg" => 1, "transaction_status" => $result["body"]["transactionStatus"], "pay_status" => $result["body"]["payStatus"]); $arrWhereVal = array_filter($arrWhereVal, "strlen"); $objQuery->update("cp_dtb_customer_transaction", $arrWhereVal, "transaction_id = ? AND del_flg = 0", array($transactionId)); } } else { $this->arrErr["au_payment_transaction_id"] = "不正な処理"; } break; } if ($objDb->sfColumnExists("cp_dtb_customer_transaction", "id")) { $objQuery->setOrder("id DESC"); $this->customer["transaction"] = $objQuery->select("*", "cp_dtb_customer_transaction", "\n customer_id = ?\n AND continue_account_id IS NOT NULL\n AND transaction_status = '40'\n ", array($this->customer_id)); $this->customer["transaction2"] = $objQuery->select("*", "cp_dtb_customer_transaction", "\n customer_id = ?\n AND continue_account_id IS NULL\n AND transaction_status = '40'\n ", array($this->customer_id)); $objQuery->setOrder(""); if (count($this->customer["transaction"]) == 0 && $this->customer["status"] == "2") { SC_Helper_Customer_Ex::sfEditCustomerData(array("status" => 1), $this->customer_id); $this->arrForm["status"]["value"] = 1; } } foreach ($this->arrErr as $msg) { $this->tpl_onload .= ";console.log('{$msg}');"; } }
/** * 配信内容と配信リストを書き込む * * @return integer 登録した行の dtb_send_history.send_id の値 */ function lfRegisterData(&$objFormParam) { $objQuery =& SC_Query_Ex::getSingletonInstance(); list($linemax, $arrSendCustomer, $objNavi) = SC_Helper_Customer_Ex::sfGetSearchData($objFormParam->getHashArray(), 'All'); $send_customer_cnt = count($arrSendCustomer); $send_id = $objQuery->nextVal('dtb_send_history_send_id'); $dtb_send_history = array(); $dtb_send_history['mail_method'] = $objFormParam->getValue('mail_method'); $dtb_send_history['subject'] = $objFormParam->getValue('subject'); $dtb_send_history['body'] = $objFormParam->getValue('body'); $dtb_send_history['start_date'] = 'CURRENT_TIMESTAMP'; $dtb_send_history['creator_id'] = $_SESSION['member_id']; $dtb_send_history['send_count'] = $send_customer_cnt; $dtb_send_history['search_data'] = serialize($objFormParam->getSearchArray()); $dtb_send_history['update_date'] = 'CURRENT_TIMESTAMP'; $dtb_send_history['create_date'] = 'CURRENT_TIMESTAMP'; $dtb_send_history['send_id'] = $send_id; $objQuery->insert('dtb_send_history', $dtb_send_history); // 「配信メールアドレス種別」に携帯メールアドレスが指定されている場合は、携帯メールアドレスに配信 $emailtype = 'email'; $searchmailtype = $objFormParam->getValue('search_mail_type'); if ($searchmailtype == 2 || $searchmailtype == 4) { $emailtype = 'email_mobile'; } if (is_array($arrSendCustomer)) { foreach ($arrSendCustomer as $line) { $dtb_send_customer = array(); $dtb_send_customer['customer_id'] = $line['customer_id']; $dtb_send_customer['send_id'] = $send_id; $dtb_send_customer['email'] = $line[$emailtype]; $dtb_send_customer['name'] = $line['name01'] . ' ' . $line['name02']; $objQuery->insert('dtb_send_customer', $dtb_send_customer); } } return $send_id; }
private function lfGetOrderData($order_id) { if (SC_Utils_Ex::sfIsInt($order_id)) { // DBから受注情報を読み込む $objPurchase = new SC_Helper_Purchase_Ex(); $this->arrDisp = $objPurchase->getOrder($order_id); list($point) = SC_Helper_Customer_Ex::sfGetCustomerPoint($order_id, $this->arrDisp['use_point'], $this->arrDisp['add_point']); $this->arrDisp['point'] = $point; // 受注詳細データの取得 $arrRet = $objPurchase->getOrderDetail($order_id); $arrRet = SC_Utils_Ex::sfSwapArray($arrRet); $this->arrDisp = array_merge($this->arrDisp, $arrRet); // その他支払い情報を表示 if ($this->arrDisp['memo02'] != '') { $this->arrDisp['payment_info'] = unserialize($this->arrDisp['memo02']); } $this->arrDisp['payment_type'] = 'お支払い'; } }
/** * 会員を削除する処理 * * @param integer $customer_id 会員ID * @return boolean true:成功 false:失敗 */ public static function delete($customer_id) { $arrData = SC_Helper_Customer_Ex::sfGetCustomerDataFromId($customer_id, 'del_flg = 0'); if (SC_Utils_Ex::isBlank($arrData)) { //対象となるデータが見つからない。 return false; } // XXXX: 仮会員は物理削除となっていたが論理削除に変更。 $arrVal = array('del_flg' => '1'); SC_Helper_Customer_Ex::sfEditCustomerData($arrVal, $customer_id); return true; }
/** * 入力エラーチェック * * @param mixed $array * @access private * @return array エラーの配列 */ function lfCheckError($array) { $objErr = new SC_CheckError_Ex($array); if (preg_match("/^[[:alnum:]]+\$/", $array['id'])) { if (!is_numeric(SC_Helper_Customer_Ex::sfGetCustomerId($array['id'], true))) { $objErr->arrErr['id'] = t('c_* Member registration is already complete or the URL is invalid.<br />_01'); } } else { $objErr->arrErr['id'] = t('c_* The URL is invalid. Check the member registration URL listed in the e-mail._01'); } return $objErr->arrErr; }