on-demand release 4.0dev+
[moodle.git] / admin / tool / uploadcourse / classes / step2_form.php
CommitLineData
1e3e4efd
FM
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 * Bulk course upload step 2.
19 *
20 * @package tool_uploadcourse
21 * @copyright 2011 Piers Harding
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25defined('MOODLE_INTERNAL') || die();
26
8643c576
DM
27require_once($CFG->dirroot . '/course/lib.php');
28
1e3e4efd
FM
29/**
30 * Specify course upload details.
31 *
32 * @package tool_uploadcourse
33 * @copyright 2011 Piers Harding
34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35 */
7a4ec85e 36class tool_uploadcourse_step2_form extends tool_uploadcourse_base_form {
1e3e4efd
FM
37
38 /**
39 * The standard form definiton.
40 * @return void.
41 */
42 public function definition () {
22b3be36 43 global $CFG;
1e3e4efd
FM
44
45 $mform = $this->_form;
46 $data = $this->_customdata['data'];
47 $courseconfig = get_config('moodlecourse');
48
7a4ec85e
FM
49 // Import options.
50 $this->add_import_options();
51
52 // Course options.
53 $mform->addElement('header', 'courseoptionshdr', get_string('courseprocess', 'tool_uploadcourse'));
54 $mform->setExpanded('courseoptionshdr', true);
55
3f57c87e
FM
56 $mform->addElement('text', 'options[shortnametemplate]', get_string('shortnametemplate', 'tool_uploadcourse'),
57 'maxlength="100" size="20"');
7a4ec85e
FM
58 $mform->setType('options[shortnametemplate]', PARAM_RAW);
59 $mform->addHelpButton('options[shortnametemplate]', 'shortnametemplate', 'tool_uploadcourse');
223fc57d
DS
60 $mform->hideIf('options[shortnametemplate]', 'options[mode]', 'eq', tool_uploadcourse_processor::MODE_CREATE_OR_UPDATE);
61 $mform->hideIf('options[shortnametemplate]', 'options[mode]', 'eq', tool_uploadcourse_processor::MODE_UPDATE_ONLY);
7a4ec85e 62
8a4b2b94 63 // Restore file is not in the array options on purpose, because formslib can't handle it!
7a4ec85e
FM
64 $contextid = $this->_customdata['contextid'];
65 $mform->addElement('hidden', 'contextid', $contextid);
66 $mform->setType('contextid', PARAM_INT);
8a4b2b94
FM
67 $mform->addElement('filepicker', 'restorefile', get_string('templatefile', 'tool_uploadcourse'));
68 $mform->addHelpButton('restorefile', 'templatefile', 'tool_uploadcourse');
7a4ec85e
FM
69
70 $mform->addElement('text', 'options[templatecourse]', get_string('coursetemplatename', 'tool_uploadcourse'));
71 $mform->setType('options[templatecourse]', PARAM_TEXT);
72 $mform->addHelpButton('options[templatecourse]', 'coursetemplatename', 'tool_uploadcourse');
1e3e4efd
FM
73
74 $mform->addElement('selectyesno', 'options[reset]', get_string('reset', 'tool_uploadcourse'));
75 $mform->setDefault('options[reset]', 0);
223fc57d
DS
76 $mform->hideIf('options[reset]', 'options[mode]', 'eq', tool_uploadcourse_processor::MODE_CREATE_NEW);
77 $mform->hideIf('options[reset]', 'options[mode]', 'eq', tool_uploadcourse_processor::MODE_CREATE_ALL);
7a4ec85e 78 $mform->disabledIf('options[reset]', 'options[allowresets]', 'eq', 0);
c8a66109 79 $mform->addHelpButton('options[reset]', 'reset', 'tool_uploadcourse');
1e3e4efd
FM
80
81 // Default values.
82 $mform->addElement('header', 'defaultheader', get_string('defaultvalues', 'tool_uploadcourse'));
83 $mform->setExpanded('defaultheader', true);
84
442f12f8 85 $displaylist = core_course_category::make_categories_list('moodle/course:create');
93d72205 86 $mform->addElement('autocomplete', 'defaults[category]', get_string('coursecategory'), $displaylist);
0645319e 87 $mform->addRule('defaults[category]', null, 'required', null, 'client');
1e3e4efd
FM
88 $mform->addHelpButton('defaults[category]', 'coursecategory');
89
90 $choices = array();
91 $choices['0'] = get_string('hide');
92 $choices['1'] = get_string('show');
ba17a2c3
JB
93 $mform->addElement('select', 'defaults[visible]', get_string('coursevisibility'), $choices);
94 $mform->addHelpButton('defaults[visible]', 'coursevisibility');
7a4ec85e 95 $mform->setDefault('defaults[visible]', $courseconfig->visible);
1e3e4efd 96
23765039
PH
97 if ($CFG->downloadcoursecontentallowed &&
98 has_capability('moodle/course:configuredownloadcontent', context::instance_by_id($contextid))) {
99
100 $downloadchoices = [
101 DOWNLOAD_COURSE_CONTENT_DISABLED => get_string('no'),
102 DOWNLOAD_COURSE_CONTENT_ENABLED => get_string('yes'),
103 ];
104
105 $sitedefaultstring = $downloadchoices[$courseconfig->downloadcontentsitedefault];
106 $downloadchoices[DOWNLOAD_COURSE_CONTENT_SITE_DEFAULT] = get_string('sitedefaultspecified', '', $sitedefaultstring);
107 $downloadselectdefault = $courseconfig->downloadcontent ?? DOWNLOAD_COURSE_CONTENT_SITE_DEFAULT;
108
109 $mform->addElement('select', 'defaults[downloadcontent]', get_string('enabledownloadcoursecontent', 'course'),
110 $downloadchoices);
111 $mform->addHelpButton('defaults[downloadcontent]', 'downloadcoursecontent', 'course');
112 $mform->setDefault('defaults[downloadcontent]', $downloadselectdefault);
113 }
114
57422d71 115 $mform->addElement('date_time_selector', 'defaults[startdate]', get_string('startdate'));
1e3e4efd
FM
116 $mform->addHelpButton('defaults[startdate]', 'startdate');
117 $mform->setDefault('defaults[startdate]', time() + 3600 * 24);
118
57422d71 119 $mform->addElement('date_time_selector', 'defaults[enddate]', get_string('enddate'), array('optional' => true));
fbcdb0d7 120 $mform->addHelpButton('defaults[enddate]', 'enddate');
fbcdb0d7 121
1e3e4efd
FM
122 $courseformats = get_sorted_course_formats(true);
123 $formcourseformats = array();
124 foreach ($courseformats as $courseformat) {
125 $formcourseformats[$courseformat] = get_string('pluginname', "format_$courseformat");
126 }
127 $mform->addElement('select', 'defaults[format]', get_string('format'), $formcourseformats);
128 $mform->addHelpButton('defaults[format]', 'format');
129 $mform->setDefault('defaults[format]', $courseconfig->format);
130
131 if (!empty($CFG->allowcoursethemes)) {
132 $themeobjects = get_list_of_themes();
133 $themes=array();
134 $themes[''] = get_string('forceno');
135 foreach ($themeobjects as $key => $theme) {
136 if (empty($theme->hidefromselector)) {
137 $themes[$key] = get_string('pluginname', 'theme_'.$theme->name);
138 }
139 }
140 $mform->addElement('select', 'defaults[theme]', get_string('forcetheme'), $themes);
141 }
142
3f57c87e 143 $languages = array();
1e3e4efd
FM
144 $languages[''] = get_string('forceno');
145 $languages += get_string_manager()->get_list_of_translations();
146 $mform->addElement('select', 'defaults[lang]', get_string('forcelanguage'), $languages);
147 $mform->setDefault('defaults[lang]', $courseconfig->lang);
148
149 $options = range(0, 10);
150 $mform->addElement('select', 'defaults[newsitems]', get_string('newsitemsnumber'), $options);
151 $mform->addHelpButton('defaults[newsitems]', 'newsitemsnumber');
152 $mform->setDefault('defaults[newsitems]', $courseconfig->newsitems);
153
154 $mform->addElement('selectyesno', 'defaults[showgrades]', get_string('showgrades'));
155 $mform->addHelpButton('defaults[showgrades]', 'showgrades');
156 $mform->setDefault('defaults[showgrades]', $courseconfig->showgrades);
157
158 $mform->addElement('selectyesno', 'defaults[showreports]', get_string('showreports'));
159 $mform->addHelpButton('defaults[showreports]', 'showreports');
160 $mform->setDefault('defaults[showreports]', $courseconfig->showreports);
161
162 if (!empty($CFG->legacyfilesinnewcourses)) {
1e3e4efd
FM
163 $mform->addElement('select', 'defaults[legacyfiles]', get_string('courselegacyfiles'), $choices);
164 $mform->addHelpButton('defaults[legacyfiles]', 'courselegacyfiles');
165 if (!isset($courseconfig->legacyfiles)) {
166 $courseconfig->legacyfiles = 0;
167 }
168 $mform->setDefault('defaults[legacyfiles]', $courseconfig->legacyfiles);
169 }
170
171 $choices = get_max_upload_sizes($CFG->maxbytes);
172 $mform->addElement('select', 'defaults[maxbytes]', get_string('maximumupload'), $choices);
173 $mform->addHelpButton('defaults[maxbytes]', 'maximumupload');
174 $mform->setDefault('defaults[maxbytes]', $courseconfig->maxbytes);
175
176 $choices = array();
177 $choices[NOGROUPS] = get_string('groupsnone', 'group');
178 $choices[SEPARATEGROUPS] = get_string('groupsseparate', 'group');
179 $choices[VISIBLEGROUPS] = get_string('groupsvisible', 'group');
180 $mform->addElement('select', 'defaults[groupmode]', get_string('groupmode', 'group'), $choices);
181 $mform->addHelpButton('defaults[groupmode]', 'groupmode', 'group');
182 $mform->setDefault('defaults[groupmode]', $courseconfig->groupmode);
183
184 $mform->addElement('selectyesno', 'defaults[groupmodeforce]', get_string('groupmodeforce', 'group'));
185 $mform->addHelpButton('defaults[groupmodeforce]', 'groupmodeforce', 'group');
186 $mform->setDefault('defaults[groupmodeforce]', $courseconfig->groupmodeforce);
187
ef5fdb37
MG
188 // Completion tracking.
189 if (!empty($CFG->enablecompletion)) {
190 $mform->addElement('selectyesno', 'defaults[enablecompletion]', get_string('enablecompletion', 'completion'));
191 $mform->setDefault('defaults[enablecompletion]', $courseconfig->enablecompletion);
192 $mform->addHelpButton('defaults[enablecompletion]', 'enablecompletion', 'completion');
193 }
194
d62fc08e
PH
195 // Add custom fields to the form.
196 $handler = \core_course\customfield\course_handler::create();
197 $handler->instance_form_definition($mform, 0, 'defaultvaluescustomfieldcategory', 'tool_uploadcourse');
198
1e3e4efd 199 // Hidden fields.
3f57c87e
FM
200 $mform->addElement('hidden', 'importid');
201 $mform->setType('importid', PARAM_INT);
1e3e4efd
FM
202
203 $mform->addElement('hidden', 'previewrows');
204 $mform->setType('previewrows', PARAM_INT);
205
206 $this->add_action_buttons(true, get_string('uploadcourses', 'tool_uploadcourse'));
207
d62fc08e
PH
208 // Prepare custom fields data.
209 $data = (object) $data;
210 $handler->instance_form_before_set_data($data);
211
1e3e4efd
FM
212 $this->set_data($data);
213 }
214
215 /**
216 * Add actopm buttons.
217 *
218 * @param bool $cancel whether to show cancel button, default true
219 * @param string $submitlabel label for submit button, defaults to get_string('savechanges')
220 * @return void
221 */
3f57c87e 222 public function add_action_buttons($cancel = true, $submitlabel = null) {
1e3e4efd
FM
223 $mform =& $this->_form;
224 $buttonarray = array();
7a4ec85e 225 $buttonarray[] = &$mform->createElement('submit', 'showpreview', get_string('preview', 'tool_uploadcourse'));
1e3e4efd
FM
226 $buttonarray[] = &$mform->createElement('submit', 'submitbutton', $submitlabel);
227 $buttonarray[] = &$mform->createElement('cancel');
228 $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
229 $mform->closeHeaderBefore('buttonar');
230 }
231
8643c576
DM
232 /**
233 * Sets the enddate default after set_data is called.
234 */
235 public function definition_after_data() {
236
237 $mform = $this->_form;
238
239 // The default end date depends on the course format.
240 $format = course_get_format((object)array('format' => get_config('moodlecourse', 'format')));
241
33a3ec7c
AB
242 // Check if course end date form field should be enabled by default.
243 // If a default date is provided to the form element, it is magically enabled by default in the
244 // MoodleQuickForm_date_time_selector class, otherwise it's disabled by default.
245 if (get_config('moodlecourse', 'courseenddateenabled')) {
246 $enddate = $format->get_default_course_enddate($mform, array('startdate' => 'defaults[startdate]'));
247 $mform->setDefault('defaults[enddate]', $enddate);
248 }
d62fc08e
PH
249
250 // Tweak the form with values provided by custom fields in use.
251 \core_course\customfield\course_handler::create()->instance_form_definition_after_data($mform);
8643c576
DM
252 }
253
254 /**
255 * Validation.
256 *
257 * @param array $data
258 * @param array $files
259 * @return array the errors that were found
260 */
261 public function validation($data, $files) {
262 global $DB;
263
264 $errors = parent::validation($data, $files);
265
266 if ($errorcode = course_validate_dates($data['defaults'])) {
267 $errors['defaults[enddate]'] = get_string($errorcode, 'error');
268 }
269
d62fc08e
PH
270 // Custom fields validation.
271 array_merge($errors, \core_course\customfield\course_handler::create()->instance_form_validation($data, $files));
272
8643c576
DM
273 return $errors;
274 }
1e3e4efd 275}