Commit 03db862c authored by Christian Paul Bruhn's avatar Christian Paul Bruhn Committed by Nikolay Lobachev
Browse files

Issue #3294710 by broon, jimmynash, LOBsTerr: Skip the invitation process...

Issue #3294710 by broon, jimmynash, LOBsTerr: Skip the invitation process entirely (automatically accept invitation)
parent af51db40
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -22,6 +22,10 @@ group_content_enabler.config.existing_user_invitation_body:
  type: 'text'
  label: 'Body'

group_relation.config.autoaccept_invitees:
  type: 'boolean'
  label: 'Automatically accept invitation'

group_content_enabler.config.unblock_invitees:
  type: 'boolean'
  label: 'Unblock invitees'
+41 −9
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Drupal\ginvite\Event\UserLoginWithInvitationEvent;
use Drupal\ginvite\Event\UserRegisteredFromInvitationEvent;
use Drupal\ginvite\Plugin\GroupContentEnabler\GroupInvitation;
use Drupal\group\Access\GroupAccessResult;
@@ -149,7 +150,7 @@ function ginvite_group_content_delete(GroupContentInterface $group_content) {

    if ($group_invite_config['send_cancel_email'] && $group_content->get('invitation_status')->value == GroupInvitation::INVITATION_PENDING) {
      $mail = $group_content->get('invitee_mail')->getString();
      $mailManager = \Drupal::service('plugin.manager.mail');
      $mail_manager = \Drupal::service('plugin.manager.mail');
      $from = $group_content->getEntity();

      if ($from instanceof UserInterface) {
@@ -159,7 +160,7 @@ function ginvite_group_content_delete(GroupContentInterface $group_content) {
          'group_content' => $group_content,
        ];
        $langcode = $from->getPreferredLangcode();
        $mailManager->mail('ginvite', 'cancel', $mail, $langcode, $params, NULL, TRUE);
        $mail_manager->mail('ginvite', 'cancel', $mail, $langcode, $params, NULL, TRUE);
      }
    }
  }
