OpenPNEのスマートフォン対応その2

前回3.4系でスマートフォンでの新規登録が出来ない件で無理矢理対応を行ったが、今回は3.6系での処置を行った。
スマートフォンの対応については3.8系で進められている様ですが、諸事情で3.6系を使わざるを得なかったので、力業で・・・。前回と同様にこの記事を参考にする場合は、筆者は一切の責任を負いませんので、自己責任でお願いいたします。ここではver3.6.3について行っています。

基本的には前回の記事と同様ですが、いくつかさらに変更しなくてはならない点があります。
opAuthRegisterFormMailAddress.class.php
に新しい関数として”validateMemberConfig”があります。これによりモバイルであるかPCであるかをチェックしているようですが、「メールアドレスはモバイルだがブラウザはPC扱い」と言う不整合を正しいとみないといけないので、この関数の判断部分をコメントアウトにしました。
———-
public function validateMemberConfig($validator, $values, $arguments = array())
{
// if (sfConfig::get(‘app_is_mobile’, false))
  (略)
// }
//
return $values;
}
———-
次に、下記でもチェックがありましたので、これもチェック部分を外します。
plugins/opAuthMailAddressPlugin/apps/pc_frontend/modules/opAuthMailAddress/templates/_registerBox.php
———-
<?php //if (!$pcAddressPre): ?>
<?php
//$options = array(
// ‘title’ => __(‘Errors’),
//);
//op_include_box(‘registerError’, __(‘Can access this registration URL with mobile only.’), $options);
?>
<?php //else: ?>
<?php op_include_parts(‘ButtonBox’, ‘opAuthMailAddressPluginRegisterBox’, array(
‘title’ => __(‘Registration with your e-mail address’),
‘body’ => __(‘You can go to the registration page by clicking the button below.’),
‘button’ => __(‘Go to the registration page’),
‘url’ => url_for($sf_user->getRegisterInputAction()),
‘method’ => ‘get’,
)) ?>
<?php //endif; ?>
———-
取り急ぎこれで動くようですが、はたしてこれで良いのだろうか・・・(-_-;

2012/05/21修正
<>が生きていたので、phpソース部分が一部抜けていました。

ログサーバーが・・・つづき

またしてもログが止まっていた。よくよく見るとcronのログの関係で大量の小さいファイルが出来ていたため、新しいファイルを作ることが出来なくなっていたようだ。ゴミファイルを消す処理を追加して再稼働させました。・・・これで大丈夫かな・・・

OpenPNEのスマートフォン対応

OpenPNEを使ったサイトでスマートフォンで登録出来ないとの事で対応しました。
いろいろ手をかけてあるので単純にバージョンをあげれなかったので、改造に踏み切りました。
尚、ここで述べた方法を行った結果生じた不具合・損害については一切責任を負いませんので、自己責任でお願いいたします。

初期登録では「メールアドレス」を登録し招待メールを送るのですが、この際メールのドメインで携帯であるかPCであるかを判断するので、スマートフォンの場合でもメールアドレスは携帯扱いになってしまいます。ところが・・・いざ登録する場面ではUserAgentで識別されてしまうため初期登録がエラーとなってしまいます。
スマートフォン用の画面を製作していないので、PC用を使ってもらっている関係でUserAgentにスマートフォン用のブラウザを追加する事は出来ません。またいろいろなブラウザを使用しているためいたちごっこになりそうです。

そこで、PCの初期登録URLで携帯のメールアドレスを処理出来る様に改造する事にしました。
突貫であったのでもう少し良い方法があるかもしれませんが取り急ぎ動いているようです。
尚、OpenPNEは3.4系です。
ご参考まで

初期でtokenを処理するために下記を改造する。
“plugins/opAuthMailAddressPlugin/apps/pc_frontend/modules/opAuthMailAddress/actions/actions.class.php”
=======================================================
   略
 public function executeRegister($request)
 {
  $this->getUser()->setCurrentAuthMode(‘MailAddress’);
  $token = $request->getParameter(‘token’);
  $memberConfig = Doctrine::getTable(‘MemberConfig’)->retrieveByNameAndValue(‘pc_address_token’, $token);
##追加#######################
if ($memberConfig != ‘pc_address_token’){
  $memberConfig = Doctrine::getTable(‘MemberConfig’)->retrieveByNameAndValue(‘mobile_address_token’, $token);
}
#########################
  $this->forward404Unless($memberConfig, ‘This URL is invalid.’);

初期登録画面でmobile_address_preを処理出来るように下記を変更する。
“./plugins/opAuthMailAddressPlugin/lib/form/opAuthRegisterFormMailAddress.class.php”
=======================================================
  public function doSave()
    略
  if (sfConfig::get(‘app_is_mobile’, false))
  {
   $memberConfig = Doctrine::getTable(‘MemberConfig’)->retrieveByNameAndMemberId(‘mobile_address_pre’,$this->getMember()->getId());
   $memberConfig->setName(‘mobile_address’);
  }
  else
  {
   $memberConfig = Doctrine::getTable(‘MemberConfig’)->retrieveByNameAndMemberId(‘pc_address_pre’,$this->getMember()->getId());
##コメントアウトして、追加########
   #$memberConfig->setName(‘pc_address’);
   if (“$memberConfig” == “pc_address_pre”){
    $memberConfig->setName(‘pc_address’);
   }else{
    $memberConfig = Doctrine::getTable(‘MemberConfig’)->retrieveByNameAndMemberId(‘mobile_address_pre’,$this->getMember()->getId());
    $memberConfig->setName(‘mobile_address’);
   }
##########
   }
   $memberConfig->save();
   return $memberConfig;
  }
=======================================================