$field_item) {
// Field item could be a string for example.
if (is_array($field_item)
// Check that nobody delete this validator.
&& !empty($field_item['#upload_validators']['file_validate_extensions'][0])) {
$extensions_to_validate = explode(' ', $field_item['#upload_validators']['file_validate_extensions'][0]);
// Add SVG as extension that we allow.
$extensions_to_validate[] = 'svg';
$field_item['#upload_validators']['file_validate_extensions'] = array(
implode(' ', $extensions_to_validate)
);
// Rebuild #description with new extensions - it was built
// in the image_field_widget_form().
if (!empty($field_item['#description'])) {
$field_item['#description'] = theme('file_upload_help', array(
'description' => field_filter_xss($context['instance']['description']),
'upload_validators' => $field_item["#upload_validators"],
));
}
$element[$delta] = $field_item;
}
}
}
}
}
/**
* Implements hook_field_formatter_info().
*/
function svg_image_field_formatter_info() {
// Fetch the image formatter info from the core image type.
$core_image_formatters = image_field_formatter_info();
$image_field = $core_image_formatters['image'];
// Add SVG Image related settings.
$image_field['label'] = t('Image (SVG Support)');
$image_field['settings']['svg_settings'] = array(
'width' => '',
'height' => '',
);
return array('svg_image' => $image_field);
}
/**
* Implements hook_field_formatter_settings_form().
*/
function svg_image_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
$element = image_field_formatter_settings_form($field, $instance, $view_mode, $form, $form_state);
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$element['svg_settings'] = array(
'#type' => 'fieldset',
'#title' => t('SVG Images dimensions (attributes)'),
'#tree' => TRUE,
);
$element['svg_settings']['width'] = array(
'#type' => 'textfield',
'#title' => t('Width'),
'#size' => 10,
'#field_suffix' => 'px',
'#default_value' => $settings['svg_settings']['width'],
);
$element['svg_settings']['height'] = array(
'#type' => 'textfield',
'#title' => t('Height'),
'#size' => 10,
'#field_suffix' => 'px',
'#default_value' => $settings['svg_settings']['height'],
);
return $element;
}
/**
* Implements hook_field_formatter_settings_summary().
*/
function svg_image_field_formatter_settings_summary($field, $instance, $view_mode) {
$formatter_settings = $instance['display'][$view_mode]['settings'];
$original_summary = module_invoke('image', 'field_formatter_settings_summary', $field, $instance, $view_mode);
$summary = explode('
', $original_summary);
if (!empty($formatter_settings['svg_settings']['width'])
|| !empty($formatter_settings['svg_settings']['width'])) {
$summary[] = t(
'SVG images attributes:
Width: @widthpx,
Height: @heightpx',
array(
'@width' => (int) $formatter_settings['svg_settings']['width'],
'@height' => (int) $formatter_settings['svg_settings']['height'],
)
);
}
return implode('
', $summary);
}
/**
* Implements hook_field_formatter_view().
*/
function svg_image_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
// Check if the formatter involves a link.
if ($display['settings']['image_link'] == 'content') {
$uri = entity_uri($entity_type, $entity);
}
elseif ($display['settings']['image_link'] == 'file') {
$link_file = TRUE;
}
foreach ($items as $delta => $item) {
if (isset($link_file)) {
$uri = array(
'path' => file_create_url($item['uri']),
'options' => array(),
);
}
$attributes = array();
$is_svg = svg_image_is_svg($item['uri']);
// Add custom attributes only for SVG images.
if ($is_svg) {
$svg_settings = $display['settings']['svg_settings'];
foreach ($svg_settings as $attribute => $attribute_value) {
if (!empty($attribute)) {
$item[$attribute] = (int) $attribute_value;
}
}
}
$element[$delta] = array(
'#theme' => 'image_formatter',
'#item' => $item,
'#image_style' => $is_svg === FALSE ? $display['settings']['image_style'] : '',
'#path' => isset($uri) ? $uri : '',
);
}
return $element;
}