白扇・ミニ白後継モジュールのその後

2007/08/22 | XOOPS

Xoops Cubeのリリース時に白扇後継モジュール開発を継続しようかどうか迷ってはいたが、依然としてその野望(?)は消えていない。Cubeでのユーザ関連機能のモジュール化に伴い、おそらく仕様ががらっと変わっているとは思うが、これまで蓄積した知識をこれからも利用したいので、いちおう開発は続けている(といってもまだ検証中だが)。
今回「物は試し」ということで、minihakuを実際にxoopsに組み込んでみた。といっても追加項目を設定したわけではなく、必要最低限な項目に限って登録・編集できるようにしてみた。
実際にしてみた作業は簡単。minihakuのconfig.php内にデフォルトで記入されている項目を全てコメントアウトし、テンプレートで記述されている不要な項目についても全てコメントアウトしてみた。実際の処理ルーチンには手を入れなかったが、これだけで対応できた(ログインID、メールアドレス、パスワードだけにしてみた)。
ここまでやってみてわかったこと。ユーザ情報の登録・編集の各機能はminihakuで用意されているが、ユーザ情報参照機能はXoops標準の機能を利用しているのだが、これは違和感がある。やはり入力した内容に応じた情報が表示されないと・・・。幸い、プログラムを組み込む余地だけは残してあるようなので、おいおい組み込んでみることにする。
実際にminihakuを組み込むことで、後継モジュール作成の基盤がずいぶん明確になったような気がする。ただ、のんびり作っていくことにした。

XoopsでRSSを配信

2007/08/12 | XOOPS

XoopsでRSSを配信したい、というリクエストをいただいた。早速検索してみるとRSSfitというモジュールが紹介されていた。URLはここ

ここで紹介されていたRSSfit1.1を使用してみた。RSS配信したいモジュール用のプラグインを作成すれば準備完了だ(あとモジュールに対するアクセス権限も)。
結論からいくといとも簡単にRSSを配信することが出来た。

ちなみにこの上記で紹介したサイトで配布されているRSSfitJ(独自に日本語対応されたモジュール)は現行のXoops(2.0.16a JP)では動作しなかった(管理画面がうまく動いてくれないので設定のしようがない)。

RSSfitの本家を見てみた。こちらではRSSfitの最新版(1.21)が配布されていた。
ちなみにこちらでも、プラグインを作ることで正しく動作しているように見えるが、管理画面中で文字化けしているようなところが見受けられたので、今回は使用しなかった。多言語パックも用意されているようだが、日本語は用意されていなかった(残念)。
日本語版、つくってもいいかもしれない。でも、本家がマルチバイト対応していないので、プログラム本体のソースを全部追わないといけないので、それはそれでちょっと大変・・・。

Xoops と Xoops Cube

2007/08/08 | XOOPS

今まで使わなかったがXoops Cubeというソフトウェアがある。元々はXoopsは1本の開発の流れがあったが、そこから分家したソフトだ。先日とうとう安定版がでたとのアナウンスを見かけたので、早速インストールしてみた。

んで驚いた。
だって全然中身が違うんだもん。

Xoops Cubeは日本独自のバージョンとのことだが、そういえば昔、本家でのマルチバイト対応の問題でもめてた時期があったなぁ、と思い出しだ。開発者は日本人なのにおかしな話だ。おそらくあのときの遺恨を引きずって、分家したのだろう。

しかし困った。この数ヶ月で覚えたことが水の泡、というわけではないけれど戸惑うところは多々ある。
まず、管理画面のインターフェースが変わった。正直なれるのには時間がかかる。どこに何があるのかわからないのだ。
そしてモジュール。ユーザ登録などはモジュール化されてしまっている(これはいいことかもしれない)。結局ここはハックする方法を再検討しなくてはならない。
あと、管理画面もテンプレート化された模様。これはちょっとうれしい。

さて、白扇後継モジュールの作成をどうするか考えないといけない。これはちょっとペンディングにしたほうがよさそうだ。少し動向を見守ってから開発に着手することにする。

モジュールの公開範囲内でのアクセス権限設定

2007/07/11 | XOOPS

