コード例 #1
0
ファイル: lib.php プロジェクト: abhilash1994/moodle
/**
 * Adds module specific settings to the settings block
 *
 * @param settings_navigation $settings The settings navigation object
 * @param navigation_node $forumnode The node to add module settings to
 */
function forum_extend_settings_navigation(settings_navigation $settingsnav, navigation_node $forumnode)
{
    global $USER, $PAGE, $CFG, $DB, $OUTPUT;
    $forumobject = $DB->get_record("forum", array("id" => $PAGE->cm->instance));
    if (empty($PAGE->cm->context)) {
        $PAGE->cm->context = context_module::instance($PAGE->cm->instance);
    }
    // for some actions you need to be enrolled, beiing admin is not enough sometimes here
    $enrolled = is_enrolled($PAGE->cm->context, $USER, '', false);
    $activeenrolled = is_enrolled($PAGE->cm->context, $USER, '', true);
    $canmanage = has_capability('mod/forum:managesubscriptions', $PAGE->cm->context);
    $subscriptionmode = \mod_forum\subscriptions::get_subscription_mode($forumobject);
    $cansubscribe = $activeenrolled && !\mod_forum\subscriptions::is_forcesubscribed($forumobject) && (!\mod_forum\subscriptions::subscription_disabled($forumobject) || $canmanage);
    if ($canmanage) {
        $mode = $forumnode->add(get_string('subscriptionmode', 'forum'), null, navigation_node::TYPE_CONTAINER);
        $allowchoice = $mode->add(get_string('subscriptionoptional', 'forum'), new moodle_url('/mod/forum/subscribe.php', array('id' => $forumobject->id, 'mode' => FORUM_CHOOSESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING);
        $forceforever = $mode->add(get_string("subscriptionforced", "forum"), new moodle_url('/mod/forum/subscribe.php', array('id' => $forumobject->id, 'mode' => FORUM_FORCESUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING);
        $forceinitially = $mode->add(get_string("subscriptionauto", "forum"), new moodle_url('/mod/forum/subscribe.php', array('id' => $forumobject->id, 'mode' => FORUM_INITIALSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING);
        $disallowchoice = $mode->add(get_string('subscriptiondisabled', 'forum'), new moodle_url('/mod/forum/subscribe.php', array('id' => $forumobject->id, 'mode' => FORUM_DISALLOWSUBSCRIBE, 'sesskey' => sesskey())), navigation_node::TYPE_SETTING);
        switch ($subscriptionmode) {
            case FORUM_CHOOSESUBSCRIBE:
                // 0
                $allowchoice->action = null;
                $allowchoice->add_class('activesetting');
                break;
            case FORUM_FORCESUBSCRIBE:
                // 1
                $forceforever->action = null;
                $forceforever->add_class('activesetting');
                break;
            case FORUM_INITIALSUBSCRIBE:
                // 2
                $forceinitially->action = null;
                $forceinitially->add_class('activesetting');
                break;
            case FORUM_DISALLOWSUBSCRIBE:
                // 3
                $disallowchoice->action = null;
                $disallowchoice->add_class('activesetting');
                break;
        }
    } else {
        if ($activeenrolled) {
            switch ($subscriptionmode) {
                case FORUM_CHOOSESUBSCRIBE:
                    // 0
                    $notenode = $forumnode->add(get_string('subscriptionoptional', 'forum'));
                    break;
                case FORUM_FORCESUBSCRIBE:
                    // 1
                    $notenode = $forumnode->add(get_string('subscriptionforced', 'forum'));
                    break;
                case FORUM_INITIALSUBSCRIBE:
                    // 2
                    $notenode = $forumnode->add(get_string('subscriptionauto', 'forum'));
                    break;
                case FORUM_DISALLOWSUBSCRIBE:
                    // 3
                    $notenode = $forumnode->add(get_string('subscriptiondisabled', 'forum'));
                    break;
            }
        }
    }
    if ($cansubscribe) {
        if (\mod_forum\subscriptions::is_subscribed($USER->id, $forumobject)) {
            $linktext = get_string('unsubscribe', 'forum');
        } else {
            $linktext = get_string('subscribe', 'forum');
        }
        $url = new moodle_url('/mod/forum/subscribe.php', array('id' => $forumobject->id, 'sesskey' => sesskey()));
        $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING);
    }
    if (has_capability('mod/forum:viewsubscribers', $PAGE->cm->context)) {
        $url = new moodle_url('/mod/forum/subscribers.php', array('id' => $forumobject->id));
        $forumnode->add(get_string('showsubscribers', 'forum'), $url, navigation_node::TYPE_SETTING);
    }
    if ($enrolled && forum_tp_can_track_forums($forumobject)) {
        // keep tracking info for users with suspended enrolments
        if ($forumobject->trackingtype == FORUM_TRACKING_OPTIONAL || !$CFG->forum_allowforcedreadtracking && $forumobject->trackingtype == FORUM_TRACKING_FORCED) {
            if (forum_tp_is_tracked($forumobject)) {
                $linktext = get_string('notrackforum', 'forum');
            } else {
                $linktext = get_string('trackforum', 'forum');
            }
            $url = new moodle_url('/mod/forum/settracking.php', array('id' => $forumobject->id));
            $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING);
        }
    }
    if (!isloggedin() && $PAGE->course->id == SITEID) {
        $userid = guest_user()->id;
    } else {
        $userid = $USER->id;
    }
    $hascourseaccess = $PAGE->course->id == SITEID || can_access_course($PAGE->course, $userid);
    $enablerssfeeds = !empty($CFG->enablerssfeeds) && !empty($CFG->forum_enablerssfeeds);
    if ($enablerssfeeds && $forumobject->rsstype && $forumobject->rssarticles && $hascourseaccess) {
        if (!function_exists('rss_get_url')) {
            require_once "{$CFG->libdir}/rsslib.php";
        }
        if ($forumobject->rsstype == 1) {
            $string = get_string('rsssubscriberssdiscussions', 'forum');
        } else {
            $string = get_string('rsssubscriberssposts', 'forum');
        }
        $url = new moodle_url(rss_get_url($PAGE->cm->context->id, $userid, "mod_forum", $forumobject->id));
        $forumnode->add($string, $url, settings_navigation::TYPE_SETTING, null, null, new pix_icon('i/rss', ''));
    }
}
コード例 #2
0
ファイル: lib_test.php プロジェクト: rushi963/moodle
 /**
  * Test subscription using disallow subscription on create.
  */
 public function test_forum_disallow_subscribe_on_create()
 {
     global $CFG;
     $this->resetAfterTest();
     $usercount = 5;
     $course = $this->getDataGenerator()->create_course();
     $users = array();
     for ($i = 0; $i < $usercount; $i++) {
         $user = $this->getDataGenerator()->create_user();
         $users[] = $user;
         $this->getDataGenerator()->enrol_user($user->id, $course->id);
     }
     $options = array('course' => $course->id, 'forcesubscribe' => FORUM_DISALLOWSUBSCRIBE);
     // Subscription prevented.
     $forum = $this->getDataGenerator()->create_module('forum', $options);
     $result = \mod_forum\subscriptions::fetch_subscribed_users($forum);
     // No subscriptions by default.
     $this->assertEquals(0, count($result));
     foreach ($users as $user) {
         $this->assertFalse(\mod_forum\subscriptions::is_subscribed($user->id, $forum));
     }
 }
コード例 #3
0
ファイル: post.php プロジェクト: sriysk/moodle-integration
$draftid_editor = file_get_submitted_draft_itemid('message');
$currenttext = file_prepare_draft_area($draftid_editor, $modcontext->id, 'mod_forum', 'post', $postid, mod_forum_post_form::editor_options($modcontext, $postid), $post->message);
$manageactivities = has_capability('moodle/course:manageactivities', $coursecontext);
if (\mod_forum\subscriptions::subscription_disabled($forum) && !$manageactivities) {
    // User does not have permission to subscribe to this discussion at all.
    $discussionsubscribe = false;
} else {
    if (\mod_forum\subscriptions::is_forcesubscribed($forum)) {
        // User does not have permission to unsubscribe from this discussion at all.
        $discussionsubscribe = true;
    } else {
        if (isset($discussion) && \mod_forum\subscriptions::is_subscribed($USER->id, $forum, $discussion->id, $cm)) {
            // User is subscribed to the discussion - continue the subscription.
            $discussionsubscribe = true;
        } else {
            if (!isset($discussion) && \mod_forum\subscriptions::is_subscribed($USER->id, $forum, null, $cm)) {
                // Starting a new discussion, and the user is subscribed to the forum - subscribe to the discussion.
                $discussionsubscribe = true;
            } else {
                // User is not subscribed to either forum or discussion. Follow user preference.
                $discussionsubscribe = $USER->autosubscribe;
            }
        }
    }
}
$mform_post->set_data(array('attachments' => $draftitemid, 'general' => $heading, 'subject' => $post->subject, 'message' => array('text' => $currenttext, 'format' => empty($post->messageformat) ? editors_get_preferred_format() : $post->messageformat, 'itemid' => $draftid_editor), 'discussionsubscribe' => $discussionsubscribe, 'mailnow' => !empty($post->mailnow), 'userid' => $post->userid, 'parent' => $post->parent, 'discussion' => $post->discussion, 'course' => $course->id) + $page_params + (isset($post->format) ? array('format' => $post->format) : array()) + (isset($discussion->timestart) ? array('timestart' => $discussion->timestart) : array()) + (isset($discussion->timeend) ? array('timeend' => $discussion->timeend) : array()) + (isset($post->groupid) ? array('groupid' => $post->groupid) : array()) + (isset($discussion->id) ? array('discussion' => $discussion->id) : array()));
if ($mform_post->is_cancelled()) {
    if (!isset($discussion->id) || $forum->type === 'qanda') {
        // Q and A forums don't have a discussion page, so treat them like a new thread..
        redirect(new moodle_url('/mod/forum/view.php', array('f' => $forum->id)));
    } else {
コード例 #4
0
ファイル: index.php プロジェクト: HuiChangZhai/moodle
     // there should not be any links leading to this place, just redirect
     redirect(new moodle_url('/mod/forum/index.php', array('id' => $id)), get_string('subscribeenrolledonly', 'forum'));
 }
 // Can proceed now, the user is not guest and is enrolled
 foreach ($modinfo->get_instances_of('forum') as $forumid => $cm) {
     $forum = $forums[$forumid];
     $modcontext = context_module::instance($cm->id);
     $cansub = false;
     if (has_capability('mod/forum:viewdiscussion', $modcontext)) {
         $cansub = true;
     }
     if ($cansub && $cm->visible == 0 && !has_capability('mod/forum:managesubscriptions', $modcontext)) {
         $cansub = false;
     }
     if (!\mod_forum\subscriptions::is_forcesubscribed($forum)) {
         $subscribed = \mod_forum\subscriptions::is_subscribed($USER->id, $forum, null, $cm);
         $canmanageactivities = has_capability('moodle/course:manageactivities', $coursecontext, $USER->id);
         if (($canmanageactivities || \mod_forum\subscriptions::is_subscribable($forum)) && $subscribe && !$subscribed && $cansub) {
             \mod_forum\subscriptions::subscribe_user($USER->id, $forum, $modcontext, true);
         } else {
             if (!$subscribe && $subscribed) {
                 \mod_forum\subscriptions::unsubscribe_user($USER->id, $forum, $modcontext, true);
             }
         }
     }
 }
 $returnto = forum_go_back_to("index.php?id={$course->id}");
 $shortname = format_string($course->shortname, true, array('context' => context_course::instance($course->id)));
 if ($subscribe) {
     redirect($returnto, get_string('nowallsubscribed', 'forum', $shortname), 1);
 } else {
コード例 #5
0
    $heading = get_string("yourreply", "forum");
    $formheading = get_string('reply', 'forum');
} else {
    if ($forum->type == 'qanda') {
        $heading = get_string('yournewquestion', 'forum');
    } else {
        $heading = get_string('yournewtopic', 'forum');
    }
}
$postid = empty($post->id) ? null : $post->id;
$draftid_editor = file_get_submitted_draft_itemid('message');
$currenttext = file_prepare_draft_area($draftid_editor, $modcontext->id, 'mod_forum', 'post', $postid, mod_forum_post_form::editor_options($modcontext, $postid), $post->message);
// Respect the user's discussion autosubscribe preference unless they have already posted - in which case, use that preference.
$discussionsubscribe = $USER->autosubscribe;
if (isset($discussion) && forum_user_has_posted($forum->id, $discussion->id, $USER->id)) {
    $discussionsubscribe = \mod_forum\subscriptions::is_subscribed($USER->id, $forum, $discussion->id, $cm);
}
$mform_post->set_data(array('attachments' => $draftitemid, 'general' => $heading, 'subject' => $post->subject, 'message' => array('text' => $currenttext, 'format' => empty($post->messageformat) ? editors_get_preferred_format() : $post->messageformat, 'itemid' => $draftid_editor), 'discussionsubscribe' => $discussionsubscribe, 'mailnow' => !empty($post->mailnow), 'userid' => $post->userid, 'parent' => $post->parent, 'discussion' => $post->discussion, 'course' => $course->id) + $page_params + (isset($post->format) ? array('format' => $post->format) : array()) + (isset($discussion->timestart) ? array('timestart' => $discussion->timestart) : array()) + (isset($discussion->timeend) ? array('timeend' => $discussion->timeend) : array()) + (isset($post->groupid) ? array('groupid' => $post->groupid) : array()) + (isset($discussion->id) ? array('discussion' => $discussion->id) : array()));
if ($mform_post->is_cancelled()) {
    if (!isset($discussion->id) || $forum->type === 'qanda') {
        // Q and A forums don't have a discussion page, so treat them like a new thread..
        redirect(new moodle_url('/blocks/oc_mooc_nav/forum_view.php', array('f' => $forum->id)));
    } else {
        redirect(new moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id)));
    }
} else {
    if ($fromform = $mform_post->get_data()) {
        if (empty($SESSION->fromurl)) {
            $errordestination = "{$CFG->wwwroot}/blocks/oc_mooc_nav/forum_view.php?f={$forum->id}";
        } else {
            $errordestination = $SESSION->fromurl;
コード例 #6
0
ファイル: subscriptions_test.php プロジェクト: Jinelle/moodle
 /**
  * Test that after toggling the forum subscription as another user,
  * the discussion subscription functionality works as expected.
  */
 public function test_forum_subscribe_toggle_as_other_repeat_subscriptions()
 {
     global $DB;
     $this->resetAfterTest(true);
     // Create a course, with a forum.
     $course = $this->getDataGenerator()->create_course();
     $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
     $forum = $this->getDataGenerator()->create_module('forum', $options);
     // Create a user enrolled in the course as a student.
     list($user) = $this->helper_create_users($course, 1);
     // Post a discussion to the forum.
     list($discussion, $post) = $this->helper_post_to_forum($forum, $user);
     // Confirm that the user is currently not subscribed to the forum.
     $this->assertFalse(\mod_forum\subscriptions::is_subscribed($user->id, $forum));
     // Confirm that the user is unsubscribed from the discussion too.
     $this->assertFalse(\mod_forum\subscriptions::is_subscribed($user->id, $forum, $discussion->id));
     // Confirm that we have no records in either of the subscription tables.
     $this->assertEquals(0, $DB->count_records('forum_subscriptions', array('userid' => $user->id, 'forum' => $forum->id)));
     $this->assertEquals(0, $DB->count_records('forum_discussion_subs', array('userid' => $user->id, 'discussion' => $discussion->id)));
     // Subscribing to the forum should create a record in the subscriptions table, but not the forum discussion
     // subscriptions table.
     \mod_forum\subscriptions::subscribe_user($user->id, $forum);
     $this->assertEquals(1, $DB->count_records('forum_subscriptions', array('userid' => $user->id, 'forum' => $forum->id)));
     $this->assertEquals(0, $DB->count_records('forum_discussion_subs', array('userid' => $user->id, 'discussion' => $discussion->id)));
     // Now unsubscribe from the discussion. This should return true.
     $this->assertTrue(\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion));
     // Attempting to unsubscribe again should return false because no change was made.
     $this->assertFalse(\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion));
     // Subscribing to the discussion again should return truthfully as the subscription preference was removed.
     $this->assertTrue(\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion));
     // Attempting to subscribe again should return false because no change was made.
     $this->assertFalse(\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion));
     // Now unsubscribe from the discussion. This should return true once more.
     $this->assertTrue(\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion));
     // And unsubscribing from the forum but not as a request from the user should maintain their preference.
     \mod_forum\subscriptions::unsubscribe_user($user->id, $forum);
     $this->assertEquals(0, $DB->count_records('forum_subscriptions', array('userid' => $user->id, 'forum' => $forum->id)));
     $this->assertEquals(1, $DB->count_records('forum_discussion_subs', array('userid' => $user->id, 'discussion' => $discussion->id)));
     // Subscribing to the discussion should return truthfully because a change was made.
     $this->assertTrue(\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion));
     $this->assertEquals(0, $DB->count_records('forum_subscriptions', array('userid' => $user->id, 'forum' => $forum->id)));
     $this->assertEquals(1, $DB->count_records('forum_discussion_subs', array('userid' => $user->id, 'discussion' => $discussion->id)));
 }
