diff --git a/core/modules/image/src/Form/ImageEffectEditForm.php b/core/modules/image/src/Form/ImageEffectEditForm.php index 74a99cf..1e2ba85 100644 --- a/core/modules/image/src/Form/ImageEffectEditForm.php +++ b/core/modules/image/src/Form/ImageEffectEditForm.php @@ -16,20 +16,11 @@ class ImageEffectEditForm extends ImageEffectFormBase { /** - * The image effect UUID. - * - * @var string - */ - protected $imageEffectId; - - /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, ImageStyleInterface $image_style = NULL, $image_effect = NULL) { $form = parent::buildForm($form, $form_state, $image_style, $image_effect); - $this->imageEffectId = $image_effect; - $form['#title'] = $this->t('Edit %label effect', array('%label' => $this->imageEffect->label())); $form['actions']['submit']['#value'] = $this->t('Update effect'); @@ -43,23 +34,4 @@ protected function prepareImageEffect($image_effect) { return $this->imageStyle->getEffect($image_effect); } - /** - * {@inheritdoc} - */ - public function __sleep() { - $vars = parent::__sleep(); - $vars = array_diff($vars, ['imageEffect']); - return $vars; - } - - /** - * {@inheritdoc} - */ - public function __wakeup() { - parent::__wakeup(); - if ($this->imageStyle && $this->imageStyle instanceof ImageStyleInterface) { - $this->imageEffect = $this->imageStyle->getEffect($this->imageEffectId); - } - } - } diff --git a/core/modules/image/src/Form/ImageEffectFormBase.php b/core/modules/image/src/Form/ImageEffectFormBase.php index 7b7f25b..40e995d 100644 --- a/core/modules/image/src/Form/ImageEffectFormBase.php +++ b/core/modules/image/src/Form/ImageEffectFormBase.php @@ -10,6 +10,7 @@ use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; +use Drupal\image\Entity\ImageStyle; use Drupal\image\ConfigurableImageEffectInterface; use Drupal\image\ImageStyleInterface; use Drupal\Component\Plugin\Exception\PluginNotFoundException; @@ -19,7 +20,7 @@ /** * Provides a base form for image effects. */ -abstract class ImageEffectFormBase extends FormBase { +abstract class ImageEffectFormBase extends FormBase implements \Serializable { /** * The image style. @@ -148,4 +149,53 @@ public function submitForm(array &$form, FormStateInterface $form_state) { */ abstract protected function prepareImageEffect($image_effect); + /** + * {@inheritdoc} + */ + public function serialize() { + $data = get_object_vars($this); + $serviceIds = []; + foreach ($data as $key => $value) { + if (is_object($value) && isset($value->_serviceId)) { + // If a class member was instantiated by the dependency injection + // container, only store its ID so it can be used to get a fresh object + // on unserialization. + $serviceIds[$key] = $value->_serviceId; + $data[$key] = null; + } + elseif ($key == 'imageStyle' && $this->imageStyle) { + $data[$key] = $this->imageStyle->id(); + } + elseif ($key == 'imageEffect' && $this->imageEffect) { + $data[$key] = $this->imageEffect->getUuid(); + } + else { + $data[$key] = $value; + } + } + return serialize([ + 'data' => $data, + 'service_ids' => $serviceIds, + ]); + } + + /** + * {@inheritdoc} + */ + public function unserialize($serialized) { + $unserialized = unserialize($serialized); + $service_ids = $unserialized['service_ids']; + $data = $unserialized['data']; + $container = \Drupal::getContainer(); + foreach ($data as $key => $value) { + $this->$key = isset($service_ids[$key]) ? $container->get($service_ids[$key]) : $value; + } + if ($data['imageStyle']) { + $this->imageStyle = ImageStyle::load($data['imageStyle']); + } + if ($this->imageStyle && $data['imageEffect']) { + $this->imageEffect = $this->imageStyle->getEffect($data['imageEffect']); + } + } + }