You are here

lti_tool_provider_outcomes.misc.inc in LTI Tool Provider 7

Contains functions for minor operations like retreiving name of consumer etc.

File

lti_tool_provider_outcomes/lti_tool_provider_outcomes.misc.inc
View source
<?php

/**
 * @file
 * Contains functions for minor operations like retreiving
 * name of consumer etc.
 */

/**
 * Validate the score if it conforms to the selected datatype.
 *
 * @param string $datatype
 *   The selected datatype
 * @param string $score
 *   The input score
 *
 * @return boolean
 *   Success or failure
 */
function lti_tool_provider_outcomes_validate_score($datatype, $score, $base_no) {
  try {
    $value = floatval($score);
  } catch (Exception $e) {
    return FALSE;
  }
  if (strcasecmp($datatype, 'decimal') == 0) {
    if ($value >= 0 && $value <= 1.0) {
      return TRUE;
    }
  }
  elseif (strcasecmp($datatype, 'percentage') == 0) {
    if ($value >= 0 && $value <= 100 && is_numeric($score)) {
      if (!strpos($value, '.')) {
        return TRUE;
      }
    }
  }
  elseif (strcasecmp($datatype, 'ratio') == 0) {
    if (is_numeric($score)) {
      if (!strpos($value, '.')) {
        if ($score <= $base_no) {
          return TRUE;
        }
      }
    }
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    return TRUE;
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    return TRUE;
  }
  elseif (strcasecmp($datatype, 'passfail') == 0) {
    return TRUE;
  }
  elseif (strcasecmp($datatype, 'freetext') == 0) {
    if (drupal_strlen($score) <= 1024) {
      return TRUE;
    }
  }
  return FALSE;
}

/**
 * Retreives Outcomes.
 *
 * @param string $context_id
 *   Session context id.
 * @param string $resource_link_id
 *   Resource link id.
 * @param string $consumer_id
 *   Consumer entity id.
 * @param int $uid
 *   User id.
 *
 * @return array
 *   An array of Outcomes.
 */
function lti_tool_provider_outcomes_get_outcomes($consumer_id, $context_id, $resource_link_id, $uid = NULL) {
  $resource = lti_tool_provider_outcomes_get_resource($consumer_id, $context_id, $resource_link_id);
  if (isset($resource)) {
    $query = new EntityFieldQuery();
    if (isset($uid)) {
      $query
        ->entityCondition('entity_type', 'lti_tool_provider_outcomes')
        ->propertyCondition('lti_tool_provider_outcomes_user_id', $uid)
        ->propertyCondition('lti_tool_provider_outcomes_resource_entity_id_fk', $resource->lti_tool_provider_outcomes_resource_id);
    }
    else {
      $query
        ->entityCondition('entity_type', 'lti_tool_provider_outcomes')
        ->propertyCondition('lti_tool_provider_outcomes_resource_entity_id_fk', $resource->lti_tool_provider_outcomes_resource_id);
    }
    $result = $query
      ->execute();
    $entity_type = 'lti_tool_provider_outcomes';
    if (!empty($result[$entity_type])) {
      $outcomes = entity_load($entity_type, array_keys($result[$entity_type]));
      return $outcomes;
    }
    else {
      drupal_set_message(t('No outcomes record found'));
    }
  }
  else {
    drupal_set_message(t('No resource record found'));
  }
  return array();
}

/**
 * Retrieves Resources for a context.
 *
 * @param int $consumer_id
 *   Consumer entity id.
 * @param int $context_id
 *   Context id.
 *
 * @return array
 *   Resource_Entities. All the retrieved entities.
 */
function lti_tool_provider_outcomes_get_resources_for_context($consumer_id, $context_id) {
  $results_arr = array();
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'lti_tool_provider_outcomes_resource')
    ->propertyCondition('lti_tool_provider_outcomes_resource_consumer_id', $consumer_id)
    ->propertyCondition('lti_tool_provider_outcomes_resource_context_id', $context_id);
  $result = $query
    ->execute();
  $entity_type = 'lti_tool_provider_outcomes_resource';
  if (!empty($result[$entity_type])) {
    $resources = entity_load($entity_type, array_keys($result[$entity_type]));
    return $resources;
  }
  else {
    return NULL;
  }
}

/**
 * Retrieve the associated Datatype of the resource record.
 *
 * @param int $resource_id
 *   Resource entity id.
 *
 * @return string
 *   Datatype associated to that resource.
 */
function lti_tool_provider_outcomes_get_resource_datatype($resource_id) {

  // Return the selected datatype.
  $results_arr = array();
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'lti_tool_provider_outcomes_resource')
    ->propertyCondition('lti_tool_provider_outcomes_resource_id', $resource_id);
  $result = $query
    ->execute();
  if (isset($result['lti_tool_provider_outcomes_resource'])) {
    $entity = entity_load('lti_tool_provider_outcomes_resource', array_keys($result['lti_tool_provider_outcomes_resource']));
    $outcome = reset($entity);
    return $outcome->lti_tool_provider_outcomes_resource_score_datatype;
  }
  drupal_set_message(t('Resource not found.'), 'error');
  return '';
}

/**
 * Updates the Outcome Service Url of the Consumer Record.
 *
 * @param string $consumer_id
 *   Consumer id.
 * @param string $url
 *   Consumer outcomes url.
 * @param boolean $ext_bool
 *   Extension check.
 */
function lti_tool_provider_outcomes_update_outcome_service_url($consumer_id, $url, $ext_bool) {
  $consumer = lti_tool_provider_consumer_load($consumer_id);
  if ($consumer->lti_tool_provider_consumer_outcomes_url != $url) {
    $consumer->lti_tool_provider_consumer_outcomes_url = $url;
  }
  if ($consumer->lti_tool_provider_consumer_ext != $ext_bool) {
    $consumer->lti_tool_provider_consumer_ext = $ext_bool;
  }
  entity_get_controller('lti_tool_provider_consumer')
    ->save($consumer);
}

/**
 * Update the score in an outcome.
 *
 * @param object $outcome
 *   Outcome entity.
 * @param string $score
 *   Score.
 */
function lti_tool_provider_outcomes_update_score($outcome, $score) {
  $outcome->lti_tool_provider_outcomes_score = $score;
  $outcome->lti_tool_provider_outcomes_last_updated = REQUEST_TIME;
  lti_tool_provider_outcomes_save($outcome);
}

/**
 * Count all affected outcomes.
 *
 * @param object $resource
 *   The Resource.
 *
 * @return array
 *   All the affected outcomes.
 */
function lti_tool_provider_outcomes_get_outcomes_for_resource($resource) {
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'lti_tool_provider_outcomes')
    ->propertyCondition('lti_tool_provider_outcomes_resource_entity_id_fk', $resource->lti_tool_provider_outcomes_resource_id);
  $result = $query
    ->execute();
  if (!empty($result)) {
    $outcomes = entity_load('lti_tool_provider_outcomes', array_keys($result['lti_tool_provider_outcomes']));
    return $outcomes;
  }
  return array();
}

/**
 * Returns the selection array for passfail.
 *
 * @return array
 *   passfail array.
 */
function lti_tool_provider_outcomes_passfail_datatype_arr() {
  return array(
    'pass',
    'fail',
  );
}

/**
 * Returns the selection array for letteraf.
 *
 * @return array
 *   letteraf array.
 */
function lti_tool_provider_outcomes_letteraf_datatype_arr() {
  return array(
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
  );
}

/**
 * Returns the selection array for letterafplus.
 *
 * @return array
 *   letterafplus array.
 */
function lti_tool_provider_outcomes_letterafplus_datatype_arr() {
  return array(
    'A+',
    'A',
    'A-',
    'B+',
    'B',
    'B-',
    'C+',
    'C',
    'C-',
    'D+',
    'D',
    'D-',
    'E+',
    'E',
    'E-',
    'F+',
    'F',
    'F-',
  );
}

/**
 * Returns the default value of datatype.
 *
 * @param string $datatype
 *   The datatype.
 *
 * @return string
 *   The default value of the datatype.
 */
function lti_tool_provider_outcomes_get_datatype_default_value($datatype) {
  if (strcasecmp($datatype, 'decimal') == 0) {
    return '0.0';
  }
  elseif (strcasecmp($datatype, 'percentage') == 0) {
    return '0.00';
  }
  elseif (strcasecmp($datatype, 'ratio') == 0) {
    return 0 / 1;
  }
  elseif (strcasecmp($datatype, 'passfail') == 0) {
    return 0 / 1;
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    return 0 / 5;
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    return 0 / 17;
  }
  elseif (strcasecmp($datatype, 'freetext') == 0) {
    return 'None';
  }
  else {
    return '0.0';
  }
  return NULL;
}

