You are here

class BulkUserRegistration in Bulk User Registration 8

The BulkUserRegistration service.

@package Drupal\bulk_user_registration

Hierarchy

Expanded class hierarchy of BulkUserRegistration

1 file declares its use of BulkUserRegistration
BulkUserImport.php in src/Form/BulkUserImport.php
1 string reference to 'BulkUserRegistration'
bulk_user_registration.services.yml in ./bulk_user_registration.services.yml
bulk_user_registration.services.yml
1 service uses BulkUserRegistration
bulk_user_registration in ./bulk_user_registration.services.yml
Drupal\bulk_user_registration\BulkUserRegistration

File

src/BulkUserRegistration.php, line 16

Namespace

Drupal\bulk_user_registration
View source
class BulkUserRegistration implements BulkUserRegistrationInterface {

  /**
   * The language manager.
   *
   * @var \Drupal\Core\Language\LanguageManagerInterface
   */
  protected $languageManager;

  /**
   * The module handler.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected $moduleHandler;

  /**
   * Cached field names.
   *
   * @var array
   */
  protected $fieldNames = [];

  /**
   * Constructor.
   *
   * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager
   *   The language manager.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
   *   The module handler.
   */
  public function __construct(LanguageManagerInterface $languageManager, ModuleHandlerInterface $moduleHandler) {
    $this->languageManager = $languageManager;
    $this->moduleHandler = $moduleHandler;
  }

  /**
   * {@inheritdoc}
   */
  public function createUser(array $userData, $defaultRole) {
    $langcode = \Drupal::languageManager()
      ->getDefaultLanguage()
      ->getId();

    /** @var \Drupal\user\UserInterface $user */
    $user = User::create();
    $user
      ->setUsername($userData[self::FIELD_USER_NAME]);
    $user
      ->setEmail($userData[self::FIELD_EMAIL]);
    $user
      ->set('init', $userData[self::FIELD_EMAIL]);
    $user
      ->set('langcode', $langcode);
    $user
      ->set('preferred_langcode', $langcode);
    $user
      ->set('preferred_admin_langcode', $langcode);
    $user
      ->enforceIsNew();
    if (!$userData[self::FIELD_STATUS]) {
      $user
        ->block();
    }
    else {
      $user
        ->activate();
    }

    // Single or multiple roles will be applied to the user object. Multiple
    // roles should be comma separated.
    $roles = [];
    $csvRoles = explode(',', $userData[self::FIELD_ROLE]);
    $allowedRoles = $this
      ->getAllowedRoles();
    foreach ($csvRoles as $csvRole) {
      $csvRole = trim($csvRole);
      if (isset($allowedRoles[$csvRole])) {
        $roles[] = $csvRole;
      }
    }
    $roles = array_filter(array_unique($roles));
    $roles = empty($roles) ? [
      $defaultRole,
    ] : $roles;
    foreach ($roles as $role) {
      $this
        ->addRole($user, $role);
    }

    // Allow modules to modify the user object before saving it. Typically used
    // to store the extra field data into the user.
    \Drupal::moduleHandler()
      ->invokeAll('bulk_user_registration_user_presave', [
      $user,
      $userData,
    ]);
    $user
      ->save();
    return $user;
  }

  /**
   * {@inheritdoc}
   */
  public function getFieldNames() {
    if (count($this->fieldNames) == 0) {
      $fieldNames = [];

      // Allow modules to define extra fields that will be allowed during
      // import.
      $extraFields = $this->moduleHandler
        ->invokeAll('bulk_user_registration_extra_fields');

      // Add standard fields.
      foreach ($this
        ->getStandardFields() as $name) {
        $fieldNames[$name] = FALSE;
      }

      // Add extra fields to the set of field names and flag them as extra.
      foreach ($extraFields as $name) {
        if (!isset($fieldNames[$name])) {
          $fieldNames[$name] = TRUE;
        }
      }
      $this->fieldNames = $fieldNames;
    }
    return $this->fieldNames;
  }

  /**
   * Add user role.
   *
   * @param \Drupal\user\UserInterface $user
   *   The user.
   * @param string $role
   *   Role Id.
   */
  protected function addRole(UserInterface $user, $role) {
    if (!in_array($role, [
      RoleInterface::AUTHENTICATED_ID,
      RoleInterface::ANONYMOUS_ID,
    ])) {
      $user
        ->addRole($role);
    }
  }

  /**
   * The roles allowed to import.
   *
   * @return array
   *   An associative array with the role id as the key and the role name as
   *   value.
   */
  protected function getAllowedRoles() {
    $allowedRoles = \Drupal::config('bulk_user_registration.settings')
      ->get('allowed_roles');
    return array_intersect_key(user_role_names(TRUE), array_flip(array_filter($allowedRoles)));
  }

  /**
   * Returns the names of standard CSV fields.
   *
   * @return array
   *   Array of field names.
   */
  protected function getStandardFields() {
    return [
      self::FIELD_USER_NAME,
      self::FIELD_EMAIL,
      self::FIELD_STATUS,
      self::FIELD_ROLE,
    ];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BulkUserRegistration::$fieldNames protected property Cached field names.
BulkUserRegistration::$languageManager protected property The language manager.
BulkUserRegistration::$moduleHandler protected property The module handler.
BulkUserRegistration::addRole protected function Add user role.
BulkUserRegistration::createUser public function Creates and saves a user. Overrides BulkUserRegistrationInterface::createUser
BulkUserRegistration::getAllowedRoles protected function The roles allowed to import.
BulkUserRegistration::getFieldNames public function Get CSV field names. Overrides BulkUserRegistrationInterface::getFieldNames
BulkUserRegistration::getStandardFields protected function Returns the names of standard CSV fields.
BulkUserRegistration::__construct public function Constructor.
BulkUserRegistrationInterface::FIELD_EMAIL constant
BulkUserRegistrationInterface::FIELD_ROLE constant
BulkUserRegistrationInterface::FIELD_STATUS constant
BulkUserRegistrationInterface::FIELD_USER_NAME constant User field names.