All notable changes to this project will be documented in this file, in reverse chronological order by release.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- #96 adds the methods
Zend\Feed\Reader\Extension\Podcast\Entry::getTitle() : string
andZend\Feed\Writer\Extension\ITunes\Entry::setTitle(string $value)
; these provide the ability to read and manipulate<itunes:title>
tags in feeds.
- Nothing.
-
#101 deprecates the method
Zend\Feed\Writer\Writer::lcfirst()
; use the PHP built-in function instead. -
#97 deprecates the classes
Zend\Feed\Reader\AbstractEntry
(useZend\Feed\Reader\Entry\AbstractEntry
instead),Zend\Feed\Reader\AbstractFeed
(useZend\Feed\Reader\Feed\AbstractFeed
instead), andZend\Feed\Reader\Collection
(use Zend\Feed\Reader\Collection\Author,
Zend\Feed\Reader\Collection\Category, or
Zend\Feed\Reader\Collection\Collection` instead, based on context).
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
-
#99 provides a fix to
Zend\Feed\Writer\Renderer\Entry\Rss
to ensure that relative URIs provided for the feed disable theisPermalink
flag. -
#100 fixes parameter and return value annotations for a number of classes to specify the correct types.
-
#94 adds support for PHP 7.3.
-
#91 adds explicit requirements for both ext-dom and ext-libxml to the package.
- #93
Writer\Feed
,Writer\Entry
andWriter\Deleted
all now acceptDateTimeImmutable
instances as an arguments to methods that previously only acceptedDateTime
or Unix Timestamps, such asWriter\Feed::setDateModified()
.
- Nothing.
- #94 removes support for zend-stdlib v2 releases.
- Nothing.
- Nothing.
-
This release modifies how
Zend\Feed\Pubsubhubbub\AbstractCallback::_detectCallbackUrl()
marshals the request URI. In prior releases, we would attempt to inspect theX-Rewrite-Url
andX-Original-Url
headers, using their values, if present. These headers are issued by the ISAPI_Rewrite module for IIS (developed by HeliconTech). However, we have no way of guaranteeing that the module is what issued the headers, making it an unreliable source for discovering the URI. As such, we have removed this feature in this release.The method is not called internally. If you are calling the method from your own extension and need support for ISAPI_Rewrite, you will need to override the method as follows:
protected function _detectCallbackUrl() { $callbackUrl = null; if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { $callbackUrl = $_SERVER['HTTP_X_REWRITE_URL']; } if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) { $callbackUrl = $_SERVER['HTTP_X_ORIGINAL_URL']; } return $callbackUrl ?: parent::__detectCallbackUrl(); }
If you use an approach such as the above, make sure you also instruct your web server to strip any incoming headers of the same name so that you can guarantee they are issued by the ISAPI_Rewrite module.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
-
#81 updates the
Zend\Feed\Reader\Reader
andZend\Feed\Writer\Writer
classes to conditionally register their respective "GooglePlayPodcast" extensions only if their extension managers are aware of it. This is done due to the fact that existingExtensionManagerInterface
implementations may not register it by default as the extension did not exist in releases prior to 2.10.0. By having the registration conditional, we prevent an exception from being raised; users are not impacted by its absence, as the extension features were not exposed previously.Both
Reader
andWriter
emit anE_USER_NOTICE
when the extension is not found in the extension manager, indicating that theExtensionManagerInterface
implementation should be updated to add entries for the "GooglePlayPodcast" entry, feed, and/or renderer classes.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- #79 fixes an issue in the
setType()
method of the iTunes feed renderer whereby it was setting the DOM content with an uninitialized variable.
-
#78 adds support for the Google Play Podcasts 1.0 DTD in both the Reader and Writer subcomponents. The following new classes provide the support:
Zend\Feed\Reader\Extension\GooglePlayPodcast\Entry
Zend\Feed\Reader\Extension\GooglePlayPodcast\Feed
Zend\Feed\Writer\Extension\GooglePlayPodcast\Entry
Zend\Feed\Writer\Extension\GooglePlayPodcast\Feed
Zend\Feed\Writer\Extension\GooglePlayPodcast\Renderer\Entry
Zend\Feed\Writer\Extension\GooglePlayPodcast\Renderer\Feed
The extensions are registered by default with both
Zend\Feed\Reader\Reader
andZend\Feed\Writer\Writer
. -
#77 adds support for
itunes:image
for each of:Zend\Feed\Reader\Extension\Podcast\Entry
, viagetItunesImage()
; previously only theFeed
supported it.Zend\Feed\Writer\Extension\ITunes\Entry
, viasetItunesImage()
; previously only theFeed
supported it.Zend\Feed\Writer\Extension\ITunes\Renderer\Entry
; previously on theFeed
supported it.
-
#75 adds
Zend\Feed\Writer\Extension\ITunes\Entry::setItunesSeason()
, corresponding to theitunes:season
tag, and allowing setting the season number of the episode the entry represents. -
#75 adds
Zend\Feed\Writer\Extension\ITunes\Entry::setItunesIsClosedCaptioned()
, corresponding to theitunes:isClosedCaptioned
tag, and allowing setting the status of closed captioning support in the episode the entry represents. -
#75 adds
Zend\Feed\Writer\Extension\ITunes\Entry::setItunesEpisodeType()
, corresponding to theitunes:episodeType
tag, and allowing setting the type of episode the entry represents (one of "full", "trailer", or "bonus", and defaulting to "full"). -
#75 adds
Zend\Feed\Writer\Extension\ITunes\Entry::setEpisode()
, corresponding to theitunes:episode
tag, and allowing setting the number of the episode the entry represents. -
#75 adds
Zend\Feed\Writer\Extension\ITunes\Feed::setItunesComplete()
, corresponding to theitunes:complete
tag. It allows setting a boolean flag, indicating whether or not the podcast is complete (will not air new episodes). -
#75 adds
Zend\Feed\Writer\Extension\ITunes\Feed::setItunesType()
, corresponding to theitunes:type
tag, and allowing setting the podcast type (one of "serial" or "episodic"). -
#75 adds
Zend\Feed\Reader\Extension\Podcast\Entry::getEpisodeType()
, corresponding to theitunes:episodeType
tag, and returning the type of episode the entry represents (one of "full", "trailer", or "bonus", and defaulting to "full"). -
#75 adds
Zend\Feed\Reader\Extension\Podcast\Entry::getSeason()
, corresponding to theitunes:season
tag, and returning the season number of the episode the entry represents. -
#75 adds
Zend\Feed\Reader\Extension\Podcast\Entry::isClsoedCaptioned()
, corresponding to theitunes:isClosedCaptioned
tag, and returning the status of closed captioning in the episode the entry represents. -
#75 adds
Zend\Feed\Reader\Extension\Podcast\Entry::getEpisode()
, corresponding to theitunes:episode
tag, and returning the number of the episode the entry represents. -
#75 adds
Zend\Feed\Reader\Extension\Podcast\Feed::isComplete()
, corresponding to theitunes:complete
tag. It returns a boolean, indicating whether or not the podcast is complete (will not air new episodes). -
#75 adds
Zend\Feed\Reader\Extension\Podcast\Feed::getPodcastType()
, corresponding to theitunes:type
tag, and providing the podcast type (one of "serial" or "episodic", defaulting to the latter).
- #77 updates URI validation for
Zend\Feed\Writer\Extension\ITunes\Feed::setItunesImage()
to first check that we have received a string value before proceeding.
- #75 deprecates each of:
Zend\Feed\Reader\Extension\Podcast\Entry::getKeywords()
Zend\Feed\Reader\Extension\Podcast\Feed::getKeywords()
Zend\Feed\Writer\Extension\ITunes\Entry::setKeywords()
Zend\Feed\Writer\Extension\ITunes\Feed::setKeywords()
as the iTunes Podcast RSS specification no longer supports keywords.
- Nothing.
- Nothing.
- Nothing.
- #16 updates the
Zend\Feed\Pubsubhubbub\AbstractCallback
to no longer use the$GLOBALS['HTTP_RAW_POST_DATA']
value as a fallback whenphp://input
is empty. The fallback existed because, prior to PHP 5.6,php://input
could only be read once. As we now require PHP 5.6, the fallback is unnecessary, and best removed as the globals value is deprecated.
- Nothing.
- Nothing.
-
#68 fixes the behavior of
Zend\Feed\Writer\AbstractFeed::setTitle()
andZend\Feed\Writer\Entry::setTitle()
to accept the string"0"
. -
#68 updates both
Zend\Feed\Writer\AbstractFeed
andZend\Feed\Writer\Entry
to no longer throw an exception for entry titles which have a string value of0
.
-
#52 adds support for PHP 7.2
-
#53 adds a number of additional aliases to the
Writer\ExtensionPluginManager
to ensure plugins will be pulled as expected. -
#63 adds the feed title to the attributes incorporated in the
FeedSet
instance, per what was already documented. -
#55 makes two API additions to the
StandaloneExtensionManager
implementations of both the reader and writer subcomponents:$manager->add($name, $class)
will add an extension class using the provided name.$manager->remove($name)
will remove an existing extension by the provided name.
- Nothing.
- Nothing.
- #52 removes support for HHVM.
- #50 fixes a few issues
in the PubSubHubbub
Subscription
model where counting was being performed on uncountable data; this ensures the subcomponent will work correctly under PHP 7.2.
- #27 adds a documentation
chapter demonstrating wrapping a PSR-7 client to use with
Zend\Feed\Reader
. - #22 adds missing ExtensionManagerInterface on Writer\ExtensionPluginManager.
- #32 adds missing ExtensionManagerInterface on Reader\ExtensionPluginManager.
- Nothing.
- #38 dropped php 5.5 support
- #35 fixed "A non-numeric value encountered" in php 7.1
- #39 fixed protocol relative link absolutisation
- #40 fixed service manager v3 compatibility aliases in extension plugin managers
- #21 edits, revises, and prepares the documentation for publication at https://zendframework.github.io/zend-feed/
- Nothing.
- Nothing.
- #20 makes the two zend-servicemanager extension manager implementations forwards compatible with version 3, and the overall code base forwards compatible with zend-stdlib v3.
- #13 introduces
Zend\Feed\Writer\StandaloneExtensionManager
, an implementation ofZend\Feed\Writer\ExtensionManagerInterface
that has no dependencies.Zend\Feed\Writer\ExtensionManager
now composes this by default, instead ofZend\Feed\Writer\ExtensionPluginManager
, for managing the various feed and entry extensions. If you relied onExtensionPluginManager
previously, you will need to create an instance manually and inject it into theWriter
instance. - #14 introduces:
Zend\Feed\Reader\Http\HeaderAwareClientInterface
, which extendsClientInterface
and adds an optional argument to theget()
method,array $headers = []
; this argument allows specifying request headers for the client to send.$headers
should have header names for keys, and the values should be arrays of strings/numbers representing the header values (if only a single value is necessary, it should be represented as an single value array).Zend\Feed\Reader\Http\HeaderAwareResponseInterface
, which extendsResponseInterface
and adds the methodgetHeader($name, $default = null)
. Clients may return either aResponseInterface
orHeaderAwareResponseInterface
instance.Zend\Feed\Reader\Http\Response
, which is an implementation ofHeaderAwareResponseInterface
. Its constructor accepts the status code, body, and, optionally, headers.Zend\Feed\Reader\Http\Psr7ResponseDecorator
, which is an implementation ofHeaderAwareResponseInterface
. Its constructor accepts a PSR-7 response instance, and the various methdos then proxy to those methods. This should make creating wrappers for PSR-7 HTTP clients trivial.Zend\Feed\Reader\Http\ZendHttpClientDecorator
, which decorates aZend\Http\Client
instance, implementsHeaderAwareClientInterface
, and returns aResponse
instance seeded from the zend-http response upon callingget()
. The class exposes agetDecoratedClient()
method to allow retrieval of the decorated zend-http client instance.
- Nothing.
- Nothing.
- #5 fixes the enclosure length check to allow zero and integer strings.
- #2 ensures that the
routine for "absolutising" a link in
Reader\FeedSet
always generates a URI with a scheme. - #14 makes the following
changes to fix behavior around HTTP clients used within
Zend\Feed\Reader\Reader
:setHttpClient()
now ensures that the passed client is either aZend\Feed\Reader\Http\ClientInterface
orZend\Http\Client
, raising anInvalidArgumentException
if neither. If aZend\Http\Client
is passed, it is passed to the constructor ofZend\Feed\Reader\Http\ZendHttpClientDecorator
, and the decorator instance is used.getHttpClient()
now always returns aZend\Feed\Reader\Http\ClientInterface
instance. If no instance is currently registered, it lazy loads aZendHttpClientDecorator
instance.import()
was updated to consume aClientInterface
instance; when caches are in play, it checks the client againstHeaderAwareClientInterface
to determine if it can check for HTTP caching headers, and, if so, to retrieve them.findFeedLinks()
was updated to consume aClientInterface
.