Projet

Général

Profil

Paste
Télécharger (24,2 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / media / includes / media.fields.inc @ b3ab3446

1
<?php
2

    
3
/**
4
 * @file
5
 * Provide the media selector widget and media field formatters to the Fields
6
 * API.
7
 */
8

    
9
/**
10
 * Implements hook_field_widget_info().
11
 */
12
function media_field_widget_info() {
13
  return array(
14
    'media_generic' => array(
15
      'label' => t('Media browser'),
16
      'field types' => array('file', 'image'),
17
      'settings' => array(
18
        'allowed_types' => array(
19
          'image' => 'image',
20
        ),
21
        'browser_plugins' => array(),
22
        'allowed_schemes' => array(
23
          'public' => 'public',
24
        ),
25
      ),
26
      'behaviors' => array(
27
        'multiple values' => FIELD_BEHAVIOR_CUSTOM,
28
        'default value' => FIELD_BEHAVIOR_NONE,
29
      ),
30
    ),
31
  );
32
}
33

    
34
/**
35
 * Implements hook_field_widget_settings_form().
36
 */
37
function media_field_widget_settings_form($field, $instance) {
38
  $widget = $instance['widget'];
39
  $settings = $widget['settings'];
40

    
41
  $plugins = media_get_browser_plugin_info();
42
  $options = array();
43
  foreach ($plugins as $key => $plugin) {
44
    $options[$key] = check_plain($plugin['title']);
45
  }
46

    
47
  $form['browser_plugins'] = array(
48
    '#type' => 'checkboxes',
49
    '#title' => t('Enabled browser plugins'),
50
    '#options' => $options,
51
    '#default_value' => $settings['browser_plugins'],
52
    '#description' => t('Media browser plugins which are allowed for this field. If no plugins are selected, they will all be available.'),
53
  );
54

    
55
  $form['allowed_types'] = array(
56
    '#type' => 'checkboxes',
57
    '#title' => t('Allowed file types'),
58
    '#options' => file_entity_type_get_names(),
59
    '#default_value' => $settings['allowed_types'],
60
    '#description' => t('File types which are allowed for this field. If no file types are selected, they will all be available.'),
61
  );
62

    
63
  $visible_steam_wrappers = file_get_stream_wrappers(STREAM_WRAPPERS_VISIBLE);
64
  $options = array();
65
  foreach ($visible_steam_wrappers as $scheme => $information) {
66
    $options[$scheme] = check_plain($information['name']);
67
  }
68

    
69
  $form['allowed_schemes'] = array(
70
    '#type' => 'checkboxes',
71
    '#title' => t('Allowed URI schemes'),
72
    '#options' => $options,
73
    '#default_value' => $settings['allowed_schemes'],
74
    '#description' => t('URI schemes which are allowed for this field. If no schemes are selected, they will all be available.'),
75
  );
76

    
77
  return $form;
78
}
79

    
80
/**
81
 * Implements hook_field_widget_form().
82
 */
83
function media_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
84
  $defaults = array(
85
    'fid' => 0,
86
    'display' => !empty($field['settings']['display_default']),
87
    'description' => '',
88
  );
89

    
90
  // Load the items for form rebuilds from the field state as they might not be
91
  // in $form_state['values'] because of validation limitations. Also, they are
92
  // only passed in as $items when editing existing entities.
93
  $field_state = field_form_get_state($element['#field_parents'], $field['field_name'], $langcode, $form_state);
94
  if (isset($field_state['items'])) {
95
    $items = $field_state['items'];
96
  }
97

    
98
  $field_settings = $instance['settings'];
99
  $widget_settings = $instance['widget']['settings'];
100

    
101
  // Essentially we use the media type, extended with some enhancements.
102
  $element_info = element_info('media');
103
  $multiselect = ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED);