/**
 * Create the score form parameters.
 *
 * @param string $datatype
 *   The datatype.
 * @param object $outcome
 *   Outcome object.
 *
 * @return array
 *   The form data.
 */
function lti_tool_provider_outcomes_create_score_form_params($datatype, $base_no, $outcome) {
  $result = array();
  if (strcasecmp($datatype, 'decimal') == 0) {
    $result[] = array(
      '#prefix' => '<div align="center">',
      '#suffix' => '</div>',
      '#type' => 'textfield',
      '#default_value' => $outcome->lti_tool_provider_outcomes_score,
      '#size' => 9,
      '#maxlength' => 9,
      '#required' => TRUE,
    );
  }
  elseif (strcasecmp($datatype, 'percentage') == 0) {
    $value = $outcome->lti_tool_provider_outcomes_score * $base_no;
    $result[] = array(
      '#prefix' => '<div class="container-inline" align="center">',
      '#type' => 'textfield',
      '#default_value' => $value,
      '#size' => 3,
      '#maxlength' => 3,
      '#suffix' => '%</div>',
      '#required' => TRUE,
    );
  }
  elseif (strcasecmp($datatype, 'ratio') == 0) {
    $value = $outcome->lti_tool_provider_outcomes_score * $base_no;
    $result[] = array(
      '#prefix' => '<div class="container-inline" align="center">',
      '#type' => 'textfield',
      '#default_value' => round($value),
      '#size' => 1,
      '#maxlength' => 3,
      '#required' => TRUE,
      '#suffix' => '/',
    );
    $result[] = array(
      '#type' => 'textfield',
      '#default_value' => $base_no,
      '#size' => 1,
      '#maxlength' => 3,
      '#attributes' => array(
        'readonly' => 'readonly',
      ),
      '#required' => TRUE,
      '#suffix' => '</div>',
    );
  }
  elseif (strcasecmp($datatype, 'passfail') == 0) {
    $index = lti_tool_provider_outcomes_format_score_array($outcome->lti_tool_provider_outcomes_score, $datatype);
    $result[] = array(
      '#prefix' => '<div align="center">',
      '#suffix' => '</div>',
      '#type' => 'select',
      '#options' => lti_tool_provider_outcomes_passfail_datatype_arr(),
      '#default_value' => $index,
    );
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    $index = lti_tool_provider_outcomes_format_score_array($outcome->lti_tool_provider_outcomes_score, $datatype);
    $result[] = array(
      '#prefix' => '<div align="center">',
      '#suffix' => '</div>',
      '#type' => 'select',
      '#options' => lti_tool_provider_outcomes_letteraf_datatype_arr(),
      '#default_value' => $index,
    );
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    $index = lti_tool_provider_outcomes_format_score_array($outcome->lti_tool_provider_outcomes_score, $datatype);
    $result[] = array(
      '#prefix' => '<div align="center">',
      '#suffix' => '</div>',
      '#type' => 'select',
      '#options' => lti_tool_provider_outcomes_letterafplus_datatype_arr(),
      '#default_value' => $index,
    );
  }
  elseif (strcasecmp($datatype, 'freetext') == 0) {
    $result[] = array(
      '#prefix' => '<div align="center">',
      '#suffix' => '</div>',
      '#type' => 'textfield',
      '#default_value' => $outcome->lti_tool_provider_outcomes_score,
      '#size' => 9,
      '#maxlength' => 1024,
      '#required' => TRUE,
    );
  }
  else {
    $result[] = array(
      '#prefix' => '<div align="center">',
      '#suffix' => '</div>',
      '#type' => 'textfield',
      '#default_value' => $outcome->lti_tool_provider_outcomes_score,
      '#size' => 9,
      '#maxlength' => 9,
      '#required' => TRUE,
    );
  }
  return $result;
}

/**
 * Retrieves the score from the form.
 *
 * @param int $row_no
 *   The row identifier.
 * @param array $form_state
 *   The form state array.
 * @param object $outcome
 *   The outcome object.
 * @param string $datatype
 *   The corresponding datatype.
 *
 * @return string
 *   The formatted score.
 */
