print_error('invalidcoursemodule'); } if (!($cm = get_coursemodule_from_instance("anonforum", $anonforum->id, $course->id))) { print_error('invalidcoursemodule'); } require_course_login($course, false, $cm); $returnto = anonforum_go_back_to($returnpage . '?id=' . $course->id . '&f=' . $anonforum->id); if (!anonforum_tp_can_track_anonforums($anonforum)) { redirect($returnto); } $info = new stdClass(); $info->name = fullname($USER); $info->anonforum = format_string($anonforum->name); $eventparams = array('context' => context_module::instance($cm->id), 'relateduserid' => $USER->id, 'anonymous' => 1, 'other' => array('anonforumid' => $anonforum->id)); if (anonforum_tp_is_tracked($anonforum)) { if (anonforum_tp_stop_tracking($anonforum->id)) { if (empty($anonforum->anonymous)) { $event = \mod_anonforum\event\readtracking_disabled::create($eventparams); $event->trigger(); } redirect($returnto, get_string("nownottracking", "anonforum", $info), 1); } else { print_error('cannottrack', '', $_SERVER["HTTP_REFERER"]); } } else { // subscribe if (anonforum_tp_start_tracking($anonforum->id)) { if (empty($anonforum->anonymous)) { $event = \mod_anonforum\event\readtracking_enabled::create($eventparams); $event->trigger(); }
/** * Test the logic in the test_anonforum_tp_get_untracked_anonforums() function. */ public function test_anonforum_tp_get_untracked_anonforums() { global $CFG; $this->resetAfterTest(); $useron = $this->getDataGenerator()->create_user(array('trackforums' => 1)); $useroff = $this->getDataGenerator()->create_user(array('trackforums' => 0)); $course = $this->getDataGenerator()->create_course(); $options = array('course' => $course->id, 'trackingtype' => FORUM_TRACKING_OFF); // Off. $anonforumoff = $this->getDataGenerator()->create_module('anonforum', $options); $options = array('course' => $course->id, 'trackingtype' => FORUM_TRACKING_FORCED); // On. $anonforumforce = $this->getDataGenerator()->create_module('anonforum', $options); $options = array('course' => $course->id, 'trackingtype' => FORUM_TRACKING_OPTIONAL); // Optional. $anonforumoptional = $this->getDataGenerator()->create_module('anonforum', $options); // Allow force. $CFG->anonforum_allowforcedreadtracking = 1; // On user with force on. $result = anonforum_tp_get_untracked_anonforums($useron->id, $course->id); $this->assertEquals(1, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); // Off user with force on. $result = anonforum_tp_get_untracked_anonforums($useroff->id, $course->id); $this->assertEquals(2, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); $this->assertEquals(true, isset($result[$anonforumoptional->id])); // Don't allow force. $CFG->anonforum_allowforcedreadtracking = 0; // On user with force off. $result = anonforum_tp_get_untracked_anonforums($useron->id, $course->id); $this->assertEquals(1, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); // Off user with force off. $result = anonforum_tp_get_untracked_anonforums($useroff->id, $course->id); $this->assertEquals(3, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); $this->assertEquals(true, isset($result[$anonforumoptional->id])); $this->assertEquals(true, isset($result[$anonforumforce->id])); // Stop tracking so we can test again. anonforum_tp_stop_tracking($anonforumforce->id, $useron->id); anonforum_tp_stop_tracking($anonforumoptional->id, $useron->id); anonforum_tp_stop_tracking($anonforumforce->id, $useroff->id); anonforum_tp_stop_tracking($anonforumoptional->id, $useroff->id); // Allow force. $CFG->anonforum_allowforcedreadtracking = 1; // On user with force on. $result = anonforum_tp_get_untracked_anonforums($useron->id, $course->id); $this->assertEquals(2, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); $this->assertEquals(true, isset($result[$anonforumoptional->id])); // Off user with force on. $result = anonforum_tp_get_untracked_anonforums($useroff->id, $course->id); $this->assertEquals(2, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); $this->assertEquals(true, isset($result[$anonforumoptional->id])); // Don't allow force. $CFG->anonforum_allowforcedreadtracking = 0; // On user with force off. $result = anonforum_tp_get_untracked_anonforums($useron->id, $course->id); $this->assertEquals(3, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); $this->assertEquals(true, isset($result[$anonforumoptional->id])); $this->assertEquals(true, isset($result[$anonforumforce->id])); // Off user with force off. $result = anonforum_tp_get_untracked_anonforums($useroff->id, $course->id); $this->assertEquals(3, count($result)); $this->assertEquals(true, isset($result[$anonforumoff->id])); $this->assertEquals(true, isset($result[$anonforumoptional->id])); $this->assertEquals(true, isset($result[$anonforumforce->id])); }
/** * Test mod_anonforum_observer methods. */ public function test_observers() { global $DB, $CFG; require_once $CFG->dirroot . '/mod/anonforum/lib.php'; $anonforumgen = $this->getDataGenerator()->get_plugin_generator('mod_anonforum'); $course = $this->getDataGenerator()->create_course(); $trackedrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => ANONFORUM_INITIALSUBSCRIBE); $untrackedrecord = array('course' => $course->id, 'type' => 'general'); $trackedanonforum = $this->getDataGenerator()->create_module('anonforum', $trackedrecord); $untrackedanonforum = $this->getDataGenerator()->create_module('anonforum', $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, 'trackanonforums' => 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 anonforum_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('anonforum_trackingtype', 1); set_config('anonforum_trackreadposts', 1); $record = array(); $record['course'] = $course->id; $record['anonforum'] = $trackedanonforum->id; $record['userid'] = $user->id; $discussion = $anonforumgen->create_discussion($record); $record = array(); $record['discussion'] = $discussion->id; $record['userid'] = $user->id; $post = $anonforumgen->create_post($record); anonforum_tp_add_read_record($user->id, $post->id); anonforum_set_user_maildigest($trackedanonforum, 2, $user); anonforum_tp_stop_tracking($untrackedanonforum->id, $user->id); $this->assertEquals(1, $DB->count_records('anonforum_subscriptions')); $this->assertEquals(1, $DB->count_records('anonforum_digests')); $this->assertEquals(1, $DB->count_records('anonforum_track_prefs')); $this->assertEquals(1, $DB->count_records('anonforum_read')); // The course_module_created observer does it's job adding a subscription. $anonforumrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => ANONFORUM_INITIALSUBSCRIBE); $extraanonforum = $this->getDataGenerator()->create_module('anonforum', $anonforumrecord); $this->assertEquals(2, $DB->count_records('anonforum_subscriptions')); $manplugin->unenrol_user($manualenrol, $user->id); $this->assertEquals(0, $DB->count_records('anonforum_digests')); $this->assertEquals(0, $DB->count_records('anonforum_subscriptions')); $this->assertEquals(0, $DB->count_records('anonforum_track_prefs')); $this->assertEquals(0, $DB->count_records('anonforum_read')); }