Kumi
131f84f5ef
Introduced a new renderer class to manage the rendering of activity scripts and modals in the exp360 module. Renderer ensures modals are loaded only once, enhancing performance. Modified lib.php to utilize the new renderer for appending necessary scripts and modal content to the course module info.
101 lines
2.2 KiB
PHP
101 lines
2.2 KiB
PHP
<?php
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
function exp360_add_instance($exp360)
|
|
{
|
|
global $DB;
|
|
|
|
$exp360->timemodified = time();
|
|
$exp360->timecreated = time();
|
|
|
|
// Process standard intro fields.
|
|
$exp360->introformat = FORMAT_HTML;
|
|
$exp360->intro = '';
|
|
|
|
return $DB->insert_record('exp360', $exp360);
|
|
}
|
|
|
|
function exp360_update_instance($exp360)
|
|
{
|
|
global $DB;
|
|
|
|
$exp360->timemodified = time();
|
|
$exp360->id = $exp360->instance;
|
|
|
|
// Process standard intro fields.
|
|
$exp360->introformat = FORMAT_HTML;
|
|
$exp360->intro = '';
|
|
|
|
return $DB->update_record('exp360', $exp360);
|
|
}
|
|
|
|
function exp360_delete_instance($id)
|
|
{
|
|
global $DB;
|
|
|
|
if (!$exp360 = $DB->get_record('exp360', array('id' => $id))) {
|
|
return false;
|
|
}
|
|
|
|
$DB->delete_records('exp360', array('id' => $exp360->id));
|
|
|
|
return true;
|
|
}
|
|
|
|
function mod_exp360_cm_info_dynamic(cm_info $cm)
|
|
{
|
|
global $PAGE;
|
|
|
|
if ($cm->modname !== 'exp360') {
|
|
return;
|
|
}
|
|
|
|
$renderer = $PAGE->get_renderer('mod_exp360');
|
|
$modals = $renderer->render_modals();
|
|
$script = $renderer->render_activity($cm->id);
|
|
|
|
$cm->set_no_view_link();
|
|
$cm->set_content($script . $modals);
|
|
}
|
|
|
|
/**
|
|
* Event observer for mod_exp360.
|
|
*/
|
|
function mod_exp360_event_observer($event)
|
|
{
|
|
global $PAGE, $DB;
|
|
|
|
// Get the course ID from the event.
|
|
$courseid = $event->courseid;
|
|
|
|
// Check if the course contains any instances of the exp360 activity.
|
|
$sql = "SELECT COUNT(*)
|
|
FROM {course_modules} cm
|
|
JOIN {modules} m ON cm.module = m.id
|
|
JOIN {exp360} e ON cm.instance = e.id
|
|
WHERE cm.course = :courseid
|
|
AND m.name = 'exp360'";
|
|
$params = ['courseid' => $courseid];
|
|
$count = $DB->count_records_sql($sql, $params);
|
|
|
|
// If the course contains at least one instance of exp360, inject the JavaScript.
|
|
if ($count > 0) {
|
|
$PAGE->requires->js('/mod/exp360/global.js');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the list of event observers.
|
|
*
|
|
* @return array
|
|
*/
|
|
function mod_exp360_get_event_observers()
|
|
{
|
|
return [
|
|
[
|
|
'eventname' => '\core\event\course_viewed',
|
|
'callback' => 'mod_exp360_event_observer',
|
|
],
|
|
];
|
|
}
|