Blog

concrete5でユーザー登録時に自動的にユーザーをグループに追加する

Posted by admin at 8:23 日時 2013/03/22

#

concrete5はユーザーに会員登録をさせることができます。この時に、特定のユーザーグループに所属させることができれば、のちのち管理が便利なことがあるかもしれませんね。

実際の処理は、コア → コントローラー → シングルページの register.php に書かれています。

concrete/core/controllers/single_pages/register.php

この中でも、 do_register メソッドがユーザー登録時の処理になりますので、このメソッドだけをユーザー領域でオーバーライドします。オーバーライド用にファイルを作成し、オーバーライドしたいメソッドをコピペしましょう。

controllers/register.php

<?php  defined('C5_EXECUTE') or die("Access Denied.");  class RegisterController extends Concrete5_Controller_Register {    	public function do_register() {    		$registerData['success']=0;    		$userHelper = Loader::helper('concrete/user');  ...

do_registerメソッドでは最初に入力チェックをつらつらやっておりますが、問題なければ以下の箇所で User クラスのインスタンスを起動しており、ここでログインセッションが開始されています。

// now we log the user in  if (USER_REGISTRATION_WITH_EMAIL_ADDRESS) {  	$u = new User($_POST['uEmail'], $_POST['uPassword']);  } else {  	$u = new User($_POST['uName'], $_POST['uPassword']);  }  // if this is successful, uID is loaded into session for this user

その直後に次のコードを入れたらOKです。refreshUserGroupsメソッドを起動しておくのがポイントです。こうしないと、最初のログインセッションでは今入れたグループに属していないままになってしまいます。

$groupObj = Group::getByName('グループ名');    if(is_object($groupObj)){  	$u->enterGroup($groupObj);  	$u->refreshUserGroups();  }

まあ実際はRegistrant Groupというアドオンで登録時にグループに所属させることが可能なのですが、色々自分で条件を拡張したりしたいときに参考にしてください。ユーザーのメールアドレスのドメインで判定して別のグループに振り向けるとか、色々可能ですよ。いやあconcrete5のカスタマイズは楽だなぁ。


Share this entry