You are here

class SocialGroupInviteConfigOverride in Open Social 10.3.x

Same name and namespace in other branches
  1. 10.1.x modules/social_features/social_group/modules/social_group_invite/src/SocialGroupInviteConfigOverride.php \Drupal\social_group_invite\SocialGroupInviteConfigOverride
  2. 10.2.x modules/social_features/social_group/modules/social_group_invite/src/SocialGroupInviteConfigOverride.php \Drupal\social_group_invite\SocialGroupInviteConfigOverride

Provides an overridden elements.

@package Drupal\social_group_invite

Hierarchy

Expanded class hierarchy of SocialGroupInviteConfigOverride

3 string references to 'SocialGroupInviteConfigOverride'
SocialEventInviteConfigOverride::getCacheSuffix in modules/social_features/social_event/modules/social_event_invite/src/SocialEventInviteConfigOverride.php
The string to append to the configuration static cache name.
SocialGroupInviteConfigOverride::getCacheSuffix in modules/social_features/social_group/modules/social_group_invite/src/SocialGroupInviteConfigOverride.php
The string to append to the configuration static cache name.
social_group_invite.services.yml in modules/social_features/social_group/modules/social_group_invite/social_group_invite.services.yml
modules/social_features/social_group/modules/social_group_invite/social_group_invite.services.yml
1 service uses SocialGroupInviteConfigOverride
social_group_invite.override in modules/social_features/social_group/modules/social_group_invite/social_group_invite.services.yml
\Drupal\social_group_invite\SocialGroupInviteConfigOverride

File

modules/social_features/social_group/modules/social_group_invite/src/SocialGroupInviteConfigOverride.php, line 18

Namespace

Drupal\social_group_invite
View source
class SocialGroupInviteConfigOverride implements ConfigFactoryOverrideInterface {

  /**
   * The current request.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  protected $requestStack;

  /**
   * Email validator.
   *
   * @var \Drupal\Component\Utility\EmailValidatorInterface
   */
  protected $emailValidator;

  /**
   * The current active database's master connection.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * The config factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * Constructs the configuration override.
   *
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   *   The request stack.
   * @param \Drupal\Component\Utility\EmailValidatorInterface $email_validator
   *   The email validator.
   * @param \Drupal\Core\Database\Connection $database
   *   The current active database's master connection.
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The Drupal configuration factory.
   */
  public function __construct(RequestStack $request_stack, EmailValidatorInterface $email_validator, Connection $database, ConfigFactoryInterface $config_factory) {
    $this->requestStack = $request_stack;
    $this->emailValidator = $email_validator;
    $this->database = $database;
    $this->configFactory = $config_factory;
  }

  /**
   * Load overrides.
   */
  public function loadOverrides($names) {
    $overrides = [];
    $config_name = 'user.settings';

    // Get default verify_mail users settings.
    $enabled_verify_mail = $this->configFactory
      ->getEditable($config_name)
      ->get('verify_mail');

    // Get email_verification of social group invite settings.
    $group_invite = $this->configFactory
      ->getEditable('social_group.settings');
    $ignore_email_verification = (bool) $group_invite
      ->get('group_invite.email_verification');

    // Skip email verification step on registration for user group invitation.
    if (in_array($config_name, $names, TRUE) && $ignore_email_verification === TRUE && $enabled_verify_mail === TRUE) {
      $request = $this->requestStack
        ->getCurrentRequest();
      $invitee_mail = $request->query
        ->get('invitee_mail', '');
      $destination = $request->query
        ->get('destination', '');
      $is_valid = $this
        ->validateInviteData($invitee_mail, $destination);
      if ($is_valid) {
        $overrides[$config_name]['verify_mail'] = FALSE;
      }
    }
    return $overrides;
  }

  /**
   * Validate invite data.
   *
   * @param string $invitee_mail
   *   Encoded email address of invited user.
   * @param string $destination
   *   The url of invited group.
   *
   * @return bool
   *   TRUE if invited data is valid.
   */
  public function validateInviteData($invitee_mail, $destination) {
    if (empty($invitee_mail) || empty($destination)) {
      return FALSE;
    }

    // Get decoded email of invited user from params.
    $invitee_mail = base64_decode(str_replace([
      '-',
      '_',
    ], [
      '+',
      '/',
    ], $invitee_mail));
    if (!$this->emailValidator
      ->isValid($invitee_mail)) {
      return FALSE;
    }

    // Get group id to which user was invited from params.
    preg_match('/\\/social-group-invite\\/(\\d+)+\\/accept/', $destination, $matches);
    $entity_id = array_pop($matches);
    if (empty($entity_id) || !is_numeric($entity_id)) {
      return FALSE;
    }

    // Verify is it really was requested invite and it still is actual.
    $query = $this->database
      ->select('group_content__invitee_mail', 'gcim');
    $query
      ->fields('gcim', [
      'entity_id',
    ]);
    $query
      ->condition('gcim.invitee_mail_value', $invitee_mail);
    $query
      ->condition('gcim.entity_id', $entity_id);
    $query
      ->join('group_content__invitation_status', 'gcis', 'gcim.entity_id = gcis.entity_id');
    $query
      ->condition('gcis.invitation_status_value', '0');
    $invitations = $query
      ->execute()
      ->fetchField();
    if (empty($invitations)) {
      return FALSE;
    }
    else {
      return TRUE;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheSuffix() {
    return 'SocialGroupInviteConfigOverride';
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheableMetadata($name) {
    return new CacheableMetadata();
  }

  /**
   * Creates a configuration object for use during install and synchronization.
   *
   * @param string $name
   *   The configuration object name.
   * @param string $collection
   *   The configuration collection.
   *
   * @return \Drupal\Core\Config\StorableConfigBase|null
   *   The configuration object for the provided name and collection.
   */
  public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION) {
    return NULL;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
SocialGroupInviteConfigOverride::$configFactory protected property The config factory.
SocialGroupInviteConfigOverride::$database protected property The current active database's master connection.
SocialGroupInviteConfigOverride::$emailValidator protected property Email validator.
SocialGroupInviteConfigOverride::$requestStack protected property The current request.
SocialGroupInviteConfigOverride::createConfigObject public function Creates a configuration object for use during install and synchronization. Overrides ConfigFactoryOverrideInterface::createConfigObject
SocialGroupInviteConfigOverride::getCacheableMetadata public function Gets the cacheability metadata associated with the config factory override. Overrides ConfigFactoryOverrideInterface::getCacheableMetadata
SocialGroupInviteConfigOverride::getCacheSuffix public function The string to append to the configuration static cache name. Overrides ConfigFactoryOverrideInterface::getCacheSuffix
SocialGroupInviteConfigOverride::loadOverrides public function Load overrides. Overrides ConfigFactoryOverrideInterface::loadOverrides
SocialGroupInviteConfigOverride::validateInviteData public function Validate invite data.
SocialGroupInviteConfigOverride::__construct public function Constructs the configuration override.