Xoopsには標準でモジュールへのアクセス権限設定機能が用意されている。複雑でないアクセス権限(例えば管理機能と公開機能に単純に分けられるような)であれば、この機能で十分まかなえる。これはモジュールを作成する際のお作法として、管理者機能はadminというサブディレクトリ内にファイルを配置すればよいからだ(つまりadminディレクトリ内かどうかで判断しているだけだ・・・多分)。
上記以外の権限チェック、つまり管理者かどうかというチェックではなく、例えば登録ユーザか否かのようなチェックや、あらかじめ許可されたグループに登録されたユーザか否か、というようなチェックが必要な場合は、スクリプト毎にアクセス権のチェックをしてやる必要がある。
地道にデータベースにSQLを発行してチェックしてもいいわけだが、諸々用意されているものを使うほうが簡単でいい。ここではその便利な方法を、既存モジュールから列挙してみた(既存モジュールの「フォーラム」を参照した)。

bool $xoopsUser->isAdmin($xoopsModule->mid())

$xoopsModule->mid()はモジュール管理番号を返し、それを引数としている$xoospUser->isAdmin()はアクセスしてきたユーザが、当該番号のモジュールに対して管理者権限をもっているかどうか、をチェックしてくれる。

bool check_priv_forum_auth($xoopsUser->uid(), $_POST[‘forum’], true)
bool is_moderator($forum, $xoopsUser->uid())

上記はそれぞれ専用の関数を用意し、それらの関数内ではデータベースに対してSQLを発行しているようだ。

つまり結局アクセス権のチェックは以下の二つの関数、モジュールの一般設定で設定する$xoopsModuleConfig(設定されていれば)、およびとデータベースへのSQLの発行などでチェックするということになりそうだ。
$xoopsModule->mid()
$xoospUser->isAdmin()

XoopsといえどもプログラムはPHPだから難しいわけではない。基本的にXoopsのお作法に則ったアクセス権の管理さえ出来れば、モジュールを作成するのは何も難しいことはない、ということになる。

ここまでくればハックが必要なモジュール(白扇など)をのぞけば大抵の機能を作ることが出来るようになるだろう。

minihakuの拡張その5

2007/07/08 | XOOPS

さて、edituserhook.phpを読んでいく。
$allowed_requests、$stop_reason_extrasの記述はregisterhook.phpと同じ。
次にuidの取得。ここでは「編集」なので、この画面を使用する人は当然ログインしているわけだからuidを取得できるわけだ。

設定ファイルを読み込んだ後、$xxxxxx_optionsの設定はフォームで使用される選択式設問用のオプション値の準備だ。
次は処理振り分け用の設定($op)。$opが設定されていなければ’editprofile’を設定する(フォームを表示するため)。
それから各種設定を変数へ格納する。

ここからが本格的な処理になる。
最初のif節はpostで送られてきた情報を、あらかじめ設定された$allowed_requestsと比較して変数に格納していく。

そして次のif節。実際の保存処理に移るわけだが、if節の中の最初の処理はエラーチェック。エラーがあったらもう一度フォームを表示することになる。
実際の保存処理はきわめて簡単だ。あらかじめ用意された関数を使えばよい。具体的には以下の記述。

$edituser =& $member_handler->getUser($uid);
$edituser->setVar(‘url’,$allowed_requests[‘url’],true);



$member_handler->insertUser($edituser);

これでOK。後付で追加した項目は都度UPDATE構文で処理する。
最後の部分はフォームの表示だけ、となる。

minihakuはこれで全てだ。ユーザ情報の表示(userinfohook.php)はプログラムこそ用意されて入るが中身は空。つまり一度はhookをかけるが、何もせずXoop標準の処理に戻して、デフォルトの表示方法をとっているようだ。

もちろん自分でプログラムを作成して、userinfohook.phpに記述しておけば独自の表示処理をかませることが出来る。無論テンプレートも別途用意してやる必要があるわけだが・・・。

minihakuを読んでみて、Xoopsのことがずいぶん理解できたような気がする。以降の新規モジュール作成の際にはきっと役立つだろう。
これから仕様決め。今月中に形を作りたいものだ。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net