diff --git a/core/modules/image/lib/Drupal/image/ConfigurableImageEffectInterface.php b/core/modules/image/lib/Drupal/image/ConfigurableImageEffectInterface.php index 292aa4c47d877f80d95c02f1eaf7d72399b8d1ec..f920c92dc9b40eb8b582761c1386df013cd50fe8 100644 --- a/core/modules/image/lib/Drupal/image/ConfigurableImageEffectInterface.php +++ b/core/modules/image/lib/Drupal/image/ConfigurableImageEffectInterface.php @@ -12,6 +12,14 @@ */ interface ConfigurableImageEffectInterface extends ImageEffectInterface { + /** + * Define the effect configuration defaults. + * + * @return array + * An associative array with defaults keyed by configuration names. + */ + public function getConfigurationDefaults(); + /** * Builds the part of the image effect form specific to this image effect. * diff --git a/core/modules/image/lib/Drupal/image/ImageEffectBase.php b/core/modules/image/lib/Drupal/image/ImageEffectBase.php index 2babe0d8b83c2b34b759a38097b091a027ac2bee..e8980450d0483ce4311d6600549963aeb261a69f 100644 --- a/core/modules/image/lib/Drupal/image/ImageEffectBase.php +++ b/core/modules/image/lib/Drupal/image/ImageEffectBase.php @@ -103,10 +103,17 @@ public function setConfiguration(array $configuration) { 'uuid' => '', 'weight' => '', ); - $this->configuration = $configuration['data']; + $this->configuration = $configuration['data'] + $this->getConfigurationDefaults(); $this->uuid = $configuration['uuid']; $this->weight = $configuration['weight']; return $this; } + /** + * Fallback for non-configurable effects. + */ + public function getConfigurationDefaults() { + return array(); + } + } diff --git a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/CropImageEffect.php b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/CropImageEffect.php index e46d2fa74d817e34fbfce40d05a7664c54a525d8..751851ebe2c98d69befba172192b53ef311c6338 100644 --- a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/CropImageEffect.php +++ b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/CropImageEffect.php @@ -26,11 +26,6 @@ class CropImageEffect extends ResizeImageEffect { * {@inheritdoc} */ public function applyEffect(ImageInterface $image) { - // Set sane default values. - $this->configuration += array( - 'anchor' => 'center-center', - ); - list($x, $y) = explode('-', $this->configuration['anchor']); $x = image_filter_keyword($x, $image->getWidth(), $this->configuration['width']); $y = image_filter_keyword($y, $image->getHeight(), $this->configuration['height']); @@ -54,12 +49,16 @@ public function getSummary() { /** * {@inheritdoc} */ - public function getForm() { - $this->configuration += array( - 'width' => '', - 'height' => '', + public function getConfigurationDefaults() { + return parent::getConfigurationDefaults() + array( 'anchor' => 'center-center', ); + } + + /** + * {@inheritdoc} + */ + public function getForm() { $form = parent::getForm(); $form['anchor'] = array( '#type' => 'radios', diff --git a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ResizeImageEffect.php b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ResizeImageEffect.php index 766e5a7b87b7fc8dbbc615745be86e3264e3e234..60f055dccf7b824f9d7b433e65327b23486bec00 100644 --- a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ResizeImageEffect.php +++ b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ResizeImageEffect.php @@ -54,6 +54,16 @@ public function getSummary() { ); } + /** + * {@inheritdoc} + */ + public function getConfigurationDefaults() { + return array( + 'width' => NULL, + 'height' => NULL, + ); + } + /** * {@inheritdoc} */ @@ -61,7 +71,7 @@ public function getForm() { $form['width'] = array( '#type' => 'number', '#title' => t('Width'), - '#default_value' => isset($this->configuration['width']) ? $this->configuration['width'] : '', + '#default_value' => $this->configuration['width'], '#field_suffix' => ' ' . t('pixels'), '#required' => TRUE, '#min' => 1, @@ -69,7 +79,7 @@ public function getForm() { $form['height'] = array( '#type' => 'number', '#title' => t('Height'), - '#default_value' => isset($this->configuration['height']) ? $this->configuration['height'] : '', + '#default_value' => $this->configuration['height'], '#field_suffix' => ' ' . t('pixels'), '#required' => TRUE, '#min' => 1, diff --git a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/RotateImageEffect.php b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/RotateImageEffect.php index fe563aefb6be4b4f39218fd9a7fb335bff251b37..2920c7b987ce9b591470744c82d532693bc4a21d 100644 --- a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/RotateImageEffect.php +++ b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/RotateImageEffect.php @@ -28,13 +28,6 @@ class RotateImageEffect extends ImageEffectBase implements ConfigurableImageEffe * {@inheritdoc} */ public function applyEffect(ImageInterface $image) { - // Set sane default values. - $this->configuration += array( - 'degrees' => 0, - 'bgcolor' => NULL, - 'random' => FALSE, - ); - // Convert short #FFF syntax to full #FFFFFF syntax. if (strlen($this->configuration['bgcolor']) == 4) { $c = $this->configuration['bgcolor']; @@ -89,13 +82,24 @@ public function getSummary() { ); } + /** + * {@inheritdoc} + */ + public function getConfigurationDefaults() { + return array( + 'degrees' => 0, + 'bgcolor' => NULL, + 'random' => FALSE, + ); + } + /** * {@inheritdoc} */ public function getForm() { $form['degrees'] = array( '#type' => 'number', - '#default_value' => (isset($this->configuration['degrees'])) ? $this->configuration['degrees'] : 0, + '#default_value' => $this->configuration['degrees'], '#title' => t('Rotation angle'), '#description' => t('The number of degrees the image should be rotated. Positive numbers are clockwise, negative are counter-clockwise.'), '#field_suffix' => '°', @@ -103,7 +107,7 @@ public function getForm() { ); $form['bgcolor'] = array( '#type' => 'textfield', - '#default_value' => (isset($this->configuration['bgcolor'])) ? $this->configuration['bgcolor'] : '#FFFFFF', + '#default_value' => $this->configuration['bgcolor'], '#title' => t('Background color'), '#description' => t('The background color to use for exposed areas of the image. Use web-style hex colors (#FFFFFF for white, #000000 for black). Leave blank for transparency on image types that support it.'), '#size' => 7, @@ -112,7 +116,7 @@ public function getForm() { ); $form['random'] = array( '#type' => 'checkbox', - '#default_value' => (isset($this->configuration['random'])) ? $this->configuration['random'] : 0, + '#default_value' => $this->configuration['random'], '#title' => t('Randomize'), '#description' => t('Randomize the rotation angle for each image. The angle specified above is used as a maximum.'), ); diff --git a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ScaleImageEffect.php b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ScaleImageEffect.php index c7b2f53ce346d25516c02830fd2c91a544f7766a..853468842e96597115714a1b414d001249f636f1 100644 --- a/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ScaleImageEffect.php +++ b/core/modules/image/lib/Drupal/image/Plugin/ImageEffect/ScaleImageEffect.php @@ -27,13 +27,6 @@ class ScaleImageEffect extends ResizeImageEffect { * {@inheritdoc} */ public function applyEffect(ImageInterface $image) { - // Set sane default values. - $this->configuration += array( - 'width' => NULL, - 'height' => NULL, - 'upscale' => FALSE, - ); - if (!$image->scale($this->configuration['width'], $this->configuration['height'], $this->configuration['upscale'])) { watchdog('image', 'Image scale failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->getToolkitId(), '%path' => $image->getSource(), '%mimetype' => $image->getMimeType(), '%dimensions' => $image->getWidth() . 'x' . $image->getHeight()), WATCHDOG_ERROR); return FALSE; @@ -60,6 +53,15 @@ public function getSummary() { ); } + /** + * {@inheritdoc} + */ + public function getConfigurationDefaults() { + return parent::getConfigurationDefaults() + array( + 'upscale' => FALSE, + ); + } + /** * {@inheritdoc} */ @@ -70,7 +72,7 @@ public function getForm() { $form['height']['#required'] = FALSE; $form['upscale'] = array( '#type' => 'checkbox', - '#default_value' => (isset($this->configuration['upscale'])) ? $this->configuration['upscale'] : 0, + '#default_value' => $this->configuration['upscale'], '#title' => t('Allow Upscaling'), '#description' => t('Let scale make images larger than their original size'), );