function lti_tool_provider_outcomes_format_score($row_no, $form_state, $outcome, $datatype, $base_no) {
  if (strcasecmp($datatype, 'decimal') == 0) {
    return reset($form_state['values']['table'][$row_no]['score']);
  }
  elseif (strcasecmp($datatype, 'percentage') == 0) {
    $value = reset($form_state['values']['table'][$row_no]['score']) / $base_no;
    return $value;
  }
  elseif (strcasecmp($datatype, 'ratio') == 0) {
    $str_arr = $form_state['values']['table'][$row_no]['score'];
    $value = $str_arr[0] / $base_no;
    return $value;
  }
  elseif (strcasecmp($datatype, 'passfail') == 0) {
    $passfail_arr = lti_tool_provider_outcomes_passfail_datatype_arr();
    switch (reset($form_state['values']['table'][$row_no]['score'])) {
      case 0:
        $value = 1 / 1;
        break;
      case 1:
        $value = 0 / 1;
        break;
    }
    return $value;
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    $letteraf_arr = lti_tool_provider_outcomes_letteraf_datatype_arr();
    switch (reset($form_state['values']['table'][$row_no]['score'])) {
      case 0:
        $value = 5 / 5;
        break;
      case 1:
        $value = 4 / 5;
        break;
      case 2:
        $value = 3 / 5;
        break;
      case 3:
        $value = 2 / 5;
        break;
      case 4:
        $value = 1 / 5;
        break;
      case 5:
        $value = 0 / 5;
        break;
    }
    return $value;
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    switch (reset($form_state['values']['table'][$row_no]['score'])) {
      case 0:
        $value = 17 / 17;
        break;
      case 1:
        $value = 16 / 17;
        break;
      case 2:
        $value = 15 / 17;
        break;
      case 3:
        $value = 14 / 17;
        break;
      case 4:
        $value = 13 / 17;
        break;
      case 5:
        $value = 12 / 17;
        break;
      case 6:
        $value = 11 / 17;
        break;
      case 7:
        $value = 10 / 17;
        break;
      case 8:
        $value = 9 / 17;
        break;
      case 9:
        $value = 8 / 17;
        break;
      case 10:
        $value = 7 / 17;
        break;
      case 11:
        $value = 6 / 17;
        break;
      case 12:
        $value = 5 / 17;
        break;
      case 13:
        $value = 4 / 17;
        break;
      case 14:
        $value = 3 / 17;
        break;
      case 15:
        $value = 2 / 17;
        break;
      case 16:
        $value = 1 / 17;
        break;
      case 17:
        $value = 0 / 17;
        break;
    }
    return round($value, 5);
  }
  elseif (strcasecmp($datatype, 'freetext') == 0) {
    return reset($form_state['values']['table'][$row_no]['score']);
  }
  else {
    return reset($form_state['values']['table'][$row_no]['score']);
  }
}

/**
 * Set the base or denominator for a score.
 *
 * @param string $datatype
 *   The datatype of the score.
 * @param string $base_no
 *   The denominator or base of the ratio.
 *
 * @return string
 *   The base number.
 */
function lti_tool_provider_outcomes_set_base($datatype, $base_no = NULL) {
  if (strcasecmp($datatype, 'decimal') == 0) {
    return 'EMPTY';
  }
  elseif (strcasecmp($datatype, 'percentage') == 0) {
    return 100;
  }
  elseif (strcasecmp($datatype, 'ratio') == 0) {
    return isset($base_no) ? $base_no : 100;
  }
  elseif (strcasecmp($datatype, 'passfail') == 0) {
    return 2;
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    return 6;
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    return 18;
  }
  elseif (strcasecmp($datatype, 'freetext') == 0) {
    return 'EMPTY';
  }
  else {
    return 'EMPTY';
  }
}

/**
 * Formats raw score input.
 *
 * @param string $raw_score
 *   The raw score from form.
 * @param string $base_no
 *   The base number.
 * @param string $datatype
 *   The datatype.
 *
 * @return string
 *   The formatted score.
 */
function lti_tool_provider_outcomes_format_raw_score($raw_score, $base_no, $datatype) {
  if (strcasecmp($datatype, 'decimal') == 0) {
    return $raw_score;
  }
  elseif (strcasecmp($datatype, 'percentage') == 0) {
    return $raw_score;
  }
  elseif (strcasecmp($datatype, 'ratio') == 0) {
    $new_score = $raw_score * $base_no;

    // Return floor($new_score) . '/' . $base_no;
    return $raw_score;
  }
  elseif (strcasecmp($datatype, 'passfail') == 0) {
    return $raw_score;
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    $array = lti_tool_provider_outcomes_letteraf_datatype_arr();
    $index = floor($raw_score * $base_no);
    return $array[$index];
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    $array = lti_tool_provider_outcomes_letterafplus_datatype_arr();
    $index = floor($raw_score * $base_no);
    return $array[$index];
  }
  elseif (strcasecmp($datatype, 'freetext') == 0) {
    return $raw_score;
  }
  else {
    return $raw_score;
  }
}