104

    
105
  $element += array(
106
    '#type' => 'media',
107
    '#value_callback' => 'media_field_widget_value',
108
    '#process' => array_merge($element_info['#process'], array('media_field_widget_process')),
109
    '#media_options' => array(
110
      'global' => array(
111
        'types' => array_filter($widget_settings['allowed_types']),
112
        'enabledPlugins' => array_filter($instance['widget']['settings']['browser_plugins']),
113
        'schemes' => array_filter($widget_settings['allowed_schemes']),
114
        'file_directory' => isset($field_settings['file_directory']) ? $field_settings['file_directory'] : '',
115
        'file_extensions' => isset($field_settings['file_extensions']) ? $field_settings['file_extensions'] : variable_get('file_entity_default_allowed_extensions', 'jpg jpeg gif png txt doc docx xls xlsx pdf ppt pptx pps ppsx odt ods odp mp3 mov mp4 m4a m4v mpeg avi ogg oga ogv weba webp webm'),
116
        'max_filesize' => isset($field_settings['max_filesize']) ? $field_settings['max_filesize'] : 0,
117
        'uri_scheme' => !empty($field['settings']['uri_scheme']) ? $field['settings']['uri_scheme'] : file_default_scheme(),
118
        'multiselect' => $multiselect,
119
      ),
120
    ),
121
    // Allows this field to return an array instead of a single value.
122
    '#extended' => TRUE,
123
  );
124

    
125
  // If translation is enabled for the entity, store its form/source langcodes
126
  // on the elements for further usage in media_element_process().
127
  if (module_invoke('entity_translation', 'enabled', $element['#entity_type'], $element['#entity'])) {
128
    $translation_handler = entity_translation_get_handler($element['#entity_type'], $element['#entity']);
129
    $element['#media_parent_entity_form_langcode'] = $translation_handler->getFormLanguage();
130
    if ($source_langcode = $translation_handler->getSourceLanguage()) {
131
      $element['#media_parent_entity_source_langcode'] = $source_langcode;
132
    }
133
  }
134
  elseif (module_exists('translation') && $element['#entity_type'] == 'node' && translation_supported_type($element['#entity']->type)) {
135
    $element['#media_parent_entity_form_langcode'] = $element['#entity']->language;
136
    $element['#media_parent_entity_source_langcode'] = $element['#entity']->language;
137
  } elseif ($element['#entity_type'] == 'field_collection_item' && property_exists($form['#entity'], 'language')) {
138
    $element['#media_parent_entity_form_langcode'] = $form['#entity']->language;
139
  }
140

    
141
  // Add image field specific validators.
142
  if ($field['type'] == 'image') {
143
    if ($field_settings['min_resolution'] || $field_settings['max_resolution']) {
144
      $element['#media_options']['global']['min_resolution'] = $field_settings['min_resolution'];
145
      $element['#media_options']['global']['max_resolution'] = $field_settings['max_resolution'];
146
    }
147
  }
148

    
149
  if ($field['cardinality'] == 1) {
150
    // Set the default value.
151
    $element['#default_value'] = !empty($items) ? $items[0] : $defaults;
152
    // If there's only one field, return it as delta 0.
153
    if (empty($element['#default_value']['fid'])) {
154
      $element['#description'] = theme('media_upload_help', array('description' => $element['#description']));
155
    }
156
    $elements = array($element);
157
  }
158
  else {
159
    // If there are multiple values, add an element for each existing one.
160
    foreach ($items as $item) {
161
      $elements[$delta] = $element;
162
      $elements[$delta]['#default_value'] = $item;
163
      $elements[$delta]['#weight'] = $delta;
164
      $delta++;
165
    }
166
    // And then add one more empty row for new uploads except when this is a
167
    // programmed form as it is not necessary.
168
    if (($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $delta < $field['cardinality']) && empty($form_state['programmed'])) {
169
      $elements[$delta] = $element;
170
      $elements[$delta]['#default_value'] = $defaults;
171
      $elements[$delta]['#weight'] = $delta;
172
      $elements[$delta]['#required'] = ($element['#required'] && $delta == 0);
173
    }
174
    // The group of elements all-together need some extra functionality
175
    // after building up the full list (like draggable table rows).
176
    $elements['#file_upload_delta'] = $delta;
177
    $elements['#theme'] = 'media_widget_multiple';
178
    $elements['#theme_wrappers'] = array('fieldset');
179
    $elements['#process'] = array('media_field_widget_process_multiple');
180
    $elements['#title'] = $element['#title'];
181
    $elements['#description'] = $element['#description'];
182
    $elements['#field_name'] = $element['#field_name'];
183
    $elements['#language'] = $element['#language'];
184
    $elements['#display_field'] = intval(!empty($field['settings']['display_field']));
185

    
186
    // Add some properties that will eventually be added to the media upload
187
    // field. These are added here so that they may be referenced easily through
188
    // a hook_form_alter().
189
    $elements['#file_upload_title'] = t('Attach media');
190
    $elements['#file_upload_description'] = theme('media_upload_help', array('description' => ''));
191
  }
192

    
193
  return $elements;
194
}
195

    
196
/**
197
 * The #value_callback for the media field element.
198
 */
