in classes/page/acp.php [315:489]
public function mode_usermatch() {
global $DB, $OUTPUT, $PAGE, $SESSION;
$errors = [];
$mform = new \local_o365\form\usermatch('?mode=usermatch');
if ($fromform = $mform->get_data()) {
$datafile = $mform->save_temp_file('matchdatafile');
if (!empty($datafile)) {
$finfo = new \finfo();
$type = $finfo->file($datafile, FILEINFO_MIME);
$type = explode(';', $type);
if (strtolower($type[0]) === 'text/plain') {
try {
$fh = fopen($datafile, 'r');
if (!empty($fh)) {
$row = 1;
while (($data = fgetcsv($fh)) !== false) {
if (!empty($data)) {
if (isset($data[0]) && isset($data[1])) {
$newrec = new \stdClass;
$newrec->musername = trim($data[0]);
$newrec->o365username = trim($data[1]);
$newrec->openidconnect = (isset($data[2]) && intval(trim($data[2]))) > 0 ? 1 : 0;
$newrec->completed = 0;
$newrec->errormessage = '';
$DB->insert_record('local_o365_matchqueue', $newrec);
} else {
$errors[] = get_string('acp_usermatch_upload_err_data', 'local_o365', $row);
}
}
$row++;
}
fclose($fh);
} else {
$errors[] = get_string('acp_usermatch_upload_err_fileopen', 'local_o365');
}
} catch (\Exception $e) {
$errors[] = $e->getMessage();
}
} else {
$errors[] = get_string('acp_usermatch_upload_err_badmime', 'local_o365', $type[0]);
}
@unlink($datafile);
$mform->set_data([]);
} else {
$errors[] = get_string('acp_usermatch_upload_err_nofile', 'local_o365');
}
if (!empty($errors)) {
$SESSION->o365matcherrors = $errors;
}
redirect(new \moodle_url('/local/o365/acp.php', ['mode' => 'usermatch']));
die();
}
$PAGE->requires->jquery();
$this->standard_header();
echo \html_writer::tag('h2', get_string('acp_usermatch', 'local_o365'));
echo \html_writer::div(get_string('acp_usermatch_desc', 'local_o365'));
echo \html_writer::empty_tag('br');
echo \html_writer::empty_tag('br');
echo \html_writer::tag('h4', get_string('acp_usermatch_upload', 'local_o365'));
echo \html_writer::div(get_string('acp_usermatch_upload_desc', 'local_o365'));
echo \html_writer::empty_tag('br');
if (!empty($SESSION->o365matcherrors)) {
foreach ($SESSION->o365matcherrors as $error) {
echo \html_writer::div($error, 'alert-error alert local_o365_statusmessage');
}
$SESSION->o365matcherrors = [];
}
$mform->display();
echo \html_writer::empty_tag('br');
echo \html_writer::tag('h4', get_string('acp_usermatch_matchqueue', 'local_o365'));
echo \html_writer::div(get_string('acp_usermatch_matchqueue_desc', 'local_o365'));
$matchqueuelength = $DB->count_records('local_o365_matchqueue');
if ($matchqueuelength > 0) {
echo \html_writer::start_tag('div', ['class' => 'local_o365_matchqueuetoolbar']);
$clearurl = new \moodle_url('/local/o365/acp.php', ['mode' => 'usermatchclear']);
$clearurl = $clearurl->out();
// Clear successful button.
$checkicon = $OUTPUT->pix_icon('t/check', 'success', 'moodle');
$clearcallback = '$(\'table.local_o365_matchqueue\').find(\'tr.success\').fadeOut();';
$attrs = ['onclick' => '$.post(\''.$clearurl.'\', {type:\'success\'}, function(data) { '.$clearcallback.' })'];
$buttontext = get_string('acp_usermatch_matchqueue_clearsuccess', 'local_o365');
echo \html_writer::tag('button', $checkicon.' '.$buttontext, $attrs);
// Clear error button.
$warningicon = $OUTPUT->pix_icon('i/warning', 'warning', 'moodle');
$clearcallback = '$(\'table.local_o365_matchqueue\').find(\'tr.error\').fadeOut();';
$attrs = ['onclick' => '$.post(\''.$clearurl.'\', {type:\'error\'}, function(data) { '.$clearcallback.' })'];
$buttontext = get_string('acp_usermatch_matchqueue_clearerrors', 'local_o365');
echo \html_writer::tag('button', $warningicon.' '.$buttontext, $attrs);
// Clear warning button.
$queuedicon = $OUTPUT->pix_icon('i/scheduled', 'warning', 'moodle');
$clearcallback = '$(\'table.local_o365_matchqueue\').find(\'tr.queued\').fadeOut();';
$attrs = ['onclick' => '$.post(\''.$clearurl.'\', {type:\'queued\'}, function(data) { '.$clearcallback.' })'];
$buttontext = get_string('acp_usermatch_matchqueue_clearqueued', 'local_o365');
echo \html_writer::tag('button', $queuedicon.' '.$buttontext, $attrs);
// Clear all button.
$removeicon = $OUTPUT->pix_icon('t/delete', 'warning', 'moodle');
$clearcallback = '$(\'table.local_o365_matchqueue\').find(\'tr:not(:first-child)\').fadeOut();';
$attrs = ['onclick' => '$.post(\''.$clearurl.'\', {type:\'all\'}, function(data) { '.$clearcallback.' })'];
$buttontext = get_string('acp_usermatch_matchqueue_clearall', 'local_o365');
echo \html_writer::tag('button', $removeicon.' '.$buttontext, $attrs);
echo \html_writer::end_tag('div');
$matchqueue = $DB->get_recordset('local_o365_matchqueue', null, 'id ASC');
// Constructing table manually instead of \html_table for memory reasons.
echo \html_writer::start_tag('table', ['class' => 'local_o365_matchqueue']);
echo \html_writer::start_tag('tr');
echo \html_writer::tag('th', '');
echo \html_writer::tag('th', get_string('acp_usermatch_matchqueue_column_muser', 'local_o365'));
echo \html_writer::tag('th', get_string('acp_usermatch_matchqueue_column_o365user', 'local_o365'));
echo \html_writer::tag('th', get_string('acp_usermatch_matchqueue_column_openidconnect', 'local_o365'));
echo \html_writer::tag('th', get_string('acp_usermatch_matchqueue_column_status', 'local_o365'));
echo \html_writer::end_tag('tr');
foreach ($matchqueue as $queuerec) {
$status = 'queued';
$trclass = 'alert-info queued';
if (!empty($queuerec->completed) && empty($queuerec->errormessage)) {
$status = 'success';
$trclass = 'alert-success success';
} else if (!empty($queuerec->errormessage)) {
$status = 'error';
$trclass = 'alert-error error';
}
echo \html_writer::start_tag('tr', ['class' => $trclass]);
switch ($status) {
case 'success':
echo \html_writer::tag('td', $checkicon);
break;
case 'error':
echo \html_writer::tag('td', $warningicon);
break;
default:
echo \html_writer::tag('td', $queuedicon);
}
echo \html_writer::tag('td', $queuerec->musername);
echo \html_writer::tag('td', $queuerec->o365username);
echo \html_writer::tag('td', $queuerec->openidconnect > 0 ? get_string('yes') : get_string('no'));
switch ($status) {
case 'success':
echo \html_writer::tag('td', get_string('acp_usermatch_matchqueue_status_success', 'local_o365'));
break;
case 'error':
$statusstr = get_string('acp_usermatch_matchqueue_status_error', 'local_o365', $queuerec->errormessage);
echo \html_writer::tag('td', $statusstr);
break;
default:
echo \html_writer::tag('td', get_string('acp_usermatch_matchqueue_status_queued', 'local_o365'));
}
echo \html_writer::end_tag('tr');
}
echo \html_writer::end_tag('table');
$matchqueue->close();
} else {
$msgclasses = 'alert-info alert local_o365_statusmessage';
echo \html_writer::div(get_string('acp_usermatch_matchqueue_empty', 'local_o365'), $msgclasses);
}
$this->standard_footer();
}