LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Forum

d3コメント統合の、元記事閲覧権限連動ハック

投稿ツリー


このトピックの投稿一覧へ

naao

上げ d3コメント統合の、元記事閲覧権限連動ハック

msg# 1
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2009/7/4 0:13 | 最終変更
naao  Commander 居住地: 2006年10月頃~  投稿数: 509
皆さん、こんにちは。

先日、こちらのd3diary開発トピで報告した、d3コメント統合の元記事閲覧権限の件。

結局、D3comment統合クラスに「can_display」という新たな関数を追加せずとも、同クラス内の「validate_id」という既存の関数を使えば良い、ということに気付きました。

これを使えば、既に各モジュールで実装済みの閲覧権限との連動が、そのまま達成できそうです。  

折角ですので、そのハックを差分パッケージとして配布することにしました。 作者のGIJOEさん対して失礼のないように敬意を表しつつ、 この機能の実装をモジュール作者の方にお願いするのは却って作者の方に妙なプレッシャーをかけるやもしれないという、周囲のご意見もあるため止めにして、 私なりにどうすべきか検討の末、今後も自分でハック版を出し続ける覚悟をもって公開することにしました。

もちろん、GIJOEさんが将来どこかのタイミングで取り込んでくださるのであれば、それこそ光栄なことで大歓迎でございます。 (表示条件が既存と異なってくるためになかなか難しいと想像しますが)

公開ページ:(なーお'nWEB)d3コメント統合の、元記事閲覧権限連動ハック

今のところ、ざっとした検証しかしていませんが、pico、xpWiki、d3blogにて、連動できているようです。(但しpicoはカテゴリ単位の権限設定) 拙作のd3diaryについては、近日中に次回のバージョンで対応予定です。

権限連動ページ:
+ listtopics ページ、 listtopics_over_categories ページ
+ listtopicsブロック、listpostsブロック
+ forum検索 ページ
+ Global 検索 ページ
+ d3pipes ブロックジョイント

また、いつものように稚拙なハックですので、不具合報告や改善案のご提示など、合わせていただきますようお願い致します。

では。

****
(090705追記、まだ内容修正中 ひとまず確定)
 コメント元記事が削除された場合などの迷子記事、ハックなしのd3forumでは表示されますが、このハックの副作用として一般ユーザーやゲストには表示しなくなりますので、ご注意ください。
 但し、管理者とモデレータには全て表示されます。 記事のメンテによって回避する、という考え方です。

 次回のハックバージョンでは、管理者・モデレーターに表示される迷子記事には、タイトルあたりに何らかのメッセージを付加しようかと考えています。 例えば、

 [!!Lost!!] 元コメントタイトル

とかですかね。。でも迷子なのか閲覧権限で非表示なのかの判別を付ける手立てがありませんね。。
・validate_id関数に引数で渡すid値===戻り値なら、表示可(従来どおりの判定)。
・関数の戻り値がfalseで管理者・モデレーターの場合には、[!!Lost!!] 表示、としてしまうか。。 でもそうすると、モデレータにも権限なしの元記事の場合と区別ができない。
・渡されたid値の元記事がきちんと存在して、権限でNGの場合のみ、戻り値を「-1」とするように仕様を拡張してしまう、というのも一つの手かもしれません。 「-1」であれば、引数に渡したid値との差異をみているハック以前のオリジナル版の判定でも有効ですし、 external_link_idが負の値になるというのは、通常では考えられませからね。。
 ただ、この場合は各モジュール側への仕様変更協力をお願いしないといけないですし。。
 (お願いということになると敷居が極端に高くなるようですし、ハック仕様へのお願いなので躊躇。)
 
この件、一人でやっていても寂しいし独りよがりになりがちですので、このハックで別の副作用があるよ、とか、こうした方が良いのでは? など皆さんのご意見お願いします。

(参考追記)
d3forum内(今回のハック以前)でvalidate_idを呼んでいる箇所:2箇所
・main/newtopic.phpの頭のほう(トピック作成時の元記事確認)
・main/post.phpの94行目付近(コメント作成時の元記事確認)
$external_link_id = $_POST['external_link_id'] ;
if( ( $external_link_id = $d3com->validate_id( $external_link_id ) ) === false ) {
	die( _MD_D3FORUM_ERR_INVALIDEXTERNALLINKID ) ;
}

ハック現状の代表的な記述部分(ループ内で、予め取得した各forum_idのd3comオブジェクトを参照)
// naao from
$can_display = true;	//default
if( is_object( $d3com[intval($row['forum_id'])]) ) {
	$d3com_obj = $d3com[intval($row['forum_id'])];
	$external_link_id = intval($row['topic_external_link_id']);
	if( ( $external_link_id = $d3com_obj->validate_id( $external_link_id ) ) === false ) {
		$can_display = false;
	}
}	// naao to
投票数:2 平均点:10.00

  条件検索へ


Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities