AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Behat data generator for mod_forum.** @package mod_forum* @category test* @copyright 2021 Noel De Martin* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class behat_mod_forum_generator extends behat_generator_base {/*** Get a list of the entities that Behat can create using the generator step.** @return array*/protected function get_creatable_entities(): array {return ['discussions' => ['singular' => 'discussion','datagenerator' => 'discussion','required' => ['forum'],'switchids' => ['forum' => 'forumid', 'user' => 'userid', 'group' => 'groupid'],],'posts' => ['singular' => 'post','datagenerator' => 'post','required' => [],'switchids' => ['forum' => 'forumid', 'user' => 'userid'],],];}/*** Get the forum id using an activity idnumber or name.** @param string $idnumberorname The forum activity idnumber or name.* @return int The forum id*/protected function get_forum_id(string $idnumberorname): int {return $this->get_cm_by_activity_name('forum', $idnumberorname)->instance;}/*** Gets the group id from it's idnumber. It allows using 'All participants' as idnumber.** @throws Exception* @param string $idnumber* @return int*/protected function get_group_id($idnumber): int {if ($idnumber === 'All participants') {return -1;}return parent::get_group_id($idnumber);}/*** Preprocess discussion data.** @param array $data Raw data.* @return array Processed data.*/protected function preprocess_discussion(array $data) {global $DB, $USER;$forum = $DB->get_record('forum', ['id' => $data['forumid']]);unset($data['course']);unset($data['forumid']);return array_merge(['course' => $forum->course,'forum' => $forum->id,'userid' => $USER->id,], $data);}/*** Preprocess post data.** @param array $data Raw data.* @return array Processed data.*/protected function preprocess_post(array $data) {global $DB, $USER;// Get discussion from name.$discussionfilters = array_filter(['name' => $data['discussion'] ?? null,'forum' => $data['forumid'] ?? null,]);if (!empty($discussionfilters)) {if (!$discussionid = $DB->get_field('forum_discussions', 'id', $discussionfilters)) {throw new Exception('The specified discussion with name "' . $data['name'] . '" could not be found.');}$data['discussion'] = $discussionid;unset($data['forumid']);}// Get discussion from parent.$parentfilters = array_filter(['subject' => $data['parentsubject'] ?? null,]);if (!empty($parentfilters)) {if (isset($discussionid)) {$parentfilters['discussion'] = $discussionid;}if (!$parent = $DB->get_record('forum_posts', $parentfilters)) {$parentdescription = implode(' and ', array_filter([isset($parentfilters['subject']) ? 'subject "' . $parentfilters['subject'] . '"' : null,]));throw new Exception('The specified post with ' . $parentdescription . ' could not be found.');}$data['parent'] = $parent->id;$data['discussion'] = $parent->discussion;unset($data['parentsubject']);}// Return processed data.if (!isset($data['discussion'])) {throw new Exception('It was not possible to find a discussion to create a post, '.'please specify discussion or parentsubject.');}return array_merge(['userid' => $USER->id], $data);}}