From: skodak Date: Tue, 26 Feb 2008 21:36:48 +0000 (+0000) Subject: MDL-10990 5) eliminated reply related cap queries for guests and not-logged-in users... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=525041df91c44642eb12c64830078447cc7585f4;p=moodle.git MDL-10990 5) eliminated reply related cap queries for guests and not-logged-in users because they can not post anyway, removed reply link for guests from news posts, they did not see Add discussion link already; merged from MOODLE_19_STABLE --- diff --git a/mod/forum/discuss.php b/mod/forum/discuss.php index 576324f2a5..558dfa6459 100644 --- a/mod/forum/discuss.php +++ b/mod/forum/discuss.php @@ -153,7 +153,11 @@ } $canreply = false; - if (has_capability($capname, $modcontext)) { + if (isguestuser() or !isloggedin()) { + // allow guests and not-logged-in to see the link - they are prompted to log in after clicking the link + $canreply = ($forum->type != 'news'); // no reply in news forums + + } else if (has_capability($capname, $modcontext)) { $groupmode = groups_get_activity_groupmode($cm); if ($groupmode) { if (has_capability('moodle/site:accessallgroups', $modcontext)) { @@ -181,12 +185,6 @@ } else { $canreply = true; } - } else { // allow guests to see the link - $coursecontext = get_context_instance(CONTEXT_COURSE, $course->id); - if (has_capability('moodle/legacy:guest', $coursecontext, NULL, false)) { - // User is a guest here ! guests are prompted to login later if try to reply - $canreply = true; - } } /// Print the controls across the top diff --git a/mod/forum/lib.php b/mod/forum/lib.php index b05ed78650..534edfd9b2 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -3823,16 +3823,26 @@ function forum_user_can_post_discussion($forum, $currentgroup=-1, $groupmode=-1, // $forum is an object global $USER, $SESSION, $COURSE; - if (!$cm) { - debugging('missing cm', DEBUG_DEVELOPER); - if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { - error('Course Module ID was incorrect'); - } + // shortcut - guest and not-logged-in users can not post + if (isguestuser() or !isloggedin()) { + return false; } + if (!$context) { + if (!$cm) { + debugging('missing cm', DEBUG_DEVELOPER); + if (!$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course)) { + error('Course Module ID was incorrect'); + } + } $context = get_context_instance(CONTEXT_MODULE, $cm->id); } + // normal users with temporary guest access can not add discussions + if (has_capability('moodle/legacy:guest', $context, $USER->id, false)) { + return false; + } + if ($currentgroup == -1) { $currentgroup = get_current_group($cm->course); } @@ -3881,6 +3891,15 @@ function forum_user_can_post_discussion($forum, $currentgroup=-1, $groupmode=-1, * @param $user - user object */ function forum_user_can_post($forum, $user=NULL, $cm=NULL, $context=NULL) { + global $USER; + if (empty($user)) { + $user = $USER; + } + + // shortcut - guest and not-logged-in users can not post + if (isguestuser($user) or empty($user->id)) { + return false; + } if (!$context) { if (!$cm) { @@ -3892,21 +3911,18 @@ function forum_user_can_post($forum, $user=NULL, $cm=NULL, $context=NULL) { $context = get_context_instance(CONTEXT_MODULE, $cm->id); } + // normal users with temporary guest access can not post + if (has_capability('moodle/legacy:guest', $context, $user->id, false)) { + return false; + } + if ($forum->type == 'news') { $capname = 'mod/forum:replynews'; } else { $capname = 'mod/forum:replypost'; } - if (!empty($user)) { - $canreply = has_capability($capname, $context, $user->id, false) - && !has_capability('moodle/legacy:guest', $context, $user->id, false); - } else { - $canreply = has_capability($capname, $context, NULL, false) - && !has_capability('moodle/legacy:guest', $context, NULL, false); - } - - return $canreply; + return has_capability($capname, $context, $user->id, false); } @@ -4093,7 +4109,7 @@ function forum_print_latest_discussions($course, $forum, $maxdiscussions=5, $dis // and the current user is a guest. if (forum_user_can_post_discussion($forum, $currentgroup, $groupmode, $cm, $context) || - ($forum->type != 'news' && has_capability('moodle/legacy:guest', $context, NULL, false)) ) { + ($forum->type != 'news' and (isguestuser() or !isloggedin())) ) { echo '
'; echo "
wwwroot/mod/forum/post.php\">"; diff --git a/mod/forum/view.php b/mod/forum/view.php index af53e40745..e79ac11a74 100644 --- a/mod/forum/view.php +++ b/mod/forum/view.php @@ -229,7 +229,7 @@ print_box(format_text($forum->intro), 'generalbox', 'intro'); } echo '

'; - if (forum_user_can_post_discussion($forum)) { + if (forum_user_can_post_discussion($forum, -1, -1, $cm)) { print_string("allowsdiscussions", "forum"); } else { echo ' ';