027aeb0ef979130b33cbd3d3f19e75cc7868026b
[moodle.git] / grade / grading / tests / fixtures / marking_guide.php
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/>.
17 /**
18  * A test guide class fixture.
19  *
20  * @package    core_grading
21  * @category   test
22  * @copyright  2018 Adrian Greeve <adriangreeve.com>
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 defined('MOODLE_INTERNAL') || die();
28 /**
29  * Convenience class to create marking guides.
30  *
31  * @copyright  2018 Adrian Greeve <adriangreeve.com>
32  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33  */
34 class test_guide {
36     /** @var array $criteria Criteria for this marking guide. */
37     protected $criteria = [];
38     /** @var context $context The context that this marking guide is used in. */
39     protected $context;
40     /** @var string $name The name of this marking guide. */
41     protected $name;
42     /** @var string $text A description of this marking guide. */
43     protected $text;
44     /** @var integer $criterionid The current id for the criterion. */
45     protected $criterionid = 0;
46     /** @var integer $sortorder The current id for the sort order. */
47     protected $sortorder = 0;
49     /** @var grading_manager $manager The grading manager to handle creating the real marking guide. */
50     public $manager;
52     /**
53      * The constuctor for this test_guide object.
54      *
55      * @param context $context The context that this marking guide is used in.
56      * @param string $name The name of the marking guide.
57      * @param string $text The description of the marking guide.
58      */
59     public function __construct($context, $name, $text) {
60         $this->context = $context;
61         $this->name = $name;
62         $this->text = $text;
63         $this->manager = get_grading_manager();
64         $this->manager->set_context($context);
65         $this->manager->set_component('mod_assign');
66         $this->manager->set_area('submission');
67     }
69     /**
70      * Uses the appropriate data and APIs to create a marking guide.
71      */
72     public function create_guide() {
74         $data = (object) [
75             'areaid' => $this->context->id,
76             'returnurl' => '',
77             'name' => $this->name,
78             'description_editor' => [
79                 'text' => $this->text,
80                 'format' => 1,
81                 'itemid' => 1
82             ],
83             'guide' => [
84                 'criteria' => $this->criteria,
85                 'options' => [
86                     'alwaysshowdefinition' => 1,
87                     'showmarkspercriterionstudents' => 1
88                 ],
89                 'comments' => []
90             ],
91             'saveguide' => 'Continue',
92             'status' => 20
93         ];
95         $controller = $this->manager->get_controller('guide');
96         $controller->update_definition($data);
97     }
99     /**
100      * Adds criteria to the marking guide.
101      *
102      * @param string $shortname The shortname for the criterion.
103      * @param string $description The description for the criterion.
104      * @param string $descriptionmarkers The description for the marker for this criterion.
105      * @param int $maxscore The maximum score possible for this criterion.
106      */
107     public function add_criteria($shortname, $description, $descriptionmarkers, $maxscore) {
108         $this->criterionid++;
109         $this->sortorder++;
110         $this->criteria['NEWID' . $this->criterionid] = [
111             'sortorder' => $this->sortorder,
112             'shortname' => $shortname,
113             'description' => $description,
114             'descriptionmarkers' => $descriptionmarkers,
115             'maxscore' => $maxscore
116         ];
117     }