199
function media_field_widget_value($element, $input = FALSE, $form_state) {
200
  if ($input) {
201
    // Checkboxes lose their value when empty.
202
    // If the display field is present make sure its unchecked value is saved.
203
    $field = field_widget_field($element, $form_state);
204
    if (empty($input['display'])) {
205
      $input['display'] = !empty($field['settings']['display_field']) ? 0 : 1;
206
    }
207
  }
208

    
209
  // We depend on the media element to handle uploads.
210
  $return = media_file_value($element, $input, $form_state);
211

    
212
  // Ensure that all the required properties are returned even if empty.
213
  $return += array(
214
    'fid' => 0,
215
    'display' => 1,
216
    'description' => '',
217
  );
218

    
219
  return $return;
220
}
221

    
222
/**
223
 * An element #process callback for the media field type.
224
 *
225
 * Expands the media type to include the description and display fields.
226
 */
227
function media_field_widget_process($element, &$form_state, $form) {
228
  $item = $element['#value'];
229
  $item['fid'] = $element['fid']['#value'];
230

    
231
  $field = field_widget_field($element, $form_state);
232
  $instance = field_widget_instance($element, $form_state);
233
  $settings = $instance['widget']['settings'];
234

    
235
  $element['#theme'] = 'media_widget';
236

    
237
  // Add the display field if enabled.
238
  if (!empty($field['settings']['display_field']) && $item['fid']) {
239
    $element['display'] = array(
240
      '#type' => empty($item['fid']) ? 'hidden' : 'checkbox',
241
      '#title' => t('Include file in display'),
242
      '#value' => isset($item['display']) ? $item['display'] : $field['settings']['display_default'],
243
      '#attributes' => array('class' => array('file-display')),
244
    );
245
  }
246
  else {
247
    $element['display'] = array(
248
      '#type' => 'hidden',
249
      '#value' => '1',
250
    );
251
  }
252

    
253
  // Add the description field if enabled.
254
  if (!empty($instance['settings']['description_field']) && $item['fid']) {
255
    $element['description'] = array(
256
      '#type' => variable_get('file_description_type', 'textfield'),
257
      '#title' => t('Description'),
258
      '#value' => isset($item['description']) ? $item['description'] : '',
259
      '#maxlength' => variable_get('file_description_length', 128),
260
      '#description' => t('The description may be used as the label of the link to the file.'),
261
    );
262
  }
263

    
264
  // Adjust the Ajax settings so that on upload and remove of any individual
265
  // file, the entire group of file fields is updated together.
266
  if ($field['cardinality'] != 1) {
267
    $parents = array_slice($element['#array_parents'], 0, -1);
268
    $new_path = 'media/ajax/' . implode('/', $parents) . '/' . $form['form_build_id']['#value'];
269
    $field_element = drupal_array_get_nested_value($form, $parents);
270
    $new_wrapper = $field_element['#id'] . '-ajax-wrapper';
271
    foreach (element_children($element) as $key) {
272
      if (isset($element[$key]['#ajax'])) {
273
        $element[$key]['#ajax']['path'] = $new_path;
274
        $element[$key]['#ajax']['wrapper'] = $new_wrapper;
275
      }
276
    }
277
    unset($element['#prefix'], $element['#suffix']);
278
  }
279

    
280
  // Add another submit handler to the upload and remove buttons, to implement
281
  // functionality needed by the field widget. This submit handler, along with
282
  // the rebuild logic in media_field_widget_form() requires the entire field,
283
  // not just the individual item, to be valid.
284
  foreach (array('attach_button', 'remove_button') as $key) {
285
    $element[$key]['#submit'][] = 'media_field_widget_submit';
286
    $element[$key]['#limit_validation_errors'] = array(array_slice($element['#parents'], 0, -1));
287
  }
288

    
289
  return $element;
290
}
291

    
292
/**
293
 * An element #process callback for a group of media fields.
294
 *
295
 * Adds the weight field to each row so it can be ordered and adds a new Ajax
296
 * wrapper around the entire group so it can be replaced all at once.
297
 */
