function opigno_scorm_ui_render_player in Opigno 7
Render a SCORM player for the given SCORM object.
Parameters
object $scorm:
Return value
string
1 call to opigno_scorm_ui_render_player()
- opigno_scorm_ui_field_formatter_view in modules/
scorm/ ui/ opigno_scorm_ui.module - Implements hook_field_formatter_view().
File
- modules/
scorm/ ui/ opigno_scorm_ui.module, line 336 - Opigno SCORM UI.
Code
function opigno_scorm_ui_render_player($scorm) {
global $user;
module_load_include('inc', 'opigno_scorm_ui', 'includes/opigno_scorm_ui.player');
// Get SCORM API version.
$metadata = unserialize($scorm->metadata);
if (strpos($metadata['schemaversion'], '1.2') !== FALSE) {
$scorm_version = '1.2';
}
else {
$scorm_version = '2004';
}
// Get the SCO tree.
$tree = opigno_scorm_ui_player_scorm_tree($scorm);
$flat_tree = opigno_scorm_ui_player_scorm_flatten_tree($tree);
// Get the start SCO.
$start_sco = opigno_scorm_ui_player_start_sco($flat_tree);
// Add assets.
opigno_scorm_ui_add_assets();
// Get implemented CMI paths.
$paths = opigno_scorm_ui_add_cmi_paths($scorm_version);
// Get CMI data for each SCO.
$data = opigno_scorm_ui_add_cmi_data($scorm, $flat_tree, $scorm_version);
$sco_identifiers = array();
foreach ($flat_tree as $delta => $item) {
if ($item->scorm_type == 'sco') {
$sco_identifiers[$item->identifier] = $item->id;
}
}
$scos_suspend_data = array();
// Check for quiz and user result id.
if (is_numeric(arg(1)) && arg(2) == 'take') {
$quiz_nid = arg(1);
if (isset($_SESSION['quiz_' . $quiz_nid]['quiz_vid']) && $quiz_nid != $_SESSION['quiz_' . $quiz_nid]['quiz_vid'] && variable_get('quiz_auto_revisioning')) {
$quiz = node_load($quiz_nid, $_SESSION['quiz_' . $quiz_nid]['quiz_vid']);
}
else {
$quiz = node_load($quiz_nid);
}
// Load user results id.
$rid = $user->uid > 0 ? _quiz_active_result_id($user->uid, $quiz->nid, $quiz->vid) : 0;
// Are we resuming an in-progress quiz?
if ($quiz->allow_resume && $rid > 0) {
// Resume.
foreach ($flat_tree as $sco) {
if ($sco->scorm_type == 'sco') {
$scos_suspend_data[$sco->id] = opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.suspend_data.' . $sco->id, '');
}
}
$last_user_sco = opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'user.sco', '');
if ($last_user_sco != '') {
foreach ($flat_tree as $sco) {
if ($last_user_sco == $sco->id && !empty($sco->launch)) {
$start_sco = $sco;
}
}
}
}
else {
// Not resume.
$data['cmi.suspend_data'] = '';
}
}
// Pass it to JS.
drupal_add_js(array(
'opignoScormUIPlayer' => array(
'cmiPaths' => $paths,
'cmiData' => $data,
'scoIdentifiers' => $sco_identifiers,
'cmiSuspendItems' => $scos_suspend_data,
),
'scormVersion' => $scorm_version,
), 'setting');
return theme('opigno_scorm_ui__player', array(
'scorm_id' => $scorm->id,
'tree' => count($flat_tree) == 2 ? NULL : $tree,
'start_sco' => $start_sco,
));
}