diff --git a/core/modules/user/lib/Drupal/user/Controller/UserAdmin.php b/core/modules/user/lib/Drupal/user/Controller/UserAdmin.php new file mode 100644 index 0000000..ea8b30a --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Controller/UserAdmin.php @@ -0,0 +1,154 @@ +connection = $connection; + $this->moduleHandler = $module_handler; + $this->storageController = $storage_controller; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('database'), + $container->get('module_handler'), + $container->get('plugin.manager.entity')->getStorageController('user') + ); + } + + /** + * User administrative listing. + */ + public function userList() { + $header = array( + 'username' => array('data' => t('Username'), 'field' => 'u.name'), + 'status' => array('data' => t('Status'), 'field' => 'u.status', 'class' => array(RESPONSIVE_PRIORITY_LOW)), + 'roles' => array('data' => t('Roles'), 'class' => array(RESPONSIVE_PRIORITY_LOW)), + 'member_for' => array('data' => t('Member for'), 'field' => 'u.created', 'sort' => 'desc', 'class' => array(RESPONSIVE_PRIORITY_LOW)), + 'access' => array('data' => t('Last access'), 'field' => 'u.access', 'class' => array(RESPONSIVE_PRIORITY_LOW)), + 'operations' => t('Operations'), + ); + + $query = $this->connection->select('users', 'u'); + $query->condition('u.uid', 0, '<>'); + + $count_query = clone $query; + $count_query->addExpression('COUNT(u.uid)'); + + $query = $query + ->extend('Drupal\Core\Database\Query\PagerSelectExtender') + ->extend('Drupal\Core\Database\Query\TableSortExtender'); + $query + ->fields('u', array('uid')) + ->limit(50) + ->orderByHeader($header) + ->setCountQuery($count_query); + $accounts = $this->storageController->load(array_keys($query->execute()->fetchAllAssoc('uid'))); + + $destination = drupal_get_destination(); + $status = array(t('blocked'), t('active')); + $roles = array_map('Drupal\Component\Utility\String::checkPlain', user_role_names(TRUE)); + unset($roles[DRUPAL_AUTHENTICATED_RID]); + $options = array(); + foreach ($accounts as $account) { + $users_roles = array(); + foreach ($account->getRoles() as $role) { + if (isset($roles[$role])) { + $users_roles[] = $roles[$role]; + } + } + asort($users_roles); + $options[$account->id()]['username']['data'] = array( + '#theme' => 'username', + '#account' => $account, + ); + $options[$account->id()]['status'] = $status[$account->status->value]; + $options[$account->id()]['roles']['data'] = array( + '#theme' => 'item_list', + '#items' => $users_roles, + ); + $options[$account->id()]['member_for'] = format_interval(REQUEST_TIME - $account->created->value); + $options[$account->id()]['access'] = $account->access ? t('@time ago', array('@time' => format_interval(REQUEST_TIME - $account->access->value))) : t('never'); + $links = array(); + $links['edit'] = array( + 'title' => t('Edit'), + 'href' => 'user/' . $account->id() . '/edit', + 'query' => $destination, + ); + if ($this->moduleHandler->invoke('translation_entity', 'translate_access', array($account))) { + $links['translate'] = array( + 'title' => t('Translate'), + 'href' => 'user/' . $account->id() . '/translations', + 'query' => $destination, + ); + } + $options[$account->id()]['operations']['data'] = array( + '#type' => 'operations', + '#links' => $links, + ); + } + + $build['accounts'] = array( + '#theme' => 'table', + '#header' => $header, + '#rows' => $options, + '#empty' => t('No people available.'), + ); + $build['pager'] = array( + '#theme' =>'pager', + ); + + return $build; + } + +} diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc index f9982e8..01cf119 100644 --- a/core/modules/user/user.admin.inc +++ b/core/modules/user/user.admin.inc @@ -6,98 +6,6 @@ */ /** - * Page callback: User administration page. - */ -function user_admin_account() { - $header = array( - 'username' => array('data' => t('Username'), 'field' => 'u.name'), - 'status' => array('data' => t('Status'), 'field' => 'u.status', 'class' => array(RESPONSIVE_PRIORITY_LOW)), - 'roles' => array('data' => t('Roles'), 'class' => array(RESPONSIVE_PRIORITY_LOW)), - 'member_for' => array('data' => t('Member for'), 'field' => 'u.created', 'sort' => 'desc', 'class' => array(RESPONSIVE_PRIORITY_LOW)), - 'access' => array('data' => t('Last access'), 'field' => 'u.access', 'class' => array(RESPONSIVE_PRIORITY_LOW)), - 'operations' => t('Operations'), - ); - - $query = db_select('users', 'u'); - $query->condition('u.uid', 0, '<>'); - user_build_filter_query($query); - - $count_query = clone $query; - $count_query->addExpression('COUNT(u.uid)'); - - $query = $query - ->extend('Drupal\Core\Database\Query\PagerSelectExtender') - ->extend('Drupal\Core\Database\Query\TableSortExtender'); - $query - ->fields('u', array('uid', 'name', 'status', 'created', 'access')) - ->limit(50) - ->orderByHeader($header) - ->setCountQuery($count_query); - $result = $query->execute(); - - $destination = drupal_get_destination(); - $status = array(t('blocked'), t('active')); - $roles = array_map('check_plain', user_role_names(TRUE)); - $accounts = array(); - foreach ($result as $account) { - $account = user_load($account->uid); - $users_roles = array(); - $roles_result = db_query('SELECT rid FROM {users_roles} WHERE uid = :uid', array(':uid' => $account->uid)); - foreach ($roles_result as $user_role) { - $users_roles[] = $roles[$user_role->rid]; - } - asort($users_roles); - $username = array( - '#theme' => 'username', - '#account' => $account, - ); - $item_list = array( - '#theme' => 'item_list', - '#items' => $users_roles, - ); - $options[$account->uid] = array( - 'username' => drupal_render($username), - 'status' => $status[$account->status], - 'roles' => drupal_render($item_list), - 'member_for' => format_interval(REQUEST_TIME - $account->created), - 'access' => $account->access ? t('@time ago', array('@time' => format_interval(REQUEST_TIME - $account->access))) : t('never'), - ); - $links = array(); - $links['edit'] = array( - 'title' => t('Edit'), - 'href' => 'user/' . $account->uid . '/edit', - 'query' => $destination, - ); - if (module_invoke('translation_entity', 'translate_access', $account)) { - $links['translate'] = array( - 'title' => t('Translate'), - 'href' => 'user/' . $account->uid . '/translations', - 'query' => $destination, - ); - } - $options[$account->uid]['operations']['data'] = array( - '#type' => 'operations', - '#links' => $links, - ); - - $options[$account->uid]['title']['data']['#title'] = check_plain($account->name); - - } - - $form['accounts'] = array( - '#theme' => 'table', - '#header' => $header, - '#rows' => $options, - '#empty' => t('No people available.'), - ); - $form['pager'] = array( - '#theme' =>'pager', - ); - - return $form; -} - -/** * Menu callback: administer permissions. * * @ingroup forms diff --git a/core/modules/user/user.module b/core/modules/user/user.module index e7ee37a..9a93130 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -904,11 +904,13 @@ function user_menu() { $items['admin/people'] = array( 'title' => 'People', 'description' => 'Manage user accounts, roles, and permissions.', - 'page callback' => 'user_admin_account', - 'access arguments' => array('administer users'), + 'route_name' => 'user_admin_account', 'position' => 'left', 'weight' => -4, - 'file' => 'user.admin.inc', + ); + $items['admin/people/list'] = array( + 'title' => 'List', + 'type' => MENU_DEFAULT_LOCAL_TASK, ); // Permissions and role forms. $items['admin/people/permissions'] = array( @@ -948,9 +950,8 @@ function user_menu() { ); $items['admin/people/create'] = array( - 'title' => 'Add user', 'route_name' => 'user_admin_create', - 'type' => MENU_LOCAL_ACTION, + 'type' => MENU_SIBLING_LOCAL_TASK, ); $items['admin/people/cancel'] = array( 'title' => 'Cancel user', @@ -1025,6 +1026,21 @@ function user_menu() { } /** + * Implements hook_local_actions(). + */ +function user_local_actions() { + return array( + array( + 'route_name' => 'user_admin_create', + 'title' => t('Add user'), + 'appears_on' => array( + 'user_admin_account', + ), + ), + ); +} + +/** * Implements hook_menu_link_presave(). */ function user_menu_link_presave(MenuLink $menu_link) { diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index 3d52545..3943e90 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -33,6 +33,13 @@ user_account_settings: requirements: _permission: 'administer users' +user_admin_account: + pattern: '/admin/people' + defaults: + _controller: '\Drupal\user\Controller\UserAdmin::userList' + requirements: + _permission: 'administer users' + user_admin_create: pattern: '/admin/people/create' defaults: