|
|
|
@ -2009,7 +2009,58 @@ class learnpath { |
|
|
|
|
return $this->ordered_items[$new_index]; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Returns the package type ('scorm','aicc','scorm2004','dokeos',...) |
|
|
|
|
* |
|
|
|
|
* Generally, the package provided is in the form of a zip file, so the function |
|
|
|
|
* has been written to test a zip file. If not a zip, the function will return the |
|
|
|
|
* default return value: '' |
|
|
|
|
* @param string the path to the file |
|
|
|
|
* @param string the original name of the file |
|
|
|
|
* @return string 'scorm','aicc','scorm2004','dokeos' or '' if the package cannot be recognized |
|
|
|
|
*/ |
|
|
|
|
function get_package_type($file_path,$file_name){ |
|
|
|
|
//error_log('In learnpath::get_package_type("'.$file_path.'","'.$file_name.'")',0); |
|
|
|
|
|
|
|
|
|
//get name of the zip file without the extension |
|
|
|
|
$file_info = pathinfo($file_name); |
|
|
|
|
$filename = $file_info['basename'];//name including extension |
|
|
|
|
$extension = $file_info['extension'];//extension only |
|
|
|
|
$file_base_name = str_replace('.'.$extension,'',$filename); //filename without its extension |
|
|
|
|
$this->zipname = $file_base_name; //save for later in case we don't have a title |
|
|
|
|
|
|
|
|
|
$zipFile = new pclZip($file_path); |
|
|
|
|
// Check the zip content (real size and file extension) |
|
|
|
|
$zipContentArray = $zipFile->listContent(); |
|
|
|
|
$package_type=''; |
|
|
|
|
$at_root = false; |
|
|
|
|
$manifest = ''; |
|
|
|
|
|
|
|
|
|
//the following loop should be stopped as soon as we found the right imsmanifest.xml (how to recognize it?) |
|
|
|
|
foreach($zipContentArray as $thisContent) |
|
|
|
|
{ |
|
|
|
|
if ( preg_match('~.(php.*|phtml)$~i', $thisContent['filename']) ) |
|
|
|
|
{ |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
elseif(stristr($thisContent['filename'],'imsmanifest.xml')!==FALSE) |
|
|
|
|
{ |
|
|
|
|
$manifest = $thisContent['filename']; //just the relative directory inside scorm/ |
|
|
|
|
$package_type = 'scorm'; |
|
|
|
|
break;//exit the foreach loop |
|
|
|
|
} |
|
|
|
|
elseif(stristr($thisContent['filename'],'AICC')!==FALSE) |
|
|
|
|
{ |
|
|
|
|
$package_type='aicc'; |
|
|
|
|
break;//exit the foreach loop |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
$package_type = ''; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return $package_type; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
|
|
|
|
|
* Gets the previous resource in queue (url). Also initialises time values for this viewing |
|
|
|
@ -2693,13 +2744,18 @@ class learnpath { |
|
|
|
|
if($this->debug>2){error_log('New LP - In learnpath::get_link() '.__LINE__.' - Found match for protocol in '.$lp_item_path,0);} |
|
|
|
|
//distant url, return as is |
|
|
|
|
$file = $lp_item_path; |
|
|
|
|
/* |
|
|
|
|
if(stristr($file,'<servername>')!==false){ |
|
|
|
|
$file = str_replace('<servername>',$course_path.'/scorm/'.$lp_path.'/',$lp_item_path); |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
$file .= $aicc_append; |
|
|
|
|
}else{ |
|
|
|
|
if($this->debug>2){error_log('New LP - In learnpath::get_link() '.__LINE__.' - No starting protocol in '.$lp_item_path,0);} |
|
|
|
|
//prevent getting untranslatable urls |
|
|
|
|
$lp_item_path = preg_replace('/%2F/','/',$lp_item_path); |
|
|
|
|
$lp_item_path = preg_replace('/%3A/',':',$lp_item_path); |
|
|
|
|
//prepare the path |
|
|
|
|
//prepare the path - lp_path might be unusable because it includes the "aicc" subdir name |
|
|
|
|
$file = $course_path.'/scorm/'.$lp_path.'/'.$lp_item_path; |
|
|
|
|
//TODO fix this for urls with protocol header |
|
|
|
|
$file = str_replace('//','/',$file); |
|
|
|
|