91334a46b5
Co-authored-by: Cursor <cursoragent@cursor.com>
133 lines
5.4 KiB
PHP
133 lines
5.4 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
|
|
require_once('../../config.php');
|
|
|
|
use mod_meetletacbfree\api\client;
|
|
use mod_meetletacbfree\api\service;
|
|
use mod_meetletacbfree\local\config;
|
|
|
|
require_login();
|
|
require_capability('moodle/site:config', context_system::instance());
|
|
\mod_meetletacbfree\registration\manager::require_registered();
|
|
global $OUTPUT, $PAGE;
|
|
$PAGE->set_context(context_system::instance());
|
|
$PAGE->set_url(new moodle_url('/mod/meetletacbfree/conntest.php'));
|
|
$PAGE->set_title(get_string('conntesttitle', 'meetletacbfree'));
|
|
$PAGE->set_pagelayout('admin');
|
|
$PAGE->requires->css(new moodle_url('/mod/meetletacbfree/styles.css', ['v' => '2026081415']));
|
|
|
|
$results = [];
|
|
$push = static function(string $label, bool $ok, string $detail = '') use (&$results): void {
|
|
$results[] = ['label' => $label, 'ok' => $ok, 'detail' => $detail];
|
|
};
|
|
|
|
$logo = $OUTPUT->image_url('adobeconnect', 'meetletacbfree');
|
|
|
|
echo $OUTPUT->header();
|
|
echo html_writer::start_div('meetlet-conntest');
|
|
echo html_writer::start_div('meetlet-conntest__hero');
|
|
echo html_writer::img($logo, 'Adobe Connect', ['class' => 'meetlet-conntest__logo']);
|
|
echo html_writer::tag('h2', get_string('conntesttitle', 'meetletacbfree'), ['class' => 'meetlet-conntest__title']);
|
|
echo html_writer::tag('p', get_string('conntestintro', 'meetletacbfree'), ['class' => 'meetlet-conntest__intro']);
|
|
echo html_writer::end_div();
|
|
|
|
if (!config::is_configured()) {
|
|
echo html_writer::div(get_string('notconfigured', 'meetletacbfree'), 'meetlet-alert');
|
|
} else {
|
|
try {
|
|
$service = new service();
|
|
$client = $service->get_client();
|
|
$service->login_admin();
|
|
$push(get_string('testlogin', 'meetletacbfree'), true);
|
|
|
|
$content = $service->get_folder_scoid('content');
|
|
$archives = $service->get_folder_scoid('forced-archives');
|
|
$meetings = $service->get_folder_scoid('meetings');
|
|
$push(get_string('testfolders', 'meetletacbfree'), ($content && $archives && $meetings),
|
|
"content={$content} · archives={$archives} · meetings={$meetings}");
|
|
|
|
$meeting = (object)[
|
|
'name' => 'meetlet_test_' . time(),
|
|
'starttime' => time(),
|
|
'endtime' => time() + HOURSECS,
|
|
'meeturl' => '',
|
|
'templatescoid' => 0,
|
|
];
|
|
$scoid = $service->create_meeting($meeting, $meetings);
|
|
$user = (object)[
|
|
'id' => random_int(900000000, 999999999),
|
|
'firstname' => 'MeetLet',
|
|
'lastname' => 'Test',
|
|
'username' => 'meetlettest' . random_int(1000, 9999),
|
|
'email' => 'meetlet.test.' . random_int(1000, 9999) . '@example.com',
|
|
];
|
|
$principal = $service->ensure_user($user);
|
|
|
|
$assigned = $service->assign_permission($principal->principalid, $scoid, service::ROLE_PRESENTER);
|
|
$push(get_string('testuser', 'meetletacbfree'), $assigned);
|
|
|
|
// SSO: prefer admin (known good), then disposable created login/ext-login.
|
|
$ssook = false;
|
|
$ssodetail = '';
|
|
try {
|
|
$sso = new client();
|
|
$cookie = $sso->login_external(config::get_admin_login());
|
|
$ssook = ($cookie !== '');
|
|
$ssodetail = get_string('testsso_adminok', 'meetletacbfree');
|
|
} catch (Throwable $e) {
|
|
$ssodetail = $e->getMessage();
|
|
}
|
|
if ($ssook) {
|
|
try {
|
|
$sso2 = new client();
|
|
$cookie2 = $sso2->login_external($principal->login);
|
|
$ssodetail .= ' · ' . get_string('testsso_userok', 'meetletacbfree');
|
|
} catch (Throwable $e) {
|
|
// Admin SSO is enough for infrastructure health.
|
|
$ssodetail .= ' · ' . get_string('testsso_userwarn', 'meetletacbfree');
|
|
}
|
|
}
|
|
$push(get_string('testsso', 'meetletacbfree'), $ssook, $ssodetail);
|
|
|
|
$service->delete_sco($scoid);
|
|
$client->request(['action' => 'principals-delete', 'principal-id' => $principal->principalid]);
|
|
$push(get_string('testmeeting', 'meetletacbfree'), true);
|
|
|
|
$service->logout();
|
|
} catch (Throwable $e) {
|
|
$push(get_string('error', 'meetletacbfree'), false, $e->getMessage());
|
|
}
|
|
|
|
echo html_writer::start_div('meetlet-conntest__grid');
|
|
foreach ($results as $row) {
|
|
$state = $row['ok'] ? 'ok' : 'fail';
|
|
$badge = html_writer::span(
|
|
$row['ok'] ? get_string('testok', 'meetletacbfree') : get_string('testfail', 'meetletacbfree'),
|
|
'meetlet-pill meetlet-pill--' . $state
|
|
);
|
|
echo html_writer::div(
|
|
html_writer::div(
|
|
html_writer::span('', 'meetlet-dot meetlet-dot--' . $state) .
|
|
html_writer::span(s($row['label']), 'meetlet-conntest__label') .
|
|
$badge,
|
|
'meetlet-conntest__rowtop'
|
|
) .
|
|
($row['detail'] !== '' ? html_writer::div(s($row['detail']), 'meetlet-conntest__detail') : ''),
|
|
'meetlet-conntest__card meetlet-conntest__card--' . $state
|
|
);
|
|
}
|
|
echo html_writer::end_div();
|
|
}
|
|
|
|
echo html_writer::div(
|
|
html_writer::link(
|
|
new moodle_url('/admin/settings.php', ['section' => 'modsettingmeetletacbfree']),
|
|
get_string('pluginadministration', 'meetletacbfree'),
|
|
['class' => 'meetlet-admin-testbtn meetlet-admin-testbtn--ghost']
|
|
),
|
|
'meetlet-conntest__footer'
|
|
);
|
|
echo html_writer::end_div();
|
|
echo $OUTPUT->footer();
|