掲題の通り、2.0系へのバージョンアップでモバイルの空メールが機能しなくなっていた問題があったため、とりあえず次の3点について修正して対応しました。
【/data/script/recieve_kara_mail.php】を以下のように変更。
#!/usr/bin/env php
<?php
/**
* モバイルサイト/空メール受け付けスクリプト
*/
$base_dir = dirname(dirname(dirname(__FILE__))) . '/';
require_once($base_dir . 'html/define.php');
if (!defined("CLASS_PATH")) define("CLASS_PATH", $base_dir . "data/class/");
if (!defined("CLASS_EX_PATH")) define("CLASS_EX_PATH", $base_dir . "data/class_extends/");
if (!defined("CACHE_PATH")) define("CACHE_PATH", $base_dir . "data/cache/");
require_once(CLASS_EX_PATH . "SC_Initial_Mobile_Ex.php");
// アプリケーション初期化処理
$objInit = new SC_Initial_Mobile_Ex();
$objInit->init();
require_once(CLASS_EX_PATH . "db_extends/SC_DB_DBFactory_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_DB_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_Mobile_Ex.php");
require_once CLASS_PATH . '/SC_MobileKaraMail.php';
require_once CLASS_PATH . '/SC_SendMail.php';
$CONF = SC_Helper_DB_EX::sf_getBasisData();
$objMail =& SC_MobileKaraMail::factory();
$objMail->parse();
$token = $objMail->getToken();
$sender = $objMail->getSender();
if (SC_Helper_Mobile_Ex::gfRegisterKaraMail($token, $sender)) {
$subject = '空メールを受け付けました';
$reply_body = "下記のリンクをクリックして、次の手続きに進んでください。\n" .
// SITE_URL . "redirect.php?token=$token";
MOBILE_SITE_URL . "redirect.php?token=$token";
} else {
$subject = '空メール手続きが失敗しました';
$reply_body = "時間切れなどにより、空メール手続きを行うことができませんでした。\n" .
"サイトのトップへ戻ってやり直してください。\n" .
SITE_URL . "\n";
}
$objReply = new SC_SendMail;
$objReply->setItem($sender, "【{$CONF["shop_name"]}】$subject", $reply_body,
$CONF['email03'], $CONF['shop_name'], $CONF['email03'], $CONF['email04']);
$objReply->sendMail();
$objMail->success();
?>
【/data/class/session/sessionfactory/SC_SessionFactory_UseCookie.php】内のSC_SessionFactory_UseCookieクラスで、initSessionメソッドを以下のように変更。
function initSession() {
///////////////////////////////////////////////////////////////////////////////////////////
// 空メール処理用のトークンが設定されている場合はトークンを元にセッションIDの取得を試行する。
if (isset($_GET['token'])) {
$token = $_GET['token'];
$objQuery = new SC_Query;
$arrRow = $objQuery->getrow('dtb_mobile_kara_mail', 'session_id, next_url, email',
'token = ? AND email IS NOT NULL AND receive_date >= ?',
array($token, date('Y-m-d H:i:s', time() - MOBILE_SESSION_LIFETIME)));
if (isset($arrRow)) {
$objQuery->delete('dtb_mobile_kara_mail', 'token = ?', array($token));
list($sessionId, $next_url, $email) = $arrRow;
if ($sessionId){
session_set_cookie_params(0, "/", DOMAIN_NAME);
session_id($sessionId);
session_start();
if ($email){
$_SESSION['mobile']['kara_mail_from'] = $email;
}
if ($next_url){
$objURL = new Net_URL(MOBILE_SITE_URL . $next_url);
# $objURL->addQueryString(session_name(), $sessionId);
$url = $objURL->getURL();
$_SESSION['next_url'] = $url;
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////
if (session_id() === "") {
session_set_cookie_params(0, "/", DOMAIN_NAME);
if (!ini_get("session.auto_start")) {
// セッション開始
session_start();
}
}
}
【/data/class_ectends/page_extends/LC_Page_Redirect_Ex.php】のLC_Page_Redirect_Exクラスでモバイル用メソッドをオーバーライド。
function mobileProcess() {
define('SKIP_MOBILE_INIT', true);
if (isset($_GET['token'])) {
if (isset($_SESSION['next_url'])){
$next_url = $_SESSION['next_url'];
}else{
$next_url = SC_Helper_Mobile_EX::gfFinishKaraMail($_GET['token']);
}
}
// $next_url には, セッションID付与済み
if (isset($next_url) && $next_url !== false) {
$this->sendRedirect($next_url, true);
} else {
$this->sendRedirect(MOBILE_SITE_URL, true);
}
}