You are here

public function PrivateMessageMapper::getUserIdsFromString in Private Message 8.2

Same name and namespace in other branches
  1. 8 src/Mapper/PrivateMessageMapper.php \Drupal\private_message\Mapper\PrivateMessageMapper::getUserIdsFromString()

Get a list of account IDs whose account names begin with the given string.

Only accounts that have 'Use private messaging system' permission will be returned, and the viewing user must have both 'View user information' and 'access user profiles' to get any results at all.

Parameters

string $string: The string to search for.

int $count: The number of results to return.

Return value

int[] An array of account IDs for accounts whose account names begin with the given string.

Overrides PrivateMessageMapperInterface::getUserIdsFromString

File

src/Mapper/PrivateMessageMapper.php, line 176

Class

PrivateMessageMapper
Interface for the Private Message Mapper class.

Namespace

Drupal\private_message\Mapper

Code

public function getUserIdsFromString($string, $count) {
  if ($this->currentUser
    ->hasPermission('access user profiles') && $this->currentUser
    ->hasPermission('use private messaging system')) {
    $query = 'SELECT user_data.uid FROM {users_field_data} AS user_data LEFT ' . 'JOIN {user__roles} AS user_roles ' . 'ON user_roles.entity_id = user_data.uid ' . 'LEFT JOIN {config} AS role_config ' . "ON role_config.name = CONCAT('user.role.', user_roles.roles_target_id) " . 'JOIN {config} AS config ON config.name = :authenticated_config ' . 'WHERE user_data.name LIKE :string AND user_data.name != :current_user ' . 'AND user_roles.roles_target_id IN (:rids[]) ' . 'ORDER BY user_data.name ASC';
    return $this->database
      ->queryRange($query, 0, $count, [
      ':string' => $string . '%',
      ':current_user' => $this->currentUser
        ->getAccountName(),
      ':authenticated_config' => 'user.role.authenticated',
      ':rids[]' => $this
        ->getCanUseRids(),
    ])
      ->fetchCol();
  }
  else {
    return [];
  }
}