Fixing SCORM import due folder changes + updating htaccess files

skala
Julio Montoya 12 years ago
parent d8d7eec33b
commit 6f789286c0
  1. 8
      .htaccess
  2. 8
      htaccess-dist
  3. 1
      main/inc/lib/template.lib.php
  4. 9
      main/inc/routes.php
  5. 52
      main/newscorm/scorm.class.php
  6. 30
      src/ChamiloLMS/Component/DataFilesystem/DataFilesystem.php
  7. 18
      src/ChamiloLMS/Controller/IndexController.php

@ -15,10 +15,14 @@
RewriteRule ^courses/(.*)/index.php$ web/courses/$1? [R,L]
RewriteRule ^courses/(.*)/$ web/courses/$1? [R,L]
# Courses documents
# courses/MATHS/document/folder1/picture.jpg --> courses/MATHS/document/?file=folder1/picture.jpg
# Courses documents
# courses/MATHS/document/folder1/picture.jpg --> web/data/courses/MATHS/document/folder1/picture.jpg
RewriteRule ^courses/(.*)/document/(.*)$ web/data/courses/$1/document/$2 [R,L]
# SCORM documents
# courses/MATHS/scorm/folder1/picture.jpg --> web/data/courses/MATHS/scorm/folder1/picture.jpg
RewriteRule ^courses/(.*)/scorm/(.*)$ web/data/courses/$1/scorm/$2 [R,L]
# Certificates
# Redirection: certificates/index.php?id=123 -> web/certificates/123
RewriteCond %{QUERY_STRING} ^id=([0-9]*)

@ -15,10 +15,14 @@
RewriteRule ^courses/(.*)/index.php$ web/courses/$1? [R,L]
RewriteRule ^courses/(.*)/$ web/courses/$1? [R,L]
# Courses documents
# courses/MATHS/document/folder1/picture.jpg --> courses/MATHS/document/?file=folder1/picture.jpg
# Courses documents
# courses/MATHS/document/folder1/picture.jpg --> web/data/courses/MATHS/document/folder1/picture.jpg
RewriteRule ^courses/(.*)/document/(.*)$ web/data/courses/$1/document/$2 [R,L]
# SCORM documents
# courses/MATHS/scorm/folder1/picture.jpg --> web/data/courses/MATHS/scorm/folder1/picture.jpg
RewriteRule ^courses/(.*)/scorm/(.*)$ web/data/courses/$1/scorm/$2 [R,L]
# Certificates
# Redirection: certificates/index.php?id=123 -> web/certificates/123
RewriteCond %{QUERY_STRING} ^id=([0-9]*)

@ -40,7 +40,6 @@ class Template
//ugly fix just for now
$this->app = &$app;
}
$this->app['classic_layout'] = true;
$this->navigation_array = $this->returnNavigationArray();

