MDL-22455, file picker conversion for SCORM.

This commit is contained in:
Dongsheng Cai
2010-06-10 09:58:45 +00:00
parent 0324b6f170
commit d3d98a3a98
2 changed files with 47 additions and 3 deletions
+33
View File
@@ -626,6 +626,39 @@ abstract class moodleform {
return false;
}
/**
* Get draft files of a form element
* This is a protected method which will be used only inside moodleforms
*
* @global object $USER
* @param string $elname name of element
* @return array
*/
protected function get_draft_files($elname) {
global $USER;
if (!$this->is_submitted()) {
return false;
}
$element = $this->_form->getElement($elname);
if ($element instanceof MoodleQuickForm_filepicker || $element instanceof MoodleQuickForm_filemanager) {
$values = $this->_form->exportValues($elname);
if (empty($values[$elname])) {
return false;
}
$draftid = $values[$elname];
$fs = get_file_storage();
$context = get_context_instance(CONTEXT_USER, $USER->id);
if (!$files = $fs->get_area_files($context->id, 'user_draft', $draftid, 'id DESC', false)) {
return null;
}
return $files;
}
return null;
}
/**
* Dispose form element draft files
*
+14 -3
View File
@@ -64,7 +64,7 @@ class mod_scorm_mod_form extends moodleform_mod {
// New local package upload
$maxbytes = get_max_upload_file_size($CFG->maxbytes, $COURSE->maxbytes);
$mform->setMaxFileSize($maxbytes);
$mform->addElement('file', 'packagefile', get_string('package','scorm'));
$mform->addElement('filepicker', 'packagefile', get_string('package','scorm'));
$mform->disabledIf('packagefile', 'scormtype', 'noteq', SCORM_TYPE_LOCAL);
//-------------------------------------------------------------------------------
@@ -290,6 +290,7 @@ class mod_scorm_mod_form extends moodleform_mod {
}
function validation($data, $files) {
global $CFG;
$errors = parent::validation($data, $files);
$type = $data['scormtype'];
@@ -298,13 +299,22 @@ class mod_scorm_mod_form extends moodleform_mod {
if (!empty($data['update'])) {
//ok, not required
} else if (empty($files['packagefile'])) {
} else if (empty($data['packagefile'])) {
$errors['packagefile'] = get_string('required');
} else {
$files = $this->get_draft_files('packagefile');
if (count($files)<1) {
$errors['packagefile'] = get_string('required');
}
$file = reset($files);
$filename = $CFG->dataroot.'/temp/scormimport/scrom_'.time();
make_upload_directory('temp/scormimport');
$file->copy_content_to($filename);
$packer = get_file_packer('application/zip');
$filelist = $packer->list_files($files['packagefile']);
$filelist = $packer->list_files($filename);
if (!is_array($filelist)) {
$errors['packagefile'] = 'Incorrect file package - not an archive'; //TODO: localise
} else {
@@ -324,6 +334,7 @@ class mod_scorm_mod_form extends moodleform_mod {
$errors['packagefile'] = 'Incorrect file package - missing imsmanifest.xml or AICC structure'; //TODO: localise
}
}
unlink($filename);
}
} else if ($type === SCORM_TYPE_EXTERNAL) {