298
function media_field_widget_process_multiple($element, &$form_state, $form) {
299
    // In order to support multiple selection, we need to reconstruct the _POST
300
  // data that is checked in media_attach_file(). We need to reconstruct the
301
  // field's _POST key name, for example: field_mediafield_und_0.
302
  $upload_name_prefix = implode('_', $element['#parents']) . '_';
303
  $upload_name = $upload_name_prefix . $element['#file_upload_delta'];
304
  if (!empty($_POST['media'][$upload_name])) {
305
    $files = explode(',', $_POST['media'][$upload_name]);
306
    $count = count($files);
307
    // Supposing #file_upload_delta is always the last delta this will work
308
    for ($i = 0; $i < $count; $i++) {
309
      // For each file selected, increment the field key to be processed.
310
      // field_mediafield_und_0 becomes field_mediafield_und_1, etc.
311
      $_POST['media'][$upload_name_prefix . ($element['#file_upload_delta'] + $i)] = $files[$i];
312

    
313
      // Copy the default file element to each newly selected file position.
314
      $default_element = $element[$element['#file_upload_delta']];
315
      $element[] = array_merge(
316
        $default_element,
317
        array('#weight' => ($element['#file_upload_delta'] + $i + 1))
318
      );
319
    }
320
  }
321

    
322
  $element_children = element_children($element, TRUE);
323
  $count = count($element_children);
324

    
325
  foreach ($element_children as $delta => $key) {
326
    if ($key != $element['#file_upload_delta']) {
327
      $description = _media_field_get_description_from_element($element[$key]);
328
      $element[$key]['_weight'] = array(
329
        '#type' => 'weight',
330
        '#title' => $description ? t('Weight for @title', array('@title' => $description)) : t('Weight for new file'),
331
        '#title_display' => 'invisible',
332
        '#delta' => $count,
333
        '#default_value' => $delta,
334
      );
335
    }
336
    else {
337
      // The title needs to be assigned to the attach field so that validation
338
      // errors include the correct widget label.
339
      $element[$key]['#title'] = $element['#title'];
340
      $element[$key]['_weight'] = array(
341
        '#type' => 'hidden',
342
        '#default_value' => $delta,
343
      );
344
    }
345
  }
346

    
347
  // Add a new wrapper around all the elements for Ajax replacement.
348
  $element['#prefix'] = '<div id="' . $element['#id'] . '-ajax-wrapper">';
349
  $element['#suffix'] = '</div>';
350

    
351
  return $element;
352
}
353

    
354
/**
355
 * Retrieves the file description from a media field element.
356
 *
357
 * This helper function is used by media_field_widget_process_multiple().
358
 *
359
 * @param $element
360
 *   The element being processed.
361
 *
362
 * @return
363
 *   A description of the file suitable for use in the administrative interface.
364
 */
365
function _media_field_get_description_from_element($element) {
366
  // Use the actual file description, if it's available.
367
  if (!empty($element['#default_value']['description'])) {
368
    return $element['#default_value']['description'];
369
  }
370
  // Otherwise, fall back to the filename.
371
  if (!empty($element['#default_value']['filename'])) {
372
    return $element['#default_value']['filename'];
373
  }
374
  // This is probably a newly uploaded file; no description is available.
375
  return FALSE;
376
}
377

    
378
/**
379
 * Form submission handler for attach/remove button of media_field_widget_form().
380
 *
381
 * This runs in addition to and after media_field_widget_submit().
382
 *
383
 * @see media_field_widget_submit()
384
 * @see media_field_widget_form()
385
 * @see media_field_widget_process()
386
 */
387
function media_field_widget_submit($form, &$form_state) {
388
  // During the form rebuild, media_field_widget_form() will create field item
389
  // widget elements using re-indexed deltas, so clear out $form_state['input']
390
  // to avoid a mismatch between old and new deltas. The rebuilt elements will
391
  // have #default_value set appropriately for the current state of the field,
392
  // so nothing is lost in doing this.
393
  $parents = array_slice($form_state['triggering_element']['#parents'], 0, -2);
394
  drupal_array_set_nested_value($form_state['input'], $parents, NULL);
395

    
396
  $button = $form_state['triggering_element'];
397

    
398
  // Go one level up in the form, to the widgets container.
399
  $element = drupal_array_get_nested_value($form, array_slice($button['#array_parents'], 0, -1));
400
  $field_name = $element['#field_name'];
401
  $langcode = $element['#language'];
402
  $parents = $element['#field_parents'];
403

    
404
  $submitted_values = drupal_array_get_nested_value($form_state['values'], array_slice($button['#parents'], 0, -2));
405
  foreach ($submitted_values as $delta => $submitted_value) {
406
    if (!$submitted_value['fid']) {
407
      unset($submitted_values[$delta]);
408
    }
409
  }
410

    
411
  // Re-index deltas after removing empty items.
412
  $submitted_values = array_values($submitted_values);
413

    
414
  // Update form_state values.
415
  drupal_array_set_nested_value($form_state['values'], array_slice($button['#parents'], 0, -2), $submitted_values);
416

    
417
  // Update items.
418
  $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
419
  $field_state['items'] = $submitted_values;
420
  field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
421
}
422

    
423
/**
424
 * Returns HTML for an individual media widget.
425
 *
426
 * @param $variables
427
 *   An associative array containing:
428
 *   - element: A render element representing the widget.
429
 *
430
 * @ingroup themeable
431
 */