/**
 * Formats the score and return the appropriate value.
 *
 * @param string $score
 *   The raw score.
 * @param string $datatype
 *   The datatype.
 *
 * @return int
 *   The index of the array.
 */
function lti_tool_provider_outcomes_format_score_array($score, $datatype) {
  if (strcasecmp($datatype, 'passfail') == 0) {
    if ($score == 1) {
      $value = 0;
    }
    elseif ($score >= 0) {
      $value = 1;
    }
    return $value;
  }
  elseif (strcasecmp($datatype, 'letteraf') == 0) {
    $letteraf_arr = lti_tool_provider_outcomes_letteraf_datatype_arr();
    if ($score == 1) {
      $value = 0;
    }
    elseif ($score >= 0.8) {
      $value = 1;
    }
    elseif ($score >= 0.6) {
      $value = 2;
    }
    elseif ($score >= 0.4) {
      $value = 3;
    }
    elseif ($score >= 0.2) {
      $value = 4;
    }
    elseif ($score >= 0) {
      $value = 5;
    }
    else {
      $value = 0;
    }
    return $value;
  }
  elseif (strcasecmp($datatype, 'letterafplus') == 0) {
    if ($score == 1) {
      $value = 0;
    }
    elseif ($score >= 0.94118) {
      $value = 1;
    }
    elseif ($score >= 0.88235) {
      $value = 2;
    }
    elseif ($score >= 0.82353) {
      $value = 3;
    }
    elseif ($score >= 0.76471) {
      $value = 4;
    }
    elseif ($score >= 0.70588) {
      $value = 5;
    }
    elseif ($score >= 0.64706) {
      $value = 6;
    }
    elseif ($score >= 0.58824) {
      $value = 7;
    }
    elseif ($score >= 0.52941) {
      $value = 8;
    }
    elseif ($score >= 0.47059) {
      $value = 9;
    }
    elseif ($score >= 0.41176) {
      $value = 10;
    }
    elseif ($score >= 0.35294) {
      $value = 11;
    }
    elseif ($score >= 0.29412) {
      $value = 12;
    }
    elseif ($score >= 0.23529) {
      $value = 13;
    }
    elseif ($score >= 0.17647) {
      $value = 14;
    }
    elseif ($score >= 0.11765) {
      $value = 15;
    }
    elseif ($score >= 0.05882) {
      $value = 16;
    }
    elseif ($score >= 0) {
      $value = 17;
    }
    return $value;
  }
}

/**
 * Returns the default datatypes.
 *
 * @return string
 *   The string of datatypes separated by comma.
 */
function lti_tool_provider_outcomes_default_resultvalue_sourcedids() {
  return 'decimal,percentage,ratio,passfail,letteraf,letterafplus';
}

Functions

Namesort descending Description
lti_tool_provider_outcomes_create_score_form_params Create the score form parameters.
lti_tool_provider_outcomes_default_resultvalue_sourcedids Returns the default datatypes.
lti_tool_provider_outcomes_format_raw_score Formats raw score input.
lti_tool_provider_outcomes_format_score Retrieves the score from the form.
lti_tool_provider_outcomes_format_score_array Formats the score and return the appropriate value.
lti_tool_provider_outcomes_get_datatype_default_value Returns the default value of datatype.
lti_tool_provider_outcomes_get_outcomes Retreives Outcomes.
lti_tool_provider_outcomes_get_outcomes_for_resource Count all affected outcomes.
lti_tool_provider_outcomes_get_resources_for_context Retrieves Resources for a context.
lti_tool_provider_outcomes_get_resource_datatype Retrieve the associated Datatype of the resource record.
lti_tool_provider_outcomes_letterafplus_datatype_arr Returns the selection array for letterafplus.
lti_tool_provider_outcomes_letteraf_datatype_arr Returns the selection array for letteraf.
lti_tool_provider_outcomes_passfail_datatype_arr Returns the selection array for passfail.
lti_tool_provider_outcomes_set_base Set the base or denominator for a score.
lti_tool_provider_outcomes_update_outcome_service_url Updates the Outcome Service Url of the Consumer Record.
lti_tool_provider_outcomes_update_score Update the score in an outcome.
lti_tool_provider_outcomes_validate_score Validate the score if it conforms to the selected datatype.