From 0f161e1fee279c6771160170194eb75ec855bcd2 Mon Sep 17 00:00:00 2001 From: moodler Date: Wed, 13 Sep 2006 08:07:14 +0000 Subject: [PATCH] role_assign() and role_unassign() now call these hooks in each module: xxx_role_assign() xxx_role_unassign() so that modules can do stuff they might need to do (eg subscriptions etc) --- lib/accesslib.php | 103 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 97 insertions(+), 6 deletions(-) diff --git a/lib/accesslib.php b/lib/accesslib.php index 31f24fe903..fe015e2550 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -1300,9 +1300,19 @@ function role_assign($roleid, $userid, $groupid, $contextid, $timestart=0, $time load_user_capability(); } - /// Make sure the user is subscribed to any appropriate forums in this context - require_once($CFG->dirroot.'/mod/forum/lib.php'); - forum_add_user_default_subscriptions($userid, $context); + /// Ask all the modules if anything needs to be done for this user + if ($mods = get_list_of_plugins('mod')) { + foreach ($mods as $mod) { + include_once($CFG->dirroot.'/mod/'.$mod.'/lib.php'); + $functionname = $mod.'_role_assign'; + if (function_exists($functionname)) { + $functionname($userid, $context); + } + } + } + + /// Make sure they have an entry in user_lastaccess for courses they can access + // role_add_lastaccess_entries($userid, $context); } return $success; @@ -1337,9 +1347,24 @@ function role_unassign($roleid=0, $userid=0, $groupid=0, $contextid=0) { load_user_capability(); } - /// Make sure the user is unsubscribed from any appropriate forums in this context - require_once($CFG->dirroot.'/mod/forum/lib.php'); - forum_remove_user_subscriptions($userid, $context); + if ($contextid) { + if ($context = get_record('context', 'id', $contextid)) { + + /// Ask all the modules if anything needs to be done for this user + if ($mods = get_list_of_plugins('mod')) { + foreach ($mods as $mod) { + include_once($CFG->dirroot.'/mod/'.$mod.'/lib.php'); + $functionname = $mod.'_role_unassign'; + if (function_exists($functionname)) { + $functionname($userid, $context); + } + } + } + + /// Remove entries from user_lastaccess for courses they can no longer access + //role_add_lastaccess_entries($userid, $context); + } + } return true; } @@ -1348,6 +1373,72 @@ function role_unassign($roleid=0, $userid=0, $groupid=0, $contextid=0) { return true; } +/** + * Add last access times to user_lastaccess as required + * @param $userid + * @param $context + * @return boolean - success or failure + */ +function role_add_lastaccess_entries($userid, $context) { + + global $USER, $CFG; + + if (empty($context->aggregatelevel)) { + return false; + } + + $lastaccess = new object; // Reusable object below + $lastaccess->userid = $userid; + $lastaccess->timeaccess = 0; + + switch ($context->aggregatelevel) { + + case CONTEXT_SYSTEM: // For the whole site + if ($courses = get_record('course')) { + foreach ($courses as $course) { + $lastaccess->courseid = $course->id; + role_set_lastaccess($lastaccess); + } + } + break; + + case CONTEXT_CATEGORY: // For a whole category + if ($courses = get_record('course', 'category', $context->instanceid)) { + foreach ($courses as $course) { + $lastaccess->courseid = $course->id; + role_set_lastaccess($lastaccess); + } + } + if ($categories = get_record('course_categories', 'parent', $context->instanceid)) { + foreach ($categories as $category) { + $subcontext = get_context_instance(CONTEXT_CATEGORY, $category->id); + role_add_lastaccess_entries($userid, $subcontext); + } + } + break; + + + case CONTEXT_COURSE: // For a whole course + if ($course = get_record('course', 'id', $context->instanceid)) { + $lastaccess->courseid = $course->id; + role_set_lastaccess($lastaccess); + } + break; + } +} + +/** + * Delete last access times from user_lastaccess as required + * @param $userid + * @param $context + * @return boolean - success or failure + */ +function role_remove_lastaccess_entries($userid, $context) { + + global $USER, $CFG; + +} + /** * Loads the capability definitions for the component (from file). If no -- 2.39.5