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 * This file contains the function for feedback_plugin abstract class
19 *
20 * @package   mod_assign
21 * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
22 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25defined('MOODLE_INTERNAL') || die();
26
27require_once($CFG->dirroot.'/mod/assign/assignmentplugin.php');
28
29/**
30 * Abstract class for feedback_plugin inherited from assign_plugin abstract class.
31 *
32 * @package   mod_assign
33 * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
34 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35 */
36abstract class assign_feedback_plugin extends assign_plugin {
37
38    /**
39     * Return subtype name of the plugin.
40     *
41     * @return string
42     */
43    public function get_subtype() {
44        return 'assignfeedback';
45    }
46
47    /**
48     * If this plugin adds to the gradebook comments field, it must specify the format
49     * of the comment.
50     *
51     * (From weblib.php)
52     * define('FORMAT_MOODLE',   '0');   // Does all sorts of transformations and filtering
53     * define('FORMAT_HTML',     '1');   // Plain HTML (with some tags stripped)
54     * define('FORMAT_PLAIN',    '2');   // Plain text (even tags are printed in full)
55     * define('FORMAT_WIKI',     '3');   // Wiki-formatted text
56     * define('FORMAT_MARKDOWN', '4');   // Markdown-formatted
57     *
58     * Only one feedback plugin can push comments to the gradebook and that is chosen by the assignment
59     * settings page.
60     *
61     * @param stdClass $grade The grade
62     * @return int
63     */
64    public function format_for_gradebook(stdClass $grade) {
65        return FORMAT_MOODLE;
66    }
67
68    /**
69     * If this plugin adds to the gradebook comments field, it must format the text
70     * of the comment.
71     *
72     * Only one feedback plugin can push comments to the gradebook and that is chosen by the assignment
73     * settings page.
74     *
75     * @param stdClass $grade The grade
76     * @return string
77     */
78    public function text_for_gradebook(stdClass $grade) {
79        return '';
80    }
81
82    /**
83     * Return any files this plugin wishes to save to the gradebook.
84     *
85     * The array being returned should contain the necessary information to
86     * identify and copy the files.
87     *
88     * eg.
89     *
90     * [
91     *      'contextid' => $modulecontext->id,
92     *      'component' => ASSIGNFEEDBACK_XYZ_COMPONENT,
93     *      'filearea' => ASSIGNFEEDBACK_XYZ_FILEAREA,
94     *      'itemid' => $grade->id
95     * ]
96     *
97     * @param stdClass $grade The assign_grades object from the db
98     * @return array
99     */
100    public function files_for_gradebook(stdClass $grade) : array {
101        return [];
102    }
103
104    /**
105     * Override to indicate a plugin supports quickgrading.
106     *
107     * @return boolean - True if the plugin supports quickgrading
108     */
109    public function supports_quickgrading() {
110        return false;
111    }
112
113    /**
114     * Get quickgrading form elements as html.
115     *
116     * @param int $userid The user id in the table this quickgrading element relates to
117     * @param mixed $grade grade or null - The grade data.
118     *                     May be null if there are no grades for this user (yet)
119     * @return mixed - A html string containing the html form elements required for
120     *                 quickgrading or false to indicate this plugin does not support quickgrading
121     */
122    public function get_quickgrading_html($userid, $grade) {
123        return false;
124    }
125
126    /**
127     * Has the plugin quickgrading form element been modified in the current form submission?
128     *
129     * @param int $userid The user id in the table this quickgrading element relates to
130     * @param stdClass $grade The grade
131     * @return boolean - true if the quickgrading form element has been modified
132     */
133    public function is_quickgrading_modified($userid, $grade) {
134        return false;
135    }
136
137    /**
138     * Has the plugin form element been modified in the current submission?
139     *
140     * @param stdClass $grade The grade.
141     * @param stdClass $data Form data from the feedback form.
142     * @return boolean - True if the form element has been modified.
143     */
144    public function is_feedback_modified(stdClass $grade, stdClass $data) {
145        debugging('This plugin (' . $this->get_name() . ') has not overwritten the is_feedback_modified() method.
146                Please add this method to your plugin', DEBUG_DEVELOPER);
147        return true;
148    }
149
150    /**
151     * Save quickgrading changes.
152     *
153     * @param int $userid The user id in the table this quickgrading element relates to
154     * @param stdClass $grade The grade
155     * @return boolean - true if the grade changes were saved correctly
156     */
157    public function save_quickgrading_changes($userid, $grade) {
158        return false;
159    }
160
161    /**
162     * Return a list of the batch grading operations supported by this plugin.
163     *
164     * @return array - An array of action and description strings.
165     *                 The action will be passed to grading_batch_operation.
166     */
167    public function get_grading_batch_operations() {
168        return array();
169    }
170
171    /**
172     * Return a list of the grading actions supported by this plugin.
173     *
174     * A grading action is a page that is not specific to a user but to the whole assignment.
175     * @return array - An array of action and description strings.
176     *                 The action will be passed to grading_action.
177     */
178    public function get_grading_actions() {
179        return array();
180    }
181
182    /**
183     * Show a grading action form
184     *
185     * @param string $gradingaction The action chosen from the grading actions menu
186     * @return string The page containing the form
187     */
188    public function grading_action($gradingaction) {
189        return '';
190    }
191
192    /**
193     * Supports injecting content into the review panel of the grading app.
194     *
195     * @return bool True if this plugin will add content to the review panel of the grading app.
196     */
197    public function supports_review_panel() {
198        return false;
199    }
200
201    /**
202     * Show a batch operations form
203     *
204     * @param string $action The action chosen from the batch operations menu
205     * @param array $users The list of selected userids
206     * @return string The page containing the form
207     */
208    public function grading_batch_operation($action, $users) {
209        return '';
210    }
211}
212