Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402]
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 * Forum Exporter factory. 19 * 20 * @package mod_forum 21 * @copyright 2019 Ryan Wyllie <ryan@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace mod_forum\local\factories; 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 use mod_forum\local\entities\discussion as discussion_entity; 30 use mod_forum\local\entities\forum as forum_entity; 31 use mod_forum\local\entities\post as post_entity; 32 use mod_forum\local\entities\post_read_receipt_collection as post_read_receipt_collection_entity; 33 use mod_forum\local\factories\legacy_data_mapper as legacy_data_mapper_factory; 34 use mod_forum\local\factories\manager as manager_factory; 35 use mod_forum\local\factories\url as url_factory; 36 use mod_forum\local\factories\vault as vault_factory; 37 use mod_forum\local\exporters\forum as forum_exporter; 38 use mod_forum\local\exporters\discussion as discussion_exporter; 39 use mod_forum\local\exporters\discussion_summaries as discussion_summaries_exporter; 40 use mod_forum\local\exporters\post as post_exporter; 41 use mod_forum\local\exporters\posts as posts_exporter; 42 use context; 43 use rating; 44 use stdClass; 45 46 /** 47 * The exporter factory class used to fetch an instance of the different exporter types. 48 * 49 * See: 50 * https://designpatternsphp.readthedocs.io/en/latest/Creational/SimpleFactory/README.html 51 * 52 * @copyright 2019 Ryan Wyllie <ryan@moodle.com> 53 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 54 */ 55 class exporter { 56 /** @var legacy_data_mapper_factory The factory to fetch a legacy data mapper */ 57 private $legacydatamapperfactory; 58 59 /** @var manager_factory The factory to fetch a new manager */ 60 private $managerfactory; 61 62 /** @var url_factory The factory to create urls */ 63 private $urlfactory; 64 65 /** @var vault_factory The vault factory */ 66 private $vaultfactory; 67 68 /** 69 * Constructor for the exporter factory. 70 * 71 * @param legacy_data_mapper_factory $legacydatamapperfactory The factory to fetch a legacy data mapper instance 72 * @param manager_factory $managerfactory The factory fo fetch a manager instance 73 * @param url_factory $urlfactory The factory to create urls 74 * @param vault_factory $vaultfactory The vault factory 75 */ 76 public function __construct(legacy_data_mapper_factory $legacydatamapperfactory, manager_factory $managerfactory, 77 url_factory $urlfactory, vault_factory $vaultfactory) { 78 $this->legacydatamapperfactory = $legacydatamapperfactory; 79 $this->managerfactory = $managerfactory; 80 $this->urlfactory = $urlfactory; 81 $this->vaultfactory = $vaultfactory; 82 } 83 84 /** 85 * Construct a new forum exporter for the specified user and forum. 86 * 87 * @param stdClass $user The user viewing the forum 88 * @param forum_entity $forum The forum being viewed 89 * @param int $currentgroup The group currently being viewed 90 * @return forum_exporter 91 */ 92 public function get_forum_exporter( 93 stdClass $user, 94 forum_entity $forum, 95 ?int $currentgroup 96 ) : forum_exporter { 97 return new forum_exporter($forum, [ 98 'legacydatamapperfactory' => $this->legacydatamapperfactory, 99 'capabilitymanager' => $this->managerfactory->get_capability_manager($forum), 100 'urlfactory' => $this->urlfactory, 101 'user' => $user, 102 'currentgroup' => $currentgroup, 103 'vaultfactory' => $this->vaultfactory, 104 ]); 105 } 106 107 /** 108 * Fetch the structure of the forum exporter. 109 * 110 * @return array 111 */ 112 public static function get_forum_export_structure() : array { 113 return forum_exporter::read_properties_definition(); 114 } 115 116 /** 117 * Construct a new discussion exporter for the specified user and forum discussion. 118 * 119 * @param stdClass $user The user viewing the forum 120 * @param forum_entity $forum The forum being viewed 121 * @param discussion_entity $discussion The discussion being viewed 122 * @param stdClass[] $groupsbyid The list of groups in the forum 123 * @return discussion_exporter 124 */ 125 public function get_discussion_exporter( 126 stdClass $user, 127 forum_entity $forum, 128 discussion_entity $discussion, 129 array $groupsbyid = [], 130 array $favouriteids = [] 131 ) : discussion_exporter { 132 return new discussion_exporter($discussion, [ 133 'context' => $forum->get_context(), 134 'forum' => $forum, 135 'capabilitymanager' => $this->managerfactory->get_capability_manager($forum), 136 'urlfactory' => $this->urlfactory, 137 'user' => $user, 138 'legacydatamapperfactory' => $this->legacydatamapperfactory, 139 'latestpostid' => null, 140 'groupsbyid' => $groupsbyid, 141 'favouriteids' => $favouriteids 142 ]); 143 } 144 145 /** 146 * Fetch the structure of the discussion exporter. 147 * 148 * @return array 149 */ 150 public static function get_discussion_export_structure() { 151 return discussion_exporter::read_properties_definition(); 152 } 153 154 /** 155 * Construct a new discussion summaries exporter for the specified user and set of discussions. 156 * 157 * @param stdClass $user The user viewing the forum 158 * @param forum_entity $forum The forum being viewed 159 * @param discussion_summary_entity[] $discussions The set of discussion summaries to export 160 * @param stdClass[] $groupsbyauthorid The set of groups in an associative array for each author 161 * @param stdClass[] $groupsbyid The set of groups in the forum in an associative array for each group 162 * @param int[] $discussionreplycount The number of replies for each discussion 163 * @param int[] $discussionunreadcount The number of unread posts for each discussion 164 * @param int[] $latestpostids The latest post id for each discussion 165 * @param int[] $postauthorcontextids The context ids for the first and last post authors (indexed by author id) 166 * @param int[] $favourites The list of discussion ids that have been favourited 167 * @return discussion_summaries_exporter 168 */ 169 public function get_discussion_summaries_exporter( 170 stdClass $user, 171 forum_entity $forum, 172 array $discussions, 173 array $groupsbyid = [], 174 array $groupsbyauthorid = [], 175 array $discussionreplycount = [], 176 array $discussionunreadcount = [], 177 array $latestpostids = [], 178 array $postauthorcontextids = [], 179 array $favourites = [], 180 array $latestauthors = [] 181 ) : discussion_summaries_exporter { 182 return new discussion_summaries_exporter( 183 $discussions, 184 $groupsbyid, 185 $groupsbyauthorid, 186 $discussionreplycount, 187 $discussionunreadcount, 188 $latestpostids, 189 $postauthorcontextids, 190 [ 191 'legacydatamapperfactory' => $this->legacydatamapperfactory, 192 'context' => $forum->get_context(), 193 'forum' => $forum, 194 'capabilitymanager' => $this->managerfactory->get_capability_manager($forum), 195 'urlfactory' => $this->urlfactory, 196 'user' => $user, 197 'favouriteids' => $favourites, 198 'latestauthors' => $latestauthors 199 ] 200 ); 201 } 202 203 /** 204 * Fetch the structure of the discussion summaries exporter. 205 * 206 * @return array 207 */ 208 public static function get_discussion_summaries_export_structure() { 209 return discussion_summaries_exporter::read_properties_definition(); 210 } 211 212 /** 213 * Construct a new post exporter for the specified user and set of post. 214 * 215 * @param stdClass $user The user viewing the forum 216 * @param forum_entity $forum The forum being viewed 217 * @param discussion_entity $discussion The discussion that the post is in 218 * @param post_entity[] $posts The set of posts to be exported 219 * @param author_entity[] $authorsbyid List of authors indexed by author id 220 * @param int[] $authorcontextids List of authors context ids indexed by author id 221 * @param array $attachmentsbypostid List of attachments for each post indexed by post id 222 * @param array $groupsbyauthorid List of groups for the post authors indexed by author id 223 * @param post_read_receipt_collection_entity|null $readreceiptcollection Details of read receipts for each post 224 * @param array $tagsbypostid List of tags for each post indexed by post id 225 * @param rating[] $ratingbypostid List of ratings for each post indexed by post id 226 * @param bool $includehtml Include some pre-constructed HTML in the export 227 * @param array $inlineattachmentsbypostid List of attachments for each post indexed by post id 228 * @return posts_exporter 229 */ 230 public function get_posts_exporter( 231 stdClass $user, 232 forum_entity $forum, 233 discussion_entity $discussion, 234 array $posts, 235 array $authorsbyid = [], 236 array $authorcontextids = [], 237 array $attachmentsbypostid = [], 238 array $groupsbyauthorid = [], 239 post_read_receipt_collection_entity $readreceiptcollection = null, 240 array $tagsbypostid = [], 241 array $ratingbypostid = [], 242 bool $includehtml = false, 243 array $inlineattachmentsbypostid = [] 244 ) : posts_exporter { 245 return new posts_exporter( 246 $posts, 247 $authorsbyid, 248 $authorcontextids, 249 $attachmentsbypostid, 250 $groupsbyauthorid, 251 $tagsbypostid, 252 $ratingbypostid, 253 [ 254 'capabilitymanager' => $this->managerfactory->get_capability_manager($forum), 255 'urlfactory' => $this->urlfactory, 256 'forum' => $forum, 257 'discussion' => $discussion, 258 'user' => $user, 259 'context' => $forum->get_context(), 260 'readreceiptcollection' => $readreceiptcollection, 261 'includehtml' => $includehtml 262 ], 263 $inlineattachmentsbypostid 264 ); 265 } 266 267 /** 268 * Fetch the structure of the posts exporter. 269 * 270 * @return array 271 */ 272 public static function get_posts_export_structure() { 273 return posts_exporter::read_properties_definition(); 274 } 275 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body