/** * @global object * @global object * @param object $forum * @param object $discussion * @param object $post * @param object $user * @param object $cm * @return bool */ function forum_user_can_see_post($forum, $discussion, $post, $user=NULL, $cm=NULL) { global $CFG, $USER, $DB; // Context used throughout function. $modcontext = context_module::instance($cm->id); // retrieve objects (yuk) if (is_numeric($forum)) { debugging('missing full forum', DEBUG_DEVELOPER); if (!$forum = $DB->get_record('forum',array('id'=>$forum))) { return false; } } if (is_numeric($discussion)) { debugging('missing full discussion', DEBUG_DEVELOPER); if (!$discussion = $DB->get_record('forum_discussions',array('id'=>$discussion))) { return false; } } if (is_numeric($post)) { debugging('missing full post', DEBUG_DEVELOPER); if (!$post = $DB->get_record('forum_posts',array('id'=>$post))) { return false; } } if (!isset($post->id) && isset($post->parent)) { $post->id = $post->parent; } if (!$cm) { debugging('missing cm', DEBUG_DEVELOPER); if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { print_error('invalidcoursemodule'); } } if (empty($user) || empty($user->id)) { $user = $USER; } $canviewdiscussion = !empty($cm->cache->caps['mod/forum:viewdiscussion']) || has_capability('mod/forum:viewdiscussion', $modcontext, $user->id); if (!$canviewdiscussion && !has_all_capabilities(array('moodle/user:viewdetails', 'moodle/user:readuserposts'), context_user::instance($post->userid))) { return false; } if (isset($cm->uservisible)) { if (!$cm->uservisible) { return false; } } else { if (!coursemodule_visible_for_user($cm, $user->id)) { return false; } } if (!forum_user_can_see_timed_discussion($discussion, $user, $modcontext)) { return false; } if (!forum_user_can_see_group_discussion($discussion, $cm, $modcontext)) { return false; } if ($forum->type == 'qanda') { $firstpost = forum_get_firstpost_from_discussion($discussion->id); $userfirstpost = forum_get_user_posted_time($discussion->id, $user->id); return (($userfirstpost !== false && (time() - $userfirstpost >= $CFG->maxeditingtime)) || $firstpost->id == $post->id || $post->userid == $user->id || $firstpost->userid == $user->id || has_capability('mod/forum:viewqandawithoutposting', $modcontext, $user->id)); } return true; }
/** * @global object * @global object * @param object $forum * @param object $discussion * @param object $post * @param object $user * @param object $cm * @return bool */ function forum_user_can_see_post($forum, $discussion, $post, $user = NULL, $cm = NULL) { global $CFG, $USER, $DB; // retrieve objects (yuk) if (is_numeric($forum)) { debugging('missing full forum', DEBUG_DEVELOPER); if (!($forum = $DB->get_record('forum', array('id' => $forum)))) { return false; } } if (is_numeric($discussion)) { debugging('missing full discussion', DEBUG_DEVELOPER); if (!($discussion = $DB->get_record('forum_discussions', array('id' => $discussion)))) { return false; } } if (is_numeric($post)) { debugging('missing full post', DEBUG_DEVELOPER); if (!($post = $DB->get_record('forum_posts', array('id' => $post)))) { return false; } } if (!isset($post->id) && isset($post->parent)) { $post->id = $post->parent; } if (!$cm) { debugging('missing cm', DEBUG_DEVELOPER); if (!($cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course))) { print_error('invalidcoursemodule'); } } if (empty($user) || empty($user->id)) { $user = $USER; } if (isset($cm->cache->caps['mod/forum:viewdiscussion'])) { if (!$cm->cache->caps['mod/forum:viewdiscussion']) { return false; } } else { $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); if (!has_capability('mod/forum:viewdiscussion', $modcontext, $user->id)) { return false; } } if (isset($cm->uservisible)) { if (!$cm->uservisible) { return false; } } else { if (!coursemodule_visible_for_user($cm, $user->id)) { return false; } } if ($forum->type == 'qanda') { $firstpost = forum_get_firstpost_from_discussion($discussion->id); $modcontext = get_context_instance(CONTEXT_MODULE, $cm->id); $userfirstpost = forum_get_user_posted_time($discussion->id, $user->id); return $userfirstpost !== false && time() - $userfirstpost >= $CFG->maxeditingtime || $firstpost->id == $post->id || $post->userid == $user->id || $firstpost->userid == $user->id || has_capability('mod/forum:viewqandawithoutposting', $modcontext, $user->id, false); } return true; }