Hero

Como obtener todos los usuarios asociados a un rol en Drupal 7

Marzo 20, 2013

enzo
Drupal

En algunas ocasiones necesitamos en nuestros módulos personalizados obtener un listado de todos los usuarios asociados a un rol especifico para realizar alguna tarea masiva, como quizas enviar un correo notificando algún cambio es sus derechos administrativos.

Esta función no esta dentro de las funciones propias del core de Drupal, pero a continuación haremos dicha implementación como se puede apreciar en el siguiente listado de código.

/**
 * Fetches all users in a role name.
 *
 * @param $role
 * A string representing the role name or a Role ID.
 *
 * @return
 * An array with fully-loaded user object
 */
 function _get_users_per_role($role) {
 
 if(is_integer($role)) {
 $role_object = user_role_load($role);
 } 
 else {
 $role_object = user_role_load_by_name($role_name);
 } 
 
 //Get all users active and block related with the role. 
 $users = array();
 $result = db_select('users_roles', 'ur')
 ->fields('ur')
 ->condition('ur.rid', $role_object->rid, '=')
 ->execute();
 
 //Create an array of users ids. 
 foreach ($result as $record) {
 $uids[] = $record->uid;
 };
 
 //Execute a query to get and object for active users only 
 $query = new EntityFieldQuery();
 $query->entityCondition('entity_type', 'user')
 ->propertyCondition('uid', $uids, 'IN')
 ->propertyCondition('status', 1);
 
 $entities = $query->execute();
 
 if (!empty($entities)) {
 $users = entity_load('user', array_keys($entities['user']));
 }

 return $users; 
} 

Veamos un poco la lógica de la función.

La función recibe tanto como un id de rol o el nombre del rol del cual queremos obtener los usuarios asociados.

Posteriormente se obtienen todos los identificadores de usuario, pero esto no discrimina si son usuarios activos o no.

Para finalizar se hace una consulta usando los identificadores de usuario usando el EntityFieldQuery, pero restringiendo que solo retorne los usuario activos. Puedes ver una introducción a EntityFieldQuery aquí.

Espero que les sea de utilidad para sus módulos personalizados.

enzo

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.

CONTACTS

Logo

Santa Ana, San Jose

+1 703 831 3307

yes@weknowinc.com

Contact us

Follow Us

7Sabores® y SieteSabores® son marcas registradas por Ingeniarte Consultores S.A. Todos los derechos reservados 2022.