忍者ブログ

まだ無題

blog no name still

06/14

Sun

2026

×

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

05/07

Thu

2009

Xoops: XSNSモジュールでサイト登録時に自動的に全てのコミュニティに参加するようにする

 XSNSモジュールで、コミュニティ数を固定とし各サイトユーザーが全てのコミュニティに参加するという使い方をしたい。
 前のエントリーでコミュニティの新規作成を管理者だけが行えるようにし、ユーザーが自由にコミュニティを作れなくする方法を紹介した。次はサイトへの登録時に全てのコミュニティに自動的に参加するように手を加える。


[環境]
XOOPS Cube Legacy 2.1.6
XSNS 1.11
 

① コミュニティへの自動参加用関数の作成
 ユーザーIDを引数にし、未参加のコミュニティを検出し一括参加登録する関数を作成し、
 XOOPS_TRUST_PATH/modules/xsns/act/tmp/add_toAllCommunity.php として保存する。


XOOPS_TRUST_PATH/modules/xsns/act/tmp/add_toAllCommunity.php 
<?php
//全てのコミュニティに参加する

require_once XOOPS_ROOT_PATH."/class/database/database.php";

function addToAllCommunity($uid=0){
 if($uid+0==0) return false;
 
 $db=&Database::getInstance();
 $table="setagaya100_xsns_c_commu";
 $table2="setagaya100_xsns_c_commu_member";
 
 //全コミュニティidリスト
 $prs=$db->query("SELECT c_commu_id FROM $table");
 if(!$prs) die( "xsns custom error: auto add to community : ".__LINE__ ) ;
 $num=$db->getRowsNum( $prs );
 if( $num <= 0 ) die( "xsns custom error: auto add to community : ".__LINE__ ) ;
 $c_commu_ids=array();
 for($i=0;$i<$num;$i++){
  $row=mysql_fetch_row($prs);
  $c_commu_ids[]=$row[0];
 }

 //参加済みコミュニティidリスト
 $prs=$db->query("SELECT c_commu_id FROM $table2 WHERE uid=$uid");
 if(!$prs) die( "xsns custom error: auto add to community : ".__LINE__ ) ;
 $num=$db->getRowsNum( $prs );
 $participate_commus=array();
 for($i=0;$i<$num;$i++){
  $row=mysql_fetch_row($prs);
  $participate_commus[]=$row[0];
 }
 
 //未参加コミュニティidリスト
 $un_participate_commus=array_diff($c_commu_ids,$participate_commus);
 if( !count($un_participate_commus)) return true;
 
 //参加処理
 $count=0;
 foreach( $un_participate_commus as $value){
  $prs=$db->query("INSERT INTO $table2 (uid,c_commu_id,r_datetime) VALUES ($uid,$value,NOW() )");
  //print("sql: INSERT INTO $table2 (uid,c_commu_id,r_datetime) VALUES ($uid,$value,NOW() )");
  if(!$prs) die( "xsns custom error: auto add to community : ".__LINE__ .":".$db->logger->dumpQueries() );
  $count++;
 }
 
 return $count;

}

?>




② サイト登録時に①の関数を実行するように修正
 ユーザーの登録処理は User_UserRegister_confirmActionクラスのexecute()で実行される。XOOPS_ROOT_PATH/modules/user/actions/UserRegister_confirmAction.class.php
の60行目に①で作成した関数を呼び出す処理を追加する。


XOOPS_ROOT_PATH/modules/user/actions/UserRegister_confirmAction.class.php
execure() (30行目以下)
 function execute(&$controller, &$xoopsUser)
 {
  $memberHandler =& xoops_gethandler('member');
  $this->mNewUser =& $memberHandler->createUser();
  $this->mRegistForm->update($this->mNewUser);
  $this->mNewUser->set('uorder', $controller->mRoot->mContext->getXoopsConfig('com_order'), true);
  $this->mNewUser->set('umode', $controller->mRoot->mContext->getXoopsConfig('com_mode'), true);
  if ($this->mConfig['activation_type'] == 1) {
   $this->mNewUser->set('level', 1, true);
  }
  
  if (!$memberHandler->insertUser($this->mNewUser)) {
   $this->mRedirectMessage = _MD_USER_LANG_REGISTERNG;
   return USER_FRAME_VIEW_ERROR;
  }

        if (!$memberHandler->addUserToGroup(XOOPS_GROUP_USERS, $this->mNewUser->get('uid'))) {
   $this->mRedirectMessage = _MD_USER_LANG_REGISTERNG;
   return USER_FRAME_VIEW_ERROR;
  }
  
  //ここを追加
  $file=XOOPS_TRUST_PATH."/modules/xsns/act/tmp/add_toAllCommunity.php";
  if( file_exists($file) ){
   require_once($file);
   if( !addToAllCommunity($this->mNewUser->get('uid')) ){
    die("Failed to add to all communities: XSNS custom error:");
   }
  }

  $this->_clearRegistForm($controller);

  $this->_processMail($controller);
  $this->_eventNotifyMail($controller);
  
  XCube_DelegateUtils::call('Legacy.Event.RegistUser.Success', new XCube_Ref($this->mNewUser));
  
  return USER_FRAME_VIEW_SUCCESS;
 }



以上で、サイトへの登録時に全てのコミュニティに登録される。今後、管理用にサイト登録時以外でもこの機能を呼び出せるようにしたい。また、コミュニティからの退会をできなくするよう手を加えることも必要。
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]