Loading config/schema/ginvite.schema.yml +5 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,11 @@ group_content_enabler.config.existing_user_invitation_body: type: 'text' label: 'Body' group_relation.config.autoaccept_invitees: group_content_enabler.config.remove_invitation: type: 'integer' label: 'Remove an invitation, when user join the group.' group_content_enabler.config.autoaccept_invitees: type: 'boolean' label: 'Automatically accept invitation' Loading ginvite.module +23 −4 Original line number Diff line number Diff line Loading @@ -147,10 +147,17 @@ function ginvite_group_content_insert(GroupContentInterface $group_content) { $invitations = \Drupal::service('ginvite.invitation_loader')->loadByProperties($properties); if (!empty($invitations)) { foreach ($invitations as $invitation) { // Remove group content if setting is enabled. if ($invitation->getGroupContent()->getContentPlugin()->getConfiguration()['remove_invitation'] == 1) { $invitation->getGroupContent()->delete(); } else { // Mark invitation as accepted. $invitation->getGroupContent()->set('invitation_status', GroupInvitation::INVITATION_ACCEPTED)->save(); } } $messenger->addMessage(t('You have accepted the invitation.')); } Loading @@ -166,8 +173,7 @@ function ginvite_group_content_delete(GroupContentInterface $group_content) { if ($group_content->getContentPlugin()->getPluginId() == 'group_invitation') { $group = $group_content->getGroup(); // Load plugin configuration. $group_plugin_collection = \Drupal::service('plugin.manager.group_content_enabler')->getInstalled($group->getGroupType()); $group_invite_config = $group_plugin_collection->getConfiguration()['group_invitation']; $group_invite_config = $group_content->getContentPlugin()->getConfiguration(); if ($group_invite_config['send_cancel_email'] && $group_content->get('invitation_status')->value == GroupInvitation::INVITATION_PENDING) { $from = $group_content->getEntity(); Loading @@ -184,6 +190,19 @@ function ginvite_group_content_delete(GroupContentInterface $group_content) { } } } if ($group_content->getContentPlugin()->getPluginId() == 'group_membership') { $properties = [ 'entity_id' => $group_content->getEntity()->id(), 'gid' => $group_content->getGroup()->id(), ]; // Remove invitations, when we remove the user. $invitations = \Drupal::service('ginvite.invitation_loader')->loadByProperties($properties); foreach ($invitations as $invitation) { $invitation->getGroupContent()->delete(); } } } /** Loading ginvite.services.yml +2 −0 Original line number Diff line number Diff line services: ginvite_event_subscriber: class: Drupal\ginvite\EventSubscriber\GinviteSubscriber tags: - {name: event_subscriber} arguments: ['@ginvite.invitation_loader', '@current_user', '@messenger', '@logger.factory', '@config.factory'] ginvite.invitation_loader: class: 'Drupal\ginvite\GroupInvitationLoader' arguments: ['@entity_type.manager', '@current_user'] src/Controller/InvitationOperations.php +8 −10 Original line number Diff line number Diff line Loading @@ -82,21 +82,19 @@ class InvitationOperations extends ControllerBase { */ public function accept(Request $request, GroupContentInterface $group_content) { $group = $group_content->getGroup(); $contentTypeConfigId = $group_content->getGroup() ->getGroupType() $group_type = $group->getGroupType(); $content_type_config_id = $group_type ->getContentPlugin('group_membership') ->getContentTypeConfigId(); // Load invitation plugin configuration. $invitation_plugin_configuration = $group_content->getGroup() ->getGroupType() $invitation_plugin_configuration = $group_type ->getContentPlugin('group_invitation') ->getConfiguration(); // Pre-populate a group membership with the current user. $group_membership = GroupContent::create([ 'type' => $contentTypeConfigId, 'type' => $content_type_config_id, 'entity_id' => $group_content->get('entity_id')->getString(), 'content_plugin' => 'group_membership', 'gid' => $group->id(), Loading @@ -113,9 +111,9 @@ class InvitationOperations extends ControllerBase { // Try to honor the destination parameter, fallback to the group route. if ($request->query->has('destination')) { $dest = $request->get('destination'); $destination = $request->get('destination'); try { $path = Url::fromUserInput($dest)->setAbsolute()->toString(); $path = Url::fromUserInput($destination)->setAbsolute()->toString(); return new RedirectResponse($path); } catch (\InvalidArgumentException $e) { Loading Loading @@ -152,9 +150,9 @@ class InvitationOperations extends ControllerBase { $this->messenger->addMessage($this->t('You have declined the @group_bundle invitation.', ['@group_bundle' => $group_bundle])); if ($request->query->has('destination')) { $dest = $request->get('destination'); $destination = $request->get('destination'); try { $path = Url::fromUserInput($dest)->setAbsolute()->toString(); $path = Url::fromUserInput($destination)->setAbsolute()->toString(); return new RedirectResponse($path); } catch (\InvalidArgumentException $e) { Loading src/Plugin/GroupContentEnabler/GroupInvitation.php +8 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,7 @@ class GroupInvitation extends GroupContentEnablerBase implements ContainerFactor 'cancel_user_invitation_body' => $body_message_cancel, 'send_cancel_email' => FALSE, 'invitation_bypass_form' => FALSE, 'remove_invitation' => FALSE, ]; } Loading Loading @@ -329,6 +330,13 @@ class GroupInvitation extends GroupContentEnablerBase implements ContainerFactor '#default_value' => $configuration['invitation_bypass_form'], ]; $form['remove_invitation'] = [ '#type' => 'checkbox', '#title' => $this->t('Remove invitation'), '#description' => $this->t('Remove an invitation when a user join a group.'), '#default_value' => $configuration['remove_invitation'], ]; $form['invitation_expire'] = [ '#type' => 'number', '#title' => $this->t('Expire invites'), Loading Loading
config/schema/ginvite.schema.yml +5 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,11 @@ group_content_enabler.config.existing_user_invitation_body: type: 'text' label: 'Body' group_relation.config.autoaccept_invitees: group_content_enabler.config.remove_invitation: type: 'integer' label: 'Remove an invitation, when user join the group.' group_content_enabler.config.autoaccept_invitees: type: 'boolean' label: 'Automatically accept invitation' Loading
ginvite.module +23 −4 Original line number Diff line number Diff line Loading @@ -147,10 +147,17 @@ function ginvite_group_content_insert(GroupContentInterface $group_content) { $invitations = \Drupal::service('ginvite.invitation_loader')->loadByProperties($properties); if (!empty($invitations)) { foreach ($invitations as $invitation) { // Remove group content if setting is enabled. if ($invitation->getGroupContent()->getContentPlugin()->getConfiguration()['remove_invitation'] == 1) { $invitation->getGroupContent()->delete(); } else { // Mark invitation as accepted. $invitation->getGroupContent()->set('invitation_status', GroupInvitation::INVITATION_ACCEPTED)->save(); } } $messenger->addMessage(t('You have accepted the invitation.')); } Loading @@ -166,8 +173,7 @@ function ginvite_group_content_delete(GroupContentInterface $group_content) { if ($group_content->getContentPlugin()->getPluginId() == 'group_invitation') { $group = $group_content->getGroup(); // Load plugin configuration. $group_plugin_collection = \Drupal::service('plugin.manager.group_content_enabler')->getInstalled($group->getGroupType()); $group_invite_config = $group_plugin_collection->getConfiguration()['group_invitation']; $group_invite_config = $group_content->getContentPlugin()->getConfiguration(); if ($group_invite_config['send_cancel_email'] && $group_content->get('invitation_status')->value == GroupInvitation::INVITATION_PENDING) { $from = $group_content->getEntity(); Loading @@ -184,6 +190,19 @@ function ginvite_group_content_delete(GroupContentInterface $group_content) { } } } if ($group_content->getContentPlugin()->getPluginId() == 'group_membership') { $properties = [ 'entity_id' => $group_content->getEntity()->id(), 'gid' => $group_content->getGroup()->id(), ]; // Remove invitations, when we remove the user. $invitations = \Drupal::service('ginvite.invitation_loader')->loadByProperties($properties); foreach ($invitations as $invitation) { $invitation->getGroupContent()->delete(); } } } /** Loading
ginvite.services.yml +2 −0 Original line number Diff line number Diff line services: ginvite_event_subscriber: class: Drupal\ginvite\EventSubscriber\GinviteSubscriber tags: - {name: event_subscriber} arguments: ['@ginvite.invitation_loader', '@current_user', '@messenger', '@logger.factory', '@config.factory'] ginvite.invitation_loader: class: 'Drupal\ginvite\GroupInvitationLoader' arguments: ['@entity_type.manager', '@current_user']
src/Controller/InvitationOperations.php +8 −10 Original line number Diff line number Diff line Loading @@ -82,21 +82,19 @@ class InvitationOperations extends ControllerBase { */ public function accept(Request $request, GroupContentInterface $group_content) { $group = $group_content->getGroup(); $contentTypeConfigId = $group_content->getGroup() ->getGroupType() $group_type = $group->getGroupType(); $content_type_config_id = $group_type ->getContentPlugin('group_membership') ->getContentTypeConfigId(); // Load invitation plugin configuration. $invitation_plugin_configuration = $group_content->getGroup() ->getGroupType() $invitation_plugin_configuration = $group_type ->getContentPlugin('group_invitation') ->getConfiguration(); // Pre-populate a group membership with the current user. $group_membership = GroupContent::create([ 'type' => $contentTypeConfigId, 'type' => $content_type_config_id, 'entity_id' => $group_content->get('entity_id')->getString(), 'content_plugin' => 'group_membership', 'gid' => $group->id(), Loading @@ -113,9 +111,9 @@ class InvitationOperations extends ControllerBase { // Try to honor the destination parameter, fallback to the group route. if ($request->query->has('destination')) { $dest = $request->get('destination'); $destination = $request->get('destination'); try { $path = Url::fromUserInput($dest)->setAbsolute()->toString(); $path = Url::fromUserInput($destination)->setAbsolute()->toString(); return new RedirectResponse($path); } catch (\InvalidArgumentException $e) { Loading Loading @@ -152,9 +150,9 @@ class InvitationOperations extends ControllerBase { $this->messenger->addMessage($this->t('You have declined the @group_bundle invitation.', ['@group_bundle' => $group_bundle])); if ($request->query->has('destination')) { $dest = $request->get('destination'); $destination = $request->get('destination'); try { $path = Url::fromUserInput($dest)->setAbsolute()->toString(); $path = Url::fromUserInput($destination)->setAbsolute()->toString(); return new RedirectResponse($path); } catch (\InvalidArgumentException $e) { Loading
src/Plugin/GroupContentEnabler/GroupInvitation.php +8 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,7 @@ class GroupInvitation extends GroupContentEnablerBase implements ContainerFactor 'cancel_user_invitation_body' => $body_message_cancel, 'send_cancel_email' => FALSE, 'invitation_bypass_form' => FALSE, 'remove_invitation' => FALSE, ]; } Loading Loading @@ -329,6 +330,13 @@ class GroupInvitation extends GroupContentEnablerBase implements ContainerFactor '#default_value' => $configuration['invitation_bypass_form'], ]; $form['remove_invitation'] = [ '#type' => 'checkbox', '#title' => $this->t('Remove invitation'), '#description' => $this->t('Remove an invitation when a user join a group.'), '#default_value' => $configuration['remove_invitation'], ]; $form['invitation_expire'] = [ '#type' => 'number', '#title' => $this->t('Expire invites'), Loading