AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
declare(strict_types=1);
use mod_edusharing\EduSharingService;
use mod_edusharing\RestoreHelper;
use mod_edusharing\UtilityFunctions;
/**
* Class mod_edusharing_observer
*
* callback definitions for events.
* @package mod_edusharing
*/
class mod_edusharing_observer {
/**
* Function course_module_deleted
*
* @param \core\event\course_module_deleted $event
* @return void
*/
public static function course_module_deleted(\core\event\course_module_deleted $event) {
global $DB;
$data = $event->get_data();
$objectid = $data['objectid'];
// Delete es-activities in course-modules.
try {
$eduobjects = $DB->get_records('edusharing', ['module_id' => $objectid]);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$service = new EduSharingService();
foreach ($eduobjects as $object) {
try {
$service->delete_instance($object['id']);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
}
/**
* Function course_module_created
*
* @param \core\event\course_module_created $event
*/
public static function course_module_created(\core\event\course_module_created $event) {
global $DB;
$data = $event->get_data();
try {
$module = $DB->get_record($data['other']['modulename'], ['id' => $data['other']['instanceid']], '*', MUST_EXIST);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$text = $module->intro;
if ($text === null) {
return;
}
$utils = new UtilityFunctions();
$backtrace = debug_backtrace();
$isduplication = false;
foreach ($backtrace as $call) {
if (in_array($call['function'], ['cm_duplicate', 'duplicate_module'], true)) {
$isduplication = true;
}
}
if ($isduplication) {
$createdusages = [];
$matches = $utils->get_inline_object_matches($text);
$transaction = $DB->start_delegated_transaction();
try {
$service = new EduSharingService(null, null, $utils);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
try {
foreach ($matches as $match) {
$originalresourceid = $utils->get_resource_id_from_match($match);
$edusharing = $DB->get_record('edusharing', ['id' => $originalresourceid], '*', MUST_EXIST);
unset($edusharing->id);
unset($edusharing->usage_id);
$edusharing->module_id = $data['objectid'];
$newresourceid = $service->add_instance($edusharing);
$newresourceid === false && throw new Exception('ES add instance failed');
if (isset($edusharing->usage_id)) {
$currentusage = new stdClass();
$currentusage->nodeId = $utils->get_object_id_from_url($edusharing->object_url);
$currentusage->usageId = $edusharing->usage_id;
$createdusages[] = $currentusage;
}
$text = str_replace("resourceId=$originalresourceid", "resourceId=$newresourceid", $text);
}
$DB->set_field($data['other']['modulename'], 'intro', $text, ['id' => $data['other']['instanceid']]);
$transaction->allow_commit();
} catch (Exception $exception) {
try {
foreach ($createdusages as $usagedata) {
$service->delete_usage($usagedata);
}
$DB->rollback_delegated_transaction($transaction, $exception);
} catch (Throwable $cleanupexception) {
debugging($cleanupexception);
}
}
return;
}
try {
$coursemodule = $DB->get_record($data['objecttable'], ['id' => $data['objectid']], '*', MUST_EXIST);
$utils->set_moodle_ids_in_edusharing_entries($text, (int)$coursemodule->section, (int)$data['objectid']);
} catch (Exception $exception) {
debugging($exception);
}
}
/**
* Function course_module_updated
*
* @param \core\event\course_module_updated $event
* @return void
*/
public static function course_module_updated(\core\event\course_module_updated $event) {
global $DB;
$data = $event->get_data();
try {
$module = $DB->get_record($data['other']['modulename'], ['id' => $data['other']['instanceid']], '*', MUST_EXIST);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$text = $module->intro;
if ($text === null) {
return;
}
$utils = new UtilityFunctions();
try {
$coursemodule = $DB->get_record($data['objecttable'], ['id' => $data['objectid']], '*', MUST_EXIST);
$utils->set_moodle_ids_in_edusharing_entries($text, (int)$coursemodule->section, (int)$data['objectid']);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
/**
* Function course_section_created
*
* @param \core\event\course_section_created $event
* @return void
*/
public static function course_section_created(\core\event\course_section_created $event) {
global $DB;
$data = $event->get_data();
try {
$module = $DB->get_record('course_sections', ['id' => $data['objectid']], '*', MUST_EXIST);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$text = $module->summary;
if ($text === null) {
return;
}
$utils = new UtilityFunctions();
try {
$utils->set_moodle_ids_in_edusharing_entries($text, (int)$data['objectid']);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
/**
* Function course_section_updated
*
* @param \core\event\course_section_updated $event
* @return void
*/
public static function course_section_updated(\core\event\course_section_updated $event) {
global $DB;
$data = $event->get_data();
try {
$section = $DB->get_record('course_sections', ['id' => $data['objectid']], '*', MUST_EXIST);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$text = $section->summary;
if ($text === null) {
return;
}
$utils = new UtilityFunctions();
try {
$utils->set_moodle_ids_in_edusharing_entries($text, (int)$data['objectid']);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
/**
* Function course_section_deleted
*
* @param \core\event\course_section_deleted $event
* @return void
*/
public static function course_section_deleted(\core\event\course_section_deleted $event) {
global $DB;
$data = $event->get_data();
$objectid = $data['objectid'];
try {
$eduobjects = $DB->get_records('edusharing', ['section_id' => $objectid]);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$service = new EduSharingService();
foreach ($eduobjects as $object) {
try {
$service->delete_instance($object['id']);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
}
/**
* Function course_deleted
*
* @param \core\event\course_deleted $event
*/
public static function course_deleted(\core\event\course_deleted $event) {
global $DB;
$data = $event->get_data();
$objectid = $data['objectid'];
try {
$eduobjects = $DB->get_records('edusharing', ['course' => $objectid]);
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
$service = new EduSharingService();
foreach ($eduobjects as $object) {
try {
$service->delete_instance($object->id);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
}
/**
* Function course_restored
*
* @param \core\event\course_restored $event
*/
public static function course_restored(\core\event\course_restored $event) {
$eventdata = $event->get_data();
$courseid = $eventdata['courseid'];
try {
$helper = new RestoreHelper(new EduSharingService());
$helper->convert_inline_options($courseid);
} catch (Exception $exception) {
debugging($exception->getMessage());
}
}
/**
* Function user_loggedin
*
* @param \core\event\user_loggedin $event
*/
public static function user_loggedin(\core\event\user_loggedin $event) {
global $SESSION, $USER;
$SESSION->edusharing_sso = [];
$utils = new UtilityFunctions();
try {
if ($utils->get_config_entry('obfuscate_auth_param') !== '1') {
return;
}
$authparam = $utils->get_config_entry('EDU_AUTH_PARAM_NAME_USERID');
$salt = $utils->get_config_entry('SALT');
if ($salt === false) {
$salt = uniqid();
$utils->set_config_entry('SALT', $salt);
}
$SESSION->edusharing_sso[$authparam] = hash('sha256', $USER->username . $salt)
. '@' . $utils->get_config_entry('application_appid');
} catch (Exception $exception) {
debugging($exception->getMessage());
return;
}
}
}