You are here

function starrating_field_formatter_view in Star Rating 7.2

Implements hook_field_formatter_view().

File

./starrating.module, line 154
Provides star rating field, formatter and widget using Field API. star rating field is based on integer value and convert it to the HTML code that displays series of icons. The formatter supports not only star rating field type but also…

Code

function starrating_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  switch ($display['type']) {
    case 'starrating_rating_formatter':
      $settings = $display['settings'];
      $element = array();
      $options = array(
        'type' => 'file',
        'weight' => 10,
        'group' => CSS_DEFAULT,
      );
      $css_file = $settings['icon_type'] . '.css';
      drupal_add_css(drupal_get_path('module', 'starrating') . '/icons/' . $css_file, $options);

      //currently we only support list_integer
      if ($field['type'] == 'list_integer') {

        //get first array value as it is the minimum value
        reset($field['settings']['allowed_values']);
        $min = current($field['settings']['allowed_values']);

        //need to check if min is 0 or bigger to calculate correct maximum value
        if ($min > 0) {
          $max = count($field['settings']['allowed_values']);
        }
        else {
          $max = count($field['settings']['allowed_values']) - 1;
        }
      }
      else {
        drupal_set_message("Something went wrong. Only list_inetger is currently supported");
      }
      if (!isset($items[0]['value']) || $items[0]['value'] == NULL || $items[0]['value'] === NULL) {
        $rating_value = NULL;
      }
      else {
        $rating_value = $items[0]['value'];
      }
      $output = starrating_field_formatter_execute($rating_value, $min, $max, $settings['icon_type'], $settings['icon_color'], $settings['fill_blank']);
      $element[] = array(
        '#markup' => $output,
      );
      return $element;
    case 'starrating_rating_value_formatted':
      $element = array();
      $output = '<div class="starrating">' . intval($items[0]['value']) . '</div>';
      $element[] = array(
        '#markup' => $output,
      );
      return $element;
    case 'starrating_rating_value_int':
      $element = array();
      if (isset($items[0]['value'])) {
        $output = intval($items[0]['value']);
      }
      else {
        $output = 0;
      }
      $element[] = array(
        '#markup' => $output,
      );
      return $element;
  }
}