Skip to content

Commit

Permalink
MDL-83542 core_completion: Add hooks for cm completion
Browse files Browse the repository at this point in the history
* Add hooks for events that lead to session_cache_reset
  • Loading branch information
laurentdavid committed Nov 11, 2024
1 parent b3da58e commit 7264dee
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 6 deletions.
7 changes: 7 additions & 0 deletions .upgradenotes/MDL-83542-2024111110390227.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
issueNumber: MDL-83542
notes:
core_completion:
- message: >-
Add hook after_cm_completion_updated triggered when an activity
completion is updated.
type: improved
44 changes: 44 additions & 0 deletions completion/classes/hook/after_cm_cm_completion_updated.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?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 core_completion\hook;

/**
* Hook after course module creation.
*
* This hook will be dispatched after a course module is created and events are fired.
*
* @package core_completion
* @copyright 2024 Laurent David <laurent.david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
#[\core\attribute\label('Allows plugins or features to perform actions after completion is updated.')]
#[\core\attribute\tags('cm_completion')]
class after_cm_completion_updated {
/**
* Constructor for the hook
*
* @param \cm_info $cm The course module info
* @param \stdClass $data completion data
*/
public function __construct(
/** @var \cm_info The course module info */
public readonly \cm_info $cm,
/** @var \stdClass completion data */
public readonly \stdClass $data
) {
}
}
13 changes: 7 additions & 6 deletions lib/completionlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -623,12 +623,6 @@ public function update_state($cm, $possibleresult=COMPLETION_UNKNOWN, $userid=0,
return;
}

// The activity completion alters the course state cache for this particular user.
$course = get_course($cm->course);
if ($course) {
course_format::session_cache_reset($course);
}

// For auto tracking, if the status is overridden to 'COMPLETION_COMPLETE', then disallow further changes,
// unless processing another override.
// Basically, we want those activities which have been overridden to COMPLETE to hold state, and those which have been
Expand Down Expand Up @@ -1309,6 +1303,13 @@ public function internal_set_data($cm, $data, $isbulkupdate = false) {
));
$event->add_record_snapshot('course_modules_completion', $data);
$event->trigger();

// Dispatch the hook for post course module creation.
$hook = new \core_completion\hook\after_cm_completion_updated(
cm: $cm,
data: $data,
);
\core\di::get(\core\hook\manager::class)->dispatch($hook);
}

/**
Expand Down
4 changes: 4 additions & 0 deletions lib/db/hooks.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@
'hook' => core\hook\access\after_role_switched::class,
'callback' => \core_courseformat\hook_listener::class . '::after_role_switched',
],
[
'hook' => \core_completion\hook\after_cm_completion_updated::class,
'callback' => \core_courseformat\hook_listener::class . '::after_cm_completion_updated',
],
[
'hook' => \core_course\hook\after_course_created::class,
'callback' => \core_communication\hook_listener::class . '::create_course_communication',
Expand Down

0 comments on commit 7264dee

Please sign in to comment.