コード例 #7
0
ファイル: mail_test.php プロジェクト: Gavinthisisit/Moodle
 public function test_automatic_with_unsubscribed_discussion()
 {
     $this->resetAfterTest(true);
     // Create a course, with a forum.
     $course = $this->getDataGenerator()->create_course();
     $options = array('course' => $course->id, 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
     $forum = $this->getDataGenerator()->create_module('forum', $options);
     // Create two users enrolled in the course as students.
     list($author, $recipient) = $this->helper_create_users($course, 2);
     // Post a discussion to the forum.
     list($discussion, $post) = $this->helper_post_to_forum($forum, $author);
     // Unsubscribe the 'author' user from the discussion.
     \mod_forum\subscriptions::unsubscribe_user_from_discussion($author->id, $discussion);
     $this->assertFalse(\mod_forum\subscriptions::is_subscribed($author->id, $forum, $discussion->id));
     $this->assertTrue(\mod_forum\subscriptions::is_subscribed($recipient->id, $forum, $discussion->id));
     // We expect only one user to receive this post.
     $expected = 1;
     // Run cron and check that the expected number of users received the notification.
     $messages = $this->helper_run_cron_check_count($post, $expected);
     $seenauthor = false;
     $seenrecipient = false;
     foreach ($messages as $message) {
         // They should both be from our user.
         $this->assertEquals($author->id, $message->useridfrom);
         if ($message->useridto == $author->id) {
             $seenauthor = true;
         } else {
             if ($message->useridto = $recipient->id) {
                 $seenrecipient = true;
             }
         }
     }
     // Check we only saw one user.
     $this->assertFalse($seenauthor);
     $this->assertTrue($seenrecipient);
 }
コード例 #8
0
ファイル: discuss.php プロジェクト: mongo0se/moodle
 }
 // For each subscribed user in this forum and discussion, copy over per-discussion subscriptions if required.
 $discussiongroup = $discussion->groupid == -1 ? 0 : $discussion->groupid;
 $potentialsubscribers = \mod_forum\subscriptions::fetch_subscribed_users($forum, $discussiongroup, $modcontext, 'u.id', true);
 // Pre-seed the subscribed_discussion caches.
 // Firstly for the forum being moved to.
 \mod_forum\subscriptions::fill_subscription_cache($forumto->id);
 // And also for the discussion being moved.
 \mod_forum\subscriptions::fill_subscription_cache($forum->id);
 $subscriptionchanges = array();
 $subscriptiontime = time();
 foreach ($potentialsubscribers as $subuser) {
     $userid = $subuser->id;
     $targetsubscription = \mod_forum\subscriptions::is_subscribed($userid, $forumto, null, $cmto);
     $discussionsubscribed = \mod_forum\subscriptions::is_subscribed($userid, $forum, $discussion->id);
     $forumsubscribed = \mod_forum\subscriptions::is_subscribed($userid, $forum);
     if ($forumsubscribed && !$discussionsubscribed && $targetsubscription) {
         // The user has opted out of this discussion and the move would cause them to receive notifications again.
         // Ensure they are unsubscribed from the discussion still.
         $subscriptionchanges[$userid] = \mod_forum\subscriptions::FORUM_DISCUSSION_UNSUBSCRIBED;
     } else {
         if (!$forumsubscribed && $discussionsubscribed && !$targetsubscription) {
             // The user has opted into this discussion and would otherwise not receive the subscription after the move.
             // Ensure they are subscribed to the discussion still.
             $subscriptionchanges[$userid] = $subscriptiontime;
         }
     }
 }
 $DB->set_field('forum_discussions', 'forum', $forumto->id, array('id' => $discussion->id));
 $DB->set_field('forum_read', 'forumid', $forumto->id, array('discussionid' => $discussion->id));
 // Delete the existing per-discussion subscriptions and replace them with the newly calculated ones.
