Loading config/schema/ginvite.schema.yml +12 −12 Original line number Diff line number Diff line group_content_enabler.config.invitation_expire: group_relation.config.invitation_expire: type: 'integer' label: 'Expire invites' group_content_enabler.config.invitation_expire_keep: group_relation.config.invitation_expire_keep: type: 'boolean' label: Keep expired invitations' group_content_enabler.config.invitation_subject: group_relation.config.invitation_subject: type: 'text' label: 'Subject' group_content_enabler.config.invitation_body: group_relation.config.invitation_body: type: 'text' label: 'Body' group_content_enabler.config.existing_user_invitation_subject: group_relation.config.existing_user_invitation_subject: type: 'text' label: 'Subject' group_content_enabler.config.existing_user_invitation_body: group_relation.config.existing_user_invitation_body: type: 'text' label: 'Body' group_content_enabler.config.unblock_invitees: group_relation.config.unblock_invitees: type: 'boolean' label: 'Unblock invitees' group_content_enabler.config.invitation_bypass_form: group_relation.config.invitation_bypass_form: type: 'boolean' label: 'Accept invitations immediately' group_content_enabler.config.cancel_user_invitation_subject: group_relation.config.cancel_user_invitation_subject: type: 'text' label: 'Subject' group_content_enabler.config.cancel_user_invitation_body: group_relation.config.cancel_user_invitation_body: type: 'text' label: 'Body' group_content_enabler.config.send_cancel_email: group_relation.config.send_cancel_email: type: 'boolean' label: 'Send notification when an invitation is cancelled' group_content_enabler.config.send_email_existing_users: group_relation.config.send_email_existing_users: type: 'boolean' label: 'Send invitation e-mail to already registered users' Loading ginvite.module +3 −1 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ use Drupal\Core\Url; use Drupal\ginvite\Event\UserRegisteredFromInvitationEvent; use Drupal\ginvite\Plugin\Group\Relation\GroupInvitation; use Drupal\group\Access\GroupAccessResult; use Drupal\group\Entity\GroupInterface; use Drupal\group\Entity\GroupRelationshipInterface; use Drupal\user\UserInterface; Loading Loading @@ -55,9 +56,10 @@ function ginvite_form_group_content_form_alter(&$form, FormStateInterface $form_ ], ]; $group = $group_relationship->getGroup(); // Forbid users without the permission to assign roles to users they are // inviting. if (!GroupAccessResult::allowedIfHasGroupPermission($group_relationship->getGroup(), \Drupal::currentUser(), 'administer members')->isAllowed()) { if ($group instanceof GroupInterface && !GroupAccessResult::allowedIfHasGroupPermission($group, \Drupal::currentUser(), 'administer members')->isAllowed()) { $form['group_roles']['#access'] = FALSE; } } Loading src/GroupInvitationLoader.php +18 −30 Original line number Diff line number Diff line Loading @@ -59,14 +59,17 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { /** * Wraps GroupRelationship entities in a GroupInvitation object. * * @param \Drupal\group\Entity\GroupRelationshipInterface[] $group_relationships * An array of GroupRelationship entities to wrap. * @param array $filters * An associative array where the keys are the property names and the * values are the values those properties must have. * * @return \Drupal\ginvite\GroupInvitation[] * A list of GroupInvitation wrapper objects. */ protected function wrapGroupRelationshipEntities(array $group_relationships) { protected function loadGroupInvitations(array $filters) { $group_invitations = []; $group_relationships = $this->groupRelationshipStorage->loadByProperties($filters); foreach ($group_relationships as $group_relationship) { $group_invitations[] = new GroupInvitationWrapper($group_relationship); } Loading @@ -77,13 +80,13 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { * {@inheritdoc} */ public function load(GroupInterface $group, AccountInterface $account) { $properties = [ $filters = [ 'gid' => $group->id(), 'entity_id' => $account->id(), 'plugin_id' => 'group_invitation', ]; $group_invitations = $this->loadGroupInvitations($properties); $group_invitations = $this->loadByProperties($filters); return $group_invitations ? reset($group_invitations) : FALSE; } Loading @@ -91,20 +94,20 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { * {@inheritdoc} */ public function loadByGroup(GroupInterface $group, $roles = NULL, $mail = NULL, $status = GroupInvitation::INVITATION_PENDING) { $properties = [ $filters = [ 'gid' => $group->id(), 'invitation_status' => $status, 'plugin_id' => 'group_invitation', ]; if (isset($roles)) { $properties['group_roles'] = (array) $roles; $filters['group_roles'] = (array) $roles; } if (isset($mail)) { $properties['invitee_mail'] = $mail; $filters['invitee_mail'] = $mail; } return $this->loadGroupInvitations($properties); return $this->loadByProperties($filters); } /** Loading @@ -119,30 +122,23 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { return []; } $group_relationship_type_ids = $this->loadGroupRelationshipTypeIds(); // If none were found, there can be no invitations either. if (empty($group_relationship_type_ids)) { return []; } $properties = [ 'type' => $group_relationship_type_ids, $filters = [ 'entity_id' => $account->id(), 'invitation_status' => $status, 'invitee_mail' => $account->getEmail(), ]; if (isset($roles)) { $properties['group_roles'] = (array) $roles; $filters['group_roles'] = (array) $roles; } return $this->loadGroupInvitations($properties); return $this->loadByProperties($filters); } /** * {@inheritdoc} */ public function loadByProperties(array $values) { public function loadByProperties(array $filters = []) { $group_relationship_type_ids = $this->loadGroupRelationshipTypeIds(); // If none were found, there can be no invitations either. Loading @@ -152,7 +148,7 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { $values['type'] = $group_relationship_type_ids; return $this->loadGroupInvitations($values); return $this->loadGroupInvitations($filters); } /** Loading @@ -179,12 +175,4 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { return $group_relationship_type_ids; } /** * {@inheritdoc} */ public function loadGroupInvitations($properties) { $group_relationships = $this->groupRelationshipStorage->loadByProperties($properties); return $this->wrapGroupRelationshipEntities($group_relationships); } } src/GroupInvitationLoaderInterface.php +2 −14 Original line number Diff line number Diff line Loading @@ -62,25 +62,13 @@ interface GroupInvitationLoaderInterface { /** * Load Invitations by their property values. * * @param array $values * @param array $filters * An associative array where the keys are the property names and the * values are the values those properties must have. * * @return \Drupal\ginvite\GroupInvitation[] * The loaded GroupInvitations matching the criteria. */ public function loadByProperties(array $values); /** * Load Invitations and wrap them into GroupInvitation classes. * * @param array $properties * An associative array where the keys are the property names and the * values are the values those properties must have. * * @return \Drupal\ginvite\GroupInvitation[] * The loaded GroupInvitations matching the criteria. */ public function loadGroupInvitations($properties); public function loadByProperties(array $filters = []); } src/Plugin/Group/Relation/GroupInvitation.php +0 −20 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ class GroupInvitation extends GroupRelationBase implements ContainerFactoryPlugi return $static; } /** * {@inheritdoc} */ Loading Loading @@ -228,23 +227,4 @@ class GroupInvitation extends GroupRelationBase implements ContainerFactoryPlugi return $form; } /** * {@inheritdoc} */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { // @TODO - we can't set this settings based on the permissions of the current user. $this->configuration['unblock_invitees'] = $this->currentUser->hasPermission('administer account settings') ? $form_state->getValue('unblock_invitees') : 0; $this->configuration['invitation_expire'] = $form_state->getValue('invitation_expire'); $this->configuration['invitation_expire_keep'] = $form_state->getValue('invitation_expire_keep'); $this->configuration['invitation_subject'] = $form_state->getValue('invitation_subject'); $this->configuration['invitation_body'] = $form_state->getValue('invitation_body'); $this->configuration['existing_user_invitation_subject'] = $form_state->getValue('existing_user_invitation_subject'); $this->configuration['existing_user_invitation_body'] = $form_state->getValue('existing_user_invitation_body'); $this->configuration['send_email_existing_users'] = $form_state->getValue('send_email_existing_users'); $this->configuration['invitation_bypass_form'] = $form_state->getValue('invitation_bypass_form'); $this->configuration['cancel_user_invitation_subject'] = $form_state->getValue('cancel_user_invitation_subject'); $this->configuration['cancel_user_invitation_body'] = $form_state->getValue('cancel_user_invitation_body'); $this->configuration['send_cancel_email'] = $form_state->getValue('send_cancel_email'); } } Loading
config/schema/ginvite.schema.yml +12 −12 Original line number Diff line number Diff line group_content_enabler.config.invitation_expire: group_relation.config.invitation_expire: type: 'integer' label: 'Expire invites' group_content_enabler.config.invitation_expire_keep: group_relation.config.invitation_expire_keep: type: 'boolean' label: Keep expired invitations' group_content_enabler.config.invitation_subject: group_relation.config.invitation_subject: type: 'text' label: 'Subject' group_content_enabler.config.invitation_body: group_relation.config.invitation_body: type: 'text' label: 'Body' group_content_enabler.config.existing_user_invitation_subject: group_relation.config.existing_user_invitation_subject: type: 'text' label: 'Subject' group_content_enabler.config.existing_user_invitation_body: group_relation.config.existing_user_invitation_body: type: 'text' label: 'Body' group_content_enabler.config.unblock_invitees: group_relation.config.unblock_invitees: type: 'boolean' label: 'Unblock invitees' group_content_enabler.config.invitation_bypass_form: group_relation.config.invitation_bypass_form: type: 'boolean' label: 'Accept invitations immediately' group_content_enabler.config.cancel_user_invitation_subject: group_relation.config.cancel_user_invitation_subject: type: 'text' label: 'Subject' group_content_enabler.config.cancel_user_invitation_body: group_relation.config.cancel_user_invitation_body: type: 'text' label: 'Body' group_content_enabler.config.send_cancel_email: group_relation.config.send_cancel_email: type: 'boolean' label: 'Send notification when an invitation is cancelled' group_content_enabler.config.send_email_existing_users: group_relation.config.send_email_existing_users: type: 'boolean' label: 'Send invitation e-mail to already registered users' Loading
ginvite.module +3 −1 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ use Drupal\Core\Url; use Drupal\ginvite\Event\UserRegisteredFromInvitationEvent; use Drupal\ginvite\Plugin\Group\Relation\GroupInvitation; use Drupal\group\Access\GroupAccessResult; use Drupal\group\Entity\GroupInterface; use Drupal\group\Entity\GroupRelationshipInterface; use Drupal\user\UserInterface; Loading Loading @@ -55,9 +56,10 @@ function ginvite_form_group_content_form_alter(&$form, FormStateInterface $form_ ], ]; $group = $group_relationship->getGroup(); // Forbid users without the permission to assign roles to users they are // inviting. if (!GroupAccessResult::allowedIfHasGroupPermission($group_relationship->getGroup(), \Drupal::currentUser(), 'administer members')->isAllowed()) { if ($group instanceof GroupInterface && !GroupAccessResult::allowedIfHasGroupPermission($group, \Drupal::currentUser(), 'administer members')->isAllowed()) { $form['group_roles']['#access'] = FALSE; } } Loading
src/GroupInvitationLoader.php +18 −30 Original line number Diff line number Diff line Loading @@ -59,14 +59,17 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { /** * Wraps GroupRelationship entities in a GroupInvitation object. * * @param \Drupal\group\Entity\GroupRelationshipInterface[] $group_relationships * An array of GroupRelationship entities to wrap. * @param array $filters * An associative array where the keys are the property names and the * values are the values those properties must have. * * @return \Drupal\ginvite\GroupInvitation[] * A list of GroupInvitation wrapper objects. */ protected function wrapGroupRelationshipEntities(array $group_relationships) { protected function loadGroupInvitations(array $filters) { $group_invitations = []; $group_relationships = $this->groupRelationshipStorage->loadByProperties($filters); foreach ($group_relationships as $group_relationship) { $group_invitations[] = new GroupInvitationWrapper($group_relationship); } Loading @@ -77,13 +80,13 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { * {@inheritdoc} */ public function load(GroupInterface $group, AccountInterface $account) { $properties = [ $filters = [ 'gid' => $group->id(), 'entity_id' => $account->id(), 'plugin_id' => 'group_invitation', ]; $group_invitations = $this->loadGroupInvitations($properties); $group_invitations = $this->loadByProperties($filters); return $group_invitations ? reset($group_invitations) : FALSE; } Loading @@ -91,20 +94,20 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { * {@inheritdoc} */ public function loadByGroup(GroupInterface $group, $roles = NULL, $mail = NULL, $status = GroupInvitation::INVITATION_PENDING) { $properties = [ $filters = [ 'gid' => $group->id(), 'invitation_status' => $status, 'plugin_id' => 'group_invitation', ]; if (isset($roles)) { $properties['group_roles'] = (array) $roles; $filters['group_roles'] = (array) $roles; } if (isset($mail)) { $properties['invitee_mail'] = $mail; $filters['invitee_mail'] = $mail; } return $this->loadGroupInvitations($properties); return $this->loadByProperties($filters); } /** Loading @@ -119,30 +122,23 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { return []; } $group_relationship_type_ids = $this->loadGroupRelationshipTypeIds(); // If none were found, there can be no invitations either. if (empty($group_relationship_type_ids)) { return []; } $properties = [ 'type' => $group_relationship_type_ids, $filters = [ 'entity_id' => $account->id(), 'invitation_status' => $status, 'invitee_mail' => $account->getEmail(), ]; if (isset($roles)) { $properties['group_roles'] = (array) $roles; $filters['group_roles'] = (array) $roles; } return $this->loadGroupInvitations($properties); return $this->loadByProperties($filters); } /** * {@inheritdoc} */ public function loadByProperties(array $values) { public function loadByProperties(array $filters = []) { $group_relationship_type_ids = $this->loadGroupRelationshipTypeIds(); // If none were found, there can be no invitations either. Loading @@ -152,7 +148,7 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { $values['type'] = $group_relationship_type_ids; return $this->loadGroupInvitations($values); return $this->loadGroupInvitations($filters); } /** Loading @@ -179,12 +175,4 @@ class GroupInvitationLoader implements GroupInvitationLoaderInterface { return $group_relationship_type_ids; } /** * {@inheritdoc} */ public function loadGroupInvitations($properties) { $group_relationships = $this->groupRelationshipStorage->loadByProperties($properties); return $this->wrapGroupRelationshipEntities($group_relationships); } }
src/GroupInvitationLoaderInterface.php +2 −14 Original line number Diff line number Diff line Loading @@ -62,25 +62,13 @@ interface GroupInvitationLoaderInterface { /** * Load Invitations by their property values. * * @param array $values * @param array $filters * An associative array where the keys are the property names and the * values are the values those properties must have. * * @return \Drupal\ginvite\GroupInvitation[] * The loaded GroupInvitations matching the criteria. */ public function loadByProperties(array $values); /** * Load Invitations and wrap them into GroupInvitation classes. * * @param array $properties * An associative array where the keys are the property names and the * values are the values those properties must have. * * @return \Drupal\ginvite\GroupInvitation[] * The loaded GroupInvitations matching the criteria. */ public function loadGroupInvitations($properties); public function loadByProperties(array $filters = []); }
src/Plugin/Group/Relation/GroupInvitation.php +0 −20 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ class GroupInvitation extends GroupRelationBase implements ContainerFactoryPlugi return $static; } /** * {@inheritdoc} */ Loading Loading @@ -228,23 +227,4 @@ class GroupInvitation extends GroupRelationBase implements ContainerFactoryPlugi return $form; } /** * {@inheritdoc} */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { // @TODO - we can't set this settings based on the permissions of the current user. $this->configuration['unblock_invitees'] = $this->currentUser->hasPermission('administer account settings') ? $form_state->getValue('unblock_invitees') : 0; $this->configuration['invitation_expire'] = $form_state->getValue('invitation_expire'); $this->configuration['invitation_expire_keep'] = $form_state->getValue('invitation_expire_keep'); $this->configuration['invitation_subject'] = $form_state->getValue('invitation_subject'); $this->configuration['invitation_body'] = $form_state->getValue('invitation_body'); $this->configuration['existing_user_invitation_subject'] = $form_state->getValue('existing_user_invitation_subject'); $this->configuration['existing_user_invitation_body'] = $form_state->getValue('existing_user_invitation_body'); $this->configuration['send_email_existing_users'] = $form_state->getValue('send_email_existing_users'); $this->configuration['invitation_bypass_form'] = $form_state->getValue('invitation_bypass_form'); $this->configuration['cancel_user_invitation_subject'] = $form_state->getValue('cancel_user_invitation_subject'); $this->configuration['cancel_user_invitation_body'] = $form_state->getValue('cancel_user_invitation_body'); $this->configuration['send_cancel_email'] = $form_state->getValue('send_cancel_email'); } }