summaryrefslogtreecommitdiff
path: root/includes/classes/FeedHtmlField.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/classes/FeedHtmlField.php')
-rwxr-xr-xincludes/classes/FeedHtmlField.php70
1 files changed, 70 insertions, 0 deletions
diff --git a/includes/classes/FeedHtmlField.php b/includes/classes/FeedHtmlField.php
new file mode 100755
index 0000000..a5b37cb
--- /dev/null
+++ b/includes/classes/FeedHtmlField.php
@@ -0,0 +1,70 @@
+<?php
+namespace Bitweaver\Rss;
+
+/**
+ * @package rss
+ * An FeedHtmlField describes and generates
+ * a feed, item or image html field (probably a description). Output is
+ * generated based on $truncSize, $syndicateHtml properties.
+ * @author Pascal Van Hecke <feedcreator.class.php@vanhecke.info>
+ * @version 1.6
+ */
+class FeedHtmlField {
+ /**
+ * Mandatory attributes of a FeedHtmlField.
+ */
+ public $rawFieldContent;
+
+ /**
+ * Optional attributes of a FeedHtmlField.
+ *
+ */
+ public $truncSize;
+ public $syndicateHtml;
+
+ /**
+ * Creates a new instance of FeedHtmlField.
+ * @param $string: if given, sets the rawFieldContent property
+ */
+ public function __construct($parFieldContent) {
+ if ($parFieldContent) {
+ $this->rawFieldContent = $parFieldContent;
+ }
+ }
+
+ /**
+ * Creates the right output, depending on $truncSize, $syndicateHtml properties.
+ * @return string the formatted field
+ */
+ public function output() {
+ // when field available and syndicated in html we assume
+ // - valid html in $rawFieldContent and we enclose in CDATA tags
+ // - no truncation (truncating risks producing invalid html)
+ if (!$this->rawFieldContent) {
+ $result = "";
+ } elseif ($this->syndicateHtml) {
+ // Clean HTML before wrapping in CDATA
+ $cleaned = $this->sanitizeHtml( $this->rawFieldContent );
+ $result = "<![CDATA[$cleaned]]>";
+ } else {
+ $result = ( $this->truncSize and is_int( $this->truncSize ) ) ? FeedCreator::iTrunc( htmlspecialchars( $this->rawFieldContent ), $this->truncSize ) : htmlspecialchars( $this->rawFieldContent );
+ }
+ return $result;
+ }
+
+ /**
+ * Sanitize HTML for RSS syndication - keep content, strip Bootstrap wrappers
+ */
+ private function sanitizeHtml( $html ) {
+ // Remove Bootstrap wrapper divs
+ $html = preg_replace( '/<div[^>]*class="(container|row|col-[^"]*)"[^>]*>/', '', $html );
+ $html = preg_replace( '/<\/div>/', '', $html );
+
+ // Keep formatting, images, links; strip everything else
+ return preg_replace(
+ '/\s+/',
+ ' ',
+ strip_tags( $html, '<p><br><img><strong><em><a><blockquote><ul><ol><li>' )
+ );
+ }
+}