Присоединяйтесь или создайте группу при регистрации


Когда люди регистрируются на моем сайте, я хочу, чтобы они либо присоединились к существующей группе, либо создали новую, если она не существует. Они могут быть членами только одной группы, и на сайте используется только один тип группы.

У меня установлен виджет автозаполнения, и я хочу изменить его функциональность, чтобы вместо того, чтобы выдавать сообщение об ошибке, он создавал группу. Я предполагаю, что изменение og.module не является хорошей идеей, так как было бы нелегко сделать мои конкретные изменения общими достаточно, чтобы работать для множества вариантов использования, так что я прав, думая, что я бы создал пользовательский модуль для подключения к функциям предварительного сохранения сущности пользователя и проверил, существует ли он, если нет, то создайте группу и создайте членство там или есть другой способ?

Я попытался использовать таксономию в качестве содержимого своей группы и использовать поле автозаполнения ссылки на термин в своем профиле пользователя, но og, похоже, на данный момент не полностью работает с таксономией, и у меня были другие проблемы с прикрепленным полем данные, не сохраняемые в таксономии, поэтому вернулись к использованию типа узла в качестве типа содержимого моей группы.

Author: stevepurkiss, 2011-04-14

2 answers

Я думаю, что ваша общая предпосылка верна. У меня был бы соблазн использовать вместо этого hook_user_insert(), который вызывается после создания пользователя, а не раньше, так как:

  • Ваш модуль на самом деле не может не создать группу или вставить новую.
  • hook_user_presave на самом деле предназначен для модулей, которые хотят сериализовать (простые) данные для хранения в самой таблице пользователей, а это не то, что вы делаете.

Все необходимые крючки в OG7 есть для проверка, создание групп и вставка пользователей.

 1
Author: Chris Cohen, 2011-04-14 12:24:16

hook_user_insert() срабатывает слишком поздно в процессе. Я использовал hook_form_FORM_ID_alter() для изменения обратного вызова проверки автозаполнения, чтобы использовать свою пользовательскую функцию.

  function MYMODULE_form_user_register_form_alter(&$form, &$form_state, $form_id) {

  $form['group_audience']['und'][0]['gid']['#element_validate'][0] = 'MYMODULE_field_audience_autocomplete_validate';
}

MYMODULE_field_audience_autocomplete_validate() такая же, как и исходная функция, за исключением того, что вместо того, чтобы выдавать ошибку, она создает группу.

 0
Author: stevepurkiss, 2012-03-02 14:32:35