diff --git a/src/DataFilterBase.php b/src/DataFilterBase.php index a1bdae2d5bcc4cc01150218e823881bc50fe2bf5..6b502ec93314f606fb8d6f5dcce4616f60849447 100644 --- a/src/DataFilterBase.php +++ b/src/DataFilterBase.php @@ -7,6 +7,8 @@ namespace Drupal\typed_data; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\TypedData\DataDefinitionInterface; +use Drupal\Core\TypedData\PrimitiveInterface; +use Drupal\Core\TypedData\TypedDataInterface; use Drupal\Core\TypedData\TypedDataTrait; /** diff --git a/src/DataFilterInterface.php b/src/DataFilterInterface.php index 644a78a3f68dbbc286cfeb7ccec1dbf3f5a455ef..22e5d66f846c4f081d6fceb1052bb88707acc6a5 100644 --- a/src/DataFilterInterface.php +++ b/src/DataFilterInterface.php @@ -4,6 +4,7 @@ namespace Drupal\typed_data; use Drupal\Core\Render\BubbleableMetadata; use Drupal\Core\TypedData\DataDefinitionInterface; +use Drupal\Core\TypedData\TypedDataInterface; /** * Interface for data filters. diff --git a/src/Plugin/TypedDataFilter/StripTagsFilter.php b/src/Plugin/TypedDataFilter/StripTagsFilter.php index 938f6c783e0c870fae37ca3e94ccda7d743e8fd8..26bbc30ac04f2d77095f066ac8d49c390e8a779d 100644 --- a/src/Plugin/TypedDataFilter/StripTagsFilter.php +++ b/src/Plugin/TypedDataFilter/StripTagsFilter.php @@ -9,6 +9,7 @@ use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\TypedData\DataDefinition; use Drupal\Core\TypedData\DataDefinitionInterface; use Drupal\Core\TypedData\Type\StringInterface; +use Drupal\text\TextProcessed; use Drupal\typed_data\Attribute\DataFilter; use Drupal\typed_data\DataFilterBase; @@ -30,14 +31,15 @@ class StripTagsFilter extends DataFilterBase { * {@inheritdoc} */ public function filter(DataDefinitionInterface $definition, $value, array $arguments, ?BubbleableMetadata $bubbleable_metadata = NULL) { - return strip_tags($value); + return strip_tags((string) $value); } /** * {@inheritdoc} */ public function canFilter(DataDefinitionInterface $definition): bool { - return is_subclass_of($definition->getClass(), StringInterface::class); + return is_subclass_of($definition->getClass(), StringInterface::class) + || is_a($definition->getClass(), TextProcessed::class, TRUE); } /** diff --git a/tests/src/Kernel/DataFilterTest.php b/tests/src/Kernel/DataFilterTest.php index 2570c571c18d8b6eb730f7646a444a495d822f2a..7d12cb27c3417141e9c1ba7e4beeb535b04df008 100644 --- a/tests/src/Kernel/DataFilterTest.php +++ b/tests/src/Kernel/DataFilterTest.php @@ -8,10 +8,13 @@ use Drupal\Core\Datetime\Entity\DateFormat; use Drupal\Core\Entity\TypedData\EntityDataDefinition; use Drupal\Core\Render\BubbleableMetadata; use Drupal\Core\TypedData\DataDefinition; +use Drupal\filter\FilterProcessResult; +use Drupal\filter\Render\FilteredMarkup; use Drupal\KernelTests\KernelTestBase; use Drupal\file\Entity\File; use Drupal\filter\Entity\FilterFormat; use Drupal\node\Entity\Node; +use Drupal\text\TextProcessed; /** * Tests using typed data filters. @@ -302,6 +305,35 @@ class DataFilterTest extends KernelTestBase { $this->assertEquals('Test striptags filter', $filter->filter($data->getDataDefinition(), $data->getValue(), [])); } + /** + * @covers \Drupal\typed_data\Plugin\TypedDataFilter\StripTagsFilter + */ + public function testStripTagsFilterWithFilteredMarkup(): void { + $filter = $this->dataFilterManager->createInstance('striptags'); + $data = $this->typedDataManager->create(DataDefinition::create('string'), FilteredMarkup::create('<b>Test <em>striptags</em> filter</b>')); + + $this->assertTrue($filter->canFilter($data->getDataDefinition())); + $this->assertEquals('Test striptags filter', $filter->filter($data->getDataDefinition(), $data->getValue(), [])); + } + + /** + * @covers \Drupal\typed_data\Plugin\TypedDataFilter\StripTagsFilter + */ + public function testStripTagsFilterWithProcessedtext(): void { + $filter = $this->dataFilterManager->createInstance('striptags'); + + $dataDefinition = DataDefinition::create('string'); + $dataDefinition->setComputed(TRUE); + $dataDefinition->setClass(TextProcessed::class); + $dataDefinition->setSetting('text source', 'value'); + + $value = new FilterProcessResult('<b>Test <em>striptags</em> filter</b>'); + $data = $this->typedDataManager->create($dataDefinition, $value); + + $this->assertTrue($filter->canFilter($data->getDataDefinition())); + $this->assertEquals('Test striptags filter', $filter->filter($data->getDataDefinition(), $data->getValue(), [])); + } + /** * @covers \Drupal\typed_data\Plugin\TypedDataFilter\EntityUrlFilter */