Revert "MDL-35380 SCORM: improve check for imsmanifest file and consolidate into...
authorDamyon Wiese <damyon@moodle.com>
Thu, 22 Aug 2013 06:11:18 +0000 (14:11 +0800)
committerDamyon Wiese <damyon@moodle.com>
Thu, 22 Aug 2013 06:11:18 +0000 (14:11 +0800)
mod/scorm/lang/en/scorm.php
mod/scorm/lib.php
mod/scorm/locallib.php
mod/scorm/mod_form.php
mod/scorm/tests/packages/badscorm.zip [deleted file]
mod/scorm/tests/packages/invalid.zip [deleted file]
mod/scorm/tests/packages/validaicc.zip [deleted file]
mod/scorm/tests/packages/validscorm.zip [deleted file]
mod/scorm/tests/validatepackage_test.php [deleted file]

index 9d370e5..dafdd26 100644 (file)
@@ -59,8 +59,7 @@ $string['autocontinue_help'] = 'If enabled, subsequent learning objects are laun
 $string['autocontinuedesc'] = 'If enabled, subsequent learning objects are launched automatically, otherwise the Continue button must be used.';
 $string['averageattempt'] = 'Average attempts';
 $string['badmanifest'] = 'Some manifest errors: see errors log';
-$string['badimsmanifestlocation'] = 'An imsmanifest.xml file was found but it was not in the root of your zip file, please re-package your SCORM';
-$string['badarchive'] = 'You must provide a valid zip file';
+$string['badpackage'] = 'The specified package/manifest is not valid. Check it and try again.';
 $string['browse'] = 'Preview';
 $string['browsed'] = 'Browsed';
 $string['browsemode'] = 'Preview mode';
@@ -223,7 +222,7 @@ $string['noattemptsmade'] = 'Number of attempts you have made';
 $string['no_attributes'] = 'Tag {$a->tag} must have attributes';
 $string['no_children'] = 'Tag {$a->tag} must have children';
 $string['nolimit'] = 'Unlimited attempts';
-$string['nomanifest'] = 'Incorrect file package - missing imsmanifest.xml or AICC structure';
+$string['nomanifest'] = 'Manifest not found';
 $string['noprerequisites'] = 'Sorry but you don\'t have the required prerequisites to access this activity.';
 $string['noreports'] = 'No report to display';
 $string['normal'] = 'Normal';
index 2801475..94e8103 100644 (file)
@@ -1271,10 +1271,32 @@ function scorm_dndupload_handle($uploadinfo) {
     $file = reset($files);
 
     // Validate the file, make sure it's a valid SCORM package!
-    $errors = scorm_validate_package($file);
-    if (!empty($errors)) {
+    $packer = get_file_packer('application/zip');
+    $filelist = $file->list_files($packer);
+
+    if (!is_array($filelist)) {
         return false;
+    } 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 && !$aiccfound) {
+            return false;
+        }
     }
+
     // Create a default scorm object to pass to scorm_add_instance()!
     $scorm = get_config('scorm');
     $scorm->course = $uploadinfo->course->id;
index a70c005..45715d4 100644 (file)
@@ -1886,41 +1886,3 @@ function scorm_check_url($url) {
 
     return true;
 }
-
-/**
- * Check that a Zip file contains a valid SCORM package
- *
- * @param $file stored_file a Zip file.
- * @return array empty if no issue is found. Array of error message otherwise
- */
-function scorm_validate_package($file) {
-    $packer = get_file_packer('application/zip');
-    $errors = array();
-    $filelist = $packer->list_files($file);
-
-    if (!is_array($filelist)) {
-        $errors['packagefile'] = get_string('badarchive', 'scorm');
-    } else {
-        $aiccfound = false;
-        $badmanifestpresent = false;
-        foreach ($filelist as $info) {
-            if ($info->pathname == 'imsmanifest.xml') {
-                return array();
-             } else if (strpos($info->pathname, 'imsmanifest.xml') !== false) {
-                // This package has an imsmanifest file inside a folder of the package.
-                $badmanifestpresent = true;
-            }
-            if (preg_match('/\.cst$/', $info->pathname)) {
-                return array();
-            }
-        }
-        if (!$aiccfound) {
-            if ($badmanifestpresent) {
-                $errors['packagefile'] = get_string('badimsmanifestlocation', 'scorm');
-            } else {
-                $errors['packagefile'] = get_string('nomanifest', 'scorm');
-            }
-        }
-    }
-    return $errors;
-}
\ No newline at end of file
index ae2bc07..8263a6d 100644 (file)
@@ -346,8 +346,28 @@ class mod_scorm_mod_form extends moodleform_mod {
                 make_temp_directory('scormimport');
                 $file->copy_content_to($filename);
 
-                $errors = array_merge($errors, scorm_validate_package($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);
             }
 
diff --git a/mod/scorm/tests/packages/badscorm.zip b/mod/scorm/tests/packages/badscorm.zip
deleted file mode 100644 (file)
index b2c52b6..0000000
Binary files a/mod/scorm/tests/packages/badscorm.zip and /dev/null differ
diff --git a/mod/scorm/tests/packages/invalid.zip b/mod/scorm/tests/packages/invalid.zip
deleted file mode 100644 (file)
index f7fc62c..0000000
Binary files a/mod/scorm/tests/packages/invalid.zip and /dev/null differ
diff --git a/mod/scorm/tests/packages/validaicc.zip b/mod/scorm/tests/packages/validaicc.zip
deleted file mode 100644 (file)
index 9e26697..0000000
Binary files a/mod/scorm/tests/packages/validaicc.zip and /dev/null differ
diff --git a/mod/scorm/tests/packages/validscorm.zip b/mod/scorm/tests/packages/validscorm.zip
deleted file mode 100644 (file)
index 5d00afb..0000000
Binary files a/mod/scorm/tests/packages/validscorm.zip and /dev/null differ
diff --git a/mod/scorm/tests/validatepackage_test.php b/mod/scorm/tests/validatepackage_test.php
deleted file mode 100644 (file)
index 2c24981..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-// This file is part of Moodle - http://moodle.org/
-//
-// Moodle is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// Moodle is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
-
-/**
- * Unit tests for the mod_quiz_display_options class.
- *
- * @package    mod_scorm
- * @category   phpunit
- * @copyright  2013 Dan Marsden
- * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-
-defined('MOODLE_INTERNAL') || die();
-
-global $CFG;
-require_once($CFG->dirroot . '/mod/scorm/locallib.php');
-
-
-/**
- * Unit tests for {@link mod_scorm}.
- *
- * @copyright  2013 Dan Marsden
- * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-class mod_scorm_validatepackage_testcase extends basic_testcase {
-    public function test_validate_package() {
-        global $CFG;
-        $filename = "validscorm.zip";
-        $file = new zip_archive();
-        $file->open($CFG->dirroot.'/mod/scorm/tests/packages/'.$filename, file_archive::OPEN);
-        $errors = scorm_validate_package($file);
-        $this->assertEmpty($errors);
-        $file->close();
-
-        $filename = "validaicc.zip";
-        $file = new zip_archive();
-        $file->open($CFG->dirroot.'/mod/scorm/tests/packages/'.$filename, file_archive::OPEN);
-        $errors = scorm_validate_package($file);
-        $this->assertEmpty($errors);
-        $file->close();
-
-        $filename = "invalid.zip";
-        $file = new zip_archive();
-        $file->open($CFG->dirroot.'/mod/scorm/tests/packages/'.$filename, file_archive::OPEN);
-        $errors = scorm_validate_package($file);
-        $this->assertArrayHasKey('packagefile', $errors);
-        if (isset($errors['packagefile'])) {
-            $this->assertEquals(get_string('nomanifest', 'scorm'), $errors['packagefile']);
-        }
-        $file->close();
-
-        $filename = "badscorm.zip";
-        $file = new zip_archive();
-        $file->open($CFG->dirroot.'/mod/scorm/tests/packages/'.$filename, file_archive::OPEN);
-        $errors = scorm_validate_package($file);
-        $this->assertArrayHasKey('packagefile', $errors);
-        if (isset($errors['packagefile'])) {
-            $this->assertEquals(get_string('badimsmanifestlocation', 'scorm'), $errors['packagefile']);
-        }
-        $file->close();
-    }
-}
-