05/03
Sun
2009
XoopsでXSNSを使っている。d3forumなどフォーラム系のモジュールは機能がおおく見づらい気がする。SNSのトピックくらいがちょうどいい。ポータル的に使うことも考えてSNS系モジュールにした。しかしSNSなのでコミュニティはログインユーザーならだれでも作れてしまう。テーマ(?)が決まっているサイトなので、コミュニティはあらかじめテーマの数だけに限定したい。コミュニティの作成を管理者にしかできないようにXSNSを修正する。
[環境]
XOOPS Cube Legacy 2.1.6
XSNS 1.11
[修正箇所]
テンプレート側:「コミュニティ新規作成」出しわけの箇所
php側: 入力フォームオープン時→入力内容確認時→新規作成実行時の各処理の箇所
①テンプレート側
デフォルトではgestユーザー以外、(管理者を含むxoopsユーザー)の場合はXSNSトップページで
「コミュニティ新規作成」のリンクが表示されるようになっている。
Xoopsのユーザーかどうかを判別するメソッドはisGuest()としてXsnsCommonActionクラスに定義されている。ここに、管理者かどうかを判別するメソッドisAdmin()を追加する。
isGuest()はXsns_Default_Action->dispatch()(XOOPS_TRUST_PATH/modules/xsns/act/index/defaultAction.php line105)
でコールされ、結果がsmarty変数「is_guest」にセットされる(Xsns_Default_ActionクラスはXsnsCommonActionクラスを継承している。)。同様に先ほどのisAdmin()の結果を「is_admin」にセットするようにする。
XSNSトップページのテンプレート(xsns_index.html)に手を加え「コミュニティ新規作成」のリンクが管理者が閲覧したときのみ表示されるようにする。
(管理ページ > テンプレートの管理 > XSNS > xsns_index.html)
:after
<{if $is_admin}> <!--←ここを修正 -->
<tr class="even">
<td colspan="2" style="text-align:right;">
<a href="<{$xoops_url}>/modules/<{$mydirname}>/?act=add"><{$smarty.const._MD_XSNS_INDEX_ADD}></a> <{$smarty.const._MD_XSNS_INDEX_ADD_DESC}>
</td>
</tr>
<{/if}>
②php側
テンプレート側でリンクを消しただけだとURLを指定してアクセスされた際にグループ作成ができてしまうので、php側でも管理者だけがグループ作成できるように手を加える。
②-1入力フォームオープン時
②-2入力内容確認時
②-3新規作成実行時
以上で、管理者でアクセスした場合のみ「コミュニティ新規作成」のリンクが表示され、
通常ユーザーではコミュニティ作成ができないようになる。
この記事にトラックバックする