Commit | Line | Data |
---|---|---|
a4813c36 | 1 | <?php |
f7b5c6aa DM |
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 | ||
bfebaf64 MD |
17 | if (!defined('MOODLE_INTERNAL')) { |
18 | die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page | |
19 | } | |
20 | ||
ca4eda13 | 21 | require_once($CFG->dirroot.'/course/moodleform_mod.php'); |
a4813c36 | 22 | require_once($CFG->dirroot.'/mod/scorm/locallib.php'); |
23 | ||
24 | class mod_scorm_mod_form extends moodleform_mod { | |
25 | ||
26 | function definition() { | |
6aff538a | 27 | global $CFG, $COURSE, $OUTPUT; |
30fc6e2d | 28 | $cfg_scorm = get_config('scorm'); |
a4813c36 | 29 | |
9528568b | 30 | $mform = $this->_form; |
31 | ||
9528568b | 32 | if (!$CFG->slasharguments) { |
ca4eda13 | 33 | $mform->addElement('static', '', '', $OUTPUT->notification(get_string('slashargs', 'scorm'), 'notifyproblem')); |
01e6c030 | 34 | } |
ca4eda13 | 35 | //------------------------------------------------------------------------------- |
a4813c36 | 36 | $mform->addElement('header', 'general', get_string('general', 'form')); |
37 | ||
ca4eda13 | 38 | // Name |
a4813c36 | 39 | $mform->addElement('text', 'name', get_string('name')); |
8eb1d25f | 40 | if (!empty($CFG->formatstringstriptags)) { |
41 | $mform->setType('name', PARAM_TEXT); | |
42 | } else { | |
b8ea3041 | 43 | $mform->setType('name', PARAM_CLEANHTML); |
8eb1d25f | 44 | } |
a4813c36 | 45 | $mform->addRule('name', null, 'required', null, 'client'); |
46 | ||
ca4eda13 | 47 | // Summary |
ac3668bf | 48 | $this->add_intro_editor(true); |
a4813c36 | 49 | |
ca4eda13 | 50 | // Scorm types |
9528568b | 51 | $options = array(SCORM_TYPE_LOCAL => get_string('typelocal', 'scorm')); |
52 | ||
30fc6e2d | 53 | if ($cfg_scorm->allowtypeexternal) { |
9528568b | 54 | $options[SCORM_TYPE_EXTERNAL] = get_string('typeexternal', 'scorm'); |
55 | } | |
56 | ||
30fc6e2d | 57 | if ($cfg_scorm->allowtypelocalsync) { |
9528568b | 58 | $options[SCORM_TYPE_LOCALSYNC] = get_string('typelocalsync', 'scorm'); |
59 | } | |
60 | ||
30fc6e2d | 61 | if (!empty($CFG->repositoryactivate) and $cfg_scorm->allowtypeimsrepository) { |
9528568b | 62 | $options[SCORM_TYPE_IMSREPOSITORY] = get_string('typeimsrepository', 'scorm'); |
63 | } | |
64 | ||
ca4eda13 | 65 | // Reference |
9528568b | 66 | if (count($options) > 1) { |
e73d5557 | 67 | $mform->addElement('select', 'scormtype', get_string('scormtype', 'scorm'), $options); |
427bcd4d DM |
68 | $mform->addHelpButton('scormtype', 'scormtype', 'scorm'); |
69 | $mform->addElement('text', 'packageurl', get_string('packageurl', 'scorm'), array('size'=>60)); | |
9528568b | 70 | $mform->setType('packageurl', PARAM_RAW); |
427bcd4d | 71 | $mform->addHelpButton('packageurl', 'packageurl', 'scorm'); |
9528568b | 72 | $mform->disabledIf('packageurl', 'scormtype', 'eq', SCORM_TYPE_LOCAL); |
e73d5557 DM |
73 | } else { |
74 | $mform->addElement('hidden', 'scormtype', SCORM_TYPE_LOCAL); | |
9528568b | 75 | } |
76 | ||
ca4eda13 | 77 | // New local package upload |
560417ff | 78 | $maxbytes = get_max_upload_file_size($CFG->maxbytes, $COURSE->maxbytes); |
79 | $mform->setMaxFileSize($maxbytes); | |
ca4eda13 | 80 | $mform->addElement('filepicker', 'packagefile', get_string('package', 'scorm')); |
427bcd4d | 81 | $mform->addHelpButton('packagefile', 'package', 'scorm'); |
9528568b | 82 | $mform->disabledIf('packagefile', 'scormtype', 'noteq', SCORM_TYPE_LOCAL); |
a4813c36 | 83 | |
ca4eda13 DM |
84 | //------------------------------------------------------------------------------- |
85 | // Time restrictions | |
d54e2145 | 86 | $mform->addElement('header', 'timerestricthdr', get_string('timerestrict', 'scorm')); |
d54e2145 | 87 | |
ca4eda13 DM |
88 | $mform->addElement('date_time_selector', 'timeopen', get_string("scormopen", "scorm"), array('optional' => true)); |
89 | $mform->addElement('date_time_selector', 'timeclose', get_string("scormclose", "scorm"), array('optional' => true)); | |
90 | //------------------------------------------------------------------------------- | |
0ffaa76b | 91 | // display Settings |
3c0b04c4 | 92 | $mform->addElement('header', 'displaysettings', get_string('displaysettings', 'scorm')); |
0ffaa76b DM |
93 | // Framed / Popup Window |
94 | $mform->addElement('select', 'popup', get_string('display', 'scorm'), scorm_get_popup_display_array()); | |
95 | $mform->setDefault('popup', $cfg_scorm->popup); | |
96 | $mform->setAdvanced('popup', $cfg_scorm->popup_adv); | |
97 | ||
98 | // Width | |
99 | $mform->addElement('text', 'width', get_string('width', 'scorm'), 'maxlength="5" size="5"'); | |
100 | $mform->setDefault('width', $cfg_scorm->framewidth); | |
101 | $mform->setType('width', PARAM_INT); | |
102 | $mform->setAdvanced('width', $cfg_scorm->framewidth_adv); | |
103 | $mform->disabledIf('width', 'popup', 'eq', 0); | |
104 | ||
105 | // Height | |
106 | $mform->addElement('text', 'height', get_string('height', 'scorm'), 'maxlength="5" size="5"'); | |
107 | $mform->setDefault('height', $cfg_scorm->frameheight); | |
108 | $mform->setType('height', PARAM_INT); | |
109 | $mform->setAdvanced('height', $cfg_scorm->frameheight_adv); | |
110 | $mform->disabledIf('height', 'popup', 'eq', 0); | |
111 | ||
112 | // Window Options | |
113 | $winoptgrp = array(); | |
114 | foreach (scorm_get_popup_options_array() as $key => $value) { | |
115 | $winoptgrp[] = &$mform->createElement('checkbox', $key, '', get_string($key, 'scorm')); | |
116 | $mform->setDefault($key, $value); | |
117 | } | |
118 | $mform->addGroup($winoptgrp, 'winoptgrp', get_string('options', 'scorm'), '<br />', false); | |
119 | $mform->disabledIf('winoptgrp', 'popup', 'eq', 0); | |
120 | $mform->setAdvanced('winoptgrp', $cfg_scorm->winoptgrp_adv); | |
121 | ||
122 | // Skip view page | |
123 | $mform->addElement('select', 'skipview', get_string('skipview', 'scorm'), scorm_get_skip_view_array()); | |
124 | $mform->addHelpButton('skipview', 'skipview', 'scorm'); | |
125 | $mform->setDefault('skipview', $cfg_scorm->skipview); | |
126 | $mform->setAdvanced('skipview', $cfg_scorm->skipview_adv); | |
127 | ||
128 | // Hide Browse | |
129 | $mform->addElement('selectyesno', 'hidebrowse', get_string('hidebrowse', 'scorm')); | |
130 | $mform->addHelpButton('hidebrowse', 'hidebrowse', 'scorm'); | |
131 | $mform->setDefault('hidebrowse', $cfg_scorm->hidebrowse); | |
132 | $mform->setAdvanced('hidebrowse', $cfg_scorm->hidebrowse_adv); | |
133 | ||
134 | // Display course structure | |
135 | $mform->addElement('selectyesno', 'displaycoursestructure', get_string('displaycoursestructure', 'scorm')); | |
136 | $mform->addHelpButton('displaycoursestructure', 'displaycoursestructure', 'scorm'); | |
137 | $mform->setDefault('displaycoursestructure', $cfg_scorm->displaycoursestructure); | |
138 | $mform->setAdvanced('displaycoursestructure', $cfg_scorm->displaycoursestructure_adv); | |
139 | ||
140 | // Toc display | |
141 | $mform->addElement('select', 'hidetoc', get_string('hidetoc', 'scorm'), scorm_get_hidetoc_array()); | |
142 | $mform->addHelpButton('hidetoc', 'hidetoc', 'scorm'); | |
143 | $mform->setDefault('hidetoc', $cfg_scorm->hidetoc); | |
144 | $mform->setAdvanced('hidetoc', $cfg_scorm->hidetoc_adv); | |
145 | ||
146 | // Hide Navigation panel | |
147 | $mform->addElement('selectyesno', 'hidenav', get_string('hidenav', 'scorm')); | |
148 | $mform->setDefault('hidenav', $cfg_scorm->hidenav); | |
149 | $mform->setAdvanced('hidenav', $cfg_scorm->hidenav_adv); | |
93e46331 | 150 | $mform->disabledIf('hidenav', 'hidetoc', 'noteq', 0); |
0ffaa76b DM |
151 | |
152 | //------------------------------------------------------------------------------- | |
153 | // grade Settings | |
3c0b04c4 | 154 | $mform->addElement('header', 'gradesettings', get_string('gradesettings', 'scorm')); |
a4813c36 | 155 | |
ca4eda13 | 156 | // Grade Method |
30fc6e2d | 157 | $mform->addElement('select', 'grademethod', get_string('grademethod', 'scorm'), scorm_get_grade_method_array()); |
c329e370 | 158 | $mform->addHelpButton('grademethod', 'grademethod', 'scorm'); |
30fc6e2d | 159 | $mform->setDefault('grademethod', $cfg_scorm->grademethod); |
0ffaa76b | 160 | $mform->setAdvanced('grademethod', $cfg_scorm->grademethod_adv); |
3268cf99 | 161 | |
ca4eda13 | 162 | // Maximum Grade |
a4813c36 | 163 | for ($i=0; $i<=100; $i++) { |
ca4eda13 | 164 | $grades[$i] = "$i"; |
a4813c36 | 165 | } |
166 | $mform->addElement('select', 'maxgrade', get_string('maximumgrade'), $grades); | |
30fc6e2d | 167 | $mform->setDefault('maxgrade', $cfg_scorm->maxgrade); |
ca4eda13 | 168 | $mform->disabledIf('maxgrade', 'grademethod', 'eq', GRADESCOES); |
0ffaa76b | 169 | $mform->setAdvanced('maxgrade', $cfg_scorm->maxgrade_adv); |
a4813c36 | 170 | |
3c0b04c4 | 171 | $mform->addElement('header', 'othersettings', get_string('othersettings', 'scorm')); |
a4813c36 | 172 | |
ca4eda13 | 173 | // Max Attempts |
30fc6e2d | 174 | $mform->addElement('select', 'maxattempt', get_string('maximumattempts', 'scorm'), scorm_get_attempts_array()); |
c329e370 | 175 | $mform->addHelpButton('maxattempt', 'maximumattempts', 'scorm'); |
30fc6e2d | 176 | $mform->setDefault('maxattempt', $cfg_scorm->maxattempts); |
0ffaa76b | 177 | $mform->setAdvanced('maxattempt', $cfg_scorm->maxattempts_adv); |
3268cf99 | 178 | |
ca4eda13 | 179 | // What Grade |
87db13b5 | 180 | $mform->addElement('select', 'whatgrade', get_string('whatgrade', 'scorm'), scorm_get_what_grade_array()); |
ca4eda13 | 181 | $mform->disabledIf('whatgrade', 'maxattempt', 'eq', 1); |
c329e370 | 182 | $mform->addHelpButton('whatgrade', 'whatgrade', 'scorm'); |
87db13b5 | 183 | $mform->setDefault('whatgrade', $cfg_scorm->whatgrade); |
0ffaa76b | 184 | $mform->setAdvanced('whatgrade', $cfg_scorm->whatgrade_adv); |
87db13b5 | 185 | |
ca4eda13 | 186 | // Display attempt status |
6381fa56 | 187 | $mform->addElement('selectyesno', 'displayattemptstatus', get_string('displayattemptstatus', 'scorm')); |
c329e370 | 188 | $mform->addHelpButton('displayattemptstatus', 'displayattemptstatus', 'scorm'); |
30fc6e2d | 189 | $mform->setDefault('displayattemptstatus', $cfg_scorm->displayattemptstatus); |
0ffaa76b | 190 | $mform->setAdvanced('displayattemptstatus', $cfg_scorm->displayattemptstatus_adv); |
3268cf99 | 191 | |
ca4eda13 | 192 | // Force completed |
6381fa56 | 193 | $mform->addElement('selectyesno', 'forcecompleted', get_string('forcecompleted', 'scorm')); |
c329e370 | 194 | $mform->addHelpButton('forcecompleted', 'forcecompleted', 'scorm'); |
30fc6e2d | 195 | $mform->setDefault('forcecompleted', $cfg_scorm->forcecompleted); |
0ffaa76b | 196 | $mform->setAdvanced('forcecompleted', $cfg_scorm->forcecompleted_adv); |
6381fa56 | 197 | |
ca4eda13 | 198 | // Force new attempt |
6381fa56 | 199 | $mform->addElement('selectyesno', 'forcenewattempt', get_string('forcenewattempt', 'scorm')); |
c329e370 | 200 | $mform->addHelpButton('forcenewattempt', 'forcenewattempt', 'scorm'); |
30fc6e2d | 201 | $mform->setDefault('forcenewattempt', $cfg_scorm->forcenewattempt); |
0ffaa76b | 202 | $mform->setAdvanced('forcenewattempt', $cfg_scorm->forcenewattempt_adv); |
3268cf99 | 203 | |
ca4eda13 | 204 | // Last attempt lock - lock the enter button after the last available attempt has been made |
6381fa56 | 205 | $mform->addElement('selectyesno', 'lastattemptlock', get_string('lastattemptlock', 'scorm')); |
c329e370 | 206 | $mform->addHelpButton('lastattemptlock', 'lastattemptlock', 'scorm'); |
30fc6e2d | 207 | $mform->setDefault('lastattemptlock', $cfg_scorm->lastattemptlock); |
0ffaa76b | 208 | $mform->setAdvanced('lastattemptlock', $cfg_scorm->lastattemptlock_adv); |
3268cf99 | 209 | |
ca4eda13 | 210 | // Activation period |
2b90f941 | 211 | /* $mform->addElement('static', '', '' ,'<hr />'); |
a4813c36 | 212 | $mform->addElement('static', 'activation', get_string('activation','scorm')); |
213 | $datestartgrp = array(); | |
214 | $datestartgrp[] = &$mform->createElement('date_time_selector', 'startdate'); | |
215 | $datestartgrp[] = &$mform->createElement('checkbox', 'startdisabled', null, get_string('disable')); | |
216 | $mform->addGroup($datestartgrp, 'startdategrp', get_string('from'), ' ', false); | |
217 | $mform->setDefault('startdate', 0); | |
218 | $mform->setDefault('startdisabled', 1); | |
219 | $mform->disabledIf('startdategrp', 'startdisabled', 'checked'); | |
220 | ||
221 | $dateendgrp = array(); | |
222 | $dateendgrp[] = &$mform->createElement('date_time_selector', 'enddate'); | |
223 | $dateendgrp[] = &$mform->createElement('checkbox', 'enddisabled', null, get_string('disable')); | |
224 | $mform->addGroup($dateendgrp, 'dateendgrp', get_string('to'), ' ', false); | |
225 | $mform->setDefault('enddate', 0); | |
226 | $mform->setDefault('enddisabled', 1); | |
227 | $mform->disabledIf('dateendgrp', 'enddisabled', 'checked'); | |
2b90f941 | 228 | */ |
3268cf99 | 229 | |
ca4eda13 | 230 | // Autocontinue |
a4813c36 | 231 | $mform->addElement('selectyesno', 'auto', get_string('autocontinue', 'scorm')); |
c329e370 | 232 | $mform->addHelpButton('auto', 'autocontinue', 'scorm'); |
30fc6e2d | 233 | $mform->setDefault('auto', $cfg_scorm->auto); |
0ffaa76b | 234 | $mform->setAdvanced('auto', $cfg_scorm->auto_adv); |
a4813c36 | 235 | |
ca4eda13 | 236 | // Update packages timing |
30fc6e2d | 237 | $mform->addElement('select', 'updatefreq', get_string('updatefreq', 'scorm'), scorm_get_updatefreq_array()); |
238 | $mform->setDefault('updatefreq', $cfg_scorm->updatefreq); | |
0ffaa76b | 239 | $mform->setAdvanced('updatefreq', $cfg_scorm->updatefreq_adv); |
a4813c36 | 240 | |
ca4eda13 DM |
241 | //------------------------------------------------------------------------------- |
242 | // Hidden Settings | |
a4813c36 | 243 | $mform->addElement('hidden', 'datadir', null); |
d18e0fe6 | 244 | $mform->setType('datadir', PARAM_RAW); |
a4813c36 | 245 | $mform->addElement('hidden', 'pkgtype', null); |
d18e0fe6 | 246 | $mform->setType('pkgtype', PARAM_RAW); |
a4813c36 | 247 | $mform->addElement('hidden', 'launch', null); |
d18e0fe6 | 248 | $mform->setType('launch', PARAM_RAW); |
a4813c36 | 249 | $mform->addElement('hidden', 'redirect', null); |
d18e0fe6 | 250 | $mform->setType('redirect', PARAM_RAW); |
a4813c36 | 251 | $mform->addElement('hidden', 'redirecturl', null); |
d18e0fe6 | 252 | $mform->setType('redirecturl', PARAM_RAW); |
a4813c36 | 253 | |
ca4eda13 | 254 | //------------------------------------------------------------------------------- |
42f103be | 255 | $this->standard_coursemodule_elements(); |
ca4eda13 | 256 | //------------------------------------------------------------------------------- |
a4813c36 | 257 | // buttons |
258 | $this->add_action_buttons(); | |
a4813c36 | 259 | } |
260 | ||
728d0599 | 261 | function data_preprocessing(&$default_values) { |
a4813c36 | 262 | global $COURSE; |
263 | ||
264 | if (isset($default_values['popup']) && ($default_values['popup'] == 1) && isset($default_values['options'])) { | |
1adc77e6 | 265 | if (!empty($default_values['options'])) { |
ca4eda13 | 266 | $options = explode(',', $default_values['options']); |
1adc77e6 | 267 | foreach ($options as $option) { |
ca4eda13 | 268 | list($element, $value) = explode('=', $option); |
1adc77e6 | 269 | $element = trim($element); |
270 | $default_values[$element] = trim($value); | |
271 | } | |
a4813c36 | 272 | } |
273 | } | |
274 | if (isset($default_values['grademethod'])) { | |
adefe70e | 275 | $default_values['grademethod'] = intval($default_values['grademethod']); |
a4813c36 | 276 | } |
ca4eda13 | 277 | if (isset($default_values['width']) && (strpos($default_values['width'], '%') === false) && ($default_values['width'] <= 100)) { |
efe95a6f | 278 | $default_values['width'] .= '%'; |
a4813c36 | 279 | } |
ca4eda13 | 280 | if (isset($default_values['width']) && (strpos($default_values['height'], '%') === false) && ($default_values['height'] <= 100)) { |
efe95a6f | 281 | $default_values['height'] .= '%'; |
a4813c36 | 282 | } |
283 | $scorms = get_all_instances_in_course('scorm', $COURSE); | |
284 | $coursescorm = current($scorms); | |
b76f2e60 DC |
285 | |
286 | $draftitemid = file_get_submitted_draft_itemid('packagefile'); | |
783f1486 | 287 | file_prepare_draft_area($draftitemid, $this->context->id, 'mod_scorm', 'package', 0); |
b76f2e60 DC |
288 | $default_values['packagefile'] = $draftitemid; |
289 | ||
a4813c36 | 290 | if (($COURSE->format == 'scorm') && ((count($scorms) == 0) || ($default_values['instance'] == $coursescorm->id))) { |
291 | $default_values['redirect'] = 'yes'; | |
9528568b | 292 | $default_values['redirecturl'] = '../course/view.php?id='.$default_values['course']; |
a4813c36 | 293 | } else { |
294 | $default_values['redirect'] = 'no'; | |
295 | $default_values['redirecturl'] = '../mod/scorm/view.php?id='.$default_values['coursemodule']; | |
296 | } | |
297 | if (isset($default_values['version'])) { | |
ca4eda13 | 298 | $default_values['pkgtype'] = (substr($default_values['version'], 0, 5) == 'SCORM') ? 'scorm':'aicc'; |
a4813c36 | 299 | } |
300 | if (isset($default_values['instance'])) { | |
301 | $default_values['datadir'] = $default_values['instance']; | |
302 | } | |
d54e2145 | 303 | if (empty($default_values['timeopen'])) { |
413900b4 DM |
304 | $default_values['timeopen'] = 0; |
305 | } | |
306 | if (empty($default_values['timeclose'])) { | |
307 | $default_values['timeclose'] = 0; | |
d54e2145 | 308 | } |
a4813c36 | 309 | } |
310 | ||
a78890d5 | 311 | function validation($data, $files) { |
d3d98a3a | 312 | global $CFG; |
a78890d5 | 313 | $errors = parent::validation($data, $files); |
60243313 | 314 | |
9528568b | 315 | $type = $data['scormtype']; |
316 | ||
317 | if ($type === SCORM_TYPE_LOCAL) { | |
318 | if (!empty($data['update'])) { | |
319 | //ok, not required | |
a679d64d | 320 | |
d3d98a3a | 321 | } else if (empty($data['packagefile'])) { |
9528568b | 322 | $errors['packagefile'] = get_string('required'); |
323 | ||
324 | } else { | |
d3d98a3a DC |
325 | $files = $this->get_draft_files('packagefile'); |
326 | if (count($files)<1) { | |
327 | $errors['packagefile'] = get_string('required'); | |
9eb8dccc | 328 | return $errors; |
d3d98a3a DC |
329 | } |
330 | $file = reset($files); | |
7aa06e6d | 331 | $filename = $CFG->tempdir.'/scormimport/scrom_'.time(); |
af9b1444 | 332 | make_temp_directory('scormimport'); |
d3d98a3a DC |
333 | $file->copy_content_to($filename); |
334 | ||
9528568b | 335 | $packer = get_file_packer('application/zip'); |
336 | ||
d3d98a3a | 337 | $filelist = $packer->list_files($filename); |
9528568b | 338 | if (!is_array($filelist)) { |
339 | $errors['packagefile'] = 'Incorrect file package - not an archive'; //TODO: localise | |
340 | } else { | |
341 | $manifestpresent = false; | |
342 | $aiccfound = false; | |
343 | foreach ($filelist as $info) { | |
344 | if ($info->pathname == 'imsmanifest.xml') { | |
345 | $manifestpresent = true; | |
346 | break; | |
347 | } | |
348 | if (preg_match('/\.cst$/', $info->pathname)) { | |
349 | $aiccfound = true; | |
350 | break; | |
351 | } | |
352 | } | |
353 | if (!$manifestpresent and !$aiccfound) { | |
354 | $errors['packagefile'] = 'Incorrect file package - missing imsmanifest.xml or AICC structure'; //TODO: localise | |
355 | } | |
356 | } | |
d3d98a3a | 357 | unlink($filename); |
9528568b | 358 | } |
359 | ||
360 | } else if ($type === SCORM_TYPE_EXTERNAL) { | |
361 | $reference = $data['packageurl']; | |
362 | if (!preg_match('/(http:\/\/|https:\/\/|www).*\/imsmanifest.xml$/i', $reference)) { | |
363 | $errors['packageurl'] = get_string('required'); // TODO: improve help | |
364 | } | |
365 | ||
366 | } else if ($type === 'packageurl') { | |
367 | $reference = $data['reference']; | |
368 | if (!preg_match('/(http:\/\/|https:\/\/|www).*(\.zip|\.pif)$/i', $reference)) { | |
369 | $errors['packageurl'] = get_string('required'); // TODO: improve help | |
370 | } | |
371 | ||
372 | } else if ($type === SCORM_TYPE_IMSREPOSITORY) { | |
373 | $reference = $data['packageurl']; | |
374 | if (stripos($reference, '#') !== 0) { | |
375 | $errors['packageurl'] = get_string('required'); | |
376 | } | |
60243313 | 377 | } |
378 | ||
a78890d5 | 379 | return $errors; |
a679d64d | 380 | } |
9528568b | 381 | |
382 | //need to translate the "options" and "reference" field. | |
ea38a6b9 | 383 | function set_data($default_values) { |
9528568b | 384 | $default_values = (array)$default_values; |
385 | ||
386 | if (isset($default_values['scormtype']) and isset($default_values['reference'])) { | |
387 | switch ($default_values['scormtype']) { | |
388 | case SCORM_TYPE_LOCALSYNC : | |
389 | case SCORM_TYPE_EXTERNAL: | |
390 | case SCORM_TYPE_IMSREPOSITORY: | |
391 | $default_values['packageurl'] = $default_values['reference']; | |
392 | } | |
393 | } | |
394 | unset($default_values['reference']); | |
395 | ||
396 | if (!empty($default_values['options'])) { | |
397 | $options = explode(',', $default_values['options']); | |
398 | foreach ($options as $option) { | |
399 | $opt = explode('=', $option); | |
400 | if (isset($opt[1])) { | |
9b426d03 | 401 | $default_values[$opt[0]] = $opt[1]; |
ea38a6b9 | 402 | } |
403 | } | |
ea38a6b9 | 404 | } |
9528568b | 405 | |
ea38a6b9 | 406 | $this->data_preprocessing($default_values); |
9528568b | 407 | parent::set_data($default_values); |
ea38a6b9 | 408 | } |
a4813c36 | 409 | } |