コード例 #9
0
ファイル: index.php プロジェクト: phuonguit2015/moodle
 // Print forums only when needed.
 require_once $CFG->dirroot . '/mod/forum/lib.php';
 if (!($newsforum = forum_get_course_forum($SITE->id, 'news'))) {
     print_error('cannotfindorcreateforum', 'forum');
 }
 // Fetch news forum context for proper filtering to happen.
 $newsforumcm = get_coursemodule_from_instance('forum', $newsforum->id, $SITE->id, false, MUST_EXIST);
 $newsforumcontext = context_module::instance($newsforumcm->id, MUST_EXIST);
 $forumname = format_string($newsforum->name, true, array('context' => $newsforumcontext));
 echo html_writer::tag('a', get_string('skipa', 'access', core_text::strtolower(strip_tags($forumname))), array('href' => '#skipsitenews', 'class' => 'skip-block'));
 // Wraps site news forum in div container.
 echo html_writer::start_tag('div', array('id' => 'site-news-forum'));
 if (isloggedin()) {
     $SESSION->fromdiscussion = $CFG->wwwroot;
     $subtext = '';
     if (\mod_forum\subscriptions::is_subscribed($USER->id, $newsforum)) {
         if (!\mod_forum\subscriptions::is_forcesubscribed($newsforum)) {
             $subtext = get_string('unsubscribe', 'forum');
         }
     } else {
         $subtext = get_string('subscribe', 'forum');
     }
     echo $OUTPUT->heading($forumname);
     $suburl = new moodle_url('/mod/forum/subscribe.php', array('id' => $newsforum->id, 'sesskey' => sesskey()));
     echo html_writer::tag('div', html_writer::link($suburl, $subtext), array('class' => 'subscribelink'));
 } else {
     echo $OUTPUT->heading($forumname);
 }
 forum_print_latest_discussions($SITE, $newsforum, $SITE->newsitems, 'plain', 'p.modified DESC');
 // End site news forum div container.
 echo html_writer::end_tag('div');
