You are here

function radioactivity_field_formatter_view in Radioactivity 7.2

Same name and namespace in other branches
  1. 7 radioactivity.field.inc \radioactivity_field_formatter_view()

Implements hook_field_formatter_view()

File

./radioactivity.field.inc, line 160

Code

function radioactivity_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  switch ($display['type']) {
    case RADIOACTIVITY_COMBO_FORMATTER:
      $entity_id = 0;
      $info = entity_get_info($entity_type);
      $id = $info['entity keys']['id'];
      $entity_id = $entity->{$id};
      $language = LANGUAGE_NONE;
      if ($field['translatable']) {
        $language = field_language($entity_type, $entity, $field['field_name']);
      }
      if ($entity_id > 0) {
        $settings = $display['settings'];
        if ($settings['energy'] != 0) {
          $profile = radioactivity_get_field_profile($entity_type, $instance['bundle'], $field['field_name']);
          if ($profile && $profile->storageObject) {
            _radioactivity_register_emitter($profile->storage, $entity_type, $instance['bundle'], $field['field_name'], $language, $entity_id, $settings);
          }
          else {
            watchdog("radioactivity", "Storage for field @field not found for @bundle. Please change it in the field configuration.", array(
              "@field" => $field['field_name'],
              "@bundle" => $instance['bundle'],
            ), WATCHDOG_ERROR);
          }
        }
      }
      drupal_add_css(drupal_get_path('module', 'radioactivity') . '/css/radioactivity.css');
      if (isset($settings['type'])) {
        switch ($settings['type']) {
          case 'none':
            break;
          case 'energy':
            foreach ($items as $delta => $item) {
              $element[$delta] = array(
                '#markup' => $item[RADIOACTIVITY_FIELD_ENERGY],
              );
            }
            break;
          case 'popularity':
            $maximum = ceil(_radioactivity_get_field_maximum($field['id'], $entity_type));
            $maximum = $maximum == 0 ? 1 : $maximum;
            foreach ($items as $delta => $item) {
              $energy = $item[RADIOACTIVITY_FIELD_ENERGY];
              $element[$delta] = array(
                '#markup' => round($energy / $maximum * 100),
              );
            }
            break;
          case 'gauge':
            $maximum = ceil(_radioactivity_get_field_maximum($field['id'], $entity_type));
            $maximum = $maximum == 0 ? 1 : $maximum;
            foreach ($items as $delta => $item) {
              $energy = $item[RADIOACTIVITY_FIELD_ENERGY];
              $element[$delta] = array(
                '#theme' => 'radioactivity_gauge',
                '#maximum' => $maximum,
                '#energy' => $energy,
              );
            }
            break;
          case 'history':
            $data = _radioactivity_get_history_for_field_and_entity($instance['id'], $entity_id);
            foreach ($items as $delta => $item) {
              $energy = $item[RADIOACTIVITY_FIELD_ENERGY];
              $element[$delta] = array(
                '#theme' => 'radioactivity_history',
                '#dataset' => $data,
              );
            }
            break;
        }
      }
      break;
  }
  return $element;
}