* @param array $courses This depends on an accurate $course->modinfo
* @return array of instances
*/
-function get_all_instances_in_courses($modulename,$courses) {
+function get_all_instances_in_courses($modulename, $courses, $userid=NULL, $includeinvisible=false) {
global $CFG;
if (empty($courses) || !is_array($courses) || count($courses) == 0) {
return array();
$outputarray = array();
foreach ($courses as $course) {
- // Hide non-visible instances from students
- if (has_capability('moodle/course:viewhiddencourses', get_context_instance(CONTEXT_COURSE, $course->id))) {
+ if ($includeinvisible) {
+ $invisible = -1;
+ } else if (has_capability('moodle/course:viewhiddencourses', get_context_instance(CONTEXT_COURSE, $course->id), $userid)) {
+ // Usually hide non-visible instances from students
$invisible = -1;
} else {
$invisible = 0;
* @param string $modulename The name of the module to get instances for
* @param object(course) $course This depends on an accurate $course->modinfo
*/
-function get_all_instances_in_course($modulename, $course) {
+function get_all_instances_in_course($modulename, $course, $userid=NULL, $includeinvisible=false) {
global $CFG;
return array();
}
- // Hide non-visible instances from students
- if (has_capability('moodle/course:viewhiddencourses', get_context_instance(CONTEXT_COURSE, $course->id))) {
+ if ($includeinvisible) {
+ $invisible = -1;
+ } else if (has_capability('moodle/course:viewhiddencourses', get_context_instance(CONTEXT_COURSE, $course->id), $userid)) {
+ // Usually hide non-visible instances from students
$invisible = -1;
} else {
$invisible = 0;
foreach ($courses as $course) {
if ($course->id == SITEID) {
// temporary workaround for bug MDL-7114
- if ($forums = get_all_instances_in_course('forum', $course)) {
+ if ($forums = get_all_instances_in_course('forum', $course, $userid, false)) {
foreach ($forums as $forum) {
if ($forum->forcesubscribe != FORUM_INITIALSUBSCRIBE) {
continue;
case CONTEXT_COURSE: // For a whole course
if ($course = get_record('course', 'id', $context->instanceid)) {
- if ($forums = get_all_instances_in_course('forum', $course)) {
+ if ($forums = get_all_instances_in_course('forum', $course, $userid, false)) {
foreach ($forums as $forum) {
if ($forum->forcesubscribe != FORUM_INITIALSUBSCRIBE) {
continue;
foreach ($courses as $course) {
if ($course->id == SITEID) {
if ($course = get_records('course', 'id', $context->instanceid)) {
- if ($forums = get_all_instances_in_course('forum', $course)) {
+ if ($forums = get_all_instances_in_course('forum', $course, $userid, true)) {
foreach ($forums as $forum) {
- forum_unsubscribe($userid, $forum->id);
+ if ($modcontext = get_context_instance(CONTEXT_MODULE, $forum->coursemodule)) {
+ if (!has_capability('mod/forum:viewdiscussion', $modcontext, $userid)) {
+ forum_unsubscribe($userid, $forum->id);
+ }
+ }
}
}
}
break;
case CONTEXT_COURSE: // For a whole course
- if ($course = get_records('course', 'id', $context->instanceid)) {
- if ($forums = get_all_instances_in_course('forum', $course)) {
+ if ($course = get_record('course', 'id', $context->instanceid)) {
+ if ($forums = get_all_instances_in_course('forum', $course, $userid, true)) {
foreach ($forums as $forum) {
- forum_unsubscribe($userid, $forum->id);
+ if ($modcontext = get_context_instance(CONTEXT_MODULE, $forum->coursemodule)) {
+ if (!has_capability('mod/forum:viewdiscussion', $modcontext, $userid)) {
+ forum_unsubscribe($userid, $forum->id);
+ }
+ }
}
}
}
case CONTEXT_MODULE: // Just one forum
if ($cm = get_coursemodule_from_id('forum', $context->instanceid)) {
if ($forum = get_record('forum', 'id', $cm->instance)) {
- forum_unsubscribe($userid, $forum->id);
+ if (!has_capability('mod/forum:viewdiscussion', $context, $userid)) {
+ forum_unsubscribe($userid, $forum->id);
+ }
}
}
break;