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;
  }
=======================================================