432
function theme_media_widget($variables) {
433
  $element = $variables['element'];
434
  $output = '';
435

    
436
  // Merge provided attributes with existing ones.
437
  // The "form-media" class is required for proper Ajax functionality.
438
  $attributes = array(
439
    'class' => array("media-widget", "form-media", "clearfix"),
440
  );
441
  if (!empty($element['#attributes'])) {
442
    $attributes = array_merge_recursive($attributes, $element['#attributes']);
443
  }
444
  if (!empty($element['#id'])) {
445
    $attributes = array_merge_recursive($attributes, array('id' => $element['#id'] . '--widget'));
446
  }
447

    
448
  // Render attributes into div in one go.
449
  $output .= '<div ' . drupal_attributes($attributes) . '>';
450
  $output .= drupal_render_children($element);
451
  $output .= '</div>';
452

    
453
  return $output;
454
}
455

    
456
/**
457
 * Returns HTML for a group of media widgets.
458
 *
459
 * @param $variables
460
 *   An associative array containing:
461
 *   - element: A render element representing the widgets.
462
 *
463
 * @ingroup themeable
464
 */
465
function theme_media_widget_multiple($variables) {
466
  $element = $variables['element'];
467

    
468
  // Special ID and classes for draggable tables.
469
  $weight_class = $element['#id'] . '-weight';
470
  $table_id = $element['#id'] . '-table';
471

    
472
  // Build up a table of applicable fields.
473
  $headers = array();
474
  $headers[] = t('File information');
475
  if ($element['#display_field']) {
476
    $headers[] = array(
477
      'data' => t('Display'),
478
      'class' => array('checkbox'),
479
    );
480
  }
481
  $headers[] = t('Weight');
482
  $headers[] = t('Operations');
483

    
484
  // Get our list of widgets in order (needed when the form comes back after
485
  // preview or failed validation).
486
  $widgets = array();
487
  foreach (element_children($element) as $key) {
488
    $widgets[] = &$element[$key];
489
  }
490
  usort($widgets, '_field_sort_items_value_helper');
491

    
492
  $rows = array();
493
  foreach ($widgets as $key => &$widget) {
494
    // Save the uploading row for last.
495
    if ($widget['#file'] == FALSE) {
496
      $widget['#title'] = $element['#file_upload_title'];
497
      $widget['#description'] = $element['#file_upload_description'];
498
      continue;
499
    }
500

    
501
    // Delay rendering of the buttons, so that they can be rendered later in the
502
    // "operations" column.
503
    $operations_elements = array();
504
    foreach (element_children($widget) as $sub_key) {
505
      if (isset($widget[$sub_key]['#type']) && ($widget[$sub_key]['#type'] == 'submit' || $widget[$sub_key]['#type'] == 'link')) {
506
        hide($widget[$sub_key]);
507
        $operations_elements[] = &$widget[$sub_key];
508
      }
509
    }
510

    
511
    // Delay rendering of the "Display" option and the weight selector, so that
512
    // each can be rendered later in its own column.
513
    if ($element['#display_field']) {
514
      hide($widget['display']);
515
    }
516
    hide($widget['_weight']);
517

    
518
    // Render everything else together in a column, without the normal wrappers.
519
    $widget['#theme_wrappers'] = array();
520
    $information = drupal_render($widget);
521

    
522
    // Render the previously hidden elements, using render() instead of
523
    // drupal_render(), to undo the earlier hide().
524
    $operations = '';
525
    foreach ($operations_elements as $operation_element) {
526
      $operations .= render($operation_element);
527
    }
528
    $display = '';
529
    if ($element['#display_field']) {
530
      unset($widget['display']['#title']);
531
      $display = array(
532
        'data' => render($widget['display']),
533
        'class' => array('checkbox'),
534
      );
535
    }
536
    $widget['_weight']['#attributes']['class'] = array($weight_class);
537
    $weight = render($widget['_weight']);
538

    
539
    // Arrange the row with all of the rendered columns.
540
    $row = array();
541
    $row[] = $information;
542
    if ($element['#display_field']) {
543
      $row[] = $display;
544
    }
545
    $row[] = $weight;
546
    $row[] = $operations;
547
    $rows[] = array(
548
      'data' => $row,
549
      'class' => isset($widget['#attributes']['class']) ? array_merge($widget['#attributes']['class'], array('draggable')) : array('draggable'),
550
    );
551
  }
552

    
553
  drupal_add_tabledrag($table_id, 'order', 'sibling', $weight_class);
554

    
555
  $output = '';
556
  $output = empty($rows) ? '' : theme('table', array('header' => $headers, 'rows' => $rows, 'attributes' => array('id' => $table_id)));
557
  $output .= drupal_render_children($element);
558
  return $output;
559
}
560

    
561
/**
562
 * Returns HTML for help text.
563
 *
564
 * @param $variables
565
 *   An associative array containing:
566
 *   - description: The normal description for this field, specified by the
567
 *     user.
568
 *
569
 * @ingroup themeable
570
 */
