Commit 6e9eb78c authored by Nikolay Lobachev's avatar Nikolay Lobachev
Browse files

Issue #3400030: Add option to remove group content when user join the group

parent 8a49cc7d
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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'

+23 −4
Original line number Diff line number Diff line
@@ -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.'));
    }
@@ -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();
@@ -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();
    }
  }
}

/**
+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']
+8 −10
Original line number Diff line number Diff line
@@ -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(),
@@ -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) {
@@ -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) {
+8 −0
Original line number Diff line number Diff line
@@ -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,
    ];
  }

@@ -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