diff options
Diffstat (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php')
-rw-r--r-- | vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php b/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php index 23b1103ad..66b3470f8 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php @@ -13,6 +13,22 @@ use \PicoFeed\Client\Url; class Attribute { /** + * Image proxy url + * + * @access private + * @var string + */ + private $image_proxy_url = ''; + + /** + * Image proxy callback + * + * @access private + * @var \Closure|null + */ + private $image_proxy_callback = null; + + /** * Tags and attribute whitelist * * @access private @@ -204,10 +220,11 @@ class Attribute 'filterEmptyAttribute', 'filterAllowedAttribute', 'filterIntegerAttribute', - 'filterAbsoluteUrlAttribute', + 'rewriteAbsoluteUrl', 'filterIframeAttribute', 'filterBlacklistResourceAttribute', 'filterProtocolUrlAttribute', + 'rewriteImageProxyUrl', ); /** @@ -349,7 +366,7 @@ class Attribute * @param string $value Atttribute value * @return boolean */ - public function filterAbsoluteUrlAttribute($tag, $attribute, &$value) + public function rewriteAbsoluteUrl($tag, $attribute, &$value) { if ($this->isResource($attribute)) { $value = Url::resolve($value, $this->website); @@ -359,6 +376,30 @@ class Attribute } /** + * Rewrite image url to use with a proxy + * + * @access public + * @param string $tag Tag name + * @param string $attribute Atttribute name + * @param string $value Atttribute value + * @return boolean + */ + public function rewriteImageProxyUrl($tag, $attribute, &$value) + { + if ($tag === 'img' && $attribute === 'src') { + + if ($this->image_proxy_url) { + $value = sprintf($this->image_proxy_url, urlencode($value)); + } + else if (is_callable($this->image_proxy_callback)) { + $value = call_user_func($this->image_proxy_callback, $value); + } + } + + return true; + } + + /** * Return true if the scheme is authorized * * @access public @@ -484,7 +525,7 @@ class Attribute } /** - * Set whitelisted tags adn attributes for each tag + * Set whitelisted tags and attributes for each tag * * @access public * @param array $values List of tags: ['video' => ['src', 'cover'], 'img' => ['src']] @@ -586,4 +627,32 @@ class Attribute $this->iframe_whitelist = $values ?: $this->iframe_whitelist; return $this; } + + /** + * Set image proxy URL + * + * The original image url will be urlencoded + * + * @access public + * @param string $url Proxy URL + * @return \PicoFeed\Filter\Filter + */ + public function setImageProxyUrl($url) + { + $this->image_proxy_url = $url ?: $this->image_proxy_url; + return $this; + } + + /** + * Set image proxy callback + * + * @access public + * @param \Closure $callback + * @return \PicoFeed\Filter\Filter + */ + public function setImageProxyCallback($callback) + { + $this->image_proxy_callback = $callback ?: $this->image_proxy_callback; + return $this; + } } |