Ir a la última revisión | Autoría | Comparar con el anterior | 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/>.defined('MOODLE_INTERNAL') || die();/*** assign module data generator class** @package mod_assign* @category test* @copyright 2012 Paul Charsley* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class mod_assign_generator extends testing_module_generator {/*** Create a new instance of the assignment activity.** @param array|stdClass|null $record* @param array|null $options* @return stdClass*/public function create_instance($record = null, array $options = null) {$record = (object)(array)$record;$defaultsettings = array('alwaysshowdescription' => 1,'submissiondrafts' => 1,'requiresubmissionstatement' => 0,'sendnotifications' => 0,'sendstudentnotifications' => 1,'sendlatenotifications' => 0,'duedate' => 0,'allowsubmissionsfromdate' => 0,'grade' => 100,'cutoffdate' => 0,'gradingduedate' => 0,'teamsubmission' => 0,'requireallteammemberssubmit' => 0,'teamsubmissiongroupingid' => 0,'blindmarking' => 0,'attemptreopenmethod' => 'none','maxattempts' => -1,'markingworkflow' => 0,'markingallocation' => 0,'markinganonymous' => 0,'activityformat' => 0,'timelimit' => 0,'submissionattachments' => 0,);if (property_exists($record, 'teamsubmissiongroupingid')) {$record->teamsubmissiongroupingid = $this->get_grouping_id($record->teamsubmissiongroupingid);}foreach ($defaultsettings as $name => $value) {if (!isset($record->{$name})) {$record->{$name} = $value;}}return parent::create_instance($record, (array)$options);}/*** Create an assignment submission.** @param array $data*/public function create_submission(array $data): void {global $USER;$currentuser = $USER;$user = \core_user::get_user($data['userid']);$this->set_user($user);$submission = (object) ['userid' => $user->id,];[$course, $cm] = get_course_and_cm_from_cmid($data['assignid'], 'assign');$context = context_module::instance($cm->id);$assign = new assign($context, $cm, $course);foreach ($assign->get_submission_plugins() as $plugin) {$pluginname = $plugin->get_type();if (array_key_exists($pluginname, $data)) {$plugingenerator = $this->datagenerator->get_plugin_generator("assignsubmission_{$pluginname}");$plugingenerator->add_submission_data($submission, $assign, $data);}}$assign->save_submission((object) $submission, $notices);$this->set_user($currentuser);}/*** Gets the grouping id from it's idnumber.** @throws Exception* @param string $idnumber* @return int*/protected function get_grouping_id(string $idnumber): int {global $DB;// Do not fetch grouping ID for empty grouping idnumber.if (empty($idnumber)) {return null;}if (!$id = $DB->get_field('groupings', 'id', ['idnumber' => $idnumber])) {if (is_numeric($idnumber)) {return $idnumber;}throw new Exception('The specified grouping with idnumber "' . $idnumber . '" does not exist');}return $id;}/*** Create an assign override (either user or group).** @param array $data must specify assignid, and one of userid or groupid.* @throws coding_exception*/public function create_override(array $data): void {global $DB;if (!isset($data['assignid'])) {throw new coding_exception('Must specify assignid when creating an assign override.');}if (!isset($data['userid']) && !isset($data['groupid'])) {throw new coding_exception('Must specify one of userid or groupid when creating an assign override.');}if (isset($data['userid']) && isset($data['groupid'])) {throw new coding_exception('Cannot specify both userid and groupid when creating an assign override.');}$DB->insert_record('assign_overrides', (object) $data);}}