いつもお世話になっております。
「来訪者が自由に新規登録できる=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
katz515
2
@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