コード例 #10
0
 /**
  * Test that providing a context_module instance to is_subscribed does not result in additional lookups to retrieve
  * the context_module.
  */
 public function test_is_subscribed_cm()
 {
     global $DB;
     $this->resetAfterTest(true);
     // Create a course, with a forum.
     $course = $this->getDataGenerator()->create_course();
     $options = array('course' => $course->id, 'forcesubscribe' => FORUM_FORCESUBSCRIBE);
     $forum = $this->getDataGenerator()->create_module('forum', $options);
     // Create a user enrolled in the course as a student.
     list($user) = $this->helper_create_users($course, 1);
     // Retrieve the $cm now.
     $cm = get_fast_modinfo($forum->course)->instances['forum'][$forum->id];
     // Reset get_fast_modinfo.
     get_fast_modinfo(0, 0, true);
     // Call is_subscribed without passing the $cmid - this should result in a lookup and filling of some of the
     // caches. This provides us with consistent data to start from.
     $this->assertTrue(\mod_forum\subscriptions::is_subscribed($user->id, $forum));
     $this->assertTrue(\mod_forum\subscriptions::is_subscribed($user->id, $forum));
     // Make a note of the number of DB calls.
     $basecount = $DB->perf_get_reads();
     // Call is_subscribed - it should give return the correct result (False), and result in no additional queries.
     $this->assertTrue(\mod_forum\subscriptions::is_subscribed($user->id, $forum, null, $cm));
     // The capability check does require some queries, so we don't test it directly.
     // We don't assert here because this is dependant upon linked code which could change at any time.
     $suppliedcmcount = $DB->perf_get_reads() - $basecount;
     // Call is_subscribed without passing the $cmid now - this should result in a lookup.
     get_fast_modinfo(0, 0, true);
     $basecount = $DB->perf_get_reads();
     $this->assertTrue(\mod_forum\subscriptions::is_subscribed($user->id, $forum));
     $calculatedcmcount = $DB->perf_get_reads() - $basecount;
     // There should be more queries than when we performed the same check a moment ago.
     $this->assertGreaterThan($suppliedcmcount, $calculatedcmcount);
 }
