Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
 * The main mod_h5pactivity configuration form.
19
 *
20
 * @package     mod_h5pactivity
21
 * @copyright   2020 Ferran Recio <ferran@moodle.com>
22
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
use mod_h5pactivity\local\manager;
26
 
27
defined('MOODLE_INTERNAL') || die();
28
 
29
global $CFG;
30
require_once($CFG->dirroot.'/course/moodleform_mod.php');
31
 
32
/**
33
 * Module instance settings form.
34
 *
35
 * @package    mod_h5pactivity
36
 * @copyright  2020 Ferran Recio <ferran@moodle.com>
37
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38
 */
39
class mod_h5pactivity_mod_form extends moodleform_mod {
40
 
41
    /**
42
     * Defines forms elements
43
     */
44
    public function definition(): void {
45
        global $CFG, $OUTPUT;
46
 
47
        $mform = $this->_form;
48
 
49
        // Adding the "general" fieldset, where all the common settings are shown.
50
        $mform->addElement('header', 'general', get_string('general', 'form'));
51
 
52
        // Adding the standard "name" field.
53
        $mform->addElement('text', 'name', get_string('name'), ['size' => '64']);
54
 
55
        if (!empty($CFG->formatstringstriptags)) {
56
            $mform->setType('name', PARAM_TEXT);
57
        } else {
58
            $mform->setType('name', PARAM_CLEANHTML);
59
        }
60
 
61
        $mform->addRule('name', null, 'required', null, 'client');
62
        $mform->addRule('name', get_string('maximumchars', '', 255), 'maxlength', 255, 'client');
63
 
64
        $this->standard_intro_elements();
65
 
66
        // Adding the rest of mod_h5pactivity settings, spreading all them into this fieldset.
67
        $options = [];
68
        $options['accepted_types'] = ['.h5p'];
69
        $options['maxbytes'] = 0;
70
        $options['maxfiles'] = 1;
71
        $options['subdirs'] = 0;
72
 
73
        $mform->addElement('filemanager', 'packagefile', get_string('package', 'mod_h5pactivity'), null, $options);
74
        $mform->addHelpButton('packagefile', 'package', 'mod_h5pactivity');
75
        $mform->addRule('packagefile', null, 'required');
76
 
77
        // Add a link to the Content Bank if the user can access.
78
        $course = $this->get_course();
79
        $coursecontext = context_course::instance($course->id);
80
        if (has_capability('moodle/contentbank:access', $coursecontext)) {
81
            $msg = null;
82
            $context = $this->get_context();
83
            if ($context instanceof \context_module) {
84
                // This is an existing activity. If the H5P file it's a referenced file from the content bank, a link for
85
                // displaying this specific content will be used instead of the generic link to the main page of the content bank.
86
                $fs = get_file_storage();
87
                $files = $fs->get_area_files($context->id, 'mod_h5pactivity', 'package', 0, 'sortorder, itemid, filepath,
88
                    filename', false);
89
                $file = reset($files);
90
                if ($file && $file->get_reference() != null) {
91
                    $referencedfile = \repository::get_moodle_file($file->get_reference());
92
                    if ($referencedfile->get_component() == 'contentbank') {
93
                        // If the attached file is a referencedfile in the content bank, display a link to open this content.
94
                        $url = new moodle_url('/contentbank/view.php', ['id' => $referencedfile->get_itemid()]);
95
                        $msg = get_string('opencontentbank', 'mod_h5pactivity', $url->out());
96
                        $msg .= ' '.$OUTPUT->help_icon('contentbank', 'mod_h5pactivity');
97
                    }
98
                }
99
            }
100
            if (!isset($msg)) {
101
                $url = new moodle_url('/contentbank/index.php', ['contextid' => $coursecontext->id]);
102
                $msg = get_string('usecontentbank', 'mod_h5pactivity', $url->out());
103
                $msg .= ' '.$OUTPUT->help_icon('contentbank', 'mod_h5pactivity');
104
            }
105
 
106
            $mform->addElement('static', 'contentbank', '', $msg);
107
        }
108
 
109
        // H5P displaying options.
110
        $factory = new \core_h5p\factory();
111
        $core = $factory->get_core();
112
        $displayoptions = (array) \core_h5p\helper::decode_display_options($core);
113
        $mform->addElement('header', 'h5pdisplay', get_string('h5pdisplay', 'mod_h5pactivity'));
114
        foreach ($displayoptions as $key => $value) {
115
            $name = get_string('display'.$key, 'mod_h5pactivity');
116
            $fieldname = "displayopt[$key]";
117
            $mform->addElement('checkbox', $fieldname, $name);
118
            $mform->setType($fieldname, PARAM_BOOL);
119
        }
120
 
121
        // Add standard grading elements.
122
        $this->standard_grading_coursemodule_elements();
123
 
124
        // Attempt options.
125
        $mform->addElement('header', 'h5pattempts', get_string('h5pattempts', 'mod_h5pactivity'));
126
 
127
        $mform->addElement('static', 'trackingwarning', '', get_string('tracking_messages', 'mod_h5pactivity'));
128
 
129
        $options = [1 => get_string('yes'), 0 => get_string('no')];
130
        $mform->addElement('select', 'enabletracking', get_string('enabletracking', 'mod_h5pactivity'), $options);
131
        $mform->setDefault('enabletracking', 1);
132
 
133
        $options = manager::get_grading_methods();
134
        $mform->addElement('select', 'grademethod', get_string('grade_grademethod', 'mod_h5pactivity'), $options);
135
        $mform->setType('grademethod', PARAM_INT);
136
        $mform->hideIf('grademethod', 'enabletracking', 'neq', 1);
137
        $mform->disabledIf('grademethod', 'grade[modgrade_type]', 'neq', 'point');
138
        $mform->addHelpButton('grademethod', 'grade_grademethod', 'mod_h5pactivity');
139
 
140
        $options = manager::get_review_modes();
141
        $mform->addElement('select', 'reviewmode', get_string('review_mode', 'mod_h5pactivity'), $options);
142
        $mform->setType('reviewmode', PARAM_INT);
143
        $mform->hideIf('reviewmode', 'enabletracking', 'neq', 1);
144
 
145
        // Add standard elements.
146
        $this->standard_coursemodule_elements();
147
 
148
        // Add standard buttons.
149
        $this->add_action_buttons();
150
    }
151
 
152
    /**
153
     * Enforce validation rules here
154
     *
155
     * @param array $data array of ("fieldname"=>value) of submitted data
156
     * @param array $files array of uploaded files "element_name"=>tmp_file_path
157
     * @return array
158
     **/
159
    public function validation($data, $files) {
160
        global $USER;
161
        $errors = parent::validation($data, $files);
162
 
163
        if (empty($data['packagefile'])) {
164
            $errors['packagefile'] = get_string('required');
165
 
166
        } else {
167
            $draftitemid = file_get_submitted_draft_itemid('packagefile');
168
 
169
            file_prepare_draft_area($draftitemid, $this->context->id, 'mod_h5pactivity', 'packagefilecheck', null,
170
                ['subdirs' => 0, 'maxfiles' => 1]);
171
 
172
            // Get file from users draft area.
173
            $usercontext = context_user::instance($USER->id);
174
            $fs = get_file_storage();
175
            $files = $fs->get_area_files($usercontext->id, 'user', 'draft', $draftitemid, 'id', false);
176
 
177
            if (count($files) < 1) {
178
                $errors['packagefile'] = get_string('required');
179
                return $errors;
180
            }
181
            $file = reset($files);
182
            if (!$file->is_external_file() && !empty($data['updatefreq'])) {
183
                // Make sure updatefreq is not set if using normal local file.
184
                $errors['updatefreq'] = get_string('updatefreq_error', 'mod_h5pactivity');
185
            }
186
        }
187
 
188
        return $errors;
189
    }
190
 
191
    /**
192
     * Enforce defaults here.
193
     *
194
     * @param array $defaultvalues Form defaults
195
     * @return void
196
     **/
197
    public function data_preprocessing(&$defaultvalues) {
198
        // H5P file.
199
        $draftitemid = file_get_submitted_draft_itemid('packagefile');
200
        file_prepare_draft_area($draftitemid, $this->context->id, 'mod_h5pactivity',
201
                'package', 0, ['subdirs' => 0, 'maxfiles' => 1]);
202
        $defaultvalues['packagefile'] = $draftitemid;
203
 
204
        // H5P display options.
205
        $factory = new \core_h5p\factory();
206
        $core = $factory->get_core();
207
        if (isset($defaultvalues['displayoptions'])) {
208
            $currentdisplay = $defaultvalues['displayoptions'];
209
            $displayoptions = (array) \core_h5p\helper::decode_display_options($core, $currentdisplay);
210
        } else {
211
            $displayoptions = (array) \core_h5p\helper::decode_display_options($core);
212
        }
213
        foreach ($displayoptions as $key => $value) {
214
            $fieldname = "displayopt[$key]";
215
            $defaultvalues[$fieldname] = $value;
216
        }
217
    }
218
 
219
    /**
220
     * Allows modules to modify the data returned by form get_data().
221
     * This method is also called in the bulk activity completion form.
222
     *
223
     * Only available on moodleform_mod.
224
     *
225
     * @param stdClass $data passed by reference
226
     */
227
    public function data_postprocessing($data) {
228
        parent::data_postprocessing($data);
229
 
230
        $factory = new \core_h5p\factory();
231
        $core = $factory->get_core();
232
        if (isset($data->displayopt)) {
233
            $config = (object) $data->displayopt;
234
        } else {
235
            $config = \core_h5p\helper::decode_display_options($core);
236
        }
237
        $data->displayoptions = \core_h5p\helper::get_display_options($core, $config);
238
 
239
        if (!isset($data->enabletracking)) {
240
            $data->enabletracking = 0;
241
        }
242
    }
243
}