571
function theme_media_upload_help($variables) {
572
  $description = $variables['description'];
573

    
574
  $descriptions = array();
575

    
576
  if (strlen($description)) {
577
    $descriptions[] = $description;
578
  }
579

    
580
  return implode('<br />', $descriptions);
581
}
582

    
583
/**
584
 * Implements hook_field_formatter_info().
585
 *
586
 * Provides legacy support for the "Large filetype icon" file field formatter.
587
 * This was originally used when media entities contained file fields. The
588
 * current file entity architecture no longer needs this, but people may
589
 * have used this formatter for other file fields on their website.
590
 *
591
 * @todo Some day, remove this.
592
 */
593
function media_field_formatter_info() {
594
  $formatters = array(
595
    'media_large_icon' => array(
596
      'label' => t('Large filetype icon'),
597
      'field types' => array('file'),
598
      'settings' => array(
599
        'image_style' => '',
600
      ),
601
    ),
602
  );
603

    
604
  return $formatters;
605
}
606

    
607
/**
608
 * Implements hook_field_formatter_settings_form().
609
 *
610
 * Legacy support for the "Large filetype icon" file field formatter.
611
 * @see media_field_formatter_info()
612
 */
613
function media_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
614
  $display = $instance['display'][$view_mode];
615
  $settings = $display['settings'];
616

    
617
  $image_styles = image_style_options(FALSE, PASS_THROUGH);
618
  $element['image_style'] = array(
619
    '#title' => t('Image style'),
620
    '#type' => 'select',
621
    '#default_value' => $settings['image_style'],
622
    '#empty_option' => t('None (original image)'),
623
    '#options' => $image_styles,
624
  );
625

    
626
  return $element;
627
}
628

    
629
/**
630
 * Implements hook_field_formatter_settings_summary().
631
 *
632
 * Legacy support for the "Large filetype icon" file field formatter.
633
 * @see media_field_formatter_info()
634
 */
635
function media_field_formatter_settings_summary($field, $instance, $view_mode) {
636
  $display = $instance['display'][$view_mode];
637
  $settings = $display['settings'];
638

    
639
  $summary = array();
640

    
641
  $image_styles = image_style_options(FALSE, PASS_THROUGH);
642
  // Unset possible 'No defined styles' option.
643
  unset($image_styles['']);
644
  // Styles could be lost because of enabled/disabled modules that defines
645
  // their styles in code.
646
  if (isset($image_styles[$settings['image_style']])) {
647
    $summary[] = t('Image style: @style', array('@style' => $image_styles[$settings['image_style']]));
648
  }
649
  else {
650
    $summary[] = t('Original image');
651
  }
652

    
653
  return implode('<br />', $summary);
654
}
655

    
656
/**
657
 * Implements hook_field_formatter_view().
658
 *
659
 * Legacy support for the "Large filetype icon" file field formatter.
660
 * @see media_field_formatter_info()
661
 */
662
function media_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
663
  $element = array();
664

    
665
  if ($display['type'] == 'media_large_icon') {
666
    foreach ($items as $delta => $item) {
667
      $element[$delta] = array(
668
        '#theme' => 'media_formatter_large_icon',
669
        '#file' => (object) $item,
670
        '#style_name' => $display['settings']['image_style'],
671
      );
672
    }
673
  }
674

    
675
  return $element;
676
}