mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 04:30:15 +01:00
MDL-52556 mod_scorm: Return SCO extra data in get_scorm_scoes
This commit is contained in:
parent
ea3ebbf20e
commit
6a03246999
@ -226,6 +226,21 @@ class mod_scorm_external extends external_api {
|
||||
if (!$scoes = scorm_get_scoes($scorm->id, $params['organization'])) {
|
||||
// Function scorm_get_scoes return false, not an empty array.
|
||||
$scoes = array();
|
||||
} else {
|
||||
$scoreturnstructure = self::get_scorm_scoes_returns();
|
||||
foreach ($scoes as $sco) {
|
||||
$extradata = array();
|
||||
foreach ($sco as $element => $value) {
|
||||
// Check if the element is extra data (not a basic SCO element).
|
||||
if (!isset($scoreturnstructure->keys['scoes']->content->keys[$element])) {
|
||||
$extradata[] = array(
|
||||
'element' => $element,
|
||||
'value' => $value
|
||||
);
|
||||
}
|
||||
}
|
||||
$sco->extradata = $extradata;
|
||||
}
|
||||
}
|
||||
|
||||
$result = array();
|
||||
@ -257,6 +272,14 @@ class mod_scorm_external extends external_api {
|
||||
'scormtype' => new external_value(PARAM_ALPHA, 'scorm type (asset, sco)'),
|
||||
'title' => new external_value(PARAM_NOTAGS, 'sco title'),
|
||||
'sortorder' => new external_value(PARAM_INT, 'sort order'),
|
||||
'extradata' => new external_multiple_structure(
|
||||
new external_single_structure(
|
||||
array(
|
||||
'element' => new external_value(PARAM_RAW, 'element name'),
|
||||
'value' => new external_value(PARAM_RAW, 'element value')
|
||||
)
|
||||
), 'Additional SCO data', VALUE_OPTIONAL
|
||||
)
|
||||
), 'SCORM SCO data'
|
||||
)
|
||||
),
|
||||
|
@ -261,12 +261,27 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase {
|
||||
|
||||
$scoes = scorm_get_scoes($scorm->id);
|
||||
$sco = array_shift($scoes);
|
||||
$sco->extradata = array();
|
||||
$this->assertEquals((array) $sco, $result['scoes'][0]);
|
||||
|
||||
$sco = array_shift($scoes);
|
||||
// Remove specific sco data.
|
||||
$sco->extradata = array();
|
||||
$sco->extradata[] = array(
|
||||
'element' => 'isvisible',
|
||||
'value' => $sco->isvisible
|
||||
);
|
||||
$sco->extradata[] = array(
|
||||
'element' => 'parameters',
|
||||
'value' => $sco->parameters
|
||||
);
|
||||
unset($sco->isvisible);
|
||||
unset($sco->parameters);
|
||||
|
||||
// Sort the array (if we don't sort tests will fails for Postgres).
|
||||
usort($result['scoes'][1]['extradata'], function($a, $b) {
|
||||
return strcmp($a['element'], $b['element']);
|
||||
});
|
||||
|
||||
$this->assertEquals((array) $sco, $result['scoes'][1]);
|
||||
|
||||
// Use organization.
|
||||
@ -284,6 +299,47 @@ class mod_scorm_external_testcase extends externallib_advanced_testcase {
|
||||
} catch (moodle_exception $e) {
|
||||
$this->assertEquals('invalidrecord', $e->errorcode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get scorm scoes (with a complex SCORM package)
|
||||
*/
|
||||
public function test_mod_scorm_get_scorm_scoes_complex_package() {
|
||||
global $CFG;
|
||||
|
||||
// As student.
|
||||
self::setUser($this->student);
|
||||
|
||||
$record = new stdClass();
|
||||
$record->course = $this->course->id;
|
||||
$record->packagefilepath = $CFG->dirroot.'/mod/scorm/tests/packages/complexscorm.zip';
|
||||
$scorm = self::getDataGenerator()->create_module('scorm', $record);
|
||||
|
||||
$result = mod_scorm_external::get_scorm_scoes($scorm->id);
|
||||
$result = external_api::clean_returnvalue(mod_scorm_external::get_scorm_scoes_returns(), $result);
|
||||
$this->assertCount(9, $result['scoes']);
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
|
||||
$expectedscoes = array();
|
||||
$scoreturnstructure = mod_scorm_external::get_scorm_scoes_returns();
|
||||
$scoes = scorm_get_scoes($scorm->id);
|
||||
foreach ($scoes as $sco) {
|
||||
$sco->extradata = array();
|
||||
foreach ($sco as $element => $value) {
|
||||
// Add the extra data to the extradata array and remove the object element.
|
||||
if (!isset($scoreturnstructure->keys['scoes']->content->keys[$element])) {
|
||||
$sco->extradata[] = array(
|
||||
'element' => $element,
|
||||
'value' => $value
|
||||
);
|
||||
unset($sco->{$element});
|
||||
}
|
||||
}
|
||||
$expectedscoes[] = (array) $sco;
|
||||
}
|
||||
|
||||
$this->assertEquals($expectedscoes, $result['scoes']);
|
||||
}
|
||||
|
||||
/*
|
||||
|
BIN
mod/scorm/tests/packages/complexscorm.zip
Normal file
BIN
mod/scorm/tests/packages/complexscorm.zip
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user