public function execute()
{
global $DB, $CFG;
require_once $CFG->dirroot . '/lib/accesslib.php';
require_once $CFG->dirroot . '/enrol/locallib.php';
require_once $CFG->dirroot . '/group/lib.php';
@error_reporting(E_ALL | E_STRICT);
@ini_set('display_errors', '1');
$options = $this->expandedOptions;
$limit_from = 0;
if (($options['course-inactive'] || $options['course-role']) && !$options['course']) {
cli_error("You must provide --course if --course-inactive or --course-role is used.");
}
if (count($this->arguments) == 0) {
$users = "SELECT * FROM {user}";
$limit_to = 100;
} else {
$users = "SELECT * FROM {user} WHERE " . $this->arguments[0];
$limit_to = 0;
$sort = "id";
if ($options['sort']) {
if ($options['sort'] == 'username' || $options['sort'] == 'email' || $options['sort'] == 'idnumber') {
$sort = $options['sort'];
} else {
echo "Invalid sorting option. Use 'username', 'email' or 'idnumber'.\n";
}
}
$dir = 'ASC';
if ($options['descending']) {
$dir = 'DESC';
}
$users .= " ORDER BY {$sort} {$dir}";
if ($options['limit'] && preg_match('/^\\d+$/', $options['limit'])) {
$limit_to = $options['limit'];
}
}
if ($options['course']) {
$users = $DB->get_records_sql($users, array('deleted' => 0, 'suspended' => 0));
} else {
$users = $DB->get_records_sql($users, $params = null, $limit_from, $limit_to);
}
// Possibly extra filtering.
$extralimit = false;
if ($options['course']) {
$context = \context_course::instance($options['course']);
$enrolledusers = get_enrolled_users($context);
$extralimit = array_combine(array_keys($enrolledusers), array_keys($enrolledusers));
}
if ($options['course-inactive']) {
foreach ($extralimit as $userid => $v) {
$lastaccessexists = $DB->record_exists('user_lastaccess', array('courseid' => $options['course'], 'userid' => $userid));
if ($lastaccessexists) {
unset($extralimit[$userid]);
}
}
}
if ($options['course-role']) {
$role = $DB->get_record('role', array('shortname' => $options['course-role']), '*', MUST_EXIST);
$roleusers = array_keys(get_role_users($role->id, $context));
$roleusers = array_combine($roleusers, $roleusers);
$extralimit = array_intersect_key($roleusers, $extralimit);
}
if ($extralimit !== false) {
$users = array_intersect_key($users, $extralimit);
}
// Apply original $options['limit'] at the end.
if ($options['limit']) {
$users = array_splice($users, 0, $options['limit']);
}
foreach ($users as $user) {
if ($options['id']) {
echo "{$user->id} \n";
continue;
}
$to_print = $user->username . " ({$user->id}), " . $user->email . ", ";
echo $to_print . "\n";
}
}