security update core+modules
This commit is contained in:
@@ -32,10 +32,9 @@ function image_style_list() {
|
||||
* An image style array.
|
||||
* @ingroup forms
|
||||
* @see image_style_form_submit()
|
||||
* @see image_style_name_validate()
|
||||
*/
|
||||
function image_style_form($form, &$form_state, $style) {
|
||||
$title = t('Edit %name style', array('%name' => $style['name']));
|
||||
$title = t('Edit %name style', array('%name' => $style['label']));
|
||||
drupal_set_title($title, PASS_THROUGH);
|
||||
|
||||
// Adjust this form for styles that must be overridden to edit.
|
||||
@@ -56,27 +55,31 @@ function image_style_form($form, &$form_state, $style) {
|
||||
'#markup' => theme('image_style_preview', array('style' => $style)),
|
||||
);
|
||||
|
||||
// Show the Image Style label.
|
||||
$form['label'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => t('Image style name'),
|
||||
'#default_value' => $style['label'],
|
||||
'#disabled' => !$editable,
|
||||
'#required' => TRUE,
|
||||
);
|
||||
|
||||
// Allow the name of the style to be changed, unless this style is
|
||||
// provided by a module's hook_default_image_styles().
|
||||
if ($style['storage'] & IMAGE_STORAGE_MODULE) {
|
||||
$form['name'] = array(
|
||||
'#type' => 'item',
|
||||
'#title' => t('Image style name'),
|
||||
'#markup' => $style['name'],
|
||||
'#description' => t('This image style is being provided by %module module and may not be renamed.', array('%module' => $style['module'])),
|
||||
);
|
||||
}
|
||||
else {
|
||||
$form['name'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#size' => '64',
|
||||
'#title' => t('Image style name'),
|
||||
'#default_value' => $style['name'],
|
||||
'#description' => t('The name is used in URLs for generated images. Use only lowercase alphanumeric characters, underscores (_), and hyphens (-).'),
|
||||
'#element_validate' => array('image_style_name_validate'),
|
||||
'#required' => TRUE,
|
||||
);
|
||||
}
|
||||
$form['name'] = array(
|
||||
'#type' => 'machine_name',
|
||||
'#size' => '64',
|
||||
'#default_value' => $style['name'],
|
||||
'#disabled' => !$editable,
|
||||
'#description' => t('The name is used in URLs for generated images. Use only lowercase alphanumeric characters, underscores (_), and hyphens (-).'),
|
||||
'#required' => TRUE,
|
||||
'#machine_name' => array(
|
||||
'exists' => 'image_style_load',
|
||||
'source' => array('label'),
|
||||
'replace_pattern' => '[^0-9a-z_\-]',
|
||||
'error' => t('Please only use lowercase alphanumeric characters, underscores (_), and hyphens (-) for style names.'),
|
||||
),
|
||||
);
|
||||
|
||||
// Build the list of existing image effects for this image style.
|
||||
$form['effects'] = array(
|
||||
@@ -199,7 +202,7 @@ function image_style_form_add_submit($form, &$form_state) {
|
||||
* Submit handler for overriding a module-defined style.
|
||||
*/
|
||||
function image_style_form_override_submit($form, &$form_state) {
|
||||
drupal_set_message(t('The %style style has been overridden, allowing you to change its settings.', array('%style' => $form_state['image_style']['name'])));
|
||||
drupal_set_message(t('The %style style has been overridden, allowing you to change its settings.', array('%style' => $form_state['image_style']['label'])));
|
||||
image_default_style_save($form_state['image_style']);
|
||||
}
|
||||
|
||||
@@ -207,11 +210,10 @@ function image_style_form_override_submit($form, &$form_state) {
|
||||
* Submit handler for saving an image style.
|
||||
*/
|
||||
function image_style_form_submit($form, &$form_state) {
|
||||
// Update the image style name if it has changed.
|
||||
// Update the image style.
|
||||
$style = $form_state['image_style'];
|
||||
if (isset($form_state['values']['name']) && $style['name'] != $form_state['values']['name']) {
|
||||
$style['name'] = $form_state['values']['name'];
|
||||
}
|
||||
$style['name'] = $form_state['values']['name'];
|
||||
$style['label'] = $form_state['values']['label'];
|
||||
|
||||
// Update image effect weights.
|
||||
if (!empty($form_state['values']['effects'])) {
|
||||
@@ -236,18 +238,26 @@ function image_style_form_submit($form, &$form_state) {
|
||||
*
|
||||
* @ingroup forms
|
||||
* @see image_style_add_form_submit()
|
||||
* @see image_style_name_validate()
|
||||
*/
|
||||
function image_style_add_form($form, &$form_state) {
|
||||
$form['name'] = array(
|
||||
$form['label'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#size' => '64',
|
||||
'#title' => t('Style name'),
|
||||
'#default_value' => '',
|
||||
'#description' => t('The name is used in URLs for generated images. Use only lowercase alphanumeric characters, underscores (_), and hyphens (-).'),
|
||||
'#element_validate' => array('image_style_name_validate'),
|
||||
'#required' => TRUE,
|
||||
);
|
||||
$form['name'] = array(
|
||||
'#type' => 'machine_name',
|
||||
'#description' => t('The name is used in URLs for generated images. Use only lowercase alphanumeric characters, underscores (_), and hyphens (-).'),
|
||||
'#size' => '64',
|
||||
'#required' => TRUE,
|
||||
'#machine_name' => array(
|
||||
'exists' => 'image_style_load',
|
||||
'source' => array('label'),
|
||||
'replace_pattern' => '[^0-9a-z_\-]',
|
||||
'error' => t('Please only use lowercase alphanumeric characters, underscores (_), and hyphens (-) for style names.'),
|
||||
),
|
||||
);
|
||||
|
||||
$form['submit'] = array(
|
||||
'#type' => 'submit',
|
||||
@@ -261,14 +271,22 @@ function image_style_add_form($form, &$form_state) {
|
||||
* Submit handler for adding a new image style.
|
||||
*/
|
||||
function image_style_add_form_submit($form, &$form_state) {
|
||||
$style = array('name' => $form_state['values']['name']);
|
||||
$style = array(
|
||||
'name' => $form_state['values']['name'],
|
||||
'label' => $form_state['values']['label'],
|
||||
);
|
||||
$style = image_style_save($style);
|
||||
drupal_set_message(t('Style %name was created.', array('%name' => $style['name'])));
|
||||
drupal_set_message(t('Style %name was created.', array('%name' => $style['label'])));
|
||||
$form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style['name'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Element validate function to ensure unique, URL safe style names.
|
||||
*
|
||||
* This function is no longer used in Drupal core since image style names are
|
||||
* now validated using #machine_name functionality. It is kept for backwards
|
||||
* compatibility (since non-core modules may be using it) and will be removed
|
||||
* in Drupal 8.
|
||||
*/
|
||||
function image_style_name_validate($element, $form_state) {
|
||||
// Check for duplicates.
|
||||
@@ -295,7 +313,7 @@ function image_style_name_validate($element, $form_state) {
|
||||
function image_style_delete_form($form, &$form_state, $style) {
|
||||
$form_state['image_style'] = $style;
|
||||
|
||||
$replacement_styles = array_diff_key(image_style_options(), array($style['name'] => ''));
|
||||
$replacement_styles = array_diff_key(image_style_options(TRUE, PASS_THROUGH), array($style['name'] => ''));
|
||||
$form['replacement'] = array(
|
||||
'#title' => t('Replacement style'),
|
||||
'#type' => 'select',
|
||||
@@ -305,7 +323,7 @@ function image_style_delete_form($form, &$form_state, $style) {
|
||||
|
||||
return confirm_form(
|
||||
$form,
|
||||
t('Optionally select a style before deleting %style', array('%style' => $style['name'])),
|
||||
t('Optionally select a style before deleting %style', array('%style' => $style['label'])),
|
||||
'admin/config/media/image-styles',
|
||||
t('If this style is in use on the site, you may select another style to replace it. All images that have been generated for this style will be permanently deleted.'),
|
||||
t('Delete'), t('Cancel')
|
||||
@@ -319,19 +337,19 @@ function image_style_delete_form_submit($form, &$form_state) {
|
||||
$style = $form_state['image_style'];
|
||||
|
||||
image_style_delete($style, $form_state['values']['replacement']);
|
||||
drupal_set_message(t('Style %name was deleted.', array('%name' => $style['name'])));
|
||||
drupal_set_message(t('Style %name was deleted.', array('%name' => $style['label'])));
|
||||
$form_state['redirect'] = 'admin/config/media/image-styles';
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirmation form to revert a database style to its default.
|
||||
*/
|
||||
function image_style_revert_form($form, $form_state, $style) {
|
||||
function image_style_revert_form($form, &$form_state, $style) {
|
||||
$form_state['image_style'] = $style;
|
||||
|
||||
return confirm_form(
|
||||
$form,
|
||||
t('Revert the %style style?', array('%style' => $style['name'])),
|
||||
t('Revert the %style style?', array('%style' => $style['label'])),
|
||||
'admin/config/media/image-styles',
|
||||
t('Reverting this style will delete the customized settings and restore the defaults provided by the @module module.', array('@module' => $style['module'])),
|
||||
t('Revert'), t('Cancel')
|
||||
@@ -342,7 +360,7 @@ function image_style_revert_form($form, $form_state, $style) {
|
||||
* Submit handler to convert an overridden style to its default.
|
||||
*/
|
||||
function image_style_revert_form_submit($form, &$form_state) {
|
||||
drupal_set_message(t('The %style style has been reverted to its defaults.', array('%style' => $form_state['image_style']['name'])));
|
||||
drupal_set_message(t('The %style style has been reverted to its defaults.', array('%style' => $form_state['image_style']['label'])));
|
||||
image_default_style_revert($form_state['image_style']);
|
||||
$form_state['redirect'] = 'admin/config/media/image-styles';
|
||||
}
|
||||
@@ -439,7 +457,7 @@ function image_effect_delete_form($form, &$form_state, $style, $effect) {
|
||||
$form_state['image_style'] = $style;
|
||||
$form_state['image_effect'] = $effect;
|
||||
|
||||
$question = t('Are you sure you want to delete the @effect effect from the %style style?', array('%style' => $style['name'], '@effect' => $effect['label']));
|
||||
$question = t('Are you sure you want to delete the @effect effect from the %style style?', array('%style' => $style['label'], '@effect' => $effect['label']));
|
||||
return confirm_form($form, $question, 'admin/config/media/image-styles/edit/' . $style['name'], '', t('Delete'));
|
||||
}
|
||||
|
||||
@@ -574,15 +592,15 @@ function image_crop_form($data) {
|
||||
'#type' => 'radios',
|
||||
'#title' => t('Anchor'),
|
||||
'#options' => array(
|
||||
'left-top' => t('Top') . ' ' . t('Left'),
|
||||
'center-top' => t('Top') . ' ' . t('Center'),
|
||||
'right-top' => t('Top') . ' ' . t('Right'),
|
||||
'left-center' => t('Center') . ' ' . t('Left'),
|
||||
'left-top' => t('Top left'),
|
||||
'center-top' => t('Top center'),
|
||||
'right-top' => t('Top right'),
|
||||
'left-center' => t('Center left'),
|
||||
'center-center' => t('Center'),
|
||||
'right-center' => t('Center') . ' ' . t('Right'),
|
||||
'left-bottom' => t('Bottom') . ' ' . t('Left'),
|
||||
'center-bottom' => t('Bottom') . ' ' . t('Center'),
|
||||
'right-bottom' => t('Bottom') . ' ' . t('Right'),
|
||||
'right-center' => t('Center right'),
|
||||
'left-bottom' => t('Bottom left'),
|
||||
'center-bottom' => t('Bottom center'),
|
||||
'right-bottom' => t('Bottom right'),
|
||||
),
|
||||
'#theme' => 'image_anchor',
|
||||
'#default_value' => $data['anchor'],
|
||||
@@ -650,7 +668,7 @@ function theme_image_style_list($variables) {
|
||||
$rows = array();
|
||||
foreach ($styles as $style) {
|
||||
$row = array();
|
||||
$row[] = l($style['name'], 'admin/config/media/image-styles/edit/' . $style['name']);
|
||||
$row[] = l($style['label'], 'admin/config/media/image-styles/edit/' . $style['name']);
|
||||
$link_attributes = array(
|
||||
'attributes' => array(
|
||||
'class' => array('image-style-link'),
|
||||
@@ -805,7 +823,7 @@ function theme_image_style_preview($variables) {
|
||||
// Build the preview of the image style.
|
||||
$preview_url = file_create_url($preview_file) . '?cache_bypass=' . REQUEST_TIME;
|
||||
$output .= '<div class="preview-image-wrapper">';
|
||||
$output .= check_plain($style['name']) . ' (' . l(t('view actual size'), file_create_url($preview_file) . '?' . time()) . ')';
|
||||
$output .= check_plain($style['label']) . ' (' . 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' => $preview_url, '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>';
|
||||
|
@@ -177,6 +177,7 @@ function hook_image_default_styles() {
|
||||
$styles = array();
|
||||
|
||||
$styles['mymodule_preview'] = array(
|
||||
'label' => 'My module preview',
|
||||
'effects' => array(
|
||||
array(
|
||||
'name' => 'image_scale',
|
||||
|
@@ -311,7 +311,7 @@ function image_field_widget_settings_form($field, $instance) {
|
||||
$form['preview_image_style'] = array(
|
||||
'#title' => t('Preview image style'),
|
||||
'#type' => 'select',
|
||||
'#options' => image_style_options(FALSE),
|
||||
'#options' => image_style_options(FALSE, PASS_THROUGH),
|
||||
'#empty_option' => '<' . t('no preview') . '>',
|
||||
'#default_value' => $settings['preview_image_style'],
|
||||
'#description' => t('The preview image will be shown while editing the content.'),
|
||||
@@ -351,7 +351,7 @@ function image_field_widget_form(&$form, &$form_state, $field, $instance, $langc
|
||||
if ($field['cardinality'] == 1) {
|
||||
// If there's only one field, return it as delta 0.
|
||||
if (empty($elements[0]['#default_value']['fid'])) {
|
||||
$elements[0]['#description'] = theme('file_upload_help', array('description' => $instance['description'], 'upload_validators' => $elements[0]['#upload_validators']));
|
||||
$elements[0]['#description'] = theme('file_upload_help', array('description' => field_filter_xss($instance['description']), 'upload_validators' => $elements[0]['#upload_validators']));
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -495,7 +495,7 @@ function image_field_formatter_settings_form($field, $instance, $view_mode, $for
|
||||
$display = $instance['display'][$view_mode];
|
||||
$settings = $display['settings'];
|
||||
|
||||
$image_styles = image_style_options(FALSE);
|
||||
$image_styles = image_style_options(FALSE, PASS_THROUGH);
|
||||
$element['image_style'] = array(
|
||||
'#title' => t('Image style'),
|
||||
'#type' => 'select',
|
||||
@@ -528,7 +528,7 @@ function image_field_formatter_settings_summary($field, $instance, $view_mode) {
|
||||
|
||||
$summary = array();
|
||||
|
||||
$image_styles = image_style_options(FALSE);
|
||||
$image_styles = image_style_options(FALSE, PASS_THROUGH);
|
||||
// Unset possible 'No defined styles' option.
|
||||
unset($image_styles['']);
|
||||
// Styles could be lost because of enabled/disabled modules that defines
|
||||
|
@@ -6,3 +6,9 @@ core = 7.x
|
||||
dependencies[] = file
|
||||
files[] = image.test
|
||||
configure = admin/config/media/image-styles
|
||||
|
||||
; Information added by Drupal.org packaging script on 2015-04-02
|
||||
version = "7.36"
|
||||
project = "drupal"
|
||||
datestamp = "1427943826"
|
||||
|
||||
|
@@ -41,11 +41,18 @@ function image_schema() {
|
||||
'not null' => TRUE,
|
||||
),
|
||||
'name' => array(
|
||||
'description' => 'The style name.',
|
||||
'description' => 'The style machine name.',
|
||||
'type' => 'varchar',
|
||||
'length' => 255,
|
||||
'not null' => TRUE,
|
||||
),
|
||||
'label' => array(
|
||||
'description' => 'The style administrative name.',
|
||||
'type' => 'varchar',
|
||||
'length' => 255,
|
||||
'not null' => TRUE,
|
||||
'default' => '',
|
||||
),
|
||||
),
|
||||
'primary key' => array('isid'),
|
||||
'unique keys' => array(
|
||||
@@ -391,7 +398,8 @@ function image_update_7002(array &$sandbox) {
|
||||
}
|
||||
|
||||
// Process the table at the top of the list.
|
||||
$table = reset(array_keys($sandbox['tables']));
|
||||
$keys = array_keys($sandbox['tables']);
|
||||
$table = reset($keys);
|
||||
$sandbox['processed'] += _image_update_7002_populate_dimensions($table, $sandbox['tables'][$table], $sandbox['last_fid']);
|
||||
|
||||
// Has the table been fully processed?
|
||||
@@ -447,6 +455,30 @@ function image_update_7004() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a column to the 'image_style' table to store administrative labels.
|
||||
*/
|
||||
function image_update_7005() {
|
||||
$field = array(
|
||||
'type' => 'varchar',
|
||||
'length' => 255,
|
||||
'not null' => TRUE,
|
||||
'default' => '',
|
||||
'description' => 'The style administrative name.',
|
||||
);
|
||||
db_add_field('image_styles', 'label', $field);
|
||||
|
||||
// Do a direct query here, rather than calling image_styles(),
|
||||
// in case Image module is disabled.
|
||||
$styles = db_query('SELECT name FROM {image_styles}')->fetchCol();
|
||||
foreach ($styles as $style) {
|
||||
db_update('image_styles')
|
||||
->fields(array('label' => $style))
|
||||
->condition('name', $style)
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @} End of "addtogroup updates-7.x-extra".
|
||||
*/
|
||||
|
@@ -254,7 +254,7 @@ function image_form_system_file_system_settings_alter(&$form, &$form_state) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit handler for the file system settings form.
|
||||
* Form submission handler for system_file_system_settings().
|
||||
*
|
||||
* Adds a menu rebuild after the public file path has been changed, so that the
|
||||
* menu router item depending on that file path will be regenerated.
|
||||
@@ -312,9 +312,9 @@ function image_file_download($uri) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Private file access for the original files. Note that we only
|
||||
// check access for non-temporary images, since file.module will
|
||||
// grant access for all temporary files.
|
||||
// Private file access for the original files. Note that we only check access
|
||||
// for non-temporary images, since file.module will grant access for all
|
||||
// temporary files.
|
||||
$files = file_load_multiple(array(), array('uri' => $uri));
|
||||
if (count($files)) {
|
||||
$file = reset($files);
|
||||
@@ -347,6 +347,7 @@ function image_image_default_styles() {
|
||||
$styles = array();
|
||||
|
||||
$styles['thumbnail'] = array(
|
||||
'label' => 'Thumbnail (100x100)',
|
||||
'effects' => array(
|
||||
array(
|
||||
'name' => 'image_scale',
|
||||
@@ -357,6 +358,7 @@ function image_image_default_styles() {
|
||||
);
|
||||
|
||||
$styles['medium'] = array(
|
||||
'label' => 'Medium (220x220)',
|
||||
'effects' => array(
|
||||
array(
|
||||
'name' => 'image_scale',
|
||||
@@ -367,6 +369,7 @@ function image_image_default_styles() {
|
||||
);
|
||||
|
||||
$styles['large'] = array(
|
||||
'label' => 'Large (480x480)',
|
||||
'effects' => array(
|
||||
array(
|
||||
'name' => 'image_scale',
|
||||
@@ -537,7 +540,7 @@ function image_field_update_instance($instance, $prior_instance) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear cached versions of a specific file in all styles.
|
||||
* Clears cached versions of a specific file in all styles.
|
||||
*
|
||||
* @param $path
|
||||
* The Drupal file path to the original image.
|
||||
@@ -553,7 +556,7 @@ function image_path_flush($path) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of all styles and their settings.
|
||||
* Gets an array of all styles and their settings.
|
||||
*
|
||||
* @return
|
||||
* An array of styles keyed by the image style ID (isid).
|
||||
@@ -575,6 +578,7 @@ function image_styles() {
|
||||
$module_styles = module_invoke($module, 'image_default_styles');
|
||||
foreach ($module_styles as $style_name => $style) {
|
||||
$style['name'] = $style_name;
|
||||
$style['label'] = empty($style['label']) ? $style_name : $style['label'];
|
||||
$style['module'] = $module;
|
||||
$style['storage'] = IMAGE_STORAGE_DEFAULT;
|
||||
foreach ($style['effects'] as $key => $effect) {
|
||||
@@ -614,7 +618,9 @@ function image_styles() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a style by style name or ID. May be used as a loader for menu items.
|
||||
* Loads a style by style name or ID.
|
||||
*
|
||||
* May be used as a loader for menu items.
|
||||
*
|
||||
* @param $name
|
||||
* The name of the style.
|
||||
@@ -623,6 +629,7 @@ function image_styles() {
|
||||
* @param $include
|
||||
* If set, this loader will restrict to a specific type of image style, may be
|
||||
* one of the defined Image style storage constants.
|
||||
*
|
||||
* @return
|
||||
* An image style array containing the following keys:
|
||||
* - "isid": The unique image style ID.
|
||||
@@ -660,12 +667,20 @@ function image_style_load($name = NULL, $isid = NULL, $include = NULL) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an image style.
|
||||
* Saves an image style.
|
||||
*
|
||||
* @param style
|
||||
* An image style array.
|
||||
* @return
|
||||
* An image style array. In the case of a new style, 'isid' will be populated.
|
||||
* @param array $style
|
||||
* An image style array containing:
|
||||
* - name: A unique name for the style.
|
||||
* - isid: (optional) An image style ID.
|
||||
*
|
||||
* @return array
|
||||
* An image style array containing:
|
||||
* - name: An unique name for the style.
|
||||
* - old_name: The original name for the style.
|
||||
* - isid: An image style ID.
|
||||
* - is_new: TRUE if this is a new style, and FALSE if it is an existing
|
||||
* style.
|
||||
*/
|
||||
function image_style_save($style) {
|
||||
if (isset($style['isid']) && is_numeric($style['isid'])) {
|
||||
@@ -678,6 +693,10 @@ function image_style_save($style) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Add a default label when not given.
|
||||
if (empty($style['label'])) {
|
||||
$style['label'] = $style['name'];
|
||||
}
|
||||
drupal_write_record('image_styles', $style);
|
||||
$style['is_new'] = TRUE;
|
||||
}
|
||||
@@ -692,13 +711,14 @@ function image_style_save($style) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an image style.
|
||||
* Deletes an image style.
|
||||
*
|
||||
* @param $style
|
||||
* An image style array.
|
||||
* @param $replacement_style_name
|
||||
* (optional) When deleting a style, specify a replacement style name so
|
||||
* that existing settings (if any) may be converted to a new style.
|
||||
*
|
||||
* @return
|
||||
* TRUE on success.
|
||||
*/
|
||||
@@ -717,14 +737,17 @@ function image_style_delete($style, $replacement_style_name = '') {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all the effects for an image style.
|
||||
* Loads all the effects for an image style.
|
||||
*
|
||||
* @param $style
|
||||
* An image style array.
|
||||
* @return
|
||||
* @param array $style
|
||||
* An image style array containing:
|
||||
* - isid: The unique image style ID that contains this image effect.
|
||||
*
|
||||
* @return array
|
||||
* An array of image effects associated with specified image style in the
|
||||
* format array('isid' => array()), or an empty array if the specified style
|
||||
* has no effects.
|
||||
* @see image_effects()
|
||||
*/
|
||||
function image_style_effects($style) {
|
||||
$effects = image_effects();
|
||||
@@ -739,23 +762,32 @@ function image_style_effects($style) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of image styles suitable for using as select list options.
|
||||
* Gets an array of image styles suitable for using as select list options.
|
||||
*
|
||||
* @param $include_empty
|
||||
* If TRUE a <none> option will be inserted in the options array.
|
||||
* @param $output
|
||||
* Optional flag determining how the options will be sanitized on output.
|
||||
* Leave this at the default (CHECK_PLAIN) if you are using the output of
|
||||
* this function directly in an HTML context, such as for checkbox or radio
|
||||
* button labels, and do not plan to sanitize it on your own. If using the
|
||||
* output of this function as select list options (its primary use case), you
|
||||
* should instead set this flag to PASS_THROUGH to avoid double-escaping of
|
||||
* the output (the form API sanitizes select list options by default).
|
||||
*
|
||||
* @return
|
||||
* Array of image styles both key and value are set to style name.
|
||||
* Array of image styles with the machine name as key and the label as value.
|
||||
*/
|
||||
function image_style_options($include_empty = TRUE) {
|
||||
function image_style_options($include_empty = TRUE, $output = CHECK_PLAIN) {
|
||||
$styles = image_styles();
|
||||
$options = array();
|
||||
if ($include_empty && !empty($styles)) {
|
||||
$options[''] = t('<none>');
|
||||
}
|
||||
// Use the array concatenation operator '+' here instead of array_merge(),
|
||||
// because the latter loses the datatype of the array keys, turning
|
||||
// associative string keys into numeric ones without warning.
|
||||
$options = $options + drupal_map_assoc(array_keys($styles));
|
||||
foreach ($styles as $name => $style) {
|
||||
$options[$name] = ($output == PASS_THROUGH) ? $style['label'] : check_plain($style['label']);
|
||||
}
|
||||
|
||||
if (empty($options)) {
|
||||
$options[''] = t('No defined styles');
|
||||
}
|
||||
@@ -763,7 +795,7 @@ function image_style_options($include_empty = TRUE) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Menu callback; Given a style and image path, generate a derivative.
|
||||
* Page callback: Generates a derivative, given a style and image path.
|
||||
*
|
||||
* After generating an image, transfer it to the requesting agent.
|
||||
*
|
||||
@@ -780,9 +812,11 @@ function image_style_deliver($style, $scheme) {
|
||||
// derivative token is valid. (Sites which require image derivatives to be
|
||||
// generated without a token can set the 'image_allow_insecure_derivatives'
|
||||
// variable to TRUE to bypass the latter check, but this will increase the
|
||||
// site's vulnerability to denial-of-service attacks.)
|
||||
// site's vulnerability to denial-of-service attacks. To prevent this
|
||||
// variable from leaving the site vulnerable to the most serious attacks, a
|
||||
// token is always required when a derivative of a derivative is requested.)
|
||||
$valid = !empty($style) && file_stream_wrapper_valid_scheme($scheme);
|
||||
if (!variable_get('image_allow_insecure_derivatives', FALSE)) {
|
||||
if (!variable_get('image_allow_insecure_derivatives', FALSE) || strpos(ltrim($target, '\/'), 'styles/') === 0) {
|
||||
$valid = $valid && isset($_GET[IMAGE_DERIVATIVE_TOKEN]) && $_GET[IMAGE_DERIVATIVE_TOKEN] === image_style_path_token($style['name'], $scheme . '://' . $target);
|
||||
}
|
||||
if (!$valid) {
|
||||
@@ -801,7 +835,7 @@ function image_style_deliver($style, $scheme) {
|
||||
else {
|
||||
$headers = module_invoke_all('file_download', $image_uri);
|
||||
if (in_array(-1, $headers) || empty($headers)) {
|
||||
return drupal_access_denied();
|
||||
return MENU_ACCESS_DENIED;
|
||||
}
|
||||
if (count($headers)) {
|
||||
foreach ($headers as $name => $value) {
|
||||
@@ -811,6 +845,12 @@ function image_style_deliver($style, $scheme) {
|
||||
}
|
||||
}
|
||||
|
||||
// Confirm that the original source image exists before trying to process it.
|
||||
if (!is_file($image_uri)) {
|
||||
watchdog('image', 'Source image at %source_image_path not found while trying to generate derivative image at %derivative_path.', array('%source_image_path' => $image_uri, '%derivative_path' => $derivative_uri));
|
||||
return MENU_NOT_FOUND;
|
||||
}
|
||||
|
||||
// Don't start generating the image if the derivative already exists or if
|
||||
// generation is in progress in another thread.
|
||||
$lock_name = 'image_style_deliver:' . $style['name'] . ':' . drupal_hash_base64($image_uri);
|
||||
@@ -820,6 +860,7 @@ function image_style_deliver($style, $scheme) {
|
||||
// Tell client to retry again in 3 seconds. Currently no browsers are known
|
||||
// to support Retry-After.
|
||||
drupal_add_http_header('Status', '503 Service Unavailable');
|
||||
drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
|
||||
drupal_add_http_header('Retry-After', 3);
|
||||
print t('Image generation in progress. Try again shortly.');
|
||||
drupal_exit();
|
||||
@@ -841,6 +882,7 @@ function image_style_deliver($style, $scheme) {
|
||||
else {
|
||||
watchdog('image', 'Unable to generate the derived image located at %path.', array('%path' => $derivative_uri));
|
||||
drupal_add_http_header('Status', '500 Internal Server Error');
|
||||
drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
|
||||
print t('Error generating image.');
|
||||
drupal_exit();
|
||||
}
|
||||
@@ -867,6 +909,11 @@ function image_style_deliver($style, $scheme) {
|
||||
* @see image_style_load()
|
||||
*/
|
||||
function image_style_create_derivative($style, $source, $destination) {
|
||||
// If the source file doesn't exist, return FALSE without creating folders.
|
||||
if (!$image = image_load($source)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Get the folder for the final location of this style.
|
||||
$directory = drupal_dirname($destination);
|
||||
|
||||
@@ -876,10 +923,6 @@ function image_style_create_derivative($style, $source, $destination) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!$image = image_load($source)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
foreach ($style['effects'] as $effect) {
|
||||
image_effect_apply($image, $effect);
|
||||
}
|
||||
@@ -928,15 +971,18 @@ function image_style_transform_dimensions($style_name, array &$dimensions) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush cached media for a style.
|
||||
* Flushes cached media for a style.
|
||||
*
|
||||
* @param $style
|
||||
* An image style array.
|
||||
*/
|
||||
function image_style_flush($style) {
|
||||
$style_directory = drupal_realpath(file_default_scheme() . '://styles/' . $style['name']);
|
||||
if (is_dir($style_directory)) {
|
||||
file_unmanaged_delete_recursive($style_directory);
|
||||
// Delete the style directory in each registered wrapper.
|
||||
$wrappers = file_get_stream_wrappers(STREAM_WRAPPERS_WRITE_VISIBLE);
|
||||
foreach ($wrappers as $wrapper => $wrapper_data) {
|
||||
if (file_exists($directory = $wrapper . '://styles/' . $style['name'])) {
|
||||
file_unmanaged_delete_recursive($directory);
|
||||
}
|
||||
}
|
||||
|
||||
// Let other modules update as necessary on flush.
|
||||
@@ -960,12 +1006,13 @@ function image_style_flush($style) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the URL for an image derivative given a style and image path.
|
||||
* Returns the URL for an image derivative given a style and image path.
|
||||
*
|
||||
* @param $style_name
|
||||
* The name of the style to be used with this image.
|
||||
* @param $path
|
||||
* The path to the image.
|
||||
*
|
||||
* @return
|
||||
* The absolute URL where a style image can be downloaded, suitable for use
|
||||
* in an <img> tag. Requesting the URL will cause the image to be created.
|
||||
@@ -973,10 +1020,22 @@ function image_style_flush($style) {
|
||||
*/
|
||||
function image_style_url($style_name, $path) {
|
||||
$uri = image_style_path($style_name, $path);
|
||||
|
||||
// The passed-in $path variable can be either a relative path or a full URI.
|
||||
$original_uri = file_uri_scheme($path) ? file_stream_wrapper_uri_normalize($path) : file_build_uri($path);
|
||||
|
||||
// The token query is added even if the 'image_allow_insecure_derivatives'
|
||||
// variable is TRUE, so that the emitted links remain valid if it is changed
|
||||
// back to the default FALSE.
|
||||
$token_query = array(IMAGE_DERIVATIVE_TOKEN => image_style_path_token($style_name, $path));
|
||||
// However, sites which need to prevent the token query from being emitted at
|
||||
// all can additionally set the 'image_suppress_itok_output' variable to TRUE
|
||||
// to achieve that (if both are set, the security token will neither be
|
||||
// emitted in the image derivative URL nor checked for in
|
||||
// image_style_deliver()).
|
||||
$token_query = array();
|
||||
if (!variable_get('image_suppress_itok_output', FALSE)) {
|
||||
$token_query = array(IMAGE_DERIVATIVE_TOKEN => image_style_path_token($style_name, $original_uri));
|
||||
}
|
||||
|
||||
// If not using clean URLs, the image derivative callback is only available
|
||||
// with the query string. If the file does not exist, use url() to ensure
|
||||
@@ -988,8 +1047,12 @@ function image_style_url($style_name, $path) {
|
||||
}
|
||||
|
||||
$file_url = file_create_url($uri);
|
||||
// Append the query string with the token.
|
||||
return $file_url . (strpos($file_url, '?') !== FALSE ? '&' : '?') . drupal_http_build_query($token_query);
|
||||
// Append the query string with the token, if necessary.
|
||||
if ($token_query) {
|
||||
$file_url .= (strpos($file_url, '?') !== FALSE ? '&' : '?') . drupal_http_build_query($token_query);
|
||||
}
|
||||
|
||||
return $file_url;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1014,7 +1077,7 @@ function image_style_path_token($style_name, $uri) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the URI of an image when using a style.
|
||||
* Returns the URI of an image when using a style.
|
||||
*
|
||||
* The path returned by this function may not exist. The default generation
|
||||
* method only creates images when they are requested by a user's browser.
|
||||
@@ -1023,6 +1086,7 @@ function image_style_path_token($style_name, $uri) {
|
||||
* The name of the style to be used with this image.
|
||||
* @param $uri
|
||||
* The URI or path to the image.
|
||||
*
|
||||
* @return
|
||||
* The URI to an image style image.
|
||||
* @see image_style_url()
|
||||
@@ -1040,10 +1104,11 @@ function image_style_path($style_name, $uri) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a default image style to the database.
|
||||
* Saves a default image style to the database.
|
||||
*
|
||||
* @param style
|
||||
* An image style array provided by a module.
|
||||
*
|
||||
* @return
|
||||
* An image style array. The returned style array will include the new 'isid'
|
||||
* assigned to the style.
|
||||
@@ -1061,7 +1126,7 @@ function image_default_style_save($style) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Revert the changes made by users to a default image style.
|
||||
* Reverts the changes made by users to a default image style.
|
||||
*
|
||||
* @param style
|
||||
* An image style array.
|
||||
@@ -1078,7 +1143,10 @@ function image_default_style_revert($style) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Pull in image effects exposed by modules implementing hook_image_effect_info().
|
||||
* Returns a set of image effects.
|
||||
*
|
||||
* These image effects are exposed by modules implementing
|
||||
* hook_image_effect_info().
|
||||
*
|
||||
* @return
|
||||
* An array of image effects to be used when transforming images.
|
||||
@@ -1120,7 +1188,7 @@ function image_effect_definitions() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the definition for an image effect.
|
||||
* Loads the definition for an image effect.
|
||||
*
|
||||
* The effect definition is a set of core properties for an image effect, not
|
||||
* containing any user-settings. The definition defines various functions to
|
||||
@@ -1132,6 +1200,7 @@ function image_effect_definitions() {
|
||||
* The name of the effect definition to load.
|
||||
* @param $style
|
||||
* An image style array to which this effect will be added.
|
||||
*
|
||||
* @return
|
||||
* An array containing the image effect definition with the following keys:
|
||||
* - "effect": The unique name for the effect being performed. Usually prefixed
|
||||
@@ -1159,7 +1228,7 @@ function image_effect_definition_load($effect, $style_name = NULL) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all image effects from the database.
|
||||
* Loads all image effects from the database.
|
||||
*
|
||||
* @return
|
||||
* An array of all image effects.
|
||||
@@ -1191,7 +1260,7 @@ function image_effects() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a single image effect.
|
||||
* Loads a single image effect.
|
||||
*
|
||||
* @param $ieid
|
||||
* The image effect ID.
|
||||
@@ -1200,6 +1269,7 @@ function image_effects() {
|
||||
* @param $include
|
||||
* If set, this loader will restrict to a specific type of image style, may be
|
||||
* one of the defined Image style storage constants.
|
||||
*
|
||||
* @return
|
||||
* An image effect array, consisting of the following keys:
|
||||
* - "ieid": The unique image effect ID.
|
||||
@@ -1221,10 +1291,11 @@ function image_effect_load($ieid, $style_name, $include = NULL) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an image effect.
|
||||
* Saves an image effect.
|
||||
*
|
||||
* @param $effect
|
||||
* An image effect array.
|
||||
*
|
||||
* @return
|
||||
* An image effect array. In the case of a new effect, 'ieid' will be set.
|
||||
*/
|
||||
@@ -1241,7 +1312,7 @@ function image_effect_save($effect) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an image effect.
|
||||
* Deletes an image effect.
|
||||
*
|
||||
* @param $effect
|
||||
* An image effect array.
|
||||
@@ -1253,12 +1324,13 @@ function image_effect_delete($effect) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Given an image object and effect, perform the effect on the file.
|
||||
* Applies an image effect to the image object.
|
||||
*
|
||||
* @param $image
|
||||
* An image object returned by image_load().
|
||||
* @param $effect
|
||||
* An image effect array.
|
||||
*
|
||||
* @return
|
||||
* TRUE on success. FALSE if unable to perform the image effect on the image.
|
||||
*/
|
||||
@@ -1309,7 +1381,7 @@ function theme_image_style($variables) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept a keyword (center, top, left, etc) and return it as a pixel offset.
|
||||
* Accepts a keyword (center, top, left, etc) and returns it as a pixel offset.
|
||||
*
|
||||
* @param $value
|
||||
* @param $current_pixels
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -5,3 +5,9 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = image_module_test.module
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2015-04-02
|
||||
version = "7.36"
|
||||
project = "drupal"
|
||||
datestamp = "1427943826"
|
||||
|
||||
|
Reference in New Issue
Block a user