@ -467,12 +467,16 @@ $app->match('/introduction/delete/{tool}', 'introduction_tool.controller:deleteA
->before($userPermissionsInsideACourse)
->bind('introduction_delete');
/** Course documents */
/** Course documents */
$app->get('/data/courses/{courseCode}/document/{file}', 'index.controller:getDocumentAction')
->assert('file', '.+')
->assert('type', '.+');
/** Scorm documents */
$app->get('/data/courses/{courseCode}/scorm/{file}', 'index.controller:getScormDocumentAction')
->assert('file', '.+')
->assert('type', '.+');
/** Certificates */
$app->match('/certificates/{id}', 'certificate.controller:indexAction', 'GET');
@ -637,4 +641,3 @@ $app->match('/ajax', 'model_ajax.controller:indexAction', 'GET')
->assert('type', '.+')
->bind('model_ajax');

@ -536,8 +536,14 @@ class scorm extends learnpath
0
);
}
$course_rel_dir = api_get_course_path().'/scorm'; // scorm dir web path starting from /courses
// scorm dir web path starting from /courses
$course_rel_dir = api_get_course_path().'/scorm';
$course_sys_dir = api_get_path(SYS_COURSE_PATH).$course_rel_dir; // Absolute system path for this course.
if (!is_dir($course_sys_dir)) {
mkdir($course_sys_dir, api_get_permissions_for_new_directories());
}
$current_dir = replace_dangerous_char(trim($current_dir), 'strict'); // Current dir we are in, inside scorm/
if ($this->debug > 1) {
error_log('New LP - import_package() - current_dir = '.$current_dir, 0);
@ -562,23 +568,22 @@ class scorm extends learnpath
if ($this->debug > 1) {
error_log("New LP - subdir is first set to : ".$this->subdir, 0);
}
$zipFile = new PclZip($zip_file_path);
// Check the zip content (real size and file extension).
$zipContentArray = $zipFile->listContent();
$package_type = '';
$at_root = false;
$manifest = '';
$realFileSize = 0;
$manifest_list = array();
// The following loop should be stopped as soon as we found the right imsmanifest.xml (how to recognize it?).
foreach ($zipContentArray as $thisContent) {
$thisContent['filename'];
$file = $thisContent['filename'];
//error_log('Looking at '.$thisContent['filename'], 0);
if (preg_match('~.(php.*|phtml)$~i', $thisContent['filename'])) {
if (preg_match('~.(php.*|phtml)$~i', $file)) {
$this->set_error_msg("File $file contains a PHP script");
//return api_failure::set_failure('php_file_in_zip_file');
} elseif (stristr($thisContent['filename'], 'imsmanifest.xml')) {
@ -616,9 +621,8 @@ class scorm extends learnpath
if ($this->debug > 1) {
error_log('New LP - Package type is now '.$package_type, 0);
}
if ($package_type == '') // && defined('CHECK_FOR_SCORM') && CHECK_FOR_SCORM)
{
// && defined('CHECK_FOR_SCORM') && CHECK_FOR_SCORM)
if ($package_type == '') {
if ($this->debug > 1) {
error_log('New LP - Package type is empty', 0);
}
@ -626,14 +630,6 @@ class scorm extends learnpath
return api_failure::set_failure('not_scorm_content');
}
if (!FileManager::enough_size($realFileSize, $course_sys_dir, $maxFilledSpace)) {
if ($this->debug > 1) {
error_log('New LP - Not enough space to store package', 0);
}
return api_failure::set_failure('not_enough_space');
}
// It happens on Linux that $new_dir sometimes doesn't start with '/'
if ($new_dir[0] != '/') {
$new_dir = '/'.$new_dir;
@ -643,6 +639,13 @@ class scorm extends learnpath
$new_dir = substr($new_dir, 0, -1);
}
$isDir = is_dir($course_sys_dir.$new_dir);
if ($isDir == false) {
mkdir($course_sys_dir.$new_dir, api_get_permissions_for_new_directories());
$isDir = is_dir($course_sys_dir.$new_dir);
}
/* Uncompressing phase */
/*
@ -651,11 +654,15 @@ class scorm extends learnpath
- parse & change relative html links
- make sure the filenames are secure (filter funny characters or php extensions)
*/
if (is_dir($course_sys_dir.$new_dir) OR @mkdir(
$course_sys_dir.$new_dir,
api_get_permissions_for_new_directories()
)
) {
if ($isDir) {
if (!FileManager::enough_size($realFileSize, $course_sys_dir, $maxFilledSpace)) {
if ($this->debug > 1) {
error_log('New LP - Not enough space to store package', 0);
}
return api_failure::set_failure('not_enough_space');
}
// PHP method - slower...
if ($this->debug >= 1) {
@ -708,11 +715,10 @@ class scorm extends learnpath
if ($this->debug >= 1) {
error_log('and: '.$file, 0);
}
if ($safe_file != $file) {
//@rename($course_sys_dir.$new_dir, $course_sys_dir.'/'.$safe_file);
$mydir = dirname($course_sys_dir.$new_dir.$safe_file);
if (!is_dir($mydir)) {
$mysubdirs = split('/', $mydir);
$mybasedir = '/';

@ -29,17 +29,19 @@ class DataFilesystem
* @return SplFileInfo
* @throws \InvalidArgumentException
*/
public function get($file) {
public function get($file)
{
$file = new SplFileInfo($this->path.$file, null, null);
$filesystem = new Filesystem();
if ($filesystem->exists($file)) {
return $file;
} else {
throw new \InvalidArgumentException(sprintf(
'The file "%s" does not exists .',
$file
));
throw new \InvalidArgumentException(
sprintf(
'The file "%s" does not exists .',
$file
)
);
}
}
@ -54,4 +56,18 @@ class DataFilesystem
$file = 'courses/'.$courseCode.'/document/'.$file;
return $this->get($file);
}
}
/**
* Gets a file from the data/courses/MATHS/scorm directory
* @param $courseCode
* @param $file
* @return SplFileInfo
*/
public function getCourseScormDocument($courseCode, $file)
{
$file = 'courses/'.$courseCode.'/scorm/'.$file;
return $this->get($file);
}
}

@ -337,6 +337,24 @@ class IndexController extends CommonController
}
}
/**
* Gets a document from the data/courses/MATHS/scorm/file.jpg to the user
* @todo check permissions
* @param Application $app
* @param string $courseCode
* @param string $file
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse|void
*/
public function getScormDocumentAction(Application $app, $courseCode, $file)
{
try {
$file = $app['chamilo.filesystem']->getCourseScormDocument($courseCode, $file);
return $app->sendFile($file->getPathname());
} catch (\InvalidArgumentException $e) {
return $app->abort(404, 'File not found');
}
}
/**
* Gets a document from the data/default_platform_document/* folder
* @param Application $app

Loading…
Cancel
Save