1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * The forum module trait with additional generator helpers. 19 * 20 * @package mod_forum 21 * @copyright 2018 Andrew Nicols <andrew@nicols.co.uk> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 trait mod_forum_tests_generator_trait { 28 29 /** 30 * Helper to create the required number of users in the specified course. 31 * Users are enrolled as students by default. 32 * 33 * @param stdClass $course The course object 34 * @param integer $count The number of users to create 35 * @param string $role The role to assign users as 36 * @return array The users created 37 */ 38 protected function helper_create_users($course, $count, $role = null) { 39 $users = array(); 40 41 for ($i = 0; $i < $count; $i++) { 42 $user = $this->getDataGenerator()->create_user(); 43 $this->getDataGenerator()->enrol_user($user->id, $course->id, $role); 44 $users[] = $user; 45 } 46 47 return $users; 48 } 49 50 /** 51 * Create a new discussion and post within the specified forum, as the 52 * specified author. 53 * 54 * @param stdClass $forum The forum to post in 55 * @param stdClass $author The author to post as 56 * @param array $fields any other fields in discussion (name, message, messageformat, ...) 57 * @return array An array containing the discussion object, and the post object 58 */ 59 protected function helper_post_to_forum($forum, $author, $fields = array()) { 60 global $DB; 61 $generator = $this->getDataGenerator()->get_plugin_generator('mod_forum'); 62 63 // Create a discussion in the forum, and then add a post to that discussion. 64 $record = (object)$fields; 65 $record->course = $forum->course; 66 $record->userid = $author->id; 67 $record->forum = $forum->id; 68 $discussion = $generator->create_discussion($record); 69 70 // Retrieve the post which was created by create_discussion. 71 $post = $DB->get_record('forum_posts', array('discussion' => $discussion->id)); 72 73 return [$discussion, $post]; 74 } 75 76 /** 77 * Update the post time for the specified post by $factor. 78 * 79 * @param stdClass $post The post to update 80 * @param int $factor The amount to update by 81 */ 82 protected function helper_update_post_time($post, $factor) { 83 global $DB; 84 85 // Update the post to have a created in the past. 86 $DB->set_field('forum_posts', 'created', $post->created + $factor, array('id' => $post->id)); 87 } 88 89 /** 90 * Update the subscription time for the specified user/discussion by $factor. 91 * 92 * @param stdClass $user The user to update 93 * @param stdClass $discussion The discussion to update for this user 94 * @param int $factor The amount to update by 95 */ 96 protected function helper_update_subscription_time($user, $discussion, $factor) { 97 global $DB; 98 99 $sub = $DB->get_record('forum_discussion_subs', array('userid' => $user->id, 'discussion' => $discussion->id)); 100 101 // Update the subscription to have a preference in the past. 102 $DB->set_field('forum_discussion_subs', 'preference', $sub->preference + $factor, array('id' => $sub->id)); 103 } 104 105 /** 106 * Create a new post within an existing discussion, as the specified author. 107 * 108 * @param stdClass $forum The forum to post in 109 * @param stdClass $discussion The discussion to post in 110 * @param stdClass $author The author to post as 111 * @param array $options Additional options to pass to `create_post` 112 * @return stdClass The forum post 113 */ 114 protected function helper_post_to_discussion($forum, $discussion, $author, array $options = []) { 115 global $DB; 116 117 $generator = $this->getDataGenerator()->get_plugin_generator('mod_forum'); 118 119 // Add a post to the discussion. 120 $strre = get_string('re', 'forum'); 121 $record = array_merge([ 122 'course' => $forum->course, 123 'subject' => "{$strre} {$discussion->subject}", 124 'userid' => $author->id, 125 'forum' => $forum->id, 126 'discussion' => $discussion->id, 127 'mailnow' => 1, 128 ], $options); 129 130 $post = $generator->create_post((object) $record); 131 132 return $post; 133 } 134 135 /** 136 * Create a new post within an existing discussion, as the specified author. 137 * 138 * @param stdClass $parent The post being replied to 139 * @param stdClass $author The author to post as 140 * @param array $options Additional options to pass to `create_post` 141 * @return stdClass The forum post 142 */ 143 protected function helper_reply_to_post($parent, $author, array $options = []) { 144 global $DB; 145 146 $generator = $this->getDataGenerator()->get_plugin_generator('mod_forum'); 147 148 // Add a post to the discussion. 149 $strre = get_string('re', 'forum'); 150 $record = (object) array_merge([ 151 'discussion' => $parent->discussion, 152 'parent' => $parent->id, 153 'userid' => $author->id, 154 'mailnow' => 1, 155 'subject' => $strre . ' ' . $parent->subject, 156 ], $options); 157 158 $post = $generator->create_post($record); 159 160 return $post; 161 } 162 163 /** 164 * Gets the role id from it's shortname. 165 * 166 * @param string $roleshortname 167 * @return int 168 */ 169 protected function get_role_id($roleshortname) { 170 global $DB; 171 172 return $DB->get_field('role', 'id', ['shortname' => $roleshortname]); 173 } 174 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body