Commit c451b93e authored by Nicolas Guerrier's avatar Nicolas Guerrier Committed by Nikolay Lobachev
Browse files

Issue #3206103 by nguerrier, LOBsTerr: Allow to invite existing users without email

parent 50192d72
Loading
Loading
Loading
Loading
+49 −31
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ use Drupal\ginvite\Plugin\GroupContentEnabler\GroupInvitation;
use Drupal\group\Access\GroupAccessResult;
use Drupal\group\Entity\GroupContentInterface;
use Drupal\group\Entity\GroupInterface;
use Drupal\user\Entity\User;
use Drupal\user\UserInterface;

/**
@@ -80,7 +81,22 @@ function ginvite_group_content_insert(GroupContentInterface $group_content) {
  if ($type == 'group_invitation') {
    $mail = $group_content->get('invitee_mail')->getString();

    $mailManager = \Drupal::service('plugin.manager.mail');
    // If invited user has no mail, don't try to send one.
    if (empty($mail)) {
      // "Invitee mail" can be hidden.
      // More info: https://www.drupal.org/project/ginvite/issues/3206103
      // Try to get user from "Invitee" field.
      $uid = $group_content->get('entity_id')->getString();
      // We want to be sure user exists.
      if (!empty($uid) && ($invitee = User::load($uid))) {
        $messenger->addMessage(t('Invite sent to %username', ['%username' => $invitee->getDisplayName()]));

        $group_content->set('invitation_status', GroupInvitation::INVITATION_PENDING);
        $group_content->save();
      }
    }
    else {
      $mail_manager = \Drupal::service('plugin.manager.mail');
      $from = $group_content->getEntity();
      $group = $group_content->getGroup();
      $params = [
@@ -92,16 +108,17 @@ function ginvite_group_content_insert(GroupContentInterface $group_content) {
      $langcode = $from->getPreferredLangcode();

      // Load plugin configuration.
    $group_plugin_collection = \Drupal::service('plugin.manager.group_content_enabler')->getInstalled($group->getGroupType());
      $group_plugin_collection = \Drupal::service('plugin.manager.group_content_enabler')
        ->getInstalled($group->getGroupType());
      $group_invite_config = $group_plugin_collection->getConfiguration()['group_invitation'];

      if ($invitee = user_load_by_mail($mail)) {
        $group_content->set('entity_id', $invitee);

      // Check if we should send a email to existing user.
        // Check if we should send an email to existing user.
        if ($group_invite_config['send_email_existing_users']) {
          $params['existing_user'] = TRUE;
        $mailManager->mail('ginvite', 'invite', $mail, $langcode, $params, NULL, TRUE);
          $mail_manager->mail('ginvite', 'invite', $mail, $langcode, $params, NULL, TRUE);
          $messenger->addMessage(t('Invite sent to %invitee', ['%invitee' => $invitee->getDisplayName()]));
        }
        else {
@@ -109,13 +126,14 @@ function ginvite_group_content_insert(GroupContentInterface $group_content) {
        }
      }
      else {
      $mailManager->mail('ginvite', 'invite', $mail, $langcode, $params, NULL, TRUE);
        $mail_manager->mail('ginvite', 'invite', $mail, $langcode, $params, NULL, TRUE);
        $messenger->addMessage(t('Invite sent to %mail', ['%mail' => $mail]));
      }

      $group_content->set('invitation_status', GroupInvitation::INVITATION_PENDING);
      $group_content->save();
    }
  }
  // If new membership is created, check related invitation exists.
  elseif ($type == 'group_membership') {
    $properties = [