@@ -372,10 +373,10 @@ function ginvite_form_user_register_form_alter(&$form, FormStateInterface $form_
    $replace = ['+', '/'];
    $invitee_mail = base64_decode(str_replace($search, $replace, $invitee_mail));
    if (\Drupal::service('email.validator')->isValid($invitee_mail)) {
      $form["account"]["mail"]["#default_value"] = $invitee_mail;
      $form["account"]["mail"]["#disabled"] = TRUE;
      $form['account']['mail']['#default_value'] = $invitee_mail;
      $form['account']['mail']['#disabled'] = TRUE;
    }
//    $form['#cache']['max-age'] = 0;
    $form['#cache']['max-age'] = 0;
  }

}
@@ -395,11 +396,14 @@ function ginvite_cron() {
    return;
  }

  $group_type_storage = \Drupal::entityTypeManager()->getStorage('group_type');
  $entity_type_manager = \Drupal::entityTypeManager();
  $content_enabler_manager = \Drupal::service('plugin.manager.group_content_enabler');
  $group_type_storage = $entity_type_manager->getStorage('group_type');
  $group_content_storage = $entity_type_manager->getStorage('group_content');
  /** @var \Drupal\group\Entity\GroupTypeInterface $group_type */
  foreach ($group_type_storage->loadMultiple() as $group_type_id => $group_type) {
  foreach ($group_type_storage->loadMultiple() as $group_type) {
    // Foreach group type get the configuration for the invites expired time.
    $group_plugin_collection = \Drupal::service('plugin.manager.group_content_enabler')->getInstalled($group_type);
    $group_plugin_collection = $content_enabler_manager->getInstalled($group_type);
    $days = $group_plugin_collection->getConfiguration()['group_invitation']['invitation_expire'] ?? NULL;
    $keep_invitations = (bool) ($group_plugin_collection->getConfiguration()['group_invitation']['invitation_expire_keep'] ?? FALSE);

@@ -409,7 +413,7 @@ function ginvite_cron() {
    }

    // Query for all the invites that are expired for this group type.
    $group_content_storage = \Drupal::entityTypeManager()->getStorage('group_content');

    $config_id = $group_type->getContentPlugin('group_invitation')->getContentTypeConfigId();
    $expired_invites = $group_content_storage->getQuery()
      ->accessCheck(FALSE)
@@ -441,3 +445,31 @@ function ginvite_cron() {
  // often.
  \Drupal::state()->set('ginvite.last_expire_removal', $request_time);
}

/**
 * Implements hook_user_login().
 */
function ginvite_user_login(UserInterface $user) {
  // If a user is created without e-mail (because the field is optional or
  // because they are created through SSO) then we can not use the mail to check
  // for pending invites, so we exit early.
  if ($user->get('mail')->isEmpty()) {
    return;
  }

  $properties = [
    'invitee_mail' => $user->getEmail(),
    'invitation_status' => GroupInvitation::INVITATION_PENDING,
    'entity_id' => $user->id(),
  ];

  /** @var \Drupal\ginvite\GroupInvitation[] $invitations */
  $invitations = \Drupal::service('ginvite.invitation_loader')->loadByProperties($properties);
  /** @var \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher */
  $event_dispatcher = \Drupal::service('event_dispatcher');
  foreach ($invitations as $invitation) {
    $event = new UserLoginWithInvitationEvent($invitation);
    $event_dispatcher->dispatch($event, UserLoginWithInvitationEvent::EVENT_NAME);
  }
}
+4 −2
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ ginvite.invitation.accept:
    _controller: '\Drupal\ginvite\Controller\InvitationOperations::accept'
    _title: 'Accept invitation and join group'
  requirements:
    _group_installed_content: 'group_invitation'
    _custom_access: '\Drupal\ginvite\Controller\InvitationOperations::checkAccess'
  options:
      parameters:
@@ -28,7 +29,7 @@ ginvite.invitation.bulk:
    _form: '\Drupal\ginvite\Form\BulkGroupInvitation'
    _title_callback: '\Drupal\ginvite\Controller\InvitationOperations::invitationTitle'
  requirements:
    _custom_access: '\Drupal\ginvite\Controller\InvitationOperations::access'
    _group_installed_content: 'group_invitation'
  options:
    parameters:
      group:
@@ -40,7 +41,8 @@ ginvite.invitation.bulk.confirm:
    _form: '\Drupal\ginvite\Form\BulkGroupInvitationConfirm'
    _title_callback: '\Drupal\ginvite\Controller\InvitationOperations::invitationTitle'
  requirements:
    _custom_access: '\Drupal\ginvite\Controller\InvitationOperations::access'
    _group_permission: 'invite users to group'
    _group_installed_content: 'group_invitation'
  options:
    parameters:
      group:
+0 −24
Original line number Diff line number Diff line
@@ -71,30 +71,6 @@ class InvitationOperations extends ControllerBase {
    );
  }

  /**
   * Custom access check for the invitation routes.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   The user account.
   * @param \Drupal\group\Entity\GroupInterface $group
   *   The group entity.
   *
   * @return \Drupal\Core\Access\AccessResultInterface
   */
  public function access(AccountInterface $account, GroupInterface $group) {
    // Check if plugin is enabled for this group type.
    if (!$group->getGroupType()->hasContentPlugin('group_invitation')) {
      return AccessResult::forbidden();
    }

    // Check if user account has permission.
    if ($group->hasPermission('invite users to group', $account)) {
      return AccessResult::allowed();
    }

    return AccessResult::forbidden();
  }

  /**
   * Create user membership and change invitation status.
   *
+42 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\ginvite\Event;

use Drupal\ginvite\GroupInvitation;
use Drupal\Component\EventDispatcher\Event;

/**
 * Base invitation event.
 *
 * @package Drupal\ginvite\Event
 */
class InvitationBaseEvent extends Event {

  /**
   * The group invitation.
   *
   * @var \Drupal\ginvite\GroupInvitation
   */
  protected $groupInvitation;

  /**
   * Constructs the object.
   *
   * @param \Drupal\ginvite\GroupInvitation $group_invitation
   *   The group invitation.
   */
  public function __construct(GroupInvitation $group_invitation) {
    $this->groupInvitation = $group_invitation;
  }

  /**
   * Get the group invitation.
   *
   * @return \Drupal\ginvite\GroupInvitation
   *   The group invitation.
   */
  public function getGroupInvitation(): GroupInvitation {
    return $this->groupInvitation;
  }

}
Loading