1 file.admin.inc file_display_form($form, &$form_state, $file_type, $view_mode)

Form callback; presents file display settings for a given view mode.

File

core/modules/file/file.admin.inc, line 302
Admin page callbacks for the File module.

Code

function file_display_form($form, &$form_state, $file_type, $view_mode) {
  $form['#file_type'] = $file_type->type;
  $form['#view_mode'] = $view_mode;
  $form['#tree'] = TRUE;
  $form['#attached']['js'][] = backdrop_get_path('module', 'file') . '/js/file.admin.js';

  // Retrieve available formatters for this file type.
  $formatters = file_info_formatter_types();

  foreach ($formatters as $name => $formatter) {
    if (!empty($formatter['hidden'])) {
      unset($formatters[$name]);
    }
    if (!isset($formatter['view callback']) || !function_exists($formatter['view callback'])) {
      // Don't include the formatters for which file_view_file() would show a
      // link to the file as fallback.
      unset($formatters[$name]);
    }
    if (isset($formatter['mime types'])) {
      if (file_match_mimetypes($formatter['mime types'], $file_type->mimetypes)) {
        continue;
      }
      unset($formatters[$name]);
    }
  }

  $display = file_display_load($file_type->type, $view_mode);

  // Formatter type.
  $form['display']['formatter'] = array(
    '#type' => 'radios',
    '#title' => t('Display type'),
    '#options' => array(),
    '#default_value' => config_get('file_display.' . $file_type->type, $view_mode . '.formatter'),
  );

  $formatters = array_reverse($formatters);

  foreach ($formatters as $name => $formatter) {
    $form['display']['formatter']['#options'][$name] = check_plain($formatter['label']);
    $form['display']['formatter'][$name]['#description'] = isset($formatter['description']) ? filter_xss($formatter['description']) : NULL;

    if (isset($formatter['settings callback']) && ($function = $formatter['settings callback']) && function_exists($function)) {

      $defaults = !empty($formatter['default settings']) ? $formatter['default settings'] : array();
      $settings = !empty($display['settings'][$name]) ? $display['settings'][$name] : array();
      $settings += $defaults;

      $settings_form = $function($form, $form_state, $settings, $name, $file_type->type, $view_mode);

      if (!empty($settings_form)) {
        $form['display']['settings'][$name] = array(
          '#type' => 'fieldset',
          '#title' => t('@label settings', array('@label' => $formatter['label'])),
          '#parents' => array('display', 'settings', $name),
          '#group' => 'display_settings',
          '#states' => array(
            'visible' => array(
              ':input[name="display[formatter]"]' => array('value' => $name),
            ),
          ),
        ) + $settings_form;
      }
    }
  }

  $form['actions'] = array('#type' => 'actions');
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save configuration'),
  );

  return $form;
}