You are here

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,
  ));
}