Beispiel #1
0
/**
 * 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;
}
Beispiel #2
0
/**
 * 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;
}