Add free question in scorm export see BT#11321

remotes/angel/1.11.x
Julio 9 years ago
parent 98dd633d81
commit b1734ced90
  1. 23
      main/exercise/export/scorm/scorm_classes.php
  2. 396
      main/lp/js/api_wrapper.js
  3. 18
      main/lp/learnpath.class.php
  4. 11
      main/lp/lp_controller.php

@ -170,7 +170,7 @@ class ScormQuestion extends Question
{
$w = $this->selectWeighting();
$s = 'questions.push('.$this->js_id.');'."\n";
if ($this->type == FREE_ANSWER || $this->type == HOT_SPOT) {
if ($this->type == HOT_SPOT) {
//put the max score to 0 to avoid discounting the points of
//non-exported quiz types in the SCORM
$w = 0;
@ -201,7 +201,7 @@ class ScormAnswerMultipleChoice extends Answer
//not sure if we are going to export also the MULTIPLE_ANSWER_COMBINATION to SCORM
//if ($type == MCMA || $type == MULTIPLE_ANSWER_COMBINATION ) {
if ($type == MCMA ) {
if ($type == MCMA) {
//$questionTypeLang = get_lang('MultipleChoiceMultipleAnswers');
$id = 1;
$jstmp = '';
@ -533,17 +533,20 @@ class ScormAnswerFree extends Answer
function export()
{
$js = '';
$identifier = 'question_'.$this->questionJSId.'_free';
// currently the free answers cannot be displayed, so ignore the textarea
$html = '<tr><td colspan="2">'.get_lang('ThisItemIsNotExportable').'</td></tr>';
$html = '<tr><td colspan="2">';
$html .= '<textarea minlength="20" name="'.$identifier.'" id="'.$identifier.'" ></textarea>';
$html .= '</td></tr>';
$score = $this->selectWeighting(1);
$js .= 'questions_answers['.$this->questionJSId.'] = new Array();';
$js .= 'questions_answers_correct['.$this->questionJSId.'] = new Array();';
$js .= 'questions_types['.$this->questionJSId.'] = \'free\';'."\n";
$jstmpw = 'questions_answers_ponderation['.$this->questionJSId.'] = new Array();';
$jstmpw .= 'questions_answers_ponderation['.$this->questionJSId.'][0] = 0;';
$jstmpw .= 'questions_answers_ponderation['.$this->questionJSId.'][1] = 0;'.";\n";
$js .= 'questions_answers_correct['.$this->questionJSId.'] = "";';
$js .= 'questions_types['.$this->questionJSId.'] = \'free\';';
$jstmpw = 'questions_answers_ponderation['.$this->questionJSId.'] = "'.$score.'";';
$js .= $jstmpw;
return array($js,$html);
return array($js, $html);
}
}
/**
@ -675,7 +678,7 @@ class ScormAssessmentItem
*/
function start_page()
{
global $charset;
$charset = 'UTF-8';
$head = '';
if ($this->standalone) {
$head = '<?xml version="1.0" encoding="'.$charset.'" standalone="no"?>';

@ -14,7 +14,7 @@
var _debug = false;
var findAPITries = 0;
var _apiHandle = null; //private variable
var errMsgLocate = "Unable to locate the LMS's API implementation";
var errMsgLocate = "Unable to locate the LMS's API implementation"
var _NoError = 0;
var _GeneralException = 101;
@ -28,6 +28,7 @@ var _InvalidSetValue = 402;
var _ElementIsReadOnly = 403;
var _ElementIsWriteOnly = 404;
var _IncorrectDataType = 405;
/**
* Gets the API handle right into the local API object and ensure there is only one.
* Using the singleton pattern to ensure there's only one API object.
@ -35,8 +36,7 @@ var _IncorrectDataType = 405;
*/
var API = new function ()
{
if (_apiHandle == null)
{
if (_apiHandle == null) {
_apiHandle = getAPI();
}
return _apiHandle;
@ -49,11 +49,9 @@ var API = new function ()
*/
function findAPI(win)
{
while((win.API == null) && (win.parent != null) && (win.parent != win))
{
while((win.API == null) && (win.parent != null) && (win.parent != win)) {
findAPITries++;
if(findAPITries>10)
{
if (findAPITries>10) {
alert("Error finding API - too deeply nested");
return null;
}
@ -61,6 +59,7 @@ function findAPI(win)
}
return win.API;
}
/**
* Gets the API from the current window/frame or from parent objects if not found
* @return object The API object recovered from the LMS's implementation of the SCORM API
@ -70,13 +69,11 @@ function getAPI()
//window is the global/root object of the current window/frame
var MyAPI = findAPI(window);
//look through parents if any
if((MyAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined"))
{
if ((MyAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined")) {
MyAPI = findAPI(window.opener);
}
//still not found? error message
if(MyAPI == null)
{
if (MyAPI == null) {
alert("Unable to find SCORM API adapter.\nPlease check your LMS is considering this page as SCORM and providing the right JavaScript interface.")
}
return MyAPI;
@ -87,71 +84,60 @@ function getAPI()
*/
function ErrorHandler()
{
if(API == null)
{
if (API == null) {
alert("Unable to locate the LMS's API. Cannot determine LMS error code");
return;
}
var errCode = API.LMSGetLastError().toString();
if(errCode != _NoError)
{
if(errCode == _NotImplementedError)
{
if (errCode != _NoError) {
if (errCode == _NotImplementedError) {
var errDescription = "The LMS doesn't support this feature";
if(_debug)
{
if (_debug) {
errDescription += "\n";
errDescription += api.LMSGetDiagnostic(null);
}
alert (errDescription);
}
else
{
alert(errDescription);
} else {
var errDescription = API.LMSGetErrorString(errCode);
if(_debug)
{
if (_debug) {
errDescription += "\n";
errDescription += api.LMSGetDiagnostic(null);
}
alert (errDescription);
alert(errDescription);
}
}
return errCode;
}
/**
* Calls the LMSInitialize method of the LMS's API object
* @return string The string value of the LMS returned value or false if error (should be "true" otherwise)
*/
function doLMSInitialize()
{
if(API == null)
{
if (API == null) {
alert(errMsgLocate + "\nLMSInitialize failed");
return false;
}
var result = API.LMSInitialize("");
if(result.toString() != "true")
{
if (result.toString() != "true") {
var err = ErrorHandler();
}
return result.toString();
}
/**
* Calls the LMSFinish method of the LMS's API object
* @return string The string value of the LMS return value, or false if error (should be "true" otherwise)
*/
function doLMSFinish()
{
if(API == null)
{
if (API == null) {
alert(errMsgLocate + "\nLMSFinish failed");
return false;
}
else
{
} else {
var result = API.LMSFinish('');
if(result.toString() != "true")
{
if (result.toString() != "true") {
var err = ErrorHandler();
}
}
@ -164,28 +150,22 @@ function doLMSFinish()
*/
function doLMSGetValue(name)
{
if (API == null)
{
if (API == null) {
alert(errMsgLocate + "\nLMSGetValue was not successful.");
return "";
}
else
{
} else {
var value = API.LMSGetValue(name);
var errCode = API.LMSGetLastError().toString();
if (errCode != _NoError)
{
if (errCode != _NoError) {
// an error was encountered so display the error description
var errDescription = API.LMSGetErrorString(errCode);
alert("LMSGetValue("+name+") failed. \n"+ errDescription);
alert("LMSGetValue(" + name + ") failed. \n" + errDescription);
return "";
}
else
{
return value.toString();
}
}
}
/**
* Calls the LMSSetValue method of the API object
* @param string The name of the SCORM parameter to set
@ -194,74 +174,68 @@ function doLMSGetValue(name)
*/
function doLMSSetValue(name, value)
{
if (API == null)
{
alert("Unable to locate the LMS's API Implementation.\nLMSSetValue was not successful.");
return;
}
else
{
var result = API.LMSSetValue(name, value);
if (result.toString() != "true")
{
var err = ErrorHandler();
}
}
return;
if (API == null) {
alert("Unable to locate the LMS's API Implementation.\nLMSSetValue was not successful.");
return;
} else {
var result = API.LMSSetValue(name, value);
if (result.toString() != "true") {
var err = ErrorHandler();
}
}
return;
}
/**
* Calls the LMSCommit method
*/
function doLMSCommit()
{
if(API == null)
{
alert(errMsgLocate +"\nLMSCommit was not successful.");
if (API == null) {
alert(errMsgLocate + "\nLMSCommit was not successful.");
return "false";
}
else
{
} else {
var result = API.LMSCommit("");
if (result != "true")
{
if (result != "true") {
var err = ErrorHandler();
}
}
return result.toString();
}
/**
* Calls GetLastError()
*/
function doLMSGetLastError()
{
if (API == null)
{
alert(errMsgLocate + "\nLMSGetLastError was not successful."); //since we can't get the error code from the LMS, return a general error
if (API == null) {
alert(errMsgLocate + "\nLMSGetLastError was not successful.");
//since we can't get the error code from the LMS, return a general error
return _GeneralError;
}
return API.LMSGetLastError().toString();
}
/**
* Calls LMSGetErrorString()
*/
function doLMSGetErrorString(errorCode)
{
if (API == null)
{
alert(errMsgLocate + "\nLMSGetErrorString was not successful.");
}
if (API == null) {
alert(errMsgLocate + "\nLMSGetErrorString was not successful.");
}
return API.LMSGetErrorString(errorCode).toString();
}
/**
* Calls LMSGetDiagnostic()
*/
function doLMSGetDiagnostic(errorCode)
{
if (API == null)
{
alert(errMsgLocate + "\nLMSGetDiagnostic was not successful.");
}
if (API == null) {
alert(errMsgLocate + "\nLMSGetDiagnostic was not successful.");
}
return API.LMSGetDiagnostic(errorCode).toString();
}
@ -278,17 +252,16 @@ var exitPageStatus;
function loadPage()
{
var result = doLMSInitialize();
if(result)
{
if (result) {
var status = doLMSGetValue("cmi.core.lesson_status");
if(status == "not attempted")
{
doLMSSetValue("cmi.core.lesson_status","incomplete");
if (status == "not attempted") {
doLMSSetValue("cmi.core.lesson_status", "incomplete");
}
exitPageStatus = false;
startTimer();
}
}
/**
* Starts the local timer
*/
@ -296,23 +269,21 @@ function startTimer()
{
startTime = new Date().getTime();
}
/**
* Calculates the total time and sends the result to the LMS
*/
function computeTime()
{
if ( startTime != 0 )
{
var currentDate = new Date().getTime();
var elapsedSeconds = ( (currentDate - startTime) / 1000 );
var formattedTime = convertTotalSeconds( elapsedSeconds );
}
else
{
formattedTime = "00:00:00.0";
}
doLMSSetValue( "cmi.core.session_time", formattedTime );
if (startTime != 0) {
var currentDate = new Date().getTime();
var elapsedSeconds = ( (currentDate - startTime) / 1000 );
var formattedTime = convertTotalSeconds(elapsedSeconds);
} else {
formattedTime = "00:00:00.0";
}
doLMSSetValue( "cmi.core.session_time", formattedTime );
}
/**
* Formats the time in a SCORM time format
@ -330,31 +301,28 @@ function convertTotalSeconds(ts)
var strWholeSec = strSec;
var strFractionSec = "";
if (strSec.indexOf(".") != -1)
{
strWholeSec = strSec.substring(0, strSec.indexOf("."));
strFractionSec = strSec.substring(strSec.indexOf(".")+1, strSec.length);
if (strSec.indexOf(".") != -1) {
strWholeSec = strSec.substring(0, strSec.indexOf("."));
strFractionSec = strSec.substring(strSec.indexOf(".") + 1, strSec.length);
}
if (strWholeSec.length < 2)
{
if (strWholeSec.length < 2) {
strWholeSec = "0" + strWholeSec;
}
strSec = strWholeSec;
if (strFractionSec.length)
{
strSec = strSec+ "." + strFractionSec;
if (strFractionSec.length) {
strSec = strSec + "." + strFractionSec;
}
if ((ts % 3600) != 0 )
if ((ts % 3600) != 0)
var hour = 0;
else var hour = (ts / 3600);
if ( (tmp % 60) != 0 )
if ((tmp % 60) != 0)
var min = 0;
else var min = (tmp / 60);
if ((new String(hour)).length < 2)
hour = "0"+hour;
hour = "0" + hour;
if ((new String(min)).length < 2)
min = "0"+min;
var rtnVal = hour+":"+min+":"+strSec;
min = "0" + min;
var rtnVal = hour + ":" + min + ":" + strSec;
return rtnVal
}
/**
@ -370,6 +338,7 @@ function doBack()
result = doLMSCommit();
result = doLMSFinish();
}
/**
* Handles the closure of the current SCO before an interruption. This is only useful if the LMS
* deals with the cmi.core.exit, cmi.core.lesson_status and cmi.core.lesson_mode *and* the SCO
@ -390,6 +359,7 @@ function doContinue(status)
result = doLMSCommit();
result = doLMSFinish();
}
/**
* handles the recording of everything on a normal shutdown
*/
@ -402,6 +372,7 @@ function doQuit()
result = doLMSCommit();
result = doLMSFinish();
}
/**
* Called upon unload event from body element
*/
@ -429,7 +400,7 @@ function checkAnswers(interrupted)
var tmpScore = 0;
var status = 'not attempted';
var scoreMax = 0;
for(var i=0; i<questions.length;i++) {
for (var i=0; i<questions.length;i++) {
if(questions[i] != undefined && questions[i] != null){
var idQuestion = questions[i];
var type = questions_types[idQuestion];
@ -441,179 +412,115 @@ function checkAnswers(interrupted)
if (type == 'mcma') {
var interactionType = 'choice';
var myScore = 0;
for(var j=0; j<questions_answers[idQuestion].length;j++)
{
for(var j=0; j<questions_answers[idQuestion].length;j++) {
var idAnswer = questions_answers[idQuestion][j];
var answer = document.getElementById('question_'+(idQuestion)+'_multiple_'+(idAnswer));
if(answer.checked)
{
if (answer.checked) {
interactionAnswers += idAnswer+'__|';// changed by isaac flores
myScore +=questions_answers_ponderation[idQuestion][idAnswer];
/*for(k=0;k<questions_answers_correct[idQuestion].length;k++)
{
if(questions_answers_correct[idQuestion][k] == idAnswer)
{
if(questions_answers_ponderation[idQuestion][idAnswer])
{
myScore += questions_answers_ponderation[idQuestion][idAnswer];
}
else
{
myScore ++;
}
}
}*/
}
}
interactionScore = myScore;
//correct responses work by pattern, see SCORM Runtime Env Doc
//for(k=0;k<questions_answers_correct[idQuestion].length;k++)
//{
// interactionCorrectResponses += questions_answers_correct[idQuestion][k].toString()+',';
//}
scoreMax += questions_score_max[idQuestion];
}
else if(type == 'mcua')
{
} else if (type == 'mcua') {
var interactionType = 'choice';
var myScore = 0;
for(var j=0; j<questions_answers[idQuestion].length;j++)
{
for (var j=0; j<questions_answers[idQuestion].length;j++) {
var idAnswer = questions_answers[idQuestion][j];
var answer = document.getElementById('question_'+(idQuestion)+'_unique_'+(idAnswer));
if(answer.checked)
{
if (answer.checked) {
interactionAnswers += idAnswer;
if(questions_answers_correct[idQuestion] == idAnswer)
{
if(questions_answers_ponderation[idQuestion][idAnswer])
{
if (questions_answers_correct[idQuestion] == idAnswer) {
if (questions_answers_ponderation[idQuestion][idAnswer]) {
myScore += questions_answers_ponderation[idQuestion][idAnswer];
}
else
{
myScore ++;
} else {
myScore++;
}
}
}
}
interactionScore = myScore;
//correct responses work by pattern, see SCORM Runtime Env Doc
//interactionCorrectResponses += questions_answers_correct[idQuestion].toString();
scoreMax += questions_score_max[idQuestion];
}
else if(type == 'tf')
{
} else if (type == 'tf') {
var interactionType = 'true-false';
var myScore = 0;
for(var j=0; j<questions_answers[idQuestion].length;j++)
{
for (var j = 0; j < questions_answers[idQuestion].length; j++) {
var idAnswer = questions_answers[idQuestion][j];
var answer = document.getElementById('question_'+(idQuestion)+'_tf_'+(idAnswer));
if(answer.checked.value)
{
var answer = document.getElementById('question_' + idQuestion + '_tf_' + (idAnswer));
if (answer.checked.value) {
interactionAnswers += idAnswer;
for(k=0;k<questions_answers_correct[idQuestion].length;k++)
{
if(questions_answers_correct[idQuestion][k] == idAnswer)
{
if(questions_answers_ponderation[idQuestion][idAnswer])
{
for (k = 0; k < questions_answers_correct[idQuestion].length; k++) {
if (questions_answers_correct[idQuestion][k] == idAnswer) {
if (questions_answers_ponderation[idQuestion][idAnswer]) {
myScore += questions_answers_ponderation[idQuestion][idAnswer];
}
else
{
myScore ++;
} else {
myScore++;
}
}
}
}
}
interactionScore = myScore;
//correct responses work by pattern, see SCORM Runtime Env Doc
//interactionCorrectResponses += questions_answers_correct[idQuestion].toString();
scoreMax += questions_score_max[idQuestion];
}
else if(type == 'fib')
{
} else if (type == 'fib') {
var interactionType = 'fill-in';
var myScore = 0;
for(var j=0; j<questions_answers[idQuestion].length;j++)
{
for (var j = 0; j < questions_answers[idQuestion].length; j++) {
var idAnswer = questions_answers[idQuestion][j];
var answer = document.getElementById('question_'+(idQuestion)+'_fib_'+(idAnswer));
if(answer.value)
{
interactionAnswers += answer.value+'__|';//changed by isaac flores
for(k=0;k<questions_answers_correct[idQuestion].length;k++)
{
if(questions_answers_correct[idQuestion][k] == answer.value)
{
if(questions_answers_ponderation[idQuestion][idAnswer])
{
if (answer.value) {
interactionAnswers += answer.value + '__|';//changed by isaac flores
for (k = 0; k < questions_answers_correct[idQuestion].length; k++) {
if (questions_answers_correct[idQuestion][k] == answer.value) {
if (questions_answers_ponderation[idQuestion][idAnswer]) {
myScore += questions_answers_ponderation[idQuestion][idAnswer];
}
else
{
myScore ++;
} else {
myScore++;
}
}
}
}
}
interactionScore = myScore;
//correct responses work by pattern, see SCORM Runtime Env Doc
//for(k=0;k<questions_answers_correct[idQuestion].length;k++)
//{
// interactionCorrectResponses += questions_answers_correct[idQuestion][k].toString()+',';
//}
scoreMax += questions_score_max[idQuestion];
}
else if(type == 'matching')
{
} else if (type == 'matching') {
var interactionType = 'matching';
var myScore = 0;
for(var j=0; j<questions_answers[idQuestion].length;j++)
{
for (var j = 0; j < questions_answers[idQuestion].length; j++) {
var idAnswer = questions_answers[idQuestion][j];
var answer = document.getElementById('question_'+(idQuestion)+'_matching_'+(idAnswer));
if(answer && answer.value)
{
interactionAnswers += answer.value+'__|';//changed by isaac flores
for(k=0;k<questions_answers_correct[idQuestion].length;k++)
{
var answer = document.getElementById('question_' + (idQuestion) + '_matching_' + (idAnswer));
if (answer && answer.value) {
interactionAnswers += answer.value + '__|';//changed by isaac flores
for (k = 0; k < questions_answers_correct[idQuestion].length; k++) {
var left = questions_answers_correct[idQuestion][k][0];
var right = questions_answers_correct[idQuestion][k][1];
if(left == idAnswer && right == answer.value)
{
if(questions_answers_ponderation[idQuestion][idAnswer])
{
if (left == idAnswer && right == answer.value) {
if (questions_answers_ponderation[idQuestion][idAnswer]) {
myScore += questions_answers_ponderation[idQuestion][idAnswer];
}
else
{
myScore ++;
} else {
myScore++;
}
}
}
}
}
interactionScore = myScore;
//correct responses work by pattern, see SCORM Runtime Env Doc
//for(k=0;k<questions_answers_correct[idQuestion].length;k++)
//{
// interactionCorrectResponses += questions_answers_correct[idQuestion][k].toString()+',';
//}
scoreMax += questions_score_max[idQuestion];
} else if(type == 'free') {
} else if (type == 'free') {
//ignore for now as a score cannot be given
var interactionType = 'likert';
interactionScore = 0;
var interactionType = 'free';
var answer = document.getElementById('question_'+(idQuestion)+'_free');
if (answer && answer.value) {
interactionAnswers += answer.value
}
interactionScore = questions_score_max[idQuestion];
scoreMax += questions_score_max[idQuestion];
//interactionAnswers = document.getElementById('question_'+(idQuestion)+'_free').value;
//correct responses work by pattern, see SCORM Runtime Env Doc
//interactionCorrectResponses += questions_answers_correct[idQuestion].toString();
} else if(type == 'hotspot') {
} else if (type == 'hotspot') {
var interactionType = 'sequencing';
interactionScore = 0;
//if(question_score && question_score[idQuestion]){
@ -625,7 +532,7 @@ function checkAnswers(interrupted)
//{
// interactionCorrectResponses += questions_answers_correct[idQuestion][k].toString()+',';
//}
} else if(type == 'exact') {
} else if (type == 'exact') {
var interactionType = 'exact';
interactionScore = 0;
// not yet implemented see scorm_classes.php ScormAnswerMultipleChoice::export() function
@ -674,47 +581,32 @@ function checkAnswers(interrupted)
scoreMax += questions_score_max[idQuestion];
*/
}
else
{
//
}
tmpScore += interactionScore;
doLMSSetValue('cmi.interactions.'+idQuestion+'.id','Q'+idQuestion);
doLMSSetValue('cmi.interactions.'+idQuestion+'.type',interactionType);
doLMSSetValue('cmi.interactions.'+idQuestion+'.student_response',interactionAnswers);
doLMSSetValue('cmi.interactions.'+idQuestion+'.result',interactionScore);
//correct responses work by pattern, see SCORM Runtime Env Doc
//doLMSSetValue('cmi.interactions.'+idQuestion+'.correct_responses',questions_answers_correct[idQuestion]);
//doLMSSetValue('cmi.interactions.'+idQuestion+'.correct_responses',interactionCorrectResponses);
}
}
doLMSSetValue('cmi.core.score.min',0);
doLMSSetValue('cmi.core.score.max',scoreMax);
doLMSSetValue('cmi.core.score.raw',tmpScore);
//doLMSSetValue('cmi.student_data.mastery_score',(scoreMax*0.7));
doLMSSetValue('cmi.core.score.min', 0);
doLMSSetValue('cmi.core.score.max', scoreMax);
doLMSSetValue('cmi.core.score.raw', tmpScore);
//get status
var mastery_score = doLMSGetValue('cmi.student_data.mastery_score');
if(mastery_score <= 0)
{
mastery_score = (scoreMax*0.80);
if (mastery_score <= 0) {
mastery_score = (scoreMax * 0.80);
}
if(tmpScore > mastery_score)
{
if (tmpScore > mastery_score) {
status = 'passed';
}
else
{
} else {
status = 'failed';
}
doLMSSetValue('cmi.core.lesson_status',status);
doLMSSetValue('cmi.core.lesson_status', status);
if (interrupted && (status != 'completed') && (status != 'passed'))
{
doLMSSetValue('cmi.core.exit','suspended');
}
else
{
if (interrupted && (status != 'completed') && (status != 'passed')) {
doLMSSetValue('cmi.core.exit', 'suspended');
}
return false; //do not submit the form
}

@ -1132,9 +1132,9 @@ class learnpath
);
$link_info = GradebookUtils::isResourceInCourseGradebook(
api_get_course_id(),
4,
$id,
api_get_course_id(),
4,
$id,
api_get_session_id()
);
if ($link_info !== false) {
@ -9136,7 +9136,7 @@ class learnpath
// Remove memory and time limits as much as possible as this might be a long process...
if (function_exists('ini_set')) {
api_set_memory_limit('128M');
api_set_memory_limit('256M');
ini_set('max_execution_time', 600);
}
@ -9228,8 +9228,8 @@ class learnpath
$path_to_replace = $folder_name.'/';
}
//Fixes chamilo scorm exports
if ($this->ref == 'chamilo_scorm_export') {
// Fixes chamilo scorm exports
if ($this->ref === 'chamilo_scorm_export') {
$path_to_remove = 'scorm/'.$this->path.'/document/';
}
@ -9293,7 +9293,7 @@ class learnpath
$my_xml_file_path = str_replace($path_to_remove, $path_to_replace, $my_file_path);
//From quiz
if ($this->ref == 'chamilo_scorm_export') {
if ($this->ref === 'chamilo_scorm_export') {
$path_to_remove = 'scorm/'.$this->path.'/';
$my_xml_file_path = str_replace($path_to_remove, '', $my_file_path);
}
@ -9624,7 +9624,9 @@ class learnpath
$contents = ScormSection::export_exercise_to_scorm($exe_id, true);
$tmp_file_path = $archive_path.$temp_dir_short.'/'.$my_file_path;
$res = file_put_contents($tmp_file_path, $contents);
if ($res === false) { error_log('Could not write into file '.$tmp_file_path.' '.__FILE__.' '.__LINE__, 0); }
if ($res === false) {
error_log('Could not write into file '.$tmp_file_path.' '.__FILE__.' '.__LINE__, 0);
}
$files_cleanup[] = $tmp_file_path;
//error_log($tmp_path); die();
//$my_xml_file_path = api_htmlentities(api_utf8_encode($my_file_path), ENT_QUOTES, 'UTF-8');

@ -808,12 +808,15 @@ switch ($action) {
if ($hideScormExportLink === 'true') {
api_not_allowed(true);
}
if ($debug > 0) error_log('New LP - export action triggered', 0);
if (!$lp_found) { error_log('New LP - No learnpath given for export', 0); require 'lp_list.php'; }
else {
if ($debug > 0) {
error_log('New LP - export action triggered', 0);
}
if (!$lp_found) {
error_log('New LP - No learnpath given for export', 0);
require 'lp_list.php';
} else {
$_SESSION['oLP']->scorm_export();
exit();
//require 'lp_list.php';
}
break;
case 'export_to_pdf':

Loading…
Cancel
Save