From 9a4a03eada6226b56ddcf6e23428960071f87e53 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalewski Date: Thu, 29 Aug 2024 12:41:27 +0200 Subject: [PATCH] OXDEV-7182 Move HtmlFilter classes into the module --- CHANGELOG.md | 4 +- services.yaml | 1 + src/HtmlFilter/HtmlFilter.php | 43 +++++++++++++++++++ src/HtmlFilter/HtmlFilterInterface.php | 15 +++++++ src/HtmlFilter/HtmlRemoverInterface.php | 17 ++++++++ .../HtmlTagRemover.php | 3 +- src/HtmlFilter/services.yaml | 12 ++++++ src/Service/EditorRenderer.php | 2 +- src/Service/services.yaml | 10 ----- .../HtmlTagRemoverTest.php | 4 +- 10 files changed, 94 insertions(+), 17 deletions(-) create mode 100644 src/HtmlFilter/HtmlFilter.php create mode 100644 src/HtmlFilter/HtmlFilterInterface.php create mode 100644 src/HtmlFilter/HtmlRemoverInterface.php rename src/{Service => HtmlFilter}/HtmlTagRemover.php (82%) create mode 100644 src/HtmlFilter/services.yaml rename tests/Unit/{Service => HtmlFilter}/HtmlTagRemoverTest.php (94%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f70137..3948370 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [4.0.1] - unreleased +## [4.1.0] - unreleased ### Fixed - Pre-filter CMS content before it is passed to Summernote editor ### Added -- `HtmlTagRemover` class +- `HtmlFilter` and `HtmlTagRemover` class ## [4.0.0] - 2024-03-12 diff --git a/services.yaml b/services.yaml index 07393ee..62cead9 100644 --- a/services.yaml +++ b/services.yaml @@ -1,5 +1,6 @@ imports: - { resource: src/Service/services.yaml } + - { resource: src/HtmlFilter/services.yaml } services: _defaults: diff --git a/src/HtmlFilter/HtmlFilter.php b/src/HtmlFilter/HtmlFilter.php new file mode 100644 index 0000000..21bc0ae --- /dev/null +++ b/src/HtmlFilter/HtmlFilter.php @@ -0,0 +1,43 @@ +loadHTML("
$html
", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + + $xpath = new DOMXPath($doc); + foreach ($xpath->query('//script') as $node) { + $this->htmlRemover->remove($node); + } + + return $this->getInnerHtml($doc); + } + + private function getInnerHtml(DOMDocument $doc): string + { + $html = ''; + foreach ($doc->documentElement->childNodes as $node) { + $html .= $doc->saveHTML($node); + } + + return $html; + } +} diff --git a/src/HtmlFilter/HtmlFilterInterface.php b/src/HtmlFilter/HtmlFilterInterface.php new file mode 100644 index 0000000..47a8678 --- /dev/null +++ b/src/HtmlFilter/HtmlFilterInterface.php @@ -0,0 +1,15 @@ +