troodle-expcontent/lib.php
Kumi 8be9310c36
fix: prevent null PAGE error in path reflection
Added a null check for the $PAGE variable before attempting to access its protected properties via reflection. This ensures the function safely bypasses a known bug related to path handling without encountering a null reference error. Prevents potential errors during dynamic module info processing.
2024-11-14 16:44:09 +01:00

93 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;
}
if ($PAGE) {
// Create a reflection of $PATH so we can access protected properties
$reflection = new ReflectionClass($PAGE);
$urlProperty = $reflection->getProperty('_url');
$urlProperty->setAccessible(true);
// Get the value of _url property, which is a moodle_url object
$urlObject = $urlProperty->getValue($PAGE);
// Now access the path property within the moodle_url object
$urlReflection = new ReflectionClass($urlObject);
$pathProperty = $urlReflection->getProperty('path');
$pathProperty->setAccessible(true);
// Get the value of the path property
$pathValue = $pathProperty->getValue($urlObject);
// All of this only to bypass a little bug
if ($pathValue == '/course/modedit.php') {
return;
}
}
$renderer = $PAGE->get_renderer('mod_exp360');
$modals = $renderer->render_modals();
$script = $renderer->render_activity($cm->id, $cm->get_formatted_name());
$cm->set_no_view_link();
$cm->set_content($modals . $script);
}
function mod_exp360_supports($feature)
{
switch ($feature) {
case FEATURE_COMPLETION_TRACKS_VIEWS:
return true;
default:
return null;
}
}