/** * Creates an Og membership to a group optionally assigning roles as well. * * @param \Drupal\Core\Session\AccountInterface $user * The user to be assigned as a group member. * @param \Drupal\Core\Entity\EntityInterface $entity * The organic group entity. * @param \Drupal\og\Entity\OgRole[] $roles * An array of OgRoles to be passed to the membership. * * @throws \Exception * Throws an exception when the user is anonymous or the entity is not a * group. */ protected function subscribeUserToGroup(AccountInterface $user, EntityInterface $entity, array $roles = []) { if (!Og::isGroup($entity->getEntityTypeId(), $entity->bundle())) { throw new \Exception("The {$entity->label()} is not a group."); } /** @var \Drupal\og\OgMembershipInterface $membership */ $membership = OgMembership::create(); $membership->setUser($user)->setGroup($entity); foreach ($roles as $role) { $membership->addRole($role); } $membership->save(); }
/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { /** @var RdfInterface $collection */ $collection = Rdf::load($form_state->getValue('collection_id')); /** @var \Drupal\user\UserInterface $user */ $user = User::load($form_state->getValue('user_id')); $role_id = $collection->getEntityTypeId() . '-' . $collection->bundle() . '-' . OgRoleInterface::AUTHENTICATED; $membership = OgMembership::create(); $membership->setUser($user)->setGroup($collection)->setState(OgMembershipInterface::STATE_ACTIVE)->setRoles([OgRole::load($role_id)])->save(); drupal_set_message($this->t('You are now a member of %collection.', ['%collection' => $collection->getName()])); // @todo: This is a temporary workaround for the lack of og cache // contexts/tags. Remove this when Og provides proper cache context. // @see: https://webgate.ec.europa.eu/CITnet/jira/browse/ISAICP-2628 Cache::invalidateTags(['user.roles']); }