Commit 63b9e477 authored by Dries's avatar Dries

- Patch #908282 by jbrown: theme_image() performs I/O.

parent cdf28e6f
......@@ -5842,7 +5842,7 @@ function drupal_common_theme() {
// - http://dev.w3.org/html5/spec/Overview.html#alt
// The title attribute is optional in all cases, so it is omitted by
// default.
'variables' => array('path' => NULL, 'alt' => '', 'title' => NULL, 'attributes' => array(), 'getsize' => TRUE),
'variables' => array('path' => NULL, 'width' => NULL, 'height' => NULL, 'alt' => '', 'title' => NULL, 'attributes' => array()),
),
'breadcrumb' => array(
'variables' => array('breadcrumb' => NULL),
......
......@@ -1479,6 +1479,8 @@ function theme_links($variables) {
* An associative array containing:
* - path: Either the path of the image file (relative to base_path()) or a
* full URL.
* - width: The width of the image (if known).
* - height: The height of the image (if known).
* - alt: The alternative text for text-based browsers. HTML 4 and XHTML 1.0
* always require an alt attribute. The HTML 5 draft allows the alt
* attribute to be omitted in some cases. Therefore, this variable defaults
......@@ -1492,38 +1494,19 @@ function theme_links($variables) {
* - title: The title text is displayed when the image is hovered in some
* popular browsers.
* - attributes: Associative array of attributes to be placed in the img tag.
* - getsize: If set to TRUE, the image's dimension are fetched and added as
* width/height attributes.
*/
function theme_image($variables) {
$path = $variables['path'];
$alt = $variables['alt'];
$title = $variables['title'];
$attributes = $variables['attributes'];
$getsize = $variables['getsize'];
$attributes['src'] = file_create_url($variables['path']);
if (!$getsize || (is_file($path) && (list($width, $height) = @getimagesize($path)))) {
// The src attribute can be omitted, by passing NULL for $path and FALSE for
// $getsize.
if (isset($path)) {
$attributes['src'] = file_create_url($path);
}
// The alt attribute defaults to an empty string. By passing NULL as value,
// it can be omitted.
if (isset($alt)) {
$attributes['alt'] = $alt;
}
if (isset($title)) {
$attributes['title'] = $title;
}
if (!isset($attributes['width']) && !empty($width)) {
$attributes['width'] = $width;
}
if (!isset($attributes['height']) && !empty($height)) {
$attributes['height'] = $height;
foreach (array('width', 'height', 'alt', 'title') as $key) {
if (isset($variables[$key])) {
$attributes[$key] = $variables[$key];
}
return '<img' . drupal_attributes($attributes) . ' />';
}
return '<img' . drupal_attributes($attributes) . ' />';
}
/**
......
......@@ -63,7 +63,7 @@ function _color_theme_select_form_alter(&$form, &$form_state) {
foreach (element_children($form) as $theme) {
if ($screenshot = variable_get('color_' . $theme . '_screenshot')) {
if (isset($form[$theme]['screenshot'])) {
$form[$theme]['screenshot']['#markup'] = theme('image', array('path' => $screenshot, 'alt' => '', 'title' => '', 'attributes' => array('class' => array('screenshot')), 'getsize' => FALSE));
$form[$theme]['screenshot']['#markup'] = theme('image', array('path' => $screenshot, 'title' => '', 'attributes' => array('class' => array('screenshot'))));
}
}
}
......
......@@ -793,7 +793,7 @@ function theme_image_style_preview($variables) {
$output .= '<div class="preview-image-wrapper">';
$output .= t('original') . ' (' . l(t('view actual size'), $original_path) . ')';
$output .= '<div class="preview-image original-image" style="' . $original_attributes['style'] . '">';
$output .= '<a href="' . url($original_path) . '?' . time() . '">' . theme('image', array('path' => $original_path . '?' . time(), 'alt' => t('Sample original image'), 'title' => '', 'attributes' => $original_attributes, 'getsize' => FALSE)) . '</a>';
$output .= '<a href="' . url($original_path) . '?' . time() . '">' . theme('image', array('path' => $original_path . '?' . time(), 'alt' => t('Sample original image'), 'title' => '', 'attributes' => $original_attributes)) . '</a>';
$output .= '<div class="height" style="height: ' . $original_height . 'px"><span>' . $original_image['height'] . 'px</span></div>';
$output .= '<div class="width" style="width: ' . $original_width . 'px"><span>' . $original_image['width'] . 'px</span></div>';
$output .= '</div>'; // End preview-image.
......@@ -803,7 +803,7 @@ function theme_image_style_preview($variables) {
$output .= '<div class="preview-image-wrapper">';
$output .= check_plain($style['name']) . ' (' . l(t('view actual size'), file_create_url($preview_file) . '?' . time()) . ')';
$output .= '<div class="preview-image modified-image" style="' . $preview_attributes['style'] . '">';
$output .= '<a href="' . file_create_url($preview_file) . '?' . time() . '">' . theme('image', array('path' => file_create_url($preview_file) . '?' . time(), 'alt' => t('Sample modified image'), 'title' => '', 'attributes' => $preview_attributes, 'getsize' => FALSE)) . '</a>';
$output .= '<a href="' . file_create_url($preview_file) . '?' . time() . '">' . theme('image', array('path' => file_create_url($preview_file) . '?' . time(), 'alt' => t('Sample modified image'), 'title' => '', 'attributes' => $preview_attributes)) . '</a>';
$output .= '<div class="height" style="height: ' . $preview_height . 'px"><span>' . $preview_image['height'] . 'px</span></div>';
$output .= '<div class="width" style="width: ' . $preview_width . 'px"><span>' . $preview_image['width'] . 'px</span></div>';
$output .= '</div>'; // End preview-image.
......
......@@ -338,7 +338,7 @@ function image_field_widget_process($element, &$form_state, $form) {
if ($element['#file'] && $widget_settings['preview_image_style']) {
$element['preview'] = array(
'#type' => 'markup',
'#markup' => theme('image_style', array('style_name' => $widget_settings['preview_image_style'], 'path' => $element['#file']->uri, 'getsize' => FALSE)),
'#markup' => theme('image_style', array('style_name' => $widget_settings['preview_image_style'], 'path' => $element['#file']->uri)),
);
}
......
......@@ -1105,7 +1105,6 @@ function theme_image_style($variables) {
$style_path = image_style_url($style_name, $path);
}
$variables['path'] = $style_path;
$variables['getsize'] = FALSE;
return theme('image', $variables);
}
......
......@@ -650,7 +650,6 @@ class ImageFieldDisplayTestCase extends ImageFieldTestCase {
$image_uri = $node->{$field_name}[LANGUAGE_NONE][0]['uri'];
$image_info = array(
'path' => $image_uri,
'getsize' => TRUE,
);
$default_output = theme('image', $image_info);
$this->assertRaw($default_output, t('Default formatter displaying correctly on full node view.'));
......@@ -746,7 +745,6 @@ class ImageFieldDisplayTestCase extends ImageFieldTestCase {
$node = node_load($nid, NULL, TRUE);
$image_info = array(
'path' => image_style_url('medium', $node->{$field_name}[LANGUAGE_NONE][0]['uri']),
'getsize' => FALSE,
);
$default_output = theme('image', $image_info);
$this->assertRaw($default_output, t("Preview image is displayed using 'medium' style."));
......@@ -756,7 +754,6 @@ class ImageFieldDisplayTestCase extends ImageFieldTestCase {
'path' => $node->{$field_name}[LANGUAGE_NONE][0]['uri'],
'alt' => $this->randomName(),
'title' => $this->randomName(),
'getsize' => TRUE,
);
$edit = array(
$field_name . '[' . LANGUAGE_NONE . '][0][alt]' => $image_info['alt'],
......@@ -793,7 +790,7 @@ class ImageFieldDisplayTestCase extends ImageFieldTestCase {
field_info_cache_clear();
$field = field_info_field($field_name);
$image = file_load($field['settings']['default_image']);
$default_output = theme('image', array('path' => $image->uri, 'getsize' => TRUE));
$default_output = theme('image', array('path' => $image->uri));
$this->drupalGet('node/' . $node->nid);
$this->assertRaw($default_output, t('Default image displayed when no user supplied image is present.'));
......@@ -803,7 +800,6 @@ class ImageFieldDisplayTestCase extends ImageFieldTestCase {
$node = node_load($nid, NULL, TRUE);
$image_info = array(
'path' => $node->{$field_name}[LANGUAGE_NONE][0]['uri'],
'getsize' => TRUE,
);
$image_output = theme('image', $image_info);
$this->drupalGet('node/' . $nid);
......
......@@ -1410,10 +1410,10 @@ function template_preprocess_user_picture(&$variables) {
if (isset($filepath)) {
$alt = t("@user's picture", array('@user' => format_username($account)));
if (module_exists('image') && $style = variable_get('user_picture_style', '')) {
$variables['user_picture'] = theme('image_style', array('style_name' => $style, 'path' => $filepath, 'alt' => $alt, 'title' => $alt, 'attributes' => array(), 'getsize' => FALSE));
$variables['user_picture'] = theme('image_style', array('style_name' => $style, 'path' => $filepath, 'alt' => $alt, 'title' => $alt));
}
else {
$variables['user_picture'] = theme('image', array('path' => $filepath, 'alt' => $alt, 'title' => $alt, 'attributes' => array(), 'getsize' => FALSE));
$variables['user_picture'] = theme('image', array('path' => $filepath, 'alt' => $alt, 'title' => $alt));
}
if (!empty($account->uid) && user_access('access user profiles')) {
$attributes = array('attributes' => array('title' => t('View user profile.')), 'html' => TRUE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment