You are here

function opigno_scorm_quiz_opigno_scorm_ui_register_cmi_data in Opigno 7

Implements hook_opigno_scorm_ui_register_cmi_data().

File

modules/scorm/quiz/opigno_scorm_quiz.module, line 65
Module hook definitions.

Code

function opigno_scorm_quiz_opigno_scorm_ui_register_cmi_data($scorm, $scos, $scorm_version) {
  global $user;
  switch ($scorm_version) {
    case '2004':
      $data = array(
        'cmi.score.raw' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.score.raw', ''),
        'cmi.score.min' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.score.min', ''),
        'cmi.score.max' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.score.max', ''),
        'cmi.score.scaled' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.score.scaled', ''),
        'cmi.success_status' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.success_status', ''),
        'cmi.objectives' => array(),
      );

      // Get last visited SCO.
      $last_sco = opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'user.sco', '');
      if ($last_sco != '') {
        $data['cmi.suspend_data'] = opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.suspend_data.' . $last_sco, '');
      }
      else {
        $data['cmi.suspend_data'] = opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.suspend_data', '');
      }
      break;
    case '1.2':
      $data = array(
        'cmi.core.score.raw' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.core.score.raw', ''),
        'cmi.core.score.min' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.core.score.min', ''),
        'cmi.core.score.max' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.core.score.max', ''),
        'cmi.core.lesson_status' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.core.lesson_status', ''),
        'cmi.suspend_data' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.suspend_data', ''),
        'cmi.core.score._children' => opigno_scorm_ui_scorm_cmi_get($user->uid, $scorm->id, 'cmi.core.score._children', 'raw,min,max'),
        'cmi.objectives' => array(),
      );
      break;
  }

  // Fetch the objectives.
  foreach ($scos as $sco) {
    if (!empty($sco->attributes['objectives'])) {
      foreach ($sco->attributes['objectives'] as $objective) {
        $stored_objective = opigno_scorm_quiz_load_objective($user->uid, $scorm->id, $objective['id']);
        if ($scorm_version == '2004') {
          $defaults = array(
            'id' => $objective['id'],
            'score' => array(
              'scaled' => 0,
              'raw' => 0,
              'min' => 0,
              'max' => 0,
            ),
            'success_status' => '',
            'completion_status' => '',
            'progress_measure' => '',
            'description' => '',
          );
        }
        else {
          $defaults = array(
            'id' => $objective['id'],
            'score' => array(
              'raw' => 0,
              'min' => 0,
              'max' => 0,
            ),
            'status' => '',
          );
        }
        if (!empty($stored_objective)) {
          $stored_objective = (array) $stored_objective;
          $stored_objective += $defaults;
        }
        else {
          $stored_objective = $defaults;
        }
        $data['cmi.objectives'][] = $stored_objective;
      }
    }
  }
  return $data;
}