今まで何度も書いていますが、Cube2.1betaでは、管理者モードか公開モードかの切替タイミングが厳密になっていて、modules/(dirname)/admin/*.php 以外で、cp_header.php を読み込んだり、cp_header() を実行しようとすると、fatalエラーで止まります。
そんなわけで、すべてのD3モジュール(含altsys)について、管理画面はadmin/以下で動かすことにしたのですが、残る唯一のD3モジュールであるsuinさんのbulletin2は、手つかずでした。
本来なら、suinさんに対応していただくところですが、せっかくいろいろ楽しい留学生活を送っているのを邪魔するのは忍びない
というわけで、パッチを作ってみました。
2.04をダウンロードしたら、まずはminahitoさんのインストールパッチを当ててください。
http://homepage.mac.com/minahito/.Public/BulletinToA4.zip
そこへ、さらにこのパッチを上書きします。
http://www.peak.ne.jp/support/xoops/bulletin-2.04patch4cube2.1beta.tar.gz
ところが、実はこのパッチにも大どんでん返しがあって、このパッチを上書きしただけでは、権限設定ができません。(事実上使い物にならない)
というのも、bulletin2の権限設定には、onokazuさんが作ったことが保証されている数少ないコントローラである、grouppermform.php が使われているのです。(このコントローラは、極めて粗悪な作りで、あのCatzwolfさんもあきれかえったという逸話もあります)
Cube2.1でも、このコントローラをエミュレートしているのですが、なにせ元の作りがおかしいものですから、相当に無理をしています。POSTデータの受け取り先がmodules/legacy/include/groupperm.php という時点でかなりキナ臭いです。
そして、そのPOSTデータ受け取り先は、cp_header.phpを読み込むのですが、ここで最初に書いた制限に引っかかります。つまりfatalで止まります。
これはある意味、コアのバグなので、修正していただくしかない、というところですが、今すぐ動かすなら、とりあえずストラテジの分岐処理をパッチするしかないでしょう。
modules/legacy/kernel/Legacy_Controller.class.php line139
if(count($urlInfo)>=3) {
if(strtolower($urlInfo[0])=="modules" && strtolower($urlInfo[2])=="admin"){
$adminStateFlag=true;
}
elseif($urlInfo[0] == "modules" && $urlInfo[1] == "legacy" && $urlInfo[2] == "include") {
$adminStateFlag=true;
}
elseif($urlInfo[0] == "modules" && $urlInfo[1] == "system" && substr($urlInfo[2], 0, 9) == "admin.php") {
$adminStateFlag=true;
}
}
elseif(substr($urlInfo[0], 0, 9) == "admin.php") {
$adminStateFlag=true;
}