public function test_mod_forum_set_maildigest() { global $USER, $DB; $this->resetAfterTest(true); // Create a user. $user = self::getDataGenerator()->create_user(); // Set to the user. self::setUser($user); // Create courses to add the modules. $course1 = self::getDataGenerator()->create_course(); $forumids = array(); // First forum. $record = new stdClass(); $record->introformat = FORMAT_HTML; $record->course = $course1->id; $forum1 = self::getDataGenerator()->create_module('forum', $record); $forumids[] = $forum1->id; // Check the forum was correctly created. list($test, $params) = $DB->get_in_or_equal($forumids, SQL_PARAMS_NAMED, 'forum'); $this->assertEquals(count($forumids), $DB->count_records_select('forum', 'id ' . $test, $params)); // Enrol the user in the courses. // DataGenerator->enrol_user automatically sets a role for the user $this->getDataGenerator()->enrol_user($user->id, $course1->id, null, 'manual'); // Confirm that there is no current value. $currentsetting = $DB->get_record('forum_digests', array('forum' => $forum1->id, 'userid' => $user->id)); $this->assertFalse($currentsetting); // Test with each of the valid values: // 0, 1, and 2 are valid values. forum_set_user_maildigest($forum1, 0, $user); $currentsetting = $DB->get_record('forum_digests', array('forum' => $forum1->id, 'userid' => $user->id)); $this->assertEquals($currentsetting->maildigest, 0); forum_set_user_maildigest($forum1, 1, $user); $currentsetting = $DB->get_record('forum_digests', array('forum' => $forum1->id, 'userid' => $user->id)); $this->assertEquals($currentsetting->maildigest, 1); forum_set_user_maildigest($forum1, 2, $user); $currentsetting = $DB->get_record('forum_digests', array('forum' => $forum1->id, 'userid' => $user->id)); $this->assertEquals($currentsetting->maildigest, 2); // And the default value - this should delete the record again forum_set_user_maildigest($forum1, -1, $user); $currentsetting = $DB->get_record('forum_digests', array('forum' => $forum1->id, 'userid' => $user->id)); $this->assertFalse($currentsetting); // Try with an invalid value. $this->setExpectedException('moodle_exception'); forum_set_user_maildigest($forum1, 42, $user); }
/** * Manage inplace editable saves. * * @param string $itemtype The type of item. * @param int $itemid The ID of the item. * @param mixed $newvalue The new value * @return string */ function mod_forum_inplace_editable($itemtype, $itemid, $newvalue) { global $DB, $PAGE; if ($itemtype === 'digestoptions') { // The itemid is the forumid. $forum = $DB->get_record('forum', array('id' => $itemid), '*', MUST_EXIST); $course = $DB->get_record('course', array('id' => $forum->course), '*', MUST_EXIST); $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id, false, MUST_EXIST); $context = context_module::instance($cm->id); $PAGE->set_context($context); require_login($course, false, $cm); forum_set_user_maildigest($forum, $newvalue); $renderer = $PAGE->get_renderer('mod_forum'); return $renderer->render_digest_options($forum, $newvalue); } }
$backtoindex = optional_param('backtoindex', 0, PARAM_INT); // We must have a valid session key. require_sesskey(); $forum = $DB->get_record('forum', array('id' => $id)); $course = $DB->get_record('course', array('id' => $forum->course), '*', MUST_EXIST); $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id, false, MUST_EXIST); $context = context_module::instance($cm->id); require_login($course, false, $cm); $url = new moodle_url('/mod/forum/maildigest.php', array('id' => $id, 'maildigest' => $maildigest)); $PAGE->set_url($url); $PAGE->set_context($context); $digestoptions = forum_get_user_digest_options(); $info = new stdClass(); $info->name = fullname($USER); $info->forum = format_string($forum->name); $info->maildigest = forum_set_user_maildigest($forum, $maildigest); if ($maildigest === -1) { // Get the default maildigest options. $info->maildigest = $USER->maildigest; $info->maildigesttitle = $digestoptions[$info->maildigest]; $info->maildigestdescription = get_string('emaildigest_' . $info->maildigest, 'mod_forum', $info); $updatemessage = get_string('emaildigestupdated_default', 'forum', $info); } else { $info->maildigesttitle = $digestoptions[$info->maildigest]; $info->maildigestdescription = get_string('emaildigest_' . $info->maildigest, 'mod_forum', $info); $updatemessage = get_string('emaildigestupdated', 'forum', $info); } if ($backtoindex) { $returnto = "index.php?id={$course->id}"; } else { $returnto = "view.php?f={$id}";
/** * Test mod_forum_observer methods. */ public function test_observers() { global $DB, $CFG; require_once $CFG->dirroot . '/mod/forum/lib.php'; $forumgen = $this->getDataGenerator()->get_plugin_generator('mod_forum'); $course = $this->getDataGenerator()->create_course(); $trackedrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); $untrackedrecord = array('course' => $course->id, 'type' => 'general'); $trackedforum = $this->getDataGenerator()->create_module('forum', $trackedrecord); $untrackedforum = $this->getDataGenerator()->create_module('forum', $untrackedrecord); // Used functions don't require these settings; adding // them just in case there are APIs changes in future. $user = $this->getDataGenerator()->create_user(array('maildigest' => 1, 'trackforums' => 1)); $manplugin = enrol_get_plugin('manual'); $manualenrol = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual')); $student = $DB->get_record('role', array('shortname' => 'student')); // The role_assign observer does it's job adding the forum_subscriptions record. $manplugin->enrol_user($manualenrol, $user->id, $student->id); // They are not required, but in a real environment they are supposed to be required; // adding them just in case there are APIs changes in future. set_config('forum_trackingtype', 1); set_config('forum_trackreadposts', 1); $record = array(); $record['course'] = $course->id; $record['forum'] = $trackedforum->id; $record['userid'] = $user->id; $discussion = $forumgen->create_discussion($record); $record = array(); $record['discussion'] = $discussion->id; $record['userid'] = $user->id; $post = $forumgen->create_post($record); forum_tp_add_read_record($user->id, $post->id); forum_set_user_maildigest($trackedforum, 2, $user); forum_tp_stop_tracking($untrackedforum->id, $user->id); $this->assertEquals(1, $DB->count_records('forum_subscriptions')); $this->assertEquals(1, $DB->count_records('forum_digests')); $this->assertEquals(1, $DB->count_records('forum_track_prefs')); $this->assertEquals(1, $DB->count_records('forum_read')); // The course_module_created observer does it's job adding a subscription. $forumrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); $extraforum = $this->getDataGenerator()->create_module('forum', $forumrecord); $this->assertEquals(2, $DB->count_records('forum_subscriptions')); $manplugin->unenrol_user($manualenrol, $user->id); $this->assertEquals(0, $DB->count_records('forum_digests')); $this->assertEquals(0, $DB->count_records('forum_subscriptions')); $this->assertEquals(0, $DB->count_records('forum_track_prefs')); $this->assertEquals(0, $DB->count_records('forum_read')); }
$backtoindex = optional_param('backtoindex', 0, PARAM_INT); // We must have a valid session key. require_sesskey(); $forum = $DB->get_record('forum', array('id' => $id)); $course = $DB->get_record('course', array('id' => $forum->course), '*', MUST_EXIST); $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id, false, MUST_EXIST); $context = context_module::instance($cm->id); require_login($course, false, $cm); $url = new moodle_url('/mod/forum/maildigest.php', array('id' => $id, 'maildigest' => $maildigest)); $PAGE->set_url($url); $PAGE->set_context($context); $digestoptions = forum_get_user_digest_options(); $info = new stdClass(); $info->name = fullname($USER); $info->forum = format_string($forum->name); forum_set_user_maildigest($forum, $maildigest); $info->maildigest = $maildigest; if ($maildigest === -1) { // Get the default maildigest options. $info->maildigest = $USER->maildigest; $info->maildigesttitle = $digestoptions[$info->maildigest]; $info->maildigestdescription = get_string('emaildigest_' . $info->maildigest, 'mod_forum', $info); $updatemessage = get_string('emaildigestupdated_default', 'forum', $info); } else { $info->maildigesttitle = $digestoptions[$info->maildigest]; $info->maildigestdescription = get_string('emaildigest_' . $info->maildigest, 'mod_forum', $info); $updatemessage = get_string('emaildigestupdated', 'forum', $info); } if ($backtoindex) { $returnto = "index.php?id={$course->id}"; } else {
/** * Sends several notifications to one user as: * * daily digests coming from the per-forum setting. */ public function test_cron_forum_digest_email() { global $DB, $CFG; $this->resetAfterTest(true); // Set up a basic user enrolled in a course. $userhelper = $this->helper_setup_user_in_course(); $user = $userhelper->user; $course1 = $userhelper->courses->course1; $forum1 = $userhelper->forums->forum1; $forum2 = $userhelper->forums->forum2; // Add a discussion to the forums. $record = new stdClass(); $record->course = $course1->id; $record->userid = $user->id; $record->mailnow = 1; // Add 5 discussions to forum 1. $record->forum = $forum1->id; for ($i = 0; $i < 5; $i++) { $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); } // Add 5 discussions to forum 2. $record->forum = $forum2->id; for ($i = 0; $i < 5; $i++) { $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); } // Ensure that the creation times mean that the messages will be sent. $this->helper_force_digest_mail_times(); // Set the tested user's default maildigest setting. $DB->set_field('user', 'maildigest', 0, array('id' => $user->id)); // Set the maildigest preference for forum1 to digest (complete). forum_set_user_maildigest($forum1, 1, $user); // Set the maildigest preference for forum2 to digest (short). forum_set_user_maildigest($forum2, 2, $user); // One digest e-mail should be sent, and no individual notifications. $this->helper_run_cron_check_count(1, 0, 1); }