ECCUBE2.17 管理画面に再ログイン時、最終使用ページを表示させる

今回、メールに貼り付けたURLから、
直接、管理ページ内のページを開きたいのだけど、

管理ページにログインされていないと、当然ながら、
「ログインページに戻る」が表示され、
パスワードを入れると、HOMEが表示される。

「ログインページに戻る」が表示され、
パスワードを入力しないといけないのは、必須条件だとしても、
ログイン後は、HOMEではなく、
メールに貼り付けたURLを、表示させたい。

***

>> admin/login_error.tpl

<a class="btn-action" href="<!--{$smarty.const.ADMIN_LOGIN_URLPATH}-->?lasturl=<!--{$smarty.server.HTTP_Host}--><!--{$smarty.server.REQUEST_URI}-->"><span class="btn-prev">ログインページに戻る</span></a>

現在のURLを、getでログインページに送る。

 

>> admin/login.tpl

<input type="hidden" name="lasturl" value="<!--{$smarty.request.lasturl}-->" />

を、</form>上に設置し、URLを引き継ぐ。

 

>> /data/class_ex/page_ex/admin/LC_Page_Index_Ex.php

	function action() {
		// パラメーター管理クラス
		$objFormParam = new SC_FormParam_Ex();
	
		switch ($this->getMode()) {
		case 'login':
			//ログイン処理
			$this->lfInitParam($objFormParam);
			$objFormParam->setParam($_POST);
// ▼パスワード不明時は、コメントアウト > http://ec-cube.nakweb.com/blog/1073.html
			$this->arrErr = $this->lfCheckError($objFormParam);
var_dump3($this->arrErr);
#unset($this->arrErr);
			if (SC_Utils_Ex::isBlank($this->arrErr)) {
				$this->lfDoLogin($objFormParam->getValue('login_id'));

				// 2022-01-05 > 最後に使用していたページを表示
var_dump3($_REQUEST['lasturl'], __FILE__);
				if (empty($_REQUEST['lasturl'])) {
					SC_Response_Ex::sendRedirect(ADMIN_HOME_URLPATH);
				} else
					SC_Response_Ex::sendRedirect($_REQUEST['lasturl']);

			}else{
				SC_Utils_Ex::sfDispError(LOGIN_ERROR);
			}
			break;
		default:
			break;
		}
	
		// 管理者ログインテンプレートフレームの設定
		$this->setTemplate(LOGIN_FRAME);
	}
}

lasturlが空なら、HOMEを表示。

 

 

-

ポイントの共有(続き・覚書)

2系統は、dtb_Customerに、保有ポイントを記録する形だけど、

3系統は、現在ポイント、追加ポイントと仕様ポイントを
ログ形式で管理するオリジナル。
※一番新しいデータを拾う。

2系統はゴリゴリしやすいし、3系統は触りたくないので、
迷わず、2系統でいじっていきます。

 

/class_ex/helper_ex/SC_Purchase_Ex.php

function sfUpdateOrderStatus

ここで、ポイントの加減などをしているのだが、
ややこしいのが、
/shopping/load_payment_module.php から
/shopping/confirm.php に戻ると、
このイベントが発生してしまうこと。

現在値と、仮保存値で、
isUsePoint =  null or 3 (Cancel) / isAddPoint = 6 (出荷完了) 時、

  • $payment_total = 今回の購入額
  • $point_use = 使用ポイント
  • $point_add =  追加ポイント
  • $addCustomerPoint  = 保有ポイントから、足し引きするポイント数

を、計算。

// ▼使用ポイント
            // 変更前の対応状況が利用対象の場合、変更前の使用ポイント分を戻す
            if ($this->isUsePoint($arrOrderOld['status'])) { // null or 3 = cancel
                $addCustomerPoint	+= $arrOrderOld['use_point'];
				// 2021-12-18
				$newAddPoint		= - $newAddPoint;
				$newUsePoint		= - $newUsePoint;
				$payment_total		= 0;
            }
var_dump3(array('status'	=> $arrOrderOld['status'],
				'$addCustomerPoint' => $addCustomerPoint, 
				'$payment_total' => $payment_total, 
				'$newUsePoint' => $newUsePoint,
				'$newAddPoint' => $newAddPoint), __FILE__, __LINE__);

            // 変更後の対応状況が利用対象の場合、変更後の使用ポイント分を引く
            if ($this->isUsePoint($newStatus)) {
                $addCustomerPoint	-= $newUsePoint;
            }
// ▲使用ポイント
var_dump3(array('status'	=> newStatus,
				'$addCustomerPoint' => $addCustomerPoint, 
				'$payment_total' => $payment_total, 
				'$newUsePoint' => $newUsePoint,
				'$newAddPoint' => $newAddPoint), __FILE__, __LINE__);


// ▼加算ポイント
            // 変更前の対応状況が加算対象の場合、変更前の加算ポイント分を戻す
            if ($this->isAddPoint($arrOrderOld['status'])) { // 6 = 出荷済み
                $addCustomerPoint	-= $arrOrderOld['add_point'];
				// 2021-12-18
				$newAddPoint		= - $newAddPoint;
				$newUsePoint		= - $newUsePoint;
				$payment_total		= - 0;
            }
var_dump3(array('status'	=> $arrOrderOld['status'],
				'$addCustomerPoint' => $addCustomerPoint, 
				'$payment_total' => $payment_total, 
				'$newUsePoint' => $newUsePoint,
				'$newAddPoint' => $newAddPoint), __FILE__, __LINE__);

            // 変更後の対応状況が加算対象の場合、変更後の加算ポイント分を足す
            if ($this->isAddPoint($newStatus)) {
                $addCustomerPoint += $newAddPoint;
           }
// ▲加算ポイント
if ($newStatus == $arrOrderOld['status'])
	$payment_total	= 0;

な感じで、変更される箇所に、デバッグの残骸がある通り、
いろいろなところで呼ばれているので、不可欠でした。

 

続いて、ポイントを保存する処理。

/class_ex/helper_ex/SC_Customer_Ex.php

	$objQuery = SC_Query_Ex::getSingletonInstance();

	// 
	$_['order_id']		= $order_id;
	$_['customer_id']	= $cust_id;
	$_['point_use']		= $point_use;
	$_['point_add']		= $point_add;
	$_['point_current']	= getCustomerPointValue($cust_id) + $addCustomerPoint;
	$_['note']			= $_SERVER['HTTP_HOST']. ' : '. $order_id;
	$_['season_buy_total']	= getCustomer_SeasonBuyTotal($cust_id) + $payment_total;


	// 会員ランク判定
	global $customer_rank_minorder;
	$_['rank']				= 1;
	for ($i = count($customer_rank_minorder); $i > 0;  $i--) {
#var_dump2($customer_rank_minorder[$i], __FILE__, __LINE__);
		if ($customer_rank_minorder[$i] < $_['season_buy_total']) { $_['rank'] = $i; #var_dump2($_['rank'], __FILE__, __LINE__); break; } } $objQuery->insert(extrenal_db. 'plg_point_order_point ', $_);
var_dump2($_, __FILE__, __LINE__);

 

-