d3コメント統合の、元記事閲覧権限連動ハック
現在のハックバージョン:0.85_001
元ネタ:(XUGJ)d3forum-d3diary統合元モジュール閲覧権限フィルター
(本ハックでは実装方法を少し変えています。)
d3forumのコメント統合を使っていると、管理上も便利でやめられなくなってしまいます。 GIJOEさんに感謝。
ところで、コメント元のモジュールでユーザー毎やグループ毎の閲覧権限を制御する機能を使うとき、コメントのタイトルやコメント者がd3forum側で表示されてしまうため、ちょっと気持ちが悪いと思ったことはありませんか?
私的にはこれは何とかしたかったので、d3diaryの開発に合わせていろいろやってみた結果を、差分ファイルにして配布することにしました。 よろしければご使用ください。 但し、いきなり稼動中のd3forumモジュールに差分を当てるなどどいうチャレンジは絶対にやめましょう。 少なくとも同テスト環境で試してから、実働環境のバックアップを取った上で、アップロードするようお願いします。 いずれにしても、何か不都合が発生しても責任を取れないことに変わりはありませんが。
ダウンロード
以下のファイルをダウンロード、解凍して、modules 以下のフォルダを、xoops_trust_path/modules 以下に上書きし、アップロードしてください。
ダウンロードファイル | 適応d3forum本体バージョン |
d3com_auth_diff_0.85_001.zip 初版 | 0.85 |
コメント元記事の閲覧権限の継承
メインとなる機能です。 D3コメント統合を行った各モジュールの、D3commentクラス内の、「Validate_id」メソッドへの問い合わせを行って、その結果で判定します。 対象となるページは、
- listtopics ページ、 listtopics_over_categories ページ
- listtopicsブロック、listpostsブロック
- forum検索 ページ
- Global 検索 ページ → 結果的に 各ユーザーの投稿ログページにも反映される。
となっています。
各モジュールへの問い合わせた結果は、そのモジュールのD3commentクラスの内容次第です。
但し、listtopics ページと listtopics_over_categories ページ については、管理者とアドミニストレータに対しては、問い合わせ結果に関わらず全て表示します。
理由は、どこか表示しておかないと、元記事が削除されたりしてモジュール間の記事リンクが切れた場合に、迷子になった記事のメンテナンスが出来なくなってしまうからです。
今回のハックによる副作用として、このような迷子記事は 一般ユーザーやゲストからは一切見えなくなりますので、そのメリット・デメリットを考慮のうえご使用ください。
d3pipes ブロックジョイントの閲覧権限の継承
同梱したd3pipesブロックジョイント「D3pipesBlockD3forumrev」も同様に権限継承がなわれます。 (Topics/Posts をパラメータで選択)
このTopicsジョイントでは、d3forumオリジナルのジョイントではアサインされない、トピック内の最新コメント本文もアサインします。 今回追加したPostsジョイントも同様です。
なお、タイトル部分に[掲示板名]を付加しております。
external_link_idのアサイン
各ハックでは、テンプレートに external_link_id をアサインしています。
使い方としては、 各ページでの飛び先をコメント元記事に変更したりすることを想定しています。
変更テンプレートは同梱しませんので、お手元で運用中のテンプレートを編集してください。
ゲスト名のアサイン
オリジナルのソースでは、ゲスト名がアサインされていなかったのを、topicslist、topics_over_categoriesでは「first_post_gname」「last_post_gname」でアサインしています。
こちらも変更テンプレートは同梱しませんので、お手元で運用中のテンプレートを編集してください。
元ネタ:(XUGJ)d3forumのlisttopicsのゲスト名
- main_listtopics.html, main_listtopics_over_categories.html
<{foreach item=topic from=$topics}> ループのお尻のほう、
<{$topic.first_post_uname}> の部分を<{if $topic.first_post_gname}> <{$topic.first_post_gname}> <{else}> <{$topic.first_post_uname}> <{/if}>
<{$topic.last_post_uname}> の部分を
<{if $topic.last_post_gname}> <{$topic.last_post_gname}> <{else}> <{$topic.last_post_uname}> <{/if}>
という感じに。
- block_list_topics.html
<{foreach item=topic from=$block.topics}> ループ(2箇所あります)のお尻のほう、
<{$topic.last_uname}> の部分をという感じに。<{if $topic.guest_name}> <{$topic.guest_name}> <{else}> <{$topic.last_uname}> <{/if}>
- block_list_posts.html
<{foreach item=post from=$block.posts}> ループのお尻のほう
<{$post.uname}> の部分をという感じに。<{if $post.guest_name}> <{$post.guest_name}> <{else}> <{$post.uname}> <{/if}>
ぺージ情報 | |
---|---|
ぺージ名 : | inc/d3com_auth |
ページ別名 : | 未設定 |
ページ作成 : | なーお |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | なし |
ユーザー : | なし |