2011年7月29日金曜日

d3blogのコメントがWizMobileでエラーになる件

少々込み入っているのでブログにまとめる。

まず、いきなりリダイレクトされて面食らうのだが、WizMobileではpostメソッドで呼ばれたら$_GETパラメータは取得できないらしい。という事でPOSTメソッドを使うにも関わらず、URLにGETパラメータを埋め込んで呼び出している変則的な部分をPOSTパラメータに埋め込み直す。

xoops_trust_path/modules/d3blog /templates/inc_comment_form.html
themes/wmb_default/templates/d3blog/inc_comment_form.html
themes/mbxoops6/templates/d3blog/inc_comment_form.html


上記のいずれもpostメソッドなのにgetパラメータ渡しを目論んでいた。
<form name='d3blogCommentForm' id='d3blogCommentForm' action='<{$xoops_url}>/modules/<{$mydirname}>/index.php?page=comment_post' method='post'>


(そりゃないぜセニョール)なのでpostへ変更

<form name='d3blogCommentForm' id='d3blogCommentForm' action='<{$xoops_url}>/modules/<{$mydirname}>/index.php' method='post'>

  <!-- comment rule -->
  <div style="text-align: center; <{$smarty.const.MBX_FS_XSMALL}>">
    (<{$rule_text}>)
  </div>
  <{$smarty.const.MBX_BLANK_TAG}>

  <!-- hidden items -->
  <input type='hidden' name='page' id='page' value='comment_post' />

こんな感じで hidden items 欄へパラメータを埋め込み直す。しかーし、このpageという変数はgetでしか受け取ってくれない。という事で次は受け取り部にpost処理を追加

xoops_trust_path/modules/d3blog /main.php

$mytrustdirpath = dirname( __FILE__ ) ;

$page = preg_replace( '/[^a-zA-Z0-9_-]/' , '' , @$_GET['page'] );

の1行下に追加。

// Hacked by a.k.a Bluemoon
if (isset($_POST['page'])) $page = preg_replace( '/[^a-zA-Z0-9_-]/' , '' , @$_POST['page'] );

で、気を取り直してデバッグするとリダイレクトされる。しかしコメント投稿は成功していた。じゃリダイレクトがへんじゃねとさらにハックする。

xoops_trust_path/modules/d3blog /main/comment_post.php

以下、書込み成功後のリダイレクトがどーだったかというと


        if (!isset($comment_post_results)) {

            // if the comment is active, redirect to posted comment
            if ($comment->getVar('com_status') == XOOPS_COMMENT_ACTIVE) {
                redirect_header($redirect_page.'='.$com_itemid.'&amp;com_id='.$newcid.'&amp;com_rootid='.$com_rootid.'&amp;com_mode='.$com_mode.'&amp;com_order='.$com_order.'#comment'.$newcid, 2, _CM_THANKSPOST);
            } else {
                // not active, so redirect to top comment page
                redirect_header($redirect_page.'='.$com_itemid.'&amp;com_mode='.$com_mode.'&amp;com_order='.$com_order.'#comment'.$newcid, 2, _CM_THANKSPOST);
            }
        }
まあ、通常のブラウザなら問題ないんだけどWizMobile的にはきちんとXOOPS_URLが記載されていないのとNGらしい。という事でちゃんと頭から正式なURIを入れてみる。

        if (!isset($comment_post_results)) {
            // Hacked by a.k.a Bluemoon  start
            // if the comment is active, redirect to posted comment
            if ($comment->getVar('com_status') == XOOPS_COMMENT_ACTIVE) {
                $redirect = sprintf('%s/modules/%s/', XOOPS_URL, $mydirname) . $redirect_page.'='.$com_itemid.'&amp;com_id='.$newcid.'&amp;com_rootid='.$com_rootid.'&amp;com_mode='.$com_mode.'&amp;com_order='.$com_order.'#comment'.$newcid;
            } else {
                // not active, so redirect to top comment page
                $redirect = sprintf('%s/modules/%s/', XOOPS_URL, $mydirname) . $redirect_page.'='.$com_itemid.'&amp;com_mode='.$com_mode.'&amp;com_order='.$com_order.'#comment'.$newcid;
            }
            redirect_header($redirect, 2, _CM_THANKSPOST);
            // Hack end
        }


おK。やたらハマって他の作業しながらだが1週間位掛かってしまった。orz

最近マックに開発環境が移行したのでimodeシュミレータとかVMwareで済ましていたのだが、流石にVMwareにxampp入れるのも面倒なのでサーバ直でつついていたのがいけなかった.。しかも前に使っていたWindowsXPな環境がimodeシュミレータ何故かローカルにつながらず最後はauの openwave SDK 6.2でのソース表示に助けられた始末。これってもうダウンロードできないんじゃなかったっけ?(未確認)まあそんなこんなで、WindowsXPな環境はガラケーがある限り取っておかねばなるまい。

ああ、これらGPL V2なので訂正したら私のコメントも(いじってみた)記念に入れておいて欲しい。

0 件のコメント:

コメントを投稿