忍者ブログ

まだ無題

blog no name still

06/13

Sat

2026

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

05/03

Sun

2009

Xoops: XSNSモジュールで管理者しかコミュニティを作成できないようにする

XoopsでXSNSを使っている。d3forumなどフォーラム系のモジュールは機能がおおく見づらい気がする。SNSのトピックくらいがちょうどいい。ポータル的に使うことも考えてSNS系モジュールにした。しかしSNSなのでコミュニティはログインユーザーならだれでも作れてしまう。テーマ(?)が決まっているサイトなので、コミュニティはあらかじめテーマの数だけに限定したい。コミュニティの作成を管理者にしかできないようにXSNSを修正する。

[環境]
XOOPS Cube Legacy 2.1.6
XSNS 1.11

[修正箇所]
テンプレート側:「コミュニティ新規作成」出しわけの箇所
php側: 入力フォームオープン時→入力内容確認時→新規作成実行時の各処理の箇所


①テンプレート側
 デフォルトではgestユーザー以外、(管理者を含むxoopsユーザー)の場合はXSNSトップページで
「コミュニティ新規作成」のリンクが表示されるようになっている。
 Xoopsのユーザーかどうかを判別するメソッドはisGuest()としてXsnsCommonActionクラスに定義されている。ここに、管理者かどうかを判別するメソッドisAdmin()を追加する。


XOOPS_TRUST_PATH/modules/xsns/userlib/class/commonAction.php XsnsCommonActionクラス内に下記を追加
function isAdmin()
{
 if($this->isXoopsUser()){
  global $xoopsUser;
  
  return $xoopsUser->isAdmin();
 }
 return false;
}

 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」にセットするようにする。
 


XOOPS_TRUST_PATH/modules/xsns/act/index/defaultAction.php dispatch()内
 $this->context->setAttribute('is_guest', $this->isGuest());
 $this->context->setAttribute('is_admin', $this->isAdmin()); /*←ここを追加*/
 $this->context->setAttribute('keyword', $keyword);
 $this->context->setAttribute('url', $url);




 XSNSトップページのテンプレート(xsns_index.html)に手を加え「コミュニティ新規作成」のリンクが管理者が閲覧したときのみ表示されるようにする。
 (管理ページ > テンプレートの管理 > XSNS > xsns_index.html)


xsns_index.htmlの1/4くらいのところ
:before
<{if !$is_guest}>
<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>&nbsp;<{$smarty.const._MD_XSNS_INDEX_ADD_DESC}>
</td>
</tr>
<{/if}>

: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>&nbsp;<{$smarty.const._MD_XSNS_INDEX_ADD_DESC}>
</td>
</tr>
<{/if}>

 



②php側
 テンプレート側でリンクを消しただけだとURLを指定してアクセスされた際にグループ作成ができてしまうので、php側でも管理者だけがグループ作成できるように手を加える。

②-1入力フォームオープン時
 


XOOPS_TRUST_PATH/modules/xsns/act/index/addAction.php dispatch() (line8~)
:before
  if($this->isGuest()){
  redirect_header(XOOPS_URL, 2, _NOPERM);
 }

:after
 if( !$this->isAdmin() ){
  redirect_header(XOOPS_URL, 2, _NOPERM);
 }


②-2入力内容確認時
 


XOOPS_TRUST_PATH/modules/xsns/act/index/add_confirmAction.php dispatch() (line6~)
:before
 if( $this->isGuest() ){
  redirect_header(XOOPS_URL, 2, _NOPERM);
 }

:after
 if( !$this->isAdmin() ){
  redirect_header(XOOPS_URL, 2, _NOPERM);
 }


②-3新規作成実行時
 


XOOPS_TRUST_PATH/modules/xsns/act/index/add_execAction.php dispatch() (line8~)
:before
 if($this->isGuest() || !$this->validateToken('COMMUNITY_ADD')){
  redirect_header(XOOPS_URL, 2, _NOPERM);
 }

:after
 if(!$this->isAdmin() || !$this->validateToken('COMMUNITY_ADD')){
  redirect_header(XOOPS_URL, 2, _NOPERM);
 }


 以上で、管理者でアクセスした場合のみ「コミュニティ新規作成」のリンクが表示され、
通常ユーザーではコミュニティ作成ができないようになる。

 

PR

Comment

お名前
タイトル
E-MAIL
URL
コメント
パスワード

Trackback

この記事にトラックバックする

カレンダー

05 2026/06 07
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

最新TB

プロフィール

HN:
No Name Ninja
性別:
非公開

バーコード

ブログ内検索

アクセス解析

Copyright © まだ無題 : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]