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/>.
namespace tool_brickfield;
use core\event\base;
use stdClass;
/**
* Observer class containing methods monitoring various events.
*
* @package tool_brickfield
* @copyright 2020 Brickfield Education Labs https://www.brickfield.ie
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
*/
class eventobservers {
/**
* For course events to be handled, the accessibility tool needs to be enabled, and if a courseid is specified, the course
* has to have been added to the scheduler.
* @param int $courseid
* @return bool
* @throws \dml_exception
*/
private static function course_event_should_be_handled(int $courseid): bool {
return accessibility::is_accessibility_enabled() && analysis::is_enabled() &&
(empty($courseid) || (isset($courseid) && scheduler::is_course_in_schedule($courseid)));
}
/**
* Content area altered event observer.
* @param base $event The area altered event.
* @throws \ReflectionException
* @throws \dml_exception
*/
private static function area_altered(base $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
manager::find_new_or_updated_areas($event);
}
}
/**
* Course event observers.
* These observer monitors course created / restored / updated events,
* then its HTML content is processed with accessibility checking.
*/
/**
* Course created event observer.
* @param \core\event\course_created $event The course created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_created(\core\event\course_created $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
// Need to trigger rerun check for automatically created forum...
$data = new stdClass();
$data->courseid = $event->courseid;
$data->item = 'coursererun';
static::observer_insert($data);
static::course_altered($event);
}
}
/**
* Course deleted event observer.
* @param \core\event\course_deleted $event The course deleted event.
* @throws \dml_exception
*/
public static function course_deleted(\core\event\course_deleted $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->contextid = -1;
$data->item = 'core_course';
static::observer_insert($data);
}
}
/**
* Course restored event observer.
* @param \core\event\course_restored $event The course restored event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_restored(\core\event\course_restored $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->item = 'coursererun';
static::observer_insert($data);
static::course_altered($event);
}
}
/**
* Course update event observer.
* @param \core\event\course_updated $event The course updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_updated(\core\event\course_updated $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::course_altered($event);
}
}
/**
* Course update event observer. This is called on both course_created and course_updated, so use the base class as a type hint.
* @param base $event The course updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_altered(base $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
// Need to rerun caching of allowed courseid, from category white/blacklist.
$data = new stdClass();
$data->courseid = $data->contextid = $event->courseid;
$data->contextid = -1;
$data->item = 'category';
static::observer_insert($data);
static::area_altered($event);
}
}
/**
* Course section created event observer.
* @param \core\event\course_section_created $event The course section created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_section_created(\core\event\course_section_created $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* Course section deleted event observer.
* @param \core\event\course_section_deleted $event The course section deleted event.
* @throws \dml_exception
*/
public static function course_section_deleted(\core\event\course_section_deleted $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->contextid = -1;
$data->innercontextid = $event->objectid;
$data->item = 'course_sections';
static::observer_insert($data);
}
}
/**
* Course section update event observer.
* @param \core\event\course_section_updated $event The course section updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_section_updated(\core\event\course_section_updated $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* Course module event observers.
* These observer monitors course module created / restored / updated events,
* then its HTML content is processed with accessibility checking.
*/
/**
* Course module created event observer.
* @param \core\event\course_module_created $event The course module created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_module_created(\core\event\course_module_created $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* Course module deleted event observer.
* @param \core\event\course_module_deleted $event The course module deleted event.
* @throws \dml_exception
*/
public static function course_module_deleted(\core\event\course_module_deleted $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->contextid = -1;
$data->innercontextid = $event->other['instanceid'];
$data->item = 'mod_' . $event->other['modulename'];
static::observer_insert($data);
}
}
/**
* Course module restored event observer.
* @param \core\event\course_module_restored $event The course module restored event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_module_restored(\core\event\course_module_restored $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* Course module updated event observer.
* @param \core\event\course_module_updated $event The course module updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_module_updated(\core\event\course_module_updated $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* course_category created event observer.
* @param \core\event\course_category_created $event The course_category created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_category_created(\core\event\course_category_created $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* course_category deleted event observer.
* @param \core\event\course_category_deleted $event The course_category deleted event.
* @throws \dml_exception
*/
public static function course_category_deleted(\core\event\course_category_deleted $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->contextid = $data->courseid = -1;
$data->innercontextid = $event->objectid;
$data->item = 'course_categories';
static::observer_insert($data);
}
}
/**
* course_category update event observer.
* @param \core\event\course_category_updated $event The course_category updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function course_category_updated(\core\event\course_category_updated $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* mod_lesson_page created event observer.
* @param \mod_lesson\event\page_created $event The mod_lesson page created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function mod_lesson_page_created(\mod_lesson\event\page_created $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* mod_lesson_page deleted event observer.
* @param \mod_lesson\event\page_deleted $event The mod_lesson page deleted event.
* @throws \dml_exception
*/
public static function mod_lesson_page_deleted(\mod_lesson\event\page_deleted $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->contextid = -1;
$data->innercontextid = $event->objectid;
$data->item = 'lesson_pages';
static::observer_insert($data);
}
}
/**
* mod_lesson_page updated event observer.
* @param \mod_lesson\event\page_updated $event The mod_lesson page updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function mod_lesson_page_updated(\mod_lesson\event\page_updated $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
static::area_altered($event);
}
}
/**
* core_question created observer
* @param \core\event\question_created $event The core_question created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function core_question_created(\core\event\question_created $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
manager::find_new_or_updated_areas($event);
}
}
/**
* core_question updated observer
* @param \core\event\question_updated $event The core_question created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function core_question_updated(\core\event\question_updated $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
manager::find_new_or_updated_areas($event);
}
}
/**
* core_question deleted observer
* @param \core\event\question_deleted $event The core_question deleted event.
* @throws \dml_exception
*/
public static function core_question_deleted(\core\event\question_deleted $event) {
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($event->courseid)) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->contextid = -1;
$data->innercontextid = $event->objectid;
$data->item = $event->objecttable;
static::observer_insert($data);
}
}
/**
* Book chapter created event observer.
* @param \mod_book\event\chapter_created $event The book chapter created event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function book_chapter_created(\mod_book\event\chapter_created $event) {
// If this feature has been disabled, do nothing.
if (accessibility::is_accessibility_enabled()) {
static::area_altered($event);
}
}
/**
* Book chapter deleted event observer.
* @param \mod_book\event\chapter_deleted $event The book chapter deleted event.
* @throws \dml_exception
*/
public static function book_chapter_deleted(\mod_book\event\chapter_deleted $event) {
// If this feature has been disabled, do nothing.
if (accessibility::is_accessibility_enabled()) {
$data = new stdClass();
$data->courseid = $event->courseid;
$data->contextid = -1;
$data->innercontextid = $event->objectid;
$data->item = 'book_chapters';
static::observer_insert($data);
}
}
/**
* Book chapter update event observer.
* @param \mod_book\event\chapter_updated $event The book chapter updated event.
* @throws \ReflectionException
* @throws \dml_exception
*/
public static function book_chapter_updated(\mod_book\event\chapter_updated $event) {
// If this feature has been disabled, do nothing.
if (accessibility::is_accessibility_enabled()) {
static::area_altered($event);
}
}
/**
* Add an observer record if appropriate.
* @param stdClass $data
* @throws \dml_exception
*/
private static function observer_insert(stdClass $data) {
global $DB;
// Handle if this feature is enabled and this course is in the schedule.
if (static::course_event_should_be_handled($data->courseid)) {
$data->timecreated = time();
$data->timecompleted = 0;
$DB->insert_record(manager::DB_PROCESS, $data);
}
}
}