function media_field_widget_form in D7 Media 7
Same name and namespace in other branches
- 7.4 includes/media.fields.inc \media_field_widget_form()
- 7.2 includes/media.fields.inc \media_field_widget_form()
- 7.3 includes/media.fields.inc \media_field_widget_form()
Implements hook_field_widget_form().
File
- includes/
media.fields.inc, line 256 - : Provides a "Multimedia asset" field to the fields API
Code
function media_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$field_settings = $instance['settings'];
$widget_settings = $instance['widget']['settings'];
// @todo The Field API supports automatic serialization / unserialization, so
// this should no longer be needed. After verifying with a module that uses
// the 'data' column, remove this.
// @see media_field_widget_value()
$current_value = array();
if (isset($items[$delta])) {
$current_value = $items[$delta];
// @todo $items[$delta] is sometimes a loaded media entity (an object)
// rather than an array. This conflicts with Field API expectations (for
// example, it results in fatal errors when previewing a node with a
// multi-valued media field), so should be fixed. In the meantime, don't
// assume that $current_value is an array.
if (is_array($current_value) && isset($current_value['data']) && is_string($current_value['data'])) {
$current_value['data'] = unserialize($current_value['data']);
}
}
$element += array(
'#type' => 'media',
// Would like to make this a fieldset, but throws some weird warning about element_children... not sure what it is about yet.
'#collapsed' => TRUE,
'#default_value' => $current_value,
'#required' => $instance['required'],
'#media_options' => array(
'global' => array(
'types' => array_filter($widget_settings['allowed_types']),
'schemes' => $widget_settings['allowed_schemes'],
'file_directory' => isset($field_settings['file_directory']) ? $field_settings['file_directory'] : '',
'file_extensions' => isset($field_settings['file_extensions']) ? $field_settings['file_extensions'] : media_variable_get('file_extensions'),
'max_filesize' => isset($field_settings['max_filesize']) ? $field_settings['max_filesize'] : 0,
'uri_scheme' => !empty($field['settings']['uri_scheme']) ? $field['settings']['uri_scheme'] : file_default_scheme(),
),
),
);
if ($field['type'] == 'file') {
$element['display'] = array(
'#type' => 'value',
'#value' => 1,
);
}
// Add image field specific validators.
if ($field['type'] == 'image') {
if ($field_settings['min_resolution'] || $field_settings['max_resolution']) {
$element['#media_options']['global']['min_resolution'] = $field_settings['min_resolution'];
$element['#media_options']['global']['max_resolution'] = $field_settings['max_resolution'];
}
}
return $element;
}