/**
* Internal function to execute the command.
*
* @param InputInterface $input The input to inject into the command.
* @param OutputInterface $output The output to inject into the command.
*
* @return integer The command exit code
*
* @since 4.0.0
*/
protected function doExecute(InputInterface $input, OutputInterface $output) : int
{
$db = Factory::getDbo();
$this->configureIO($input, $output);
$this->ioStyle->title('List users');
$groupsQuery = $db->getQuery(true)->select($db->quoteName(['title', 'id']))->from($db->quoteName('#__usergroups'));
$groups = $db->setQuery($groupsQuery)->loadAssocList('id', 'title');
$query = $db->getQuery(true);
$query->select($db->quoteName(['u.id', 'u.username', 'u.name', 'u.email', 'u.block']))->select($query->groupConcat($query->castAs('CHAR', $db->quoteName('g.group_id'))) . ' AS ' . $db->quoteName('groups'))->innerJoin($db->quoteName('#__user_usergroup_map', 'g'), $db->quoteName('g.user_id') . ' = ' . $db->quoteName('u.id'))->from($db->quoteName('#__users', 'u'))->group($db->quoteName('u.id'));
$db->setQuery($query);
$users = [];
foreach ($db->loadAssocList() as $user) {
$user["groups"] = array_map(function ($groupId) use($groups) {
return $groups[$groupId];
}, explode(",", $user["groups"]));
$user["groups"] = implode(", ", $user["groups"]);
$users[] = $user;
}
$this->ioStyle->table(['id', 'username', 'name', 'email', 'blocked', 'groups'], $users);
return Command::SUCCESS;
}