/** * Remove post tracking for a user in a context * * @global object * @global object * @uses CONTEXT_SYSTEM * @uses CONTEXT_COURSECAT * @uses CONTEXT_COURSE * @uses CONTEXT_MODULE * @param int $userid * @param object $context * @return bool */ function forum_remove_user_tracking($userid, $context) { global $CFG, $DB; if (empty($context->contextlevel)) { return false; } switch ($context->contextlevel) { case CONTEXT_SYSTEM: // For the whole site // find all courses in which this user has tracking info $allcourses = array(); if ($courses = $DB->get_records_sql("SELECT c.id FROM {course} c, {forum_read} fr, {forum} f WHERE c.id = f.course AND f.id = fr.forumid AND fr.userid = ? GROUP BY c.id", array($userid))) { $allcourses = $allcourses + $courses; } if ($courses = $DB->get_records_sql("SELECT c.id FROM {course} c, {forum_track_prefs} ft, {forum} f WHERE c.id = f.course AND f.id = ft.forumid AND ft.userid = ?", array($userid))) { $allcourses = $allcourses + $courses; } foreach ($allcourses as $course) { $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_remove_user_tracking($userid, $subcontext); } break; case CONTEXT_COURSECAT: // For a whole category if ($courses = $DB->get_records('course', array('category' => $context->instanceid), '', 'id')) { foreach ($courses as $course) { $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_remove_user_tracking($userid, $subcontext); } } if ($categories = $DB->get_records('course_categories', array('parent' => $context->instanceid), '', 'id')) { foreach ($categories as $category) { $subcontext = get_context_instance(CONTEXT_COURSECAT, $category->id); forum_remove_user_tracking($userid, $subcontext); } } break; case CONTEXT_COURSE: // For a whole course if (!is_enrolled($context, $userid)) { if ($course = $DB->get_record('course', array('id' => $context->instanceid), 'id')) { // find all forums in which this user has reading tracked if ($forums = $DB->get_records_sql("SELECT DISTINCT f.id, cm.id as coursemodule FROM {forum} f, {modules} m, {course_modules} cm, {forum_read} fr WHERE fr.userid = ? AND f.course = ? AND fr.forumid = f.id AND cm.instance = f.id AND cm.module = m.id AND m.name = 'forum'", array($userid, $context->instanceid))) { foreach ($forums as $forum) { if ($modcontext = get_context_instance(CONTEXT_MODULE, $forum->coursemodule)) { if (!has_capability('mod/forum:viewdiscussion', $modcontext, $userid)) { forum_tp_delete_read_records($userid, -1, -1, $forum->id); } } } } // find all forums in which this user has a disabled tracking if ($forums = $DB->get_records_sql("SELECT f.id, cm.id as coursemodule FROM {forum} f, {modules} m, {course_modules} cm, {forum_track_prefs} ft WHERE ft.userid = ? AND f.course = ? AND ft.forumid = f.id AND cm.instance = f.id AND cm.module = m.id AND m.name = 'forum'", array($userid, $context->instanceid))) { foreach ($forums as $forum) { if ($modcontext = get_context_instance(CONTEXT_MODULE, $forum->coursemodule)) { if (!has_capability('mod/forum:viewdiscussion', $modcontext, $userid)) { $DB->delete_records('forum_track_prefs', array('userid' => $userid, 'forumid' => $forum->id)); } } } } } } break; case CONTEXT_MODULE: // Just one forum if (!is_enrolled($context, $userid)) { if ($cm = get_coursemodule_from_id('forum', $context->instanceid)) { if ($forum = $DB->get_record('forum', array('id' => $cm->instance))) { if (!has_capability('mod/forum:viewdiscussion', $context, $userid)) { $DB->delete_records('forum_track_prefs', array('userid' => $userid, 'forumid' => $forum->id)); forum_tp_delete_read_records($userid, -1, -1, $forum->id); } } } } break; } return true; }
/** * Remove post tracking for a user in a context */ function forum_remove_user_tracking($userid, $context) { global $CFG; if (empty($context->contextlevel)) { return false; } switch ($context->contextlevel) { case CONTEXT_SYSTEM: // For the whole site // find all courses in which this user has tracking info $allcourses = array(); if ($courses = get_records_sql("SELECT c.id\n FROM {$CFG->prefix}course c,\n {$CFG->prefix}forum_read fr,\n {$CFG->prefix}forum f\n WHERE c.id = f.course AND f.id = fr.forumid AND fr.userid = {$userid}\n GROUP BY c.id")) { $allcourses = $allcourses + $courses; } if ($courses = get_records_sql("SELECT c.id\n FROM {$CFG->prefix}course c,\n {$CFG->prefix}forum_track_prefs ft,\n {$CFG->prefix}forum f\n WHERE c.id = f.course AND f.id = ft.forumid AND ft.userid = {$userid}")) { $allcourses = $allcourses + $courses; } foreach ($allcourses as $course) { $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_remove_user_tracking($userid, $subcontext); } break; case CONTEXT_COURSECAT: // For a whole category if ($courses = get_records('course', 'category', $context->instanceid, '', 'id')) { foreach ($courses as $course) { $subcontext = get_context_instance(CONTEXT_COURSE, $course->id); forum_remove_user_tracking($userid, $subcontext); } } if ($categories = get_records('course_categories', 'parent', $context->instanceid, '', 'id')) { foreach ($categories as $category) { $subcontext = get_context_instance(CONTEXT_COURSECAT, $category->id); forum_remove_user_tracking($userid, $subcontext); } } break; case CONTEXT_COURSE: // For a whole course if ($course = get_record('course', 'id', $context->instanceid, '', '', '', '', 'id')) { // find all forums in which this user has reading tracked if ($forums = get_records_sql("SELECT f.id, cm.id as coursemodule\n FROM {$CFG->prefix}forum f,\n {$CFG->prefix}modules m,\n {$CFG->prefix}course_modules cm,\n {$CFG->prefix}forum_read fr\n WHERE fr.userid = {$userid} AND f.course = {$context->instanceid}\n AND fr.forumid = f.id AND cm.instance = f.id\n AND cm.module = m.id AND m.name = 'forum'")) { foreach ($forums as $forum) { if ($modcontext = get_context_instance(CONTEXT_MODULE, $forum->coursemodule)) { if (!has_capability('mod/forum:viewdiscussion', $modcontext, $userid)) { forum_tp_delete_read_records($userid, -1, -1, $forum->id); } } } } // find all forums in which this user has a disabled tracking if ($forums = get_records_sql("SELECT f.id, cm.id as coursemodule\n FROM {$CFG->prefix}forum f,\n {$CFG->prefix}modules m,\n {$CFG->prefix}course_modules cm,\n {$CFG->prefix}forum_track_prefs ft\n WHERE ft.userid = {$userid} AND f.course = {$context->instanceid}\n AND ft.forumid = f.id AND cm.instance = f.id\n AND cm.module = m.id AND m.name = 'forum'")) { foreach ($forums as $forum) { if ($modcontext = get_context_instance(CONTEXT_MODULE, $forum->coursemodule)) { if (!has_capability('mod/forum:viewdiscussion', $modcontext, $userid)) { delete_records('forum_track_prefs', 'userid', $userid, 'forumid', $forum->id); } } } } } break; case CONTEXT_MODULE: // Just one forum if ($cm = get_coursemodule_from_id('forum', $context->instanceid)) { if ($forum = get_record('forum', 'id', $cm->instance)) { if (!has_capability('mod/forum:viewdiscussion', $context, $userid)) { delete_records('forum_track_prefs', 'userid', $userid, 'forumid', $forum->id); forum_tp_delete_read_records($userid, -1, -1, $forum->id); } } } break; } return true; }