diff --git a/core/lib/Drupal/Core/Datetime/Element/Datelist.php b/core/lib/Drupal/Core/Datetime/Element/Datelist.php index 610c2d48dfe26eb7a5ee68804db98e292b87b773..6ce98c13dee7534b792e16398dcec37ef9391f1a 100644 --- a/core/lib/Drupal/Core/Datetime/Element/Datelist.php +++ b/core/lib/Drupal/Core/Datetime/Element/Datelist.php @@ -9,7 +9,6 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Security\DoTrustedCallbackTrait; use Drupal\Core\Security\StaticTrustedCallbackHelper; -use Drupal\Core\Security\TrustedCallbackInterface; /** * Provides a datelist element. @@ -267,8 +266,8 @@ public static function processDatelist(&$element, FormStateInterface $form_state // Allows custom callbacks to alter the element. if (!empty($element['#date_date_callbacks'])) { foreach ($element['#date_date_callbacks'] as $callback) { - $message = sprintf('Datelist element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString($callback)); - StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION); + $message = sprintf('Datelist element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/3217966', Variable::callableToString($callback)); + StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message); } } diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php index 845fe259b45eacfd155f431b6f67431376355699..0a7bceb808c7ab819dfe27d4b18ce3b5398369c4 100644 --- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php +++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php @@ -9,7 +9,6 @@ use Drupal\Core\Datetime\Entity\DateFormat; use Drupal\Core\Security\DoTrustedCallbackTrait; use Drupal\Core\Security\StaticTrustedCallbackHelper; -use Drupal\Core\Security\TrustedCallbackInterface; /** * Provides a datetime element. @@ -273,8 +272,8 @@ public static function processDatetime(&$element, FormStateInterface $form_state // Allows custom callbacks to alter the element. if (!empty($element['#date_date_callbacks'])) { foreach ($element['#date_date_callbacks'] as $callback) { - $message = sprintf('DateTime element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString($callback)); - StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION); + $message = sprintf('DateTime element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/3217966', Variable::callableToString($callback)); + StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message); } } } @@ -304,8 +303,8 @@ public static function processDatetime(&$element, FormStateInterface $form_state // Allows custom callbacks to alter the element. if (!empty($element['#date_time_callbacks'])) { foreach ($element['#date_time_callbacks'] as $callback) { - $message = sprintf('DateTime element #date_time_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString($callback)); - StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION); + $message = sprintf('DateTime element #date_time_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/3217966', Variable::callableToString($callback)); + StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message); } } } diff --git a/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php b/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php index 2b8eaa561f436e213d5180e264802bd25525cea2..63db70745fc9a258ccd9f78109ced36f156d6152 100644 --- a/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php +++ b/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php @@ -8,6 +8,7 @@ use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Security\TrustedCallbackInterface; +use Drupal\Core\Security\UntrustedCallbackException; use Drupal\KernelTests\KernelTestBase; /** @@ -116,16 +117,14 @@ public function testDatelistElement() { } /** - * Tests that deprecations are raised if untrusted callbacks are used. + * Tests that exceptions are raised if untrusted callbacks are used. * * @group legacy */ public function testDatelistElementUntrustedCallbacks() : void { + $this->expectException(UntrustedCallbackException::class); + $this->expectExceptionMessage(sprintf('Datelist element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datelistDateCallback']))); $form = \Drupal::formBuilder()->getForm($this, 'datelistDateCallback'); - $this->expectDeprecation(sprintf('Datelist element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datelistDateCallback']))); - $this->render($form); - - $this->assertTrue($form['datelist_element']['datelistDateCallbackExecuted']['#value']); } /** diff --git a/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php b/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php index 524c5757015822ed63423589f414c94d454c7ad0..3a474f3d8e89587120bd8e9746746e2723066255 100644 --- a/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php +++ b/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php @@ -8,6 +8,7 @@ use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Security\TrustedCallbackInterface; +use Drupal\Core\Security\UntrustedCallbackException; use Drupal\KernelTests\KernelTestBase; /** @@ -149,18 +150,19 @@ public function testDatetimeElement() { * Name of the callback to use for the date-time date callback. * @param string $time_callback * Name of the callback to use for the date-time time callback. - * @param string|null $expected_deprecation - * The expected deprecation message if a deprecation should be raised, or + * @param string|null $expected_exception + * The expected exception message if an exception should be thrown, or * NULL if otherwise. * * @dataProvider providerUntrusted * @group legacy */ - public function testDatetimeElementUntrustedCallbacks(string $date_callback = 'datetimeDateCallbackTrusted', string $time_callback = 'datetimeTimeCallbackTrusted', string $expected_deprecation = NULL) : void { - $form = \Drupal::formBuilder()->getForm($this, $date_callback, $time_callback); - if ($expected_deprecation) { - $this->expectDeprecation($expected_deprecation); + public function testDatetimeElementUntrustedCallbacks(string $date_callback = 'datetimeDateCallbackTrusted', string $time_callback = 'datetimeTimeCallbackTrusted', string $expected_exception = NULL) : void { + if ($expected_exception) { + $this->expectException(UntrustedCallbackException::class); + $this->expectExceptionMessage($expected_exception); } + $form = \Drupal::formBuilder()->getForm($this, $date_callback, $time_callback); $this->render($form); $this->assertTrue($form['datetime_element']['datetimeDateCallbackExecuted']['#value']); @@ -178,12 +180,12 @@ public function providerUntrusted() : array { 'untrusted date' => [ 'datetimeDateCallback', 'datetimeTimeCallbackTrusted', - sprintf('DateTime element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datetimeDateCallback'])), + sprintf('DateTime element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datetimeDateCallback'])), ], 'untrusted time' => [ 'datetimeDateCallbackTrusted', 'datetimeTimeCallback', - sprintf('DateTime element #date_time_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datetimeTimeCallback'])), + sprintf('DateTime element #date_time_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datetimeTimeCallback'])), ], ]; }