public function validation($data, $files) { global $CFG, $USER; $errors = parent::validation($data, $files); $type = $data['scormtype']; if ($type === SCORM_TYPE_LOCAL) { if (empty($data['packagefile'])) { $errors['packagefile'] = get_string('required'); } else { $draftitemid = file_get_submitted_draft_itemid('packagefile'); file_prepare_draft_area($draftitemid, $this->context->id, 'mod_scorm', 'packagefilecheck', null, array('subdirs' => 0, 'maxfiles' => 1)); // Get file from users draft area. $usercontext = context_user::instance($USER->id); $fs = get_file_storage(); $files = $fs->get_area_files($usercontext->id, 'user', 'draft', $draftitemid, 'id', false); if (count($files) < 1) { $errors['packagefile'] = get_string('required'); return $errors; } $file = reset($files); if (!$file->is_external_file() && !empty($data['updatefreq'])) { // Make sure updatefreq is not set if using normal local file. $errors['updatefreq'] = get_string('updatefreq_error', 'mod_scorm'); } if (strtolower($file->get_filename()) == 'imsmanifest.xml') { if (!$file->is_external_file()) { $errors['packagefile'] = get_string('aliasonly', 'mod_scorm'); } else { $repository = repository::get_repository_by_id($file->get_repository_id(), context_system::instance()); if (!$repository->supports_relative_file()) { $errors['packagefile'] = get_string('repositorynotsupported', 'mod_scorm'); } } } else { if (strtolower(substr($file->get_filename(), -3)) == 'xml') { $errors['packagefile'] = get_string('invalidmanifestname', 'mod_scorm'); } else { // Validate this SCORM package. $errors = array_merge($errors, scorm_validate_package($file)); } } } } else { if ($type === SCORM_TYPE_EXTERNAL) { $reference = $data['packageurl']; // Syntax check. if (!preg_match('/(http:\\/\\/|https:\\/\\/|www).*\\/imsmanifest.xml$/i', $reference)) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } else { // Availability check. $result = scorm_check_url($reference); if (is_string($result)) { $errors['packageurl'] = $result; } } } else { if ($type === 'packageurl') { $reference = $data['reference']; // Syntax check. if (!preg_match('/(http:\\/\\/|https:\\/\\/|www).*(\\.zip|\\.pif)$/i', $reference)) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } else { // Availability check. $result = scorm_check_url($reference); if (is_string($result)) { $errors['packageurl'] = $result; } } } else { if ($type === SCORM_TYPE_AICCURL) { $reference = $data['packageurl']; // Syntax check. if (!preg_match('/(http:\\/\\/|https:\\/\\/|www).*/', $reference)) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } else { // Availability check. $result = scorm_check_url($reference); if (is_string($result)) { $errors['packageurl'] = $result; } } } } } } return $errors; }
function validation($data, $files) { global $CFG; $errors = parent::validation($data, $files); $type = $data['scormtype']; if ($type === SCORM_TYPE_LOCAL) { if (!empty($data['update'])) { //ok, not required } 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'); return $errors; } $file = reset($files); $filename = $CFG->tempdir.'/scormimport/scrom_'.time(); make_temp_directory('scormimport'); $file->copy_content_to($filename); $packer = get_file_packer('application/zip'); $filelist = $packer->list_files($filename); if (!is_array($filelist)) { $errors['packagefile'] = 'Incorrect file package - not an archive'; //TODO: localise } else { $manifestpresent = false; $aiccfound = false; foreach ($filelist as $info) { if ($info->pathname == 'imsmanifest.xml') { $manifestpresent = true; break; } if (preg_match('/\.cst$/', $info->pathname)) { $aiccfound = true; break; } } if (!$manifestpresent and !$aiccfound) { $errors['packagefile'] = 'Incorrect file package - missing imsmanifest.xml or AICC structure'; //TODO: localise } } unlink($filename); } } else if ($type === SCORM_TYPE_EXTERNAL) { $reference = $data['packageurl']; // Syntax check. if (!preg_match('/(http:\/\/|https:\/\/|www).*\/imsmanifest.xml$/i', $reference)) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } else { // Availability check. $result = scorm_check_url($reference); if (is_string($result)) { $errors['packageurl'] = $result; } } } else if ($type === 'packageurl') { $reference = $data['reference']; // Syntax check. if (!preg_match('/(http:\/\/|https:\/\/|www).*(\.zip|\.pif)$/i', $reference)) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } else { // Availability check. $result = scorm_check_url($reference); if (is_string($result)) { $errors['packageurl'] = $result; } } } else if ($type === SCORM_TYPE_IMSREPOSITORY) { $reference = $data['packageurl']; if (stripos($reference, '#') !== 0) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } } else if ($type === SCORM_TYPE_AICCURL) { $reference = $data['packageurl']; // Syntax check. if (!preg_match('/(http:\/\/|https:\/\/|www).*/', $reference)) { $errors['packageurl'] = get_string('invalidurl', 'scorm'); } else { // Availability check. $result = scorm_check_url($reference); if (is_string($result)) { $errors['packageurl'] = $result; } } } return $errors; }