コード例 #11
0
ファイル: discuss.php プロジェクト: jtibbetts/moodle
            $forum,
            $discussiongroup,
            $modcontext,
            'u.id'
        );

        // Pre-seed the subscribed_discussion caches.
        // Firstly for the forum being moved to.
        \mod_forum\subscriptions::fill_subscription_cache($forumto->id);
        // And also for the discussion being moved.
        \mod_forum\subscriptions::fill_subscription_cache($forum->id);
        $subscriptionchanges = array();
        foreach ($potentialsubscribers as $subuser) {
            $userid = $subuser->id;
            $targetsubscription = \mod_forum\subscriptions::is_subscribed($userid, $forumto, null, $cmto);
            if (\mod_forum\subscriptions::is_subscribed($userid, $forum, $discussion->id)) {
                if (!$targetsubscription) {
                    $subscriptionchanges[$userid] = \mod_forum\subscriptions::FORUM_DISCUSSION_SUBSCRIBED;
                }
            } else {
                if ($targetsubscription) {
                    $subscriptionchanges[$userid] = \mod_forum\subscriptions::FORUM_DISCUSSION_UNSUBSCRIBED;
                }
            }
        }

        $DB->set_field('forum_discussions', 'forum', $forumto->id, array('id' => $discussion->id));
        $DB->set_field('forum_read', 'forumid', $forumto->id, array('discussionid' => $discussion->id));

        // Delete the existing per-discussion subscriptions and replace them with the newly calculated ones.
        $DB->delete_records('forum_discussion_subs', array('discussion' => $discussion->id));
コード例 #12
0
$context = context_module::instance($cm->id);
if ($user) {
    require_sesskey();
    if (!has_capability('mod/forum:managesubscriptions', $context)) {
        print_error('nopermissiontosubscribe', 'forum');
    }
    $user = $DB->get_record('user', array('id' => $user), '*', MUST_EXIST);
} else {
    $user = $USER;
}
if (isset($cm->groupmode) && empty($course->groupmodeforce)) {
    $groupmode = $cm->groupmode;
} else {
    $groupmode = $course->groupmode;
}
$issubscribed = \mod_forum\subscriptions::is_subscribed($user->id, $forum, $discussionid, $cm);
// For a user to subscribe when a groupmode is set, they must have access to at least one group.
if ($groupmode && !$issubscribed && !has_capability('moodle/site:accessallgroups', $context)) {
    if (!groups_get_all_groups($course->id, $USER->id)) {
        print_error('cannotsubscribe', 'forum');
    }
}
require_login($course, false, $cm);
if (is_null($mode) and !is_enrolled($context, $USER, '', true)) {
    // Guests and visitors can't subscribe - only enrolled
    $PAGE->set_title($course->shortname);
    $PAGE->set_heading($course->fullname);
    if (isguestuser()) {
        echo $OUTPUT->header();
        echo $OUTPUT->confirm(get_string('subscribeenrolledonly', 'forum') . '<br /><br />' . get_string('liketologin'), get_login_url(), new moodle_url('/mod/forum/view.php', array('f' => $id)));
        echo $OUTPUT->footer();