新規ユーザ登録でグループ追加と属性設定を自動的に行いたい

いつもお世話になっております。

「来訪者が自由に新規登録できる=ON」の設定において、
新規登録の際、特定のグループへ自動的に属し、さらに、あるユーザ属性の値を自動的に設定するようにしたいです。

新規ユーザ登録は、
/concrete/controllers/single_pages/register.php
辺りかと考えていたのですが、実際どこへどのようなプログラムを追加すればよいか?悩んでおります。

フォーラム( https://forums.concretecms.org/t/adding-a-user-programmatically/92 )の記事でそれらしいものを見つけたのですが、
新規登録用に実装の仕方がわかりません・・。

過去のフォーラム情報でも結構ですのでヒント等いただければ幸いと存じます。

concrete5 Version

Core Version - 8.5.9

PHP Version

7.4.30

@cc5take3 お疲れ様です。やっとフォーラム投稿追いつきました。

新規登録の際、特定のグループへ自動的に属し、さらに、あるユーザ属性の値を自動的に設定するようにしたいです。

新規ユーザ登録は、
/concrete/controllers/single_pages/register.php
辺りかと考えていたのですが、実際どこへどのようなプログラムを追加すればよいか?悩んでおります。

はい。まず、グループの追加ですが、すべて一般登録するユーザーが特定のグループに固定で登録するのであれば、コアのグループの設定で可能です。

グループの設定画面に、ユーザー登録時に所属するオプションが付いています。

ユーザー登録時の条件によって所属するグループを変えたい場合や、
ユーザー属性の値を自動的に付与させたい場合はカスタマイズが必要です。

あと、ユーザー登録といっても、2つのステップがあります。

ユーザーが登録 (register) された時と、
ユーザーが確認 (validate) された時です。
ユーザー情報が DB 上で作成された時に処理を走らせるか、
メールアドレス確認などをした (validate) したあとに処理を走らせる必要がありますか?

Concrete CMS には、イベントを hook できる機能があります。

ここの User にある on_user_add (ユーザーがDB上で追加された)。 on_user_validate (ユーザー情報が確認された) イベントでプログラムを走らせることが可能です。

イベントの組み込みは、application/bootstrap/app.php の中か、 package の controller.php の on_start() の中で走らせることができます。

ドキュメントはこちらに書かれています。

よろしくお願いします。

Katzさん

お返事が遅くなり申し訳ございません。
ご回答ありがとうございます。
ご教示いただいた内容とドキュメントから、以下のようにしたところ無事に自動的にグループ追加とトピック属性追加できました。

・ユーザ属性(トピック)'memkind’を’法人’に設定。
・ユーザグループを’一般’に設定。

以下のソースをapplication/bootstrap/app.phpへ追加しました。

use Concrete\Core\Support\Facade\Events;
use Concrete\Core\Tree\Node\Type\Topic as TopicNode;
Events::addListener(‘on_user_add’, function($event) {

$user = $event->getUserInfoObject();
\Log::info(sprintf('Added user %s', $user->getUserName()));

$tn = new TopicNode();
$user->setAttribute('memkind', $tn->getNodeByName('法人'));

$groups = [];
$g = Group::getByName('一般');
$groups[] = $g->getGroupID();
$user->updateGroups($groups);

});

1 Like