You are here

function soundmanager2_field_formatter_view in SoundManager2 7.2

Implements hook_field_formatter_view().

File

./soundmanager2.module, line 475
Responsible for managing the required SWF and JS files for soundmanager2 to work

Code

function soundmanager2_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  $settings = $display['settings'];
  $tracks = array();
  foreach ($items as $delta => $item) {

    // Prepend a random parameter to the URL in case this track appears
    // multiple times in the same page.
    $attributes = array();
    if ($settings['audio_type'] != 'default') {
      $attributes['type'] = $settings['audio_type'];
    }
    $url_options = array(
      'query' => array(
        'uuid' => uniqid(),
      ),
      'attributes' => $attributes,
    );
    if (isset($item['file'])) {

      // A Media file type.
      $file = $item['file'];

      // Get text to use in link
      $text = $file->filename;
      if (array_key_exists('text', $settings)) {
        if ($settings['text'] == 'description' && !empty($item['description'])) {
          $text = $file->description;
        }
        else {
          if ($settings['text'] == 'title' && !empty($entity->title)) {
            $text = $entity->title;
          }
        }
      }
      $tracks[$delta] = l($text, file_create_url($file->uri), $url_options);
    }
    elseif (isset($item['url'])) {

      // A Link file type.
      $file = $item['url'];

      // Get text to use in link
      $text = $item['title'];
      if (array_key_exists('text', $settings)) {
        if ($settings['text'] == 'description' && !empty($item['description'])) {
          $text = $item['title'];
        }
        else {
          if ($settings['text'] == 'title' && !empty($entity->title)) {
            $text = $entity->title;
          }
        }
      }
      $tracks[$delta] = l($text, file_create_url($item['url']), $url_options);
    }
    else {

      // Get text to use in link
      $text = $item['filename'];
      if (array_key_exists('text', $settings)) {
        if ($settings['text'] == 'description' && !empty($item['description'])) {
          $text = $item['description'];
        }
        else {
          if ($settings['text'] == 'title' && !empty($entity->title)) {
            $text = $entity->title;
          }
        }
      }
      $tracks[$delta] = l($text, file_create_url($item['uri']), $url_options);
    }
    switch ($display['type']) {
      case 'soundmanager2_page_player':
        $element[0] = array(
          '#theme' => 'soundmanager2_page_player',
          '#tracks' => $tracks,
          '#attached' => array(
            'library' => array(
              array(
                'soundmanager2',
                variable_get('sm2_debug_mode', FALSE) ? 'soundmanager2_debug' : 'soundmanager2',
              ),
              array(
                'soundmanager2',
                'soundmanager2_page_player',
              ),
            ),
          ),
        );
        drupal_add_js(array(
          'soundmanager2' => array(
            'stream' => $settings['stream'],
          ),
        ), 'setting');

        // Add in the config files
        theme('soundmanager2_config');
        if ($settings['pause'] == 'stop') {
          theme('soundmanager2_page_player_pause');
        }
        break;
      case 'soundmanager2_ui360':
        $element[0] = array(
          '#theme' => 'soundmanager2_ui360',
          '#tracks' => $tracks,
          '#settings' => $settings,
          '#attached' => array(
            'library' => array(
              array(
                'soundmanager2',
                variable_get('sm2_debug_mode', FALSE) ? 'soundmanager2_debug' : 'soundmanager2',
              ),
              array(
                'soundmanager2',
                'soundmanager2_ui360',
              ),
            ),
          ),
        );

        // Add relevant JS settings
        drupal_add_js(array(
          'soundmanager2' => array(
            'visualization' => $settings['visualization'],
            'waveform' => $settings['waveform'],
            'eq' => $settings['eq'],
            'amplifier' => $settings['amplifier'],
            'stream' => $settings['stream'],
          ),
        ), 'setting');

        // Add CSS
        drupal_add_css('.ui360-vis, .ui360-vis .sm2-360ui, .sm2-inline-list .ui360-vis { width: ' . $settings['diameter'] . 'px; height: ' . $settings['diameter'] . 'px; } .ui360-vis .sm2-timing { line-height: ' . $settings['diameter'] . 'px; } .sm2-inline-list .ui360, .sm2-inline-block .ui360 { margin-bottom: 0; }', 'inline');
        drupal_add_css('#sm2-container { height: 0; overflow: hidden; visibility: hidden; }');

        // Add in the config files
        theme('soundmanager2_config');
        theme('soundmanager2_config_ui360');
        if ($settings['pause'] == 'stop') {
          theme('soundmanager2_config_ui360_pause');
        }
        break;
      case 'soundmanager2_inline_player':
        $element[0] = array(
          '#theme' => 'soundmanager2_inline_player',
          '#tracks' => $tracks,
          '#attached' => array(
            'library' => array(
              array(
                'soundmanager2',
                variable_get('sm2_debug_mode', FALSE) ? 'soundmanager2_debug' : 'soundmanager2',
              ),
              array(
                'soundmanager2',
                'soundmanager2_inline_player',
              ),
            ),
          ),
        );
        drupal_add_js(array(
          'soundmanager2' => array(
            'stream' => $settings['stream'],
          ),
        ), 'setting');

        // Add in the config files
        theme('soundmanager2_config');
        if ($settings['pause'] == 'stop') {
          theme('soundmanager2_inline_player_pause');
        }
        break;
    }
  }
  return $element;
}