= 4.0.15 =

- security: add nonces to jobs management

= 4.0.14 =

- add: migrate episode license selector user interface
- change: show unknown duration as "--:--:--.---" instead of "00:00:00.000"
- fix: auto-generate file slug from episode-post-title
- fix: ensure slug field is always usable (wide enough, and prefix shortened if necessary)
- security: fix SQL injection vulnerability in Related Episodes module
- security: ensure only administrators can manage jobs

= 4.0.13 =

**Features**

- Templates: new `active` accessor for `File` objects. Returns if the file is marked as active.

**Bugfixes and Improvements**

- fix: don't use the Auphonic chapter image URL (real fix where chapter images are downloaded and served from WordPress will follow later)
- fix: only display active files in download widgets
- improve handling of upload directory

= 4.0.12 =

**Security**

- fix SSRF vulnerability in Slacknotes module
- add missing capability check and nonce validation to importer functions
- add missing capability check and nonce validation to exporter functions

= 4.0.11 =

- new: show admin notice when a database migration fails
- fix bug where tracking data could be lost by disabling a media file checkbox
- fix bug where imported Hindenburg chapters were not sorted by time
- fix build script (correctly delete all vendor prefixed dependencies)
- fix deprecation warnings ([#1431](https://github.com/podlove/podlove-publisher/pull/1431), [#1430](https://github.com/podlove/podlove-publisher/pull/1430))
- update js dependencies
- update help text for missing curl module

= 4.0.10 =

- fix security issues (XSS)
- do not unnecessarily flush rewrite rules ([Issue#1432](https://github.com/podlove/podlove-publisher/issues/1432))
- fix link to Slacknotes and Subscribe Button documentation
- fix psr library not removed after prefixing ([Issue#1421](https://github.com/podlove/podlove-publisher/issues/1421))

= 4.0.9 =

**Enhancements**

- trim whitespaces from beginning and end of file slug
- soundbite: change placeholder to HH:MM:SS to clarify format

**Bugfixes**

- fix division by zero in analytics
- fix default contributors missing position attribute
- fix Auphonic chapter timestamp import
- fix page reload when clicking chapter upload button

= 4.0.8 =

**Bugfixes**

- fix broken analytics episode screen

= 4.0.7 =

**Bugfixes**

- fix media verification not saving
- fix shownotes unfurling
- avoid failure during database migration

**Misc**

- update/cleanup various js dependencies

= 4.0.6 =

**Bugfixes**

- Auphonic: saving production not working when slug is not set (bug introduced in 4.0.5)

= 4.0.5 =

**Bugfixes**


- Auphonic: restore previous behaviour:
  - automatically fill in file slug, validate media files and fill in duration when production finishes
  - use slug as "output_basename" if it is set

**Misc**

- cleanup legacy js app (dependency updates, deletion of unused code etc.)

= 4.0.3 / 4.0.4 =

**Enhancements**

- Auphonic: sort presets alphabetically
- Contributors: make better use of available space

**Bugfixes**

- episode metadata not saving reliably for some people
- Auphonic: fix chapter time import
- WordPress File Upload: display slug input (should be filled automatically but does not seem to work reliably)

= 4.0.2 =

**Bugfixes**

- Auphonic: Chapters can be imported from production metadata
- Contributors: Add support for Gravatar and default contributor image on edit screens
- Dashboard: Asset Validation / Detection is working again [#1396](https://github.com/podlove/podlove-publisher/issues/1396)
- Automatic Numbering: error when selecting a show

= 4.0.1 =

**Enhancements**

- Auphonic: autosave before "Start Production" so it is not required to explicitly save before starting

**Bugfixes**

- Auphonic: open productions with missing algorithm information
- Templates: fix broken core templates `downloads-select` and `related-episodes-list`
- Classic Editor: display Episode Title Placeholder based on Blog Post Title

= 4.0.0 =

Podlove Publisher 4.0 is here, bringing a spring-clean (in November!) of the episode page. We tore up the foundation to bring you an all-new user interface.

**Warning:** PHP 8.0 and above is now required!

**Highlights**

- **Episode Form** User Interface is modernised and auto-saves, so no work is ever lost.
- **Auphonic module** includes Multitrack Support.
- **New Contributors** can be added without leaving the episode page.
- **Chapters** support images.
- **REST API V2** is now, including many more endpoints. See the [API documentation](https://docs.podlove.org/podlove-publisher/api) for all the details.


**Tidbits**

- file “slug” field is prefixed with the media location so it’s more obvious what it is used for
- episode duration is always auto-detected and not an input field any more
- Auphonic Preset can be selected directly in the episode and does not rely on global module setting any more
- removed module “Twitter Card Integration” (RIP). By the way, if you want to follow us on social media, find us here: https://fosstodon.org/@podlove
- fix various PHP notices and warnings to be PHP 8.0+ compatible

= 3.8.11, 3.8.12 =

* fix: templates XHR issue in WP MultiSite
* fix: lists UI in WP MultiSite

= 3.8.10 =

* fix: templates UI in WP MultiSite

= 3.8.9 =

* fix broken encoding when saving episode meta

= 3.8.8 =

* fix broken RSS feeds

= 3.8.7 =

* improve PHP 8 compatibility
  * stop using FILTER_SANITIZE_STRING
  * set default encoding in DOMDocument
  * set default values in transcript template internals

* fix(plus): gracefully handle when things go wrong in image generator
* fix(shownotes): handle image providers returning lists
* fix subtle `get_the_excerpt` bug (uses post parameter now instead of the global post object)

= 3.8.6 =

* fix incompatibilities with matomo plugin ([#1308](https://github.com/podlove/podlove-publisher/pull/1308))

= 3.8.5 =

* fix PHP notice on episode screen

= 3.8.4 =

* fix CSRF vulnerabilities by adding nonces to forms

= 3.8.3 =

* fix XSS vulnerability

= 3.8.2 =

* add support for op3.dev using the "External Analytics" module
* update OPAWG data (for download analytics / user agent detection)
* improve PHP 8.1 compatibility

= 3.8.1 =

* fix(api): episode title -- Episode title in API now follows the same rules as in RSS feed. There's a new field 'title_clean' for accessing the specifically set plain episode title, but that might be null in some cases, so it's better to default the 'title' attribute to the usual rules.
* fix: auphonic preset for show applies after saving the episode
* fix: remove debug error log for a shows analytics query

= 3.8.0 =

**New module: Automatic Numbering**

Automatically increase the Episode number when creating episodes.
When using the "Shows" module, each show has its own numbering.

This module is active by default for new setups.
To use it in your current setup, go to `Podlove > Modules`, search for "Automatic Numbering" and activate it.

**Other Changes:**

- Shows Module: each show can define its own Auphonic production preset
- episode: after file revalidation, auto-detect duration
- contributors: assign a `Sponsor` role and it will appear as `<podcast:person ... role="sponsor">...` in the RSS feed
- fix: correct PHP version number in message (https://github.com/podlove/podlove-publisher/pull/1272)
- fix: feed cache issue when using the "Shows" module

= 3.7.0 =

**Shownotes**

The Shownotes module helps you manage link based show notes to display on your website and podcatchers.

The module UI has been rewritten and streamlined for efficient workflows.
A new UI element was added to allow for quickly sorting long lists of links into topics:
Whenever a link is dragged, a floating list of all topics appears next to the cursor.
The link can then be dropped under the desired topic there instead of scrolling through the whole list of shownotes.

Disclaimer: URL metadata detection uses a service hosted at [plus.podlove.org](https://plus.podlove.org). It is currently available for all users of Podlove Publisher. In the future, metadata detection may only be availabe to Publisher PLUS users as it requires infrastructure to run. The rest of the Shownotes functionality will stay available to all Podlove users as usual.

Documentation: https://docs.podlove.org/podlove-publisher/modules/shownotes

**Contributors**

* Notifications: add "always send to..." section. Contributors selected there will always receive update notifications.
* Avatars: default avatar is now a static svg instead of Gravatar (can be customized using the WordPress Filter `podlove_default_contributor_avatar_url`)

**Enhancements for creating Auphonic productions** (thanks [lumaxis](https://github.com/lumaxis)!):

* when the episode title is set, send this instead of the post title ([#1240](https://github.com/podlove/podlove-publisher/pull/1240))
* send the episode number as track number ([#1240](https://github.com/podlove/podlove-publisher/pull/1240))
* when the post thumbnail is configured as cover image, use it as direct fallback  ([#1241](https://github.com/podlove/podlove-publisher/pull/1241))

**Webhooks**

Define a webhook that gets triggered every time an episode updates.

The webhook is a `POST` request with an `event` parameter and a `payload`.
`event` is the webhook name ("episode_updated"), `payload` is a serialized
JSON object of the current episode.

Configuration:

    # wp-config.php
    define('PODLOVE_WEBHOOKS', [
        'episode_updated' => 'https://example.com/webhook-endpoint'
    ]);

**Other Changes**

* soundbites: add title field ([#1257](https://github.com/podlove/podlove-publisher/pull/1257), [#1237](https://github.com/podlove/podlove-publisher/issues/1237))
* allow detection of episode duration on mp4 ([#1249](https://github.com/podlove/podlove-publisher/pull/1249))
* update OPAWG data (for download analytics / user agent detection)

**Fixes**

* fix: parameters for shortcode `[podlove-episode-contributor-list]` ([#1233](https://github.com/podlove/podlove-publisher/issues/1233))
* fix: PHP 8 warnings ([#1258](https://github.com/podlove/podlove-publisher/issues/1258))
* fix: deleting an episode deletes its transcript from the database ([#1252](https://github.com/podlove/podlove-publisher/issues/1252))
* fix(contributors): notification test email ([#1247](https://github.com/podlove/podlove-publisher/issues/1247))
* fix(analytics): filtering of httprange requests with one or two bytes ([#1243](https://github.com/podlove/podlove-publisher/issues/1243))
* fix(image cache): redirect to source URL if image can't be downloaded into the cache

= 3.6.1 =

* fix: sql issue when creating the episode database tables

= 3.6.0 =

**New Module: Soundbite**

Adds support for the `<podcast:soundbite>` RSS feed tag.
The intended use includes episodes previews, discoverability, audiogram generation, episode highlights, etc.

Using this module you can specify an audio segment for each episode that can be read by for example audiogram generation services.

**New Module: WordPress File Upload**

If you are using WordPress Media as storage for your Podlove assets, this new
module adds conveniences.

First, you define a `Upload subdirectory` for your Podlove assets. This overrides
any WordPress settings, so for example you can safely enable the typical date/month
structure for WordPress attachments and it will not affect your Podlove Uploads.

Then you can update your "Podlove - Media - Upload Location" setting. You can keep
it empty to let Podlove Publisher take care of it, or set it yourself if you have
a custom file hostname.

Now there is an "Upload Media File" button in your episode form above
the "Episode Media File Slug" where you can directly upload your files.
If you are using multiple assets, you can upload them all there. Just make sure
they all have the same filename (except the file extension) before you upload.

= 3.5.5, 3.5.6 =

**Fixes**

* SECURITY: sql injection in "Social & Donations" module
* transcript API returns list again
* PLUS open graph images (use new API)
* handle webvtt voice, missing Contributors
* related episodes: remove whitespace in shortcode HTML to fix rendering in Spotify

**Changes**

* webvtt transcripts use public contributor name
* transcript voices / contributors:
  * you can now select "none" in the voice assignment
  * only voices with an assigned contributor (and not "none") appear in public transcripts
* generate default copyright claim if it is not explcitly set

= 3.5.4 =

* adds copyright field in "Podcast Settings - Directory", which is apparently required by the Apple Podcast Directory since yesterday.
* perf: remove frontend.js (inline logic to download button HTML)

= 3.5.2 / 3.5.3 =

This releases reverses all changes to Permalinks in releases 3.5.0 and 3.5.1.

I severely underestimated the effect these changes would have and revert all changes until I find a better solution. It’s simply not acceptable to change episode URLs, especially without an option for automatic redirects.

Please verify your episode URLs and the two expert settings “Permalink structure for episodes” and “Episode Pages”.

What to do if you have used the “PODLOVE_ENABLE_PERMALINK_MAGIC” constant? It has no effect any more and you can safely remove it from your config file.

What happened to the “Simple Episode Permalink” setting from release 3.5.1? It has been removed, too.

Sorry for the trouble.
Happy podcasting :)

**Other**

* fix: remove usage of PHP 7.1 syntax in one file

= 3.5.1 =

= 2021-04-14 =

* add: expert setting to make episode permalinks `/%postname%/`
* add: include Publisher Database Version in system report
* drop WordPress version requirement to 4.9.6

= 3.5.0 =

**Breaking Change**

Removes two expert settings:

* "Permalink structure for episodes" and
* "Episode pages"

These settings allowed to define custom URL structures for episodes and the episode archive.
However they have caused trouble for a long time (see [#1038](https://github.com/podlove/podlove-publisher/issues/1038))
and the only viable way out seems to remove them.

How does that affect you?

If you have never touched these settings, feel free to shrug, smile and move on.

If you _are_ using these settings, I encourage you to consider not using them as they are mostly of cosmetic nature.
Should you however prefer to keep everything as is (including the known bugs of erratically broken permalinks / URLs), you can
enable the settings back with a single line of code in your wp-config.php:

    `define('PODLOVE_ENABLE_PERMALINK_MAGIC', true);`

**Experimental: Full-Page Podlove Templates**

If you want to create a 100% custom page based on an episode but without all the WordPress theme around, this is for you.
Possible use case: A dedicated page to print the episode transcript.

1. create a new Podlove Template, for example `page-episode-transcipt`
2. Write that transcript as a _full HTML page_. That means it starts with `<!doctype html><html>` and ends with `</html>`!
3. Append `?podlove_template_page=page-episode-transcipt` to your public episode URL. For example if your episode is `https://example.com/ep001/`, then open `https://example.com/ep001/?podlove_template_page=page-episode-transcipt`

Very simple example template:

    <!doctype html>
    <html>

    <head>
      <meta charset="utf-8">
      <title>Transcript | {{ episode.title }} | {{ podcast.title }}</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>

    <body>

      <p>
        Here's the transcript for podcast <strong>{{ podcast.title }}</strong> episode <strong>{{ episode.title }}</strong>:
      </p>

      [podlove-transcript]

    </body>

    </html>

Enjoy!

**Shownotes Module**

* provide website screenshot as fallback when no sharing image is available (requires PLUS token)
* show images
* show image in edit view
* when importing, show all entries
* show import progress when unfurling
* fix osf importer
* fix encoding issue when importing from HTML

**Miscellaneous**

* update database for podcast user agents -- notably includes classification of Apple Watch downloads as bot [#1203](https://github.com/podlove/podlove-publisher/issues/1203)
* transcript: add some basic info about podcast and episode into webvtt as a note
* analytics: add hook `podlove_useragent_opawg_data` to add custom user agent detection
* Podlove Templates: add `dataUri` method to images. Takes same arguments as `url` but returns a data uri. Useful if you want to generate a self-contained HTML page. If you're not sure, better use `url`.
* fix: transcripts with trailing newlines don't confuse the importer
* fix: don't count contributors multiple times if they have multiple contributions in an episode ([#1200](https://github.com/podlove/podlove-publisher/issues/1200))
* fix: calling wptexturize too early ([#1194](https://github.com/podlove/podlove-publisher/issues/1194))

= 3.4.1 =

* fix: analytics shows section now does not include other taxonomies
* use image caching for shownotes images
* analytics shows section is now ordered by downloads

= 3.4.0 =

**podcastindex namespace**

Both additions add metadata to the feed automatically if the data is present. No new user interfaces or data entry is necessary.

* add support for feed tag [`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript), linking to the transcript in various formats (json, webvtt, xml)
* add support for feed tag [`podcast:person`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#person) on episode level

**analytics**

* for selected date range, total downloads are shown
* for selected date range, display downloads per show (only visible when shows module is enabled)

= 3.3.2 =

* fix: in analytics, the "Export as CSV" section is now clickable when global statistics are loading or have no data
* fix: "Export as CSV" works again
* fix: "global statistics" charts idling indefinitely until a custom date range is chosen

= 3.3.0 / 3.3.1 =

* add support for feed tag [`podcast:funding`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#funding) (see Podcast Settings -> Directory)
* unfurl uses https://plus.podlove.org/api/unfurl as API endpoint
* add banner linking to donations page (can be dismissed)
* shownotes:
  * add shortcode `[podlove-episode-shownotes]`
  * display links even if unfurling failed
  * template improvements
  * add "delete all" button
  * polished failure section UI and allow editing original URL
  * API: add missing permission callbacks
  * fix: keep order when importing via slacknotes
* slacknotes: update to new API
* change donation URL to https://opencollective.com/podlove
* fix: handle missing templates in TwigLoaderPodloveDatabase

= 3.2.2 =

* fix: crash when creating new episodes

= 3.2.1 =

* fix: coverart url encoding [#1181](https://github.com/podlove/podlove-publisher/pull/1181)
* fix: some settings not applying to episode title tag (thanks Dirk)
* fix: crash when accessing season data for an episode without season

= 3.2.0 =

* when automatically generated episode titles are used, use the blogpost title as fallback for the episode title
* fix: disable slug auto-updating after importing from Auphonic
* fix: webvtt-parser autoloading issues [#1175](https://github.com/podlove/podlove-publisher/issues/1175)
* fix: escape ampersands in itunes:image hrefs in the feed [#1176](https://github.com/podlove/podlove-publisher/issues/1176) (fixes incompatibilities with Jetpack image CDN)

= 3.1.* =

* fix twig namespace prefixing related issues
* remove unused vendor-bin directory from releases

= 3.1.1 =

* tracking: fix operating systems appearing twice in different spellings
* chore: prefix all composer packages (solves Twig related incompatibilities & crashes)
* chore: add content and files to episodes api (#1165)

= 3.1.0 =

* analytics: new chart showing download development from episode to episode [#1100](https://github.com/podlove/podlove-publisher/pull/1100/files) thanks [@poschi3](https://github.com/poschi3)!
* Auphonic: show production warnings in module (https://twitter.com/auphonic/status/1305849345762185217)
* download tracking: use OPAWG podcast user agent database in addition to Matomo database
* stability: detect plugins using older/incompatible versions of Twig. Display a warning on the site (instead of an error) and a detailed explanation on "Podlove > Support" screen.
* enhance: podcast file validation in dashboard includes all post stati and checks for missing slug [#1161](https://github.com/podlove/podlove-publisher/pull/1161)
* enhance: only allow episode numbers of 0 and higher in form input [#1158](https://github.com/podlove/podlove-publisher/pull/1158)
* api: add public endpoint for transcripts
* api: add public endpoint for shownotes
* fix: Podlove Web Player 5 includes all downloadable assets in download section
* fix: transcript API URL [#1145](https://github.com/podlove/podlove-publisher/pull/1145) thanks [gibso](https://github.com/gibso)!
* fix: editing/deleting shows ([#1077](https://github.com/podlove/podlove-publisher/issues/1077))
* fix: episodes and shows API
* fix: migration for Shownotes only when the database table exists

= 3.0.4 =

* fix: contributor notifications settings can be saved again ([#1144](https://github.com/podlove/podlove-publisher/issues/1144))
* fix: do not include invisible contributors in Web Player 5 API ([#1142](https://github.com/podlove/podlove-publisher/issues/1142))
* fix: detect Yoast SEO, wpSEO: disables Open Graph module ([#1132](https://github.com/podlove/podlove-publisher/issues/1132))
* fix: use podcast summary as RSS Feed `<description>` if subtitle is not set ([#1092](https://github.com/podlove/podlove-publisher/issues/1092))

= 3.0.3 =

* fix: title escaping in RSS feed when using native (not auto-generated) titles

= 3.0.2 =

* add: Untappd social service
* fix: Auphonic module (wrong HTTP API headers)
* chore: update npm dependencies

= 3.0.1 =

* fix: escaping issue in RSS feed (itunes:author and itunes:owner)
* fix: remove (rare) accidental double enclosure tag in RSS feed when "enclosure" post meta is present

= 3.0.0 =

**Breaking Changes**

* requires PHP 7.0 (or newer)
* requires WordPress 5.2 (or newer)
* Web Player:
  * removes Podlove Web Player 2
  * removes Podlove Web Player 3
  * removes "insert player automatically" option (probably does not affect anyone as the web player is by default inserted via template)
  * removes "Chapters Visibility" option (use dedicated Web Player settings instead)

**New Publisher PLUS**

=> [plus.podlove.org](https://plus.podlove.org/)

Publisher PLUS is a new service providing Feed Proxy and Podcast Subscriber statistics for Podlove Publisher.

To use it, enable the *Publisher PLUS* module, then visit [plus.podlove.org](https://plus.podlove.org/) to create an account.

Subscriber Statistics are only the beginning. Expect more features soon!

**Experimental: Shownotes**

Generate and manage episode show notes. Helps you provide rich metadata for URLs. Full support for Publisher Templates.

This module is a work-in-progress. But it's usable, so feel free to give it a try, especially if your shownotes are link-heavy and you're comfortable writing Podlove (Twig) templates.

The module is currently hidden. Make it visible by setting a PHP constant, for example in your `wp-config.php`: `define('PODLOVE_MODULE_SHOWNOTES_VISBLE', true);`.

Use this template as a starting point: https://gist.github.com/eteubert/d6c51c52372dc2da2f1734a5f54c7918

**Shortcodes**

* `podlove-episode-contributor-list`
  * new design
  * renders text-only in RSS feed
* `podlove-podcast-contributor-list`
  * new design
* `podlove-episode-downloads`
  * the text link variant is now the default style

**Miscellaneous**

* remove Bitlove module (service does not exist any more)
* remove Flattr module
* remove "Website Protocol" setting (not necessary any more as Let's Encrypt is widely supported)
* enable episode chapters by default
* convenience: "Copy to Clipboard" function for Podlove Template shortcodes
* expose iTunes id/URL in podcast feed ([#1078](https://github.com/podlove/podlove-publisher/pull/1078))
* improve feed rendering: use XML generator for all tags with user input to guarantee valid feeds for all inputs
* add function to remove a transcript from an episode ([#1131](https://github.com/podlove/podlove-publisher/issues/1131))
* add Steady as donation service
* add template tag: `episode.post_title` ([#1136](https://github.com/podlove/podlove-publisher/issues/1136))
* add template tag: `service.type` (https://community.podlove.org/t/replacing-social-icons/2321)
* add default avatar to transcript preview
* fix: search logic ([#1072](https://github.com/podlove/podlove-publisher/issues/1072))
* fix: fetch Podlove News via https ([#1037](https://github.com/podlove/podlove-publisher/issues/1037))
* fix: don't send Publisher logs to system log when WP_DEBUG is on ([#1065](https://github.com/podlove/podlove-publisher/issues/1065))
* fix: ensure uploads for webvtt (transcripts) and gz (exports) are allowed
* fix: ensure contributors module is active when transcripts are used
* fix: ensure permissions in shownotes and transcripts APIs
* fix: don't count download requests with http range header of `bytes=0-0` ([#1135](https://github.com/podlove/podlove-publisher/issues/1135))
* update dependencies
* build releases with GitHub Actions (in favour of TravisCI)

= 2.11.4 =

* fix: missing monolog dependency

= 2.11.2 =

* fix: ensure that logging library Monolog is available at version 1.x, otherwise disable the database logger

= 2.11.1 =

* Podlove Web Player 5: support "show" parameter `episode.player({show: 'my-show-slug'})`

= 2.11.0 =

* add global network bar [#1101](https://github.com/podlove/podlove-publisher/pull/1101) by [@gglnx](https://github.com/gglnx)
* improve template editing UI [#1109](https://github.com/podlove/podlove-publisher/pull/1109)
* fix: template tag `episode.player` uses correct shortcode internally
* fix: template tag `episode.player` uses correct episode on pages that are not its own episode-page

= 2.10.0 =

Add support for Podlove Web Player 5

Podlove Web Player 5 is the latest overhaul of our podcast web player.
It comes with its own configuration interface giving you full control over its appearance.

Activate it in `Podlove > Podcast Settings > Player`.
You are then prompted to install the "Podlove Web Player" plugin if you don't have it installed already.

Configure the web player appearance in `Settings > Podlove Web Player`.
Existing web player shortcodes and template accessors continue to work as expected.
For detailed shortcode options, please refer to https://wordpress.org/plugins/podlove-web-player/

= 2.9.10 =

* when using Google Analytics tracking, the show title is sent as content group

= 2.9.9 =

Re-Release of 2.9.8

= 2.9.8 =

* add Twig function `get_the_post_thumbnail_url` identical to the native WordPress function
* fix Podlove Web Player 4 issue in twentytwenty theme
* fix some importer issues
* shows module: itunes category can be set per show

= 2.9.7 =

* update JavaScript dependencies

= 2.9.6 =

* update PHP dependencies (including User Agent library for download analytics)
* add: expose voice attribute to transcript templates ([#1062](https://github.com/podlove/podlove-publisher/pull/1062))
* add(templating): add sort direction in seasons and season episodes, enabling `podcast.seasons({order: 'DESC'})` and `season.episode({order: 'DESC'})` ([#1080](https://github.com/podlove/podlove-publisher/issues/1080))
* fix: download list description in analytics on mobile ([#1056](https://github.com/podlove/podlove-publisher/issues/1056))
* fix: JS issue when selecting transcript voices
* fix: escaping error in contributor comments ([#1081](https://github.com/podlove/podlove-publisher/issues/1081))

= 2.9.5 =

* Slacknotes: reactivate date picker

= 2.9.4 =

* fix: error on "file types" settings page

**IAB Conformity**

When it comes to tracking download intents, Podlove Publisher was always close to IAB recommendations, with one exception: the time window in which two requests count as two. Podlove Publisher deduplicates by hour, IAB recommends a day.

There is a new setting in `Podlove > Expert Settings > Tracking`: "Deduplication Window". It enables you to change the window to "day". This is an opt-in setting, the default will continue to be hourly.

See also: [docs.podlove.org: IAB Conformity](https://docs.podlove.org/podlove-publisher/guides/download-analytics.html#iab-conformity)

This feature is sponsored by [Lage der Nation](https://lagedernation.org).

= 2.9.3 =

* add quick edit for episode number [#1096](https://github.com/podlove/podlove-publisher/pull/1069)
* fix settings tab issues when using a language in WordPress other than english ([e613e99](https://github.com/podlove/podlove-publisher/commit/e613e99bb4f07bb88234146567e76d21ce06f5ff))
* fix issue with category search / pages
* fix auphonic module issue in Gutenberg editor

= 2.9.2 =

* update Podlove Web Player (fixes issue when sharing/embedding the player)
* fix PHP notices [#1066](https://github.com/podlove/podlove-publisher/issues/1066) [#1064](https://github.com/podlove/podlove-publisher/issues/1064)

= 2.9.1 =

* fix web player sharing when using CDN player
* fix duplicating posts: create new guid; do not copy analytics [#1048](https://github.com/podlove/podlove-publisher/issues/1048)

= 2.9.0 =

**New Apple iTunes Categories**

Apple updated their list of available iTunes categories.
Please check in `Podlove > Podcast Settings > Directory > iTunes Category` if you need or want to update your category.
In case your previously selected category does not exist any more, a warning is shown.

Only one category is selectable now (instead of previously 3) to conform with iTunes specifications.

**Download tracking with Google Analytics**

Set your Google Analytics Tracking ID in Podlove > Expert Settings > Tracking.
Then every download intent will be forwarded to Google Analytics.

[#1058](https://github.com/podlove/podlove-publisher/pull/1058)

**Other**

* fix: check if podlovePlayer function is available before calling it [#1060](https://github.com/podlove/podlove-publisher/pull/1060)

= 2.8.10 =

* update Podlove Web Player 4 to latest version

= 2.8.9 =

* update Podlove Web Player 4 to latest version
* remove PHP dependency leth/ip-address

= 2.8.8 =

* update Podlove Web Player 4 to latest version

= 2.8.7 =

* update Podlove Web Player 4 to latest version
* add player setting to either use the podcast language or user's browser language for web player interface ([#1008](https://github.com/podlove/podlove-publisher/pull/1008))
* fix [#1047 Use of PHP 5.6 feature in Shows module](https://github.com/podlove/podlove-publisher/issues/1047)
* report duplicate guids in system report

= 2.8.0 =

**Transcripts**

“Transcripts” is the new module to manage transcripts, show them on your site and in the web player. You can import them from webvtt files. If you are already using the Podlove Publisher contributors, you can assign people to the voices inside the webvtt. Then you even get avatars automatically in your transcripts.

See [https://forschergeist.de/podcast/fg066-klimaneutralitaet/](https://forschergeist.de/podcast/fg066-klimaneutralitaet/) for an example episode with transcripts in the web player.

**Transcripts: Shortcode**

The shortcode `[podlove-transcript]` displays a pretty html version of the transcript for your website.

**Transcripts: Twig Template Support**

Of course there is a fully featured template API for transcripts as well. For example:

{% for group in episode.transcript %}
    <div class="ts-group">

        <div class="ts-speaker-avatar">
            {{ group.contributor.image.html({width: 50}) }}
        </div>

        <div class="ts-text">
            <div class="ts-speaker">
                {{ group.contributor.name }}
            </div>

            <div class="ts-content">
                {% for line in group.items %}
                <span class="ts-line">{{ line.content }}</span>
                {% endfor %}
            </div>
        </div>

    </div>
{% endfor %}

See [https://docs.podlove.org/podlove-publisher/reference/template-tags.html](https://docs.podlove.org/podlove-publisher/reference/template-tags.html "documentation") for all details.

**Global Podcast Analytics**

The following metrics are now available for the whole podcast:

- downloads per month
- top episodes
- episode asset
- podcast client
- operating system
- download source

**Raw Analytics**

I wouldn’t call this an Analytics API but since it exists to power the analytics screen, I might as well document it. The following endpoints return results in CSV format for easy processing or import to spreadsheets.

Here is an example call that returns the number of downloads in March 2019:

	https://your.domain/wp-admin/admin-ajax.php?action=podlove-analytics-global-downloads-per-month&date_from=2019-03-01T00:00:00.000Z&date_to=2019-03-31T23:59:59.999Z

All requests take the same three parameters:

- `action` defines what data you want
- `date_from` is the start date in ISO 8601
- `date_end` is the end date in ISO 8601

Available actions are:

- podlove-analytics-global-downloads-per-month
- podlove-analytics-global-top-episodes
- podlove-analytics-global-assets
- podlove-analytics-global-clients
- podlove-analytics-global-systems
- podlove-analytics-global-sources

You need to be logged in with admin permissions for the requests to work.

Disclaimer: Depending on the popularity of your podcast and chosen date range, the requests may take a long time to respond, or even fail if the calculation takes longer than the timeout defined in your web server.

**Other**

- background jobs: add button to abort job
- new tab style for chapter marks section
- Podlove Web Player 4 fallback for old browsers and disabled JavaScript

= 2.7.24 =

* update Podlove Web Player 4

= 2.7.23 =

* **slacknotes:** is now accessible to authors and editors
* update some PHP dependencies (including Twig)
* add ability to specify visible components in Podlove Web Player V4 ([#1032](https://github.com/podlove/podlove-publisher/pull/1032))

= 2.7.22 =

* (maybe) fix Gutenberg issues when creating a new episode

= 2.7.21 =

**Bug Fixes**

* **slacknotes:** avoid duplicate vue for-loop keys ([7578cdf](https://github.com/podlove/podlove-publisher/commit/7578cdf))
* **slacknotes:** date range filter ([2982f2b](https://github.com/podlove/podlove-publisher/commit/2982f2b))
* **slacknotes:** fix loading of datepicker component ([13ca12b](https://github.com/podlove/podlove-publisher/commit/13ca12b))
* **slacknotes:** follow redirects when resolving URLs ([5b39746](https://github.com/podlove/podlove-publisher/commit/5b39746))
* **slacknotes:** handle slack-resolved URLs in pipes format ([b08ec53](https://github.com/podlove/podlove-publisher/commit/b08ec53))
* **slacknotes:** hide link-fetch prompt while fetching ([f4e78e3](https://github.com/podlove/podlove-publisher/commit/f4e78e3))
* **slacknotes:** url re-fetching when changing dates ([344456d](https://github.com/podlove/podlove-publisher/commit/344456d))


**Features**

* **slacknotes:** add setting for link ordering ([c4c824e](https://github.com/podlove/podlove-publisher/commit/c4c824e))
* **slacknotes:** show link time ([53077b1](https://github.com/podlove/podlove-publisher/commit/53077b1))
* **slacknotes:** when resolving URLs, use effective URL ([974c7f8](https://github.com/podlove/podlove-publisher/commit/974c7f8))

= 2.7.20 =

**Slacknotes**

This release is sponsored by [Lage der Nation](https://lagedernation.org).

The new "Slacknotes" module extracts links and their metadata from a Slack channel and generates HTML that can be used as show notes.
A short demo video is available [in the documentation](https://docs.podlove.org/podlove-publisher/guides/slacknotes.html).

**Other**

* the "Modules" screen has been redesigned
* updated JavaScript and CSS processing library and other dependencies

= 2.7.19 =

We are now compatible to the new WordPress 5.0 Gutenberg block editor.
You can choose to use the new editor or stay with the classic editor for now by installing the classic editor plugin by WordPress.

* feed: do not include `<itunes:summary>` tag if it is empty (Apple Podcast requirement)
* adjustments for Gutenberg compatibility:
  * Shows metabox moved from sidebar to main area
  * remove broken form field autogrow behavior
  * fix contributors UI initialization

= 2.7.18 =

* improve feed generation time when seasons are used ([#1010](https://github.com/podlove/podlove-publisher/issues/1010))
* title migration module:
  * remove "episode type" selector, always use "full"
  * add warning when there might be too many form fields
* new PHP constant `PODLOVE_DISABLE_TAG_AND_CATEGORY_SEARCH` ([#1017](https://github.com/podlove/podlove-publisher/issues/1017))
* feed item limit: "1" is now an option
* add missing contributor template accessors: organisation, department, jobtitle
* ensure Gutenberg editor is not used for episodes

= 2.7.17 =

**Downloads Data Export**

Download data per episode can now be exported as JSON and CSV.
On the Analytics page you will now find a simple export interface.
Select the episodes you want in the export or don't select any to export them all at once.

**WP REST API Support**

Backbone for the data export is an implementation of the WP REST API.

Endpoint for the episode custom post type:

- /wp-json/wp/v2/episodes

Custom endpoints for episode analytics:

- /wp-json/podlove/v1/analytics/episodes/
- /wp-json/podlove/v1/analytics/episodes/123
- /wp-json/podlove/v1/analytics/episodes/123,82

All analytics are available as CSV by adding `?format=csv` as parameter, for example `/wp-json/podlove/v1/analytics/episodes/?format=csv`

Analytics endpoints require the `podlove_read_analytics` permission, the same as viewing analytics in the admin.

Please read https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/ if you want to use these endpoints.

**Other**

* Fix deprecation warning when using multiple categories ([#1009](https://github.com/podlove/podlove-publisher/pull/1009))

= 2.7.16 =

* update Podlove Web Player 4

= 2.7.15 =

* automatically abort stuck background jobs
* contributors now appear in feeds even if they don't have a URI [#939](https://github.com/podlove/podlove-publisher/issues/939#issuecomment-430248520)
* Shows: custom language is now used for Podlove Subscribe Button

= 2.7.14 =

* update Podlove Web Player 4

= 2.7.12/13 =

* use wp_enqueue_script instead of inline JS when calling PWP4, improving compatibility to other plugins ([#1000](https://github.com/podlove/podlove-publisher/issues/1000))
* uninstall: be more specific which options are deleted ([#997](https://github.com/podlove/podlove-publisher/issues/997))
* new filter `podlove_network_module_activate` to force-enable network module ([#995](https://github.com/podlove/podlove-publisher/issues/995))
* new social services: Mastodon, Fediverse, Friendica ([#987](https://github.com/podlove/podlove-publisher/issues/987), [#968](https://github.com/podlove/podlove-publisher/issues/968))
* fix related episodes disappearing when using post scheduling ([#980](https://github.com/podlove/podlove-publisher/issues/980))
* fix seasons error when there are no episodes ([#963](https://github.com/podlove/podlove-publisher/issues/963))
* related episodes: order by post date ([#947](https://github.com/podlove/podlove-publisher/issues/947))

= 2.7.10/11 =

* update Analytics JS frameworks, fixing [#982](https://github.com/podlove/podlove-publisher/issues/982)
* add download location analytics chart
* remove weekday chart
* add option to disable average episode display

= 2.7.9 =

Too much slimming in 2.7.8. Undo.

= 2.7.8 =

* fix release workflow
* slim down plugin size by removing unnecessary files from release
* update Podlove Web Player 4

= 2.7.7 =

Update 2.7.5 changed the way download tracking works to comply with GDPR. We tried the radical approach and anonymized IPs. As it turns out, this is not viable. Download numbers are skewed by this change and often much lower than they realistically should be. If you saw a drop in downloads since updating to 2.7.5 or 2.7.6, this is the reason.

The good news is that this update changes download tracking again and new download numbers should get back to normal. The bad news is that the data since the GDPR update cannot be fixed/restored because it's missing data granularity -- which was the point of the change; just not anitcipating the effect on the actual download numbers.

So what's the new tracking approach?

Podlove Publisher now stores the `request_id` again just like before the update: a hash based on the actual IP address and the user agent. What's new is that now once a day, all `request_id`s older than 24 hours are salted again, making it impossible to restore IPs from them. This 24 hour window is enough to determine download numbers exactly as before the GDPR update.

To be clear, IPs are never stored in plain text. But since IPs could be restored by brute force attack from the temporary unsalted `request_id` hashes, they have to be treated like plain IPs. The text snippet for your privacy page has been updated in the docs and you should update it on your site: https://docs.podlove.org/podlove-publisher/guides/dsgvo-gdpr.html

= 2.7.6 =

No changes.

= 2.7.5 =

**Preparation for GDPR/DSGVO**

If you are using Podlove Publisher Tracking/Analytics, an update to this version is highly recommended.

Tracking uses a `request_id` to be able to determine when two requests came from the same user and should be counted as one unique access. This request id used to be a hash of the original IP address and the user agent. This approach however is vulnerable to a brute force attack to get the IP address back from the hash. Here's what we are doing about that:

First, we anonymize the IP before generating the hash. So instead of using `171.23.11.209`, we use `171.23.11.0`.

Second, you need to deal with the existing `request_id`s. There is a new "DSGVO" section under "Tools" with a button that will rehash all existing `request_id`s with a randomly generated salt. That way it will become unfeasible to determine the original IP address but your analytics will stay the same.

In case you have a lot of downloads (let's say much more than 50.000), you may want to do this via command line because that will be _much_ quicker than via the tools section. You need [wp-cli](https://wp-cli.org/), then simply call `wp eval 'podlove_rehash_tracking_request_ids();'`. On a multisite, pass the blog id as a parameter: `wp eval 'podlove_rehash_tracking_request_ids(42);'`.

**Other**

* fix Podlove Subscribe Button language parameter
* fix `rel="self"` link in show feeds
* fix Podlove Subscribe Button not delivering show feeds
* templates: handle episode.show access when there is no show
* templates: allow episode filtering by show, for example: `{% for episode in podcast.episodes({show: "example"}) %}`

= 2.7.4 =

No changes, but the previous release is not delivered correctly by WordPress, so this is simply a re-release attempt to fix it.

= 2.7.3 =

* fix: geo database updater
* update Podlove Web Player 2: remove Flash Fallback
* update Podlove Web Player 4

= 2.7.2 =

* fix: `itunes:image` tag in show feeds
* fix: "Debug Tracking" choosing wrong media files to check availability
* enhancement: "Debug Tracking" now suggests disabling SSL-peer-verification if URL cannot be resolved and https is used
* system report: include active plugins

= 2.7.1 =

* fix: PHP warning when the_title filter is called with only one parameter
* fix: handle colons in migration tool
* fix: PWP4 warning when using shortcode
* new service: letterboxd

= 2.7.0 =

**New Module: Shows**

With shows you can offer feeds to subtopics of your podcast. Here's how it works: You create a show and define show meta, similar to a podcast: title, slug, subtitle, summary, image and language. These fields override your podcast settings. All other settings are the same as your podcast.

For each episode, you decide which show it's in. Each show has its own set of feeds that listeners can subscribe to. The main feed remains unchanged, containing all episodes from all shows.

The Podlove Subscribe Button can be configured to subscribe to a show by referencing the show slug. Use the shortcode `[podlove-subscribe-button show="show-slug"]` or the template tag `{ podcast.subscribeButton({show: 'show-slug'}) }}`.

We do not recommend using Shows and Seasons at the same time.

**Updated Metadata for Podcast/Episode/Seasons according to iOS11 Specification**

Apple announced an [updated specification for feed elements](http://podcasts.apple.com/resources/spec/ApplePodcastsSpecUpdatesiOS11.pdf). These changes enable the Apple Podcasts app to present podcasts in a better way. But since these feed extensions are readable by any podcast client, we expect others to take advantage of these new fields soon. Here is how we implemented the specification:

- The podcast has a new "type" field where you can select between "episodic" and "serial", which may affect the order of episodes. The field `<itunes:type>episodic</itunes:type>` appears in the feed.
- Episodes have a new "title" field. It defaults to the episode post title but can be set separately now, allowing you to define different titles for the website and podcast clients. The field `<itunes:title>Interview with Somebody Infamous</itunes:title>` will appear in the feed.
- Episodes have a new "type" field where you can select between "full" (default), "trailer" and "bonus". This won't have any effect in the Publisher but may be used by podcast clients. The field `<itunes:episodeType>full</itunes:episodeType>` appears in the feed.
- Episodes have a new "number" field. If used, `<itunes:episode>42</itunes:episode>` will appear in the feed.
- Episodes in seasons will have an `<itunes:season>2</itunes:season>` field in the feed automatically.

We decided to complement these changes by introducing a podcast mnemonic/abbreviation field. Now we can autogenerate blog episode titles, based on the episode number and title, if you like. The mnemonic can be set in podcast settings. The setting to autogenerate blog episode titles is an expert setting in the "Website" section.

To help existing podcasts to conform to these new fields we made a "Title Migration" module which will greet you with a notice once you update the Publisher. It will try to extract episode numbers and titles from your existing titles, saving you time and effort updating each episode one by one.

**Template API Changes**

- `episode.title` now returns the new episode title field, if it is set, but has a fallback to the post title. If you want a specific version, use `episode.title.clean` or `episode.title.blog`.
- the post title of an episode can still be accessed via `episode.post.post_title`
- new accessor: `episode.number`
- new accessor: `episode.type`
- new accessor: `podcast.mnemonic`
- new accessor: `podcast.type`
- new accessor: `season.mnemonic`

**Podlove Web Player 4**

The Shortcode `[podlove-web-player]` accepts several parameters, increasing its versatility.

With `post_id` you can embed episodes on any page, for example `[podlove-web-player post_id="1234"]`.

Every [config parameter available](http://docs.podlove.org/podlove-web-player/config.html) can be overridden using shortcode attributes. The only difference from the linked documentation page is the notation. For nested configs like `show.title` use underscores (`_`) instead. For example, display a green player with custom title like this: `[podlove-web-player show_title="Special Title" theme_main="#00ff00"]`

You can now also display a player with _live content_ like this: `[podlove-web-player mode="live" audio_0_url="http://mp3.theradio.cc/" audio_0_mimeType="audio/mp3" title="Livestream" link="https://theradio.cc"]`

You can choose to deliver Podlove Player via Podlove CDN (Content Delivery Network) or via your WordPress server. CDN is the default for new setups but if you are already using Podlove Publisher we continue delivering Podlove Player via your WordPress server unless you explicitly change it.

Podlove Web Player 4 is the new default player.

**Other**

* analytics: show download totals for last 24 hours and last 7 days in overview
* Podigee Player: add support for transcripts
    - create a Podigee Transcript asset
    - set this asset in Expert Settings > Web Player
    - See https://cdn.podigee.com/ppp/samples/transcript.txt for an example transcript
* Podlove Web Player 4: support contributors
* player settings: when no episode or files are available, use a "Podlove" demo sound
* reduce Podlove Template Cache duration from 1 day to 1 hour for the following change:
* new template accessor: `{{ episode.total_downloads }}`
* New in "Global Feed Settings": An option for how the episode title should be displayed. It defaults to "Blog Post Title", so that after the iOS 11 title migration, the output does not actually change -- following the principle of least surprise. However, the setting can be changed to "Episode Title", which is the new clean title, or "Custom Template", which is a title template with the same capabilities as the blog post title template.
* when using the Podlove Subscribe Button CDN and the CDN is not reachable, fall back to the locally hosted script
* fix Geo DB Updater: use our own Podlove CDN as download source
* fix quotes in contributor fields
* fix WordPress conditionals in episode archives
* fix deleting related episodes ([#907](https://github.com/podlove/podlove-publisher/issues/907))
* fix network admin bar now does not include broken links if Publisher is not activated network-wide ([#933](https://github.com/podlove/podlove-publisher/issues/933))
* fix import getting stuck issue ([#910](https://github.com/podlove/podlove-publisher/issues/910))
* Bitlove module: remove all frontend functionality because it has been dysfunctional for a long time
* fix Auphonic module showing wrong status message after file upload
* fix Audacity chapter import when times contain commas
* fix email notification issue where not emails were sent ([#938](https://github.com/podlove/podlove-publisher/issues/938))
* fix feed redirect issue for HTTP/1.0 clients
* fix network module: only activate when the plugin is activated network-wide, not when the plugin in active within a multisite
* fix calculation of contribution counts
* Fix various issues in the download table display. Until now, new downloads were calculated hourly, which provides a good estimate but often not exact numbers. The calculation could also get stuck, leading to missing data display. From now on, the estimates are still calculated hourly but additionally _a full, precise aggregation is done once a day_, which should lead to more consistent numbers overall.
* enhance email error reporting
* enhance open graph module: detects WP SEO plugin and does not output any tags to avoid conflicts
* social services: add SlideShare
* show warning if upload directory is not fully qualified
* remove download section from default template (because it is included in PWP4)
* image cache: instead of returning invalid URLs with 0 width and 0 height when something goes wrong, return the source URL instead
* episode list: add display option to display episode number as a column
 add Liberapay as donation service
* display current season in episode form

= 2.6.4 =

Podlove Web Player 2:

- fix: Remove Flash and Silverlight fallbacks due to security issue
- fix: resolve compatibility issue with mediaelement library shipped with WordPress

Podlove Web Player 4:

- fix: newlines in summary are not converted to HTML linebreaks

= 2.6.3 =

- new PHP constant `PODLOVE_IMAGE_CACHE_FORCE_DYNAMIC_URL`: When `PODLOVE_IMAGE_CACHE_FORCE_DYNAMIC_URL` is set to `true`, the static "physical" URL is never exposed, only the dynamic URL. This can be helpful when page caches keep serving the static URL even though it does not exist for some reason. The dynamic URL always works. Drawback is that serving with the dynamic URL is a bit slower, so only use it if you encounter caching issues.
- update mediaelement dependency in Podlove Web Player 2
- update Podlove Web Player 4

= 2.6.2 =

- send `HTTP 410 Gone` when accessing a download URL to a depublished episode
- fix Podlove Web Player 4 appearing on wrong positions when multiple players are embedded on the same page

= 2.6.1 =

- fix template bug (when a template returned an empty result, the template title was displayed instead)

**Flattr**

- rename "Flattr Username" to "Flattr ID"
- insert `flattr:id` meta tag to page heads, which is required for their new system

= 2.6.0 =

**New Module: E-Mail Notifications**

This is a new module complementing the existing contributor module. Once activated, it enables you to send emails to contributors when an episode gets published.

You can find the settings at `Contributors > E-Mail Notifications`. The settings are:

- _email subject and message_, customizable with all available template tags
- a _time delay_ until the message is sent after the episode was published
- who will receive the message by using _groups and roles as a filter_

**Podlove Web Player 4 Alpha**

After months of work we're ready to show you what we're working on: A new take on the modern Web Player. We learned from previous attempts and thought about responsiveness and embeddability from day one. Of course there's full support for chapter marks, too.

Give it a try if you like. Be aware though that it's marked as _alpha_, meaning we're still working on new features and fixing bugs in existing ones when we find them. But if you're curious, head over to `Podlove > Podcast Settings > Player`, switch to Podlove Web Player 4 and [let us know what you think](https://community.podlove.org/c/podlove-web-player).

Once Podlove Web Player 4 is stable, it will be the only actively supported Podlove Player. Podlove Web Player 3 isn't being developed anymore.

And finally, all web players can now be previewed on the settings screen.

**Templates**

* Assets now have an identifier `asset.id` to quickly access a file for an asset within an episode, for example: `episode.file("mp3")`
* Contributors already had such an id, but now there is a new accessor to get a single contributor by id, for example: `podcast.contributor("jerry")`
* DEPRECATED: id parameter in `podcast.contributors` to access a single contributor: `podcast.contributors({id: "jerry"})`.
* Feeds can now be accessed the same way by their slug: `podcast.feed("mp3")`

**Analytics**

Download tracking is now turned on by default in new setups.

**Bits & Pieces**

* network dashboard statistics: fix average length and file size; remove "days between episodes"
* episodes: prettify "detect episode duration" UI
* episodes: enhance media file UI:
  * rename "update" button to "verify"
  * move "update all media files" button above "verify" buttons and rename it to "verify all"
  * show file URL even if url cannot be reached
  * show Bytes in human readable format
* episodes: fix focus when adding contributors to episodes
* episode asset settings: increase assets per page from 10 to 100
* episode asset settings: fix format filtering by type
* episode assets: new "name" attribute for reference in templates, for example `episode.file('cover').url` where "cover" is the asset name
* support page: add Publisher icon to "Get Professional Support" callout
* contributors: services only get deleted on "Save Changes", not immediately
* contributors: fix sorting by contribution count in the admin interface
* contributors: fix minor PHP issue when creating new contributors
* templates: immediately purge cache on updating any template
* Podlove Subscribe Button: add module option to deliver locally instead of using the CDN, but continue to default to CDN
* job dashboard: add mode description to jobs where necessary to distinguish between different run settings
* be tolerant to missing PHP iconv module
* fix Auphonic chapter import
* update Hindenburg chapter parser
* new PHP constant `PODLOVE_DISABLE_IMAGE_CACHE` to disable image caching
* fix security vulnerability (thanks to DefenseCode, who found the vulnerability using their tool ThunderScan and kindly approached us)

= 2.5.3 =

* fix broken settings tabs (introduced by German translation)

= 2.5.2 =

* fix episode sorting by recording date (`podcast.episodes({orderby: 'recordingDate'})`)
* services: use https URLs where available ([#911](https://github.com/podlove/podlove-publisher/pull/911))
* services: add Spreaker ([#912](https://github.com/podlove/podlove-publisher/pull/912))
* contributors: adjust description of "Public Name" because it was misleading ([#914](https://github.com/podlove/podlove-publisher/pull/914))
* services: fix URL encoding issue ([#915](https://github.com/podlove/podlove-publisher/pull/915))
* network: fix system report notice that ensures module is setup correctly ([#916](https://github.com/podlove/podlove-publisher/pull/916))
* remove ADN link from support page

= 2.5.1 =

**Enhance Chapter UI**

* fix encoding of "&" character
* add support for Hindenburg project files

= 2.5.0 =

**New Chapter Management UI**

Until now if you wanted to add chapters to your podcast, you had to write the mp4chaps format by hand into a textfield. The Publisher now finally provides an easy-to-use interface to manage chapters that doesn't require any knowledge about the underlying formats.

The new inferace makes it simple to import chapters from files. We currently support [PSC (Podlove Simple Chapters)](https://podlove.org/simple-chapters/), mp4chaps and Audacity Track Labels. [Let us know](https://community.podlove.org/c/podlove-publisher) if we don't support your favorite program's export format.

**Module: Import/Export**

Podcast import has been rewritten to make full use of Background Jobs. That way podcasts of any size can be imported without running into system resource restrictions for large podcasts.

**Background Jobs**

The jobs dashboard on the tools page now shows job statuses in realtime (refreshes automatically).

Adjusted background job duration parameters and made them configurable. The change of defaults aims to make better use of available cron time (normally 30 seconds per request), which can speed up long running background jobs dramatically.

Please refer to the new [Background Jobs page in the documentation](http://docs.podlove.org/podlove-publisher/developer/background-jobs.html) for more details.

**Bits & Pieces**

* remove module: App.net (because they [are shutting down](http://blog.app.net/2017/01/12/app-net-is-shutting-down/))
* fix tracking export
* redirects (expert settings): redirect counter can be reset
* contributor avatars use WordPress media picker
* optimize use of JavaScript:
    - only load scripts on pages that require them
    - concatenate and minify some scripts

= 2.4.6 / 2.4.7 =

- Image cache: support non-pretty permalinks.
- fix feed compatibility issue with [Relevanssi plugin](https://wordpress.org/plugins/relevanssi/)
- services: fix lastfm url scheme (thanks [jazzcrack](https://github.com/jazzcrack))

= 2.4.5 =

Image cache: change URL encoding method to fix Gravatar issues.

= 2.4.4 =

Further image cache improvements:

- reject URLs that are not images
- prefix query vars to avoid naming conflicts with other plugins
- fix resizing sometimes not calculating the correct dimensions
- enhancement: skip http when using images shipped with the Publisher; copy images from Publisher to cache directory on filesystem instead

= 2.4.3 =

Fix issue with broken images introduced in 2.4.2.

= 2.4.2 =

**Improve Image Caches**

Images relevant to the Podlove Publisher are downloaded so they can be resized to desired dimensions. This makes it possible to deliver retina-images and improves the website performance because only the appropriate image size delivered.

This requires files to be downloaded. Until now, this happened in the background to avoid slow web page load times when the image is fetched. Until the cache existed, the original file URL to the unresized file was used. This worked alright, unless you were using a page cache plugin. The original file URL would be used much longer than necessary, causing big file downloads.

Now a different approach is used. Instead of the original file URL, a dynamic link is generated, looking like this one: `https://example.com/podlove/image/http%3A%2F%2Fexample.com%2Fmedia%2Fmypodcast%2Fmy-podcast-logo-1500x1500.jpg/300/300/0/my-podcast`. When this link is requested, the cached and resized image is either delivered or, if it doesn't exist, generated on-the-fly. Once the cached file exists, the direct link to the cached file is delivered, just like before. The major improvement is that even if the initial URL is stuck in your page cache, the Publisher is now able to deliver a properly resized image anyway.

**Other**

* set correct feed Content-Type in HEAD requests and redirects
* enhancement: repair & clear cache tools print a notice about other cache plugins
* fix "Last Month" download widget in analytics

= 2.4.1 =

* services: Playstation Network Account now links to `http://psnprofiles.com`
* allow spaces in episode slugs
* add help tab to analytics pages
* fix Podlove Web Player 2 timecode share link
* fix issue with image cache filenames ([PR 895](https://github.com/podlove/podlove-publisher/pull/895))
* fix WP-Rocket incompatibility with Podigee Player
* fix Auphonic: when neither episode image nor post thumbnail are present, fallback to podcast cover art
* fix PHP warnings in oembed module

= 2.4.0 =

**Background Jobs System**

Crunching numbers for Analytics takes time, especially for popular podcasts with many downloads. The old system was written optimistically and "let's-hope-we-finish-before-we-run-out-of-time"-ish. That was certainly good enough for podcasts with a few hundred downloads per episode, but more likely a gamble for popular shows.
To solve this issue in a scaleable way, we built what is known as "background processing" or "queues". That way we can break big tasks into small chunks and process them step by step. You don't really need to know about this, since the main effect is that calculating analytics should be a smoother experience (if you have ever had troubles in that regard) but if you are curious, have a look at the new "Tools" section, which lists running and recently finished jobs.

**New Analytics Dashboard**

* "Downloads per Day" is a stacked bar chart now so you can see which episode is responsible for peaks
* Downloads table now shows downloads in time segments starting from the moment of episode release for better comparability
* Show total number of all downloads in Analytics Dashboard
* New information under downloads table: age of the data and when the next refresh is due
* _MUCH_ better performance / page load times
* New option to configure how many episodes per page should be shown

**Podlove Web Player 2 Facelift**

* simplified, modernised look
* responsive layout for mobile devices
* fix: updated mediaelement library to fix volume bar display bug

**Podigee Podcast Player**

The [Podigee Podcast Player](https://www.podigee.com/en/podcast-player) is available as an alternative to the Podlove Web Players. It supports everything you can expect from a modern web player like chaptermarks. It is also embeddable.

**New "Tools" Menu**

* A new maintenance section gathers tools like the "Repair" button in one place
* There is a new section for analytics related maintenance
* Import & Export is now in the "Tools" menu

**Improved Logging Display**

* Logging is now in the "Support" menu
* add filtering for different severities
* hide "info" entries by default
* improve readability of data sections

**Other**

* add Emoji support for episode subtitle, summary and chapter marks (requires WordPress 4.2 or newer)
* Web Player setttings moved from Expert Settings to Podcast Settings
* When activating the plugin, add mp3 asset and feed to help users get over the most confusing part of the setup.
* Post thumbnails can be used as episode covers (see settings in "Episode Assets"). This is the new default.
* add contributors shortcode to default template (Many people activated contributors and then wondered why they were not displayed in the episode. Now the shortcode is part of the default template, but only if the contributors module is active.)
* add unmistakable warning if curl is not available and provide actionable steps for a solution
* change feed setting "Include HTML Content" default to "on"
* remove log entries for beginning and ending asset validations
* move feed protection into separate module
* move debug log from Dashboard to Support page
* add ptm_request parameter to redirected tracking URLs which contains a uuid
* add fyyd.de module
* add option to enforce http or https in URLs inside feeds (enclosures, images) and the actual feed URLs; see `Expert Settings > Website`
* improve tracking: ignore 1-byte requests
* update user agent library (new/updated clients: Podcat, Downcast, iCatcher, BashPodder)
* show total downloads per site in network dashboard
* remove `<itunes:keywords>` from feed (it disappeared from the specification)
* remove module: "Feed Validator"
* update recommended image size to 3000x3000 pixel
* add heartbeat to keep note of when tracking is active
* `shortcode_exists($shortcode_name)` is now available in Twig templates
* system report: add notice if ALTERNATE_WP_CRON is active
* fix tracking export: keep httprange
* fix compatibility with other plugins relying on Spyc library
* fix `{{ episode.duration.totalMilliseconds }}`
* fix image caching issue (invisible characters)
* fix: When plugin requirements are not met, admin notices are now still shown once but the plugin is automatically deactivated after that. This avoids faulty setups.
* fix: show podcast covers in network site switcher
* fix: expert settings not saving on some systems

= 2.3.18 =

* fix Auphonic authentication (https certificate issue)

= 2.3.17 =

* fixes a bug that broke some settings pages

= 2.3.16 =

* security: fix SQL injection
* security: remove several Cross-Site Scripting vulnerabilities

All vulnerabilities require admin capabilities. That means they cannot be exploitet easily, but could be using Cross-site request forgery (CSRF).

Thanks to [RIPS Technologies](https://www.ripstech.com/) for reporting these issues. The issues were found using their Static Source-Code Analyzer RIPS.

= 2.3.15 =

* ensure 3rd party PHP dependencies do not require PHP 5.5 or greater

= 2.3.14 =

* fix: send episode cover to Auphonic if available
* fix: improved download logic for `geoip.mmdb` should prevent faulty downloads
* enhancement: error message for faulty `geoip.mmdb` includes instructions on how to manually fix the file
* enhancement: automatically switch off geo tracking when no valid geo database is available
* enhancement: clarify episode image asset options

= 2.3.13 =

* fix: sort contributor names while ignoring uppercase/lowercase
* fix: when exporting a podcast, don't call `htmlspecialchars` on arrays because it breaks things
* fix: image caching issue (invisible characters)
* fix: broken geolocation database does not prevent playing episodes
* fix `{{ episode.duration.totalMilliseconds }}`
* fix: `{{ episode.duration }}` returns "00:00" if no duration is set
* fix: contributor avatar URLs with umlauts
* enhancement: check for geolocation database validity in tracking debug section
* enhancement: add current theme and feed URLs to system report
* Podlove Subscribe Buttons: parameters in templates and shortcodes can override Publisher provided fields: 'title', 'subtitle', 'description', 'cover'

= 2.3.12 =

Design Update for Podlove Subscribe Button

* The button now follows a flat design and has more options for customizability.
* See [docs.podlove.org/podlove-subscribe-button](http://docs.podlove.org/podlove-subscribe-button/) for a range of possible display variants.
* Widget module has been updates to support a color picker and settings for size, format and style. When using the "WordPress Customizer" you get a live preview of the button.
* If you are using the Template API, have a look at the updated [`podcast.subscribeButton` parameters](http://docs.podlove.org/podlove-publisher/reference/template-tags.html#podcast).

= 2.3.11 =

* fix feed issue that appeared with WordPress 4.5 (wrong content type)

= 2.3.10 =
* when activating the plugin, add mp3 asset and feed to help users get over the most confusing part of the setup
* fix tracking export: keep httprange
* fix compatibility with other plugins relying on Spyc library
* improve tracking: ignore 1-byte requests
* update user agent library (new/updated clients: Podcat, Downcast, iCatcher, BashPodder)
* remove `<itunes:keywords>` from feed (it disappeared from the specification)
* update recommended image size to 3000x3000 pixel

* fix Podlove Subscribe Button iTunes link
* add new "getting started" video to readme

= 2.3.9 =

* fix `open_basedir` related issues

= 2.3.8 =

**Bugfixes**

* fix '&' issue in some fields when exporting/importing
* player: pass podcast language code to web player v3
* open graph: do not include non-downloadable assets
* open graph: use tracking URLs if available
* template editor: add scrolling when having many templates in the list
* auphonic: disable "Open Production" button when no production is selected
* player: chapters visibility setting now applies to v3 beta player
* more defensive feed gzipping for compatibility with various caching plugins
* fix feed discovery cache (can now handle both http and https at the same time)

**Enhancements**

* enhance error message when resolving URL fails


= 2.3.7 =

* fix "add new" contributor button
* fix migration class error
* fix migration system report display
* use default WordPress background color in migration wizard

= 2.3.6 =

**Bugfixes**

* When creating a new contributor, social and donation services are saved correctly
* Deleting a contributor shows the correct confirmation message

**Enhancements**

* Podlove Subscribe Button: When an iTunes id is known for a feed, the button does not just pass the feed URL to the client when iTunes or Podcasts App are chosen. It redirects the user to the iTunes directory first. Because if you don't do this, "[it] does not increase your visibility on the iTunes Store or allow you to earn commission as part of the Affiliate Program." (http://www.apple.com/itunes/podcasts/specs.html)
* Detect and warn if an episode slug has been used before

= 2.3.5 =

Update Web Player v3

* beta.6 https://github.com/podlove/podlove-web-player/releases/tag/v3.0.0-beta.6
* rc.1 https://github.com/podlove/podlove-web-player/releases/tag/v3.0.0-rc.1
* rc.2 https://github.com/podlove/podlove-web-player/releases/tag/v3.0.0-rc2
* rc.3 https://github.com/podlove/podlove-web-player/releases/tag/v3.0.0-rc3

= 2.3.4 =

**Web Player (v3 Beta)**

The new web player can be selected in `Expert Settings > Web Player`. Please try it out and send us your feedback. Thanks!

* update player
* add theme player options
* fix player permalink parameter
* fix player width on Mobile Safari

**Other**

* fix Auphonic workflow bug: when finishing a production, media files would sometimes erroneously be detected as not existing
* detect when the configured Auphonic Preset does not exist
* fix focus when adding new related episode rows
* chosen search fields allow partial searches
* enable Twig date extension to allow `time_diff` filter; see [Date Extension Documentation](http://twig.sensiolabs.org/doc/extensions/date.html)

= 2.3.3 =

Updating all the things for your pleasure.

= 2.3.2 =

* add template accessor `episode.post` to get WordPress post object
* fix: template call `episode.chapters` returns an empty list when there are no chapters
* fix: deleting image cache when no image cache directory exists
* fix: cache purge also deletes timeout entries
* fix: cache purge affects downloads table
* fix: JavaScript event for secondary download button
* fix: default template assignment on plugin activation
* fix: unpublished relates episodes do not appear when using the shortcode or template accessor

= 2.3.1 =

* simplify download buttons (`[podlove-episode-downloads style="buttons"]`) style to better adapt to themes
* fix: missing "Show URL" download button in twentyfifteen theme
* fix: URL structure for YouTube channels
* fix: player visibility when JavaScript is disabled
* fix: stop loading nonexisting player assets in WordPress admin area
* enhanced system report: change wording for `open_basedir` issue to clarify that it _should_ be fixed but a workaround exists
* enhanced plugin loading
  * When upgrading from version 1.x to 2.x using PHP 5.3, the upgrade lead to the "White Screen of Death" because 2.x requires PHP 5.4. This case is now handled and the Publisher shows an appropriate admin notice.
  * Some shared hosters seem to have problems with the plugin update process, which leads to the Publisher missing files and breaking the site. This is now also detected and a notice appears, asking the user to manually redownload the plugin.

= 2.3.0 =

**New Module: Seasons**

Do you have seasonal content? We got you covered. The new "Seasons" module allows you to group episodes into seasons. Each season has a title and other optional metadata, like a custom image. You can access all this data using the template system.

New Template accessors:

- `episode.season` returns the season for the episode
- `podcast.seasons` returns a list of all seasons
- `season.episodes` returns a list of all episodes in a season

**New Module: Flattr**

Everything Flattr related was moved into its own module.
If you don't use Flattr, you can turn it off and it gets out of your way.

* If you are using the Flattr module, we write Flattr payment information into podcast feeds. This way you don't need to rely on the official Flattr plugin to do this. You can probably deactivate it if you were using it since we provide the main functionality within the Publisher now.
* We recently changed the default `flattr` parameter in shortcodes. Now there's a setting in Flattr Podcast Settings where you can define the default parameter for contributor shortcodes.

**New Module: Related Episodes**

You can now express that episodes are related to each other. You can list all related episodes using the new shortcode `[podlove-related-episodes]` or using the template accessor `episode.relatedEpisodes`.

**Templates & Themes**

If you are developing themes, you now have full access to the Publisher Template system. The API is exactly the same as in Twig, just the syntax is different. At the moment, there are 4 entry points:

- `\Podlove\get_episode()`
- `\Podlove\get_podcast()`
- `\Podlove\get_flattr()`
- `\Podlove\get_network()`

Please see the ["Understanding Templates" guide](http://docs.podlove.org/guides/understanding-templates/) for more details.

**Other**

* Use WordPress Object Cache API to cache model objects. All entities fetched by id are cached and reused within the same page call. Performance gains are most notably in complex templates, which often access the same data repeatedly.
* Analytics: Update & improve user agent detection library so you can have more accurate analytics.
* Canonical feed URLs. WordPress respects if you want your URLs to end with a slash or not (you do that by adding or removing the trailing slash from your WordPress permalink settings custom structure). Our feed URLs now respect this choice, too. Furthermore, we permanently redirect to the canonical URL if another one was accessed to ensure all clients access _exactly_ the same feed URL.
* News from podlove.org are displayed in the Podlove Dashboard
* Users with role "author" and higher now have access to the Podlove Dashboard and Analytics. They only have access to dashboard sections that make sense for authors, so they won't see logging, feed or asset validation.
* Contributors can now be edited in _Contributor Settings_ (instead of _Episodes > Contributors_)
* Contributors Social Services: It is now possible to add a YouTube "Channel", not just user profiles
* Contributors Social Donations: Add "paypal.me" option
* Add functionality to automatically determine the duration for episodes. This is especially useful for people who don't use Auphonic, which already determines the duration automatically.
* We are now able to handle media files that are served without a "Content-Length" header. A specific warning is generated and the size is displayed as "unknown", but the files are treated as valid so they can be played.
* Add support for Auphonic webhooks. This allows us to import your episode metadata once an Auphonic production is finished — even if you navigated away from the episode page.
* Podcast cover image can now be uploaded using the WordPress media uploader.
* Add `contributor.gender` template accessor
* Rename network list "description" to "summary" for consistency. In templates `list.description` is now deprecated. Please use `list.summary` instead.
* fix: Shortcodes in episode subtitle and summary are not interpreted any more. Both fields were always considered plain text and having shortcodes leads to various issues, especially in feeds.
* export files are now gzipped if possible
* fix JavaScript incompatibility related to Diaspora plugin ([#771](https://github.com/podlove/podlove-publisher/pull/771), [#770](https://github.com/podlove/podlove-publisher/pull/770), [#425](https://github.com/podlove/podlove-publisher/issues/425), thanks [@noplanman](https://github.com/noplanman)!)
* fix: failing geo-lookup does not break tracking links
* fix: Remove WordPress favicon (since WP 4.3) from podcast feeds if a podcast image is set
* fix: pasting into a template creates change-marker
* fix: tracking import does not skip the last few entries

= 2.2.4 =

* fix: erratically missing chapter information in RSS feeds
* fix: "Allow to skip feed redirects" setting was sometimes ignored

= 2.2.3 =

* fix: web player image fallback to podcast image when an episode image asset is defined but unused
* fix: gzip compression: only set content type if headers have not been sent
* fix: in networks, don't schedule template cleanups for blogs without an active Publisher

= 2.2.2 =

* fix: template cache issue where duplicate purge cronjobs could flood the cron system
* fix: image cache validation (didn't work due to missing library)

= 2.2.1 =

* fix: App.net announcement preview in modules
* fix: asset validations are always scheduled properly
* fix: Remove method calls that require WordPress 4.0+ (wpdb::esc_like)

= 2.2.0 =

**Image Caching, Resizing & Retina Support**

We now take better control of podcast images, episode images, contributor avatars and our own social icons.
We are able to *resize* them to ideal sizes, which results in *faster page load times* for your users. *Retina
images* for higher-resolution displays are also supported. We do this automatically, so all you need to do
is click update, lean back and enjoy.

Read all the details in our blog post ["Podlove Publisher 2.2: Say hello to image caching"](http://podlove.org/2015/05/20/podlove-publisher-2-2/)

This update increases the WordPress requirement from 3.0 to 3.5 (due to the required image editing functionality).

**Other**

* fix: duplicate feed discovery
* fix: ignore incomplete feed configurations
* fix: don't include network admin module css in frontend
* fix: dashboard episode edit links
* fix: when deleting WordPress Network sites, trigger plugin uninstall to remove database tables
* fix: web player flash fallback
* fix: network templates now also appear in the template widget and template auto-insert setting
* fix: issue where some database tables were not created
* fix: podcast covers are displayed in frontend admin menu bar
* show Twig template errors in dashboard log
* web player template tag can set tracking context: `episode.player({context: 'landing-page'})`
* add `episode.categories` template tag

**Deprecations**

- deprecated `episode.imageUrl`, use `episode.image` instead
- deprecated `episode.imageUrlWithFallback`, use `episode.image({fallback: true})` instead
- deprecated `podcast.imageUrl`, use `podcast.image` instead
- deprecated `service.logoUrl`, use `service.image` instead
- deprecated `contributor.avatar`, use `contributor.image` instead

While you are changing these, consider scaling them down appropriately. Your images are probably huge but in many cases you don't need the full size. So instead of `episode.image` or `episode.image.url`, specify a size, like this `episode.image.url({width: 200})`.

= 2.1.3 =

* add warning in system report for users with default permalink settings (which is problematic for some podcast clients)
* enhancement: delete caches in all blogs when changing a network template
* enhancement: delete caches when changing the template default assignment
* enhancement: do not rely on openssl module
* fix: add flattr setting to contributors general tab
* fix: duplicate episodes when using `podlove.episodes` template accessor
* fix: correctly fire plugin activation hooks in network mode
* fix: ensure network module is activated correctly
* fix: "Add New" link in empty list tables

= 2.1.2 =

* fix issue with users that have open_basedir set, which lead to all assets being invalid

= 2.1.1 =

* fix: remove obsolete "Add New" template button from network templates screen
* fix: template autoinsert does not use deprecated "id" parameter
* fix: template widget does not use deprecated "id" parameter
* fix: duplicate episodes in feeds
* fix: some server configurations (especially on shared webhosting) break cURLs ability to follow HTTP redirects. We now check for that configuration and, if necessary, resolve the URL manually before continuing normally.
* fix: XSS vulnerabilities in contributors search
* fix: Template accessor `contributor.id` now correctly returns the id, not the uri. `contributor.uri` is the new accessor to get the uri.
* fix: Filtering contributions by id is now correctly affected by other filters, like group and role. Until now, `podcast.contributors({id: 'james', role: 'on-air'})` always returned James, no matter if he had the given role or not.
* add "Add New Contributor" item to contributor select list. Selecting it opens the screen to add a new contributor.
* add Twig version to system report

= 2.1.0 =

**Networks: WordPress Multisite Support is Here**

- dedicated WordPress Multisite support
- "My Sites" menu features podcast covers and menus include often used pages like "Podlove Dashboard" and episodes
- Network Dashboard provides a birds-eye view over your podcast empire
- Network-Templates that are accessible in every podcast
- Podcast lists: give templates access to multiple podcasts at once, allowing you to automatically list all podcasts in your network, the 10 last episode releases in your network and much more

**Widgets**

We added a happy bunch of widgets to make your life easy.

* Podcast Information: Display cover, subtitle and summary of your podcast
* Recent Episodes: Display a list of recent episodes, with cover art and duration if you like
* Template: Display any Publisher template in a widget area
* Podcast License

The Subscribe Button Widget now defaults to "Big with Logo" and auto-width. It has also been renamed to "Podcast Subscribe Button" to be distinguishable from the new standalone plugin.

**Templates**

* add accessors `{{ podcast.landingPageUrl }}`, `{{ podcast.subscribe_button }}` (see http://docs.podlove.org/reference/template-tags/#podcast)
* add accessor `{{ flattr.button }}` (see http://docs.podlove.org/reference/template-tags/#flattr)
* add accessor `{{ episode.podcast }}`
* add query parameters to ``{{ contributor.episodes }}`:

    - group: Filter by contribution group. Default: ''.
    - role: Filter by contribution role. Default: ''.
    - post_status: Publication status of the post. Defaults to 'publish'
    - order: Designates the ascending or descending order of the 'orderby' parameter. Defaults to 'DESC'.
      - 'ASC' - ascending order from lowest to highest values (1, 2, 3; a, b, c).
      - 'DESC' - descending order from highest to lowest values (3, 2, 1; c, b, a).
    - orderby: Sort retrieved episodes by parameter. Defaults to 'publicationDate'.
      - 'publicationDate' - Order by publication date.
      - 'recordingDate' - Order by recording date.
      - 'title' - Order by title.
      - 'slug' - Order by episode slug.
      - 'limit' - Limit the number of returned episodes.

**Other**

* add gender contribution statistics to dashboard
* add expert setting "Allow to skip feed redirects"
* add warning in tracking settings when default permalink structure is used
* add support for Auphonic cover art
* add support for Jetpack "Publicize" module to podcast post type
* add warning when open_basedir is set to system report
* add daily cleanup of logging table (only keep entries of previous 4 weeks)
* contributor editing has a tabbed interface
* improved Podlove Dashboard performance
* Open Graph title does not include episode subtitle any more. If a subtitle is available, it is put in front of the summary in the description tag.
* fix: remove Jetpack "Site Icon" from podcast feeds
* fix: empty template editor when last template is deleted
* fix: empty caches when a scheduled episode gets published
* fix analytics episode average calculation for ancient episodes

**API changes**

* Flattr parameter in `[podlove-episode-contributor-list]` now defaults to "no". If you need to reactivate it, use `[podlove-episode-contributor-list flattr="yes"]`
* `[podlove-web-player]` was renamed to `[podlove-episode-web-player]` to avoid clashes with the standalone web player plugin. For now, the old shortcode still works.
* `[podlove-subscribe-button]` was renamed to `[podlove-podcast-subscribe-button]` to avoid clashes with the standalone button plugin. For now, the old shortcode still works.

= 2.0.5 =

* fix: template editor cursor position in Safari (by changing to a different theme that doesn't use bold styles)
* fix: double escaped feed enclosure URLs when using non-pretty-permalinks

= 2.0.4 =

* fix: missing flattr attribute for contributors
* fix: subscribe button description is properly wrapped in p-tags
* fix: faulty valid file if check returns "unreachable" but includes a Content-Length header
* fix: more thoughtful handling of ETags when validating files prevents failing updates
* fix: "NaN" analytics should display properly now
* fix: off-by-one display in analytics
* fix: don't HTML-encode quotes in episode title/subtitle/summary since it leads to invalid feeds
* add trakt.tv to the services list
* add support for RSS channel image tag

= 2.0.3 =

*Allow Non-Admins to access Analytics*

Analytics have a new capability called "podlove_read_analytics".
You can provide access to, for example, editors, using the following code snippet:

    function podsnip_add_capability() {
        // default roles: editor, author, contributor, subscriber
        $role = get_role('editor');
        $role->add_cap('podlove_read_analytics');
    }
    add_action( 'admin_init', 'podsnip_add_capability');

You can add snippets using the "Code Snippets" plugin.

*Bugfixes*

* fix: use proper HTTP method to create/update/delete templates
* fix: don't remove URLs from chapter marks when saving
* fix: optional episode form elements can be saved

= 2.0.2 =

* fix: include missing YAML library
* fix: namespacing issue in uninstall procedure
* fix: debug tracking example file must be downloadable

= 2.0.1 =

**Bugfixes**

* fix: properly sanitize episode form data (fixes "A wild Backslash appears")

**Enhancements**

* format download numbers in episode list
* remove check for PHP setting `allow_url_fopen` because we don't rely on it any more

= 2.0.0 =

**Download Analytics**

You want to know more about who listens to your podcast? We got you covered.

We spent months of research and prototyping to find a reliable way of tracking. We are confident that our approach works and produces trustworthy data. If you have not done so yet, you have to activate tracking in _Expert Settings -> Tracking_.

If you are interested in all the technical details, head over to http://docs.podlove.org/guides/download-analytics/.

But what you are seeing now is just the beginning. We have a plethora of ideas on how to give you even more insight into the data available. Stay tuned!

We are curious what you think about the current analytics interface? What do you love? What do you hate? What do you miss? Head over to our new community site and share your thoughts: https://community.podlove.org/

**Bugfixes**

* fix: use `home_url()` instead of `site_url()` to generate tracking URLs
* fix: tracking export does not get stuck forever when it fails once
* fix: disappearing podcast description settings
* fix: add function to repair button that removes duplicate episode entries
* fix: template editor does not forget changes if you reselect a template after changing it
* fix: improve uninstall routine
* fix: wrong month when choosing Auphonic productions
* fix: deactivate Jetpack's OpenGraph when the Publisher OpenGraph module is active

**Other Changes**

* add services: miiverse, prezi
* add missing services via repair button
* Bitlove: add `<bitlove:guid>` to RSS feed and use this to identify files
* moved episode GUID regeneration into separate metabox because it's rarely required
* always check media files when opening an episode edit page
* move podcast cover art from media tab to description tab

* Improved feed settings
  * check for missing and duplicate slugs
  * check for missing asset assignment
  * show prominent warning for detected problems
  * provide contextual help to better understand what's required and why

**Removed Functionality**

* removed module "Auphonic Production Data"
* removed the following shortcodes (use [Template Tags](http://docs.podlove.org/reference/template-tags/) instead)
  * `[podlove-episode-subtitle]`
  * `[podlove-episode-summary]`
  * `[podlove-episode-slug]`
  * `[podlove-episode-duration]`
  * `[podlove-episode-chapters]`
  * `[podlove-episode field="..."]`
  * `[podlove-podcast field="..."]`
  * `[podlove-show field="..."]`
  * `[podlove-podcast-license]`
  * `[podlove-episode-license]`
  * `[podlove-contributors]` (use `[podlove-episode-contributor-list]` instead)
  * `[podlove-contributor-list]` (use `[podlove-episode-contributor-list]` instead)
* removed the following template tags
  * `{{ contributor.publicemail }}` (use social module instead)
  * `{{ license.html }}` (use `{% include '@core/license.twig' %}` instead)

= 1.12.1 =

* fix: catch failed IP categorizations
* fix: solve PHP notice
* add custom icon to close template fullscreen mode
* add custom contributor css to look nicely in twentyfifteen theme

= 1.12 =

- enable some WordPress template tags in Twig Templates: `is_archive()`, `is_post_type_archive()`, `is_attachment()`, `is_tax()`, `is_date()`, `is_day()`, `is_feed()`, `is_comment_feed()`, `is_front_page()`, `is_home()`, `is_month()`, `is_page()`, `is_paged()`, `is_preview()`, `is_search()`, `is_single()`, `is_singular()`, `is_time()`, `is_year()`, `is_404()`, `is_main_query()`
- enable episode filtering by category slug: `podcast.episodes({category: "kitten"})`
- redesigned template editor interface
- fix feed cache issue which lead to enclosure URL mixups
- display PHP deprecation warning aggressively for everyone below 5.4

= 1.11.2 =

- Cache feed items. This drastically reduces load when no feed proxy is used; especially in a "full feed" with many episodes.
- Add Luxembourgish to languages

= 1.11.1 =

Subscribe Button fixes & enhancements:

- don't pass undiscoverable feeds to the button
- don't show a button if no feed is available
- change defaults to "big-logo" and "autowidth"
- fix issue with internal format

= 1.11 =

Say hello to the **Podlove Subscribe button**, the *Universal button to subscribe to buttons in the desired podcast client or player website*. It ships as a widget, so you can easily display it on your site. For more finegrained positioning, you can use the `[podlove-subscribe-button]` shortcode.

More info on those sites:

* Homepage: http://podlove.org/podlove-subscribe-button/
* Help Translate: http://translate.podlove.org
* GitHub: https://github.com/podlove/podlove-subscribe-button

**Other Changes**

* fix `contributor.episodes`: only show published episodes
* fix redirect form: remove url validation
* fix HEAD requests for download URLs
* redirects are counted and displayed in the redirect settings

= 1.10.23 =

**Bugfixes**

* fix social repair module
* empty rss feeds now render properly
* fix issue of randomly breaking URLs
* fix missing files when using auto-publish feature by automatically validating files before publishing
* fix "open" link for last contributor donations item
* fix javascript error in license ui

**New Features**

* add basic client-side input validation to avoid typing errors: Leading and trailing whitespace will be removed automatically. URL and email fields are automatically syntax checked.
* add support for scientific networks: ResearchGate, ORCiD, Scopus
* add explicit support for "Duplicate Post" plugin: duplicated episodes now regenerate GUIDs and contributions are copied, too

**Enhancements & Others**

* contributors form:
  * switch public name and real name fields
  * remove public email field (see deprecations)
  * move contact email field to general section
* ADN module: add option to not fall back on episode cover when no episode image is present
* adjust Bitlove script so it plays well with https sites
* include date in tracking export filename
* move web player settings to expert settings
* public contributor emails are handled by the social module now, instead of being a contributor attribute

**Deprecations & Migration**

If you are using `{{ contributor.publicemail }}` in your templates, you should change it to something like the following:

    {% for service in contributor.services({type: "email"}) %}
        <a target="_blank" href="{{ service.profileUrl }}">{{ service.rawValue }}</a>
    {% endfor %}

= 1.10.22 =

* fix bug in contribution counting
* simplify internal cache key handling to avoid technical issues
* support more licenses (CC4.0, CC0, Public Domain)
* tracking: don't count HEAD requests
* tracking: add manual migration notice to delete accidentally recorded HEAD requests

= 1.10.21 =

* improve HHVM compatibility
* resolve bug concerning internal article linking
* use WordPress method to generate default episode slugs for better results (if you are using a plugin that changes permalink slug behavior, that affects episode slugs now, too)

= 1.10.20 =

**Episode Form Improvements**

* Reorder components
* Display episode title in episode meta box
* Auto-generate media file slug based on the episode title. This is useful if your file slugs match the episode title. But don't worry, you can still change it to your liking if you prefer a different naming scheme.

**Other**

* Podlove Dashboard supports screen options
* fix contribution counting in contributor table (you may have to hit the "repair" button in `Podlove > Support` if you still see wrong numbers)
* fix tracking data export
* fix missing OpenGraph metadata
* improved redirects: added sortability and individual entries can be deactivated without being deleted
* `contributor.id` is accessible via template API now

As mentioned before, we will be phasing out PHP 5.3 soon. Please read the corresponding blog post for more details: http://podlove.org/2014/08/14/podlove-publisher-2-phasing-out-php-5-3/

= 1.10.19 =

* fix caching issue (cache keys were too long in last update, resulting in no cache hits at all)
* fix error when creating a new episode

= 1.10.18 =

**Improvements to media file slugs**

* Slugs may contain slashes now. This allows storing asset files in subfolders and using the WordPress media uploader to manage files.
* Media file validation is more consistent: when you get a green checkmark, the file is guaranteed to be valid and reachable.

**Other**

* Once we release Publisher 2.0, we will increase the minimum PHP version to 5.4 and recommend 5.5. A notice is now displayed in the system report if you are running a version requiring an upgrade.
* Rename a method to avoid a bug in early PHP 5.3 versions

= 1.10.17 =

* tracking now includes range headers
* plugin-migrations are more robust now
* add caching for OpenGraph module
* fix escaping in database logger
* fix feed validator for sites not using "pretty permalinks"
* fix dashboard box state saving
* fix generation of faulty URLs when tracking was on but pretty permalinks off
* fix auto-insertion of nonexisting templates
* fix routing issues when `/%category%/%postname%` is used as permalink structure
* fix rare cache concurrency issues by introducing a 24h auto-expiry
* remove "Critical Podlove Warnings" — they are scary and don't help a lot

= 1.10.16 =

* Hotfix: remove wrong output in HTML sites
* rework support page

= 1.10.15 =

**Various Fixes and Enhancements**

* Supply web player API with more data: "publicationDate" contains an ISO-8601 date and "show.url" the URL to the show.
* Auphonic UI improvement: When selecting a production, the "Select existing production" option disappears.
* Don't pass `redirect=no` parameter to feed URLs
* Ensure web player IDs are unique to avoid rendering bugs
* Fix caching bug that lead to disappearing web player and download buttons
* Fix redirection UI bug
* Flush rewrite rules after migrations to avoid broken links

= 1.10.14 =

**Performance**

A simple yet effective caching strategy has been implemented. This is used to cache rendered site segments. A complete cache invalidation happens when podcast related data changes. This should be a good start since such data rarely changes (mostly when a new episode is published). In a Multisite setup, each site handles its cache separately.

This is implemented using the [Transients API](http://codex.wordpress.org/Transients_API). By default, WordPress uses the database as a caching backend. If you want to squeeze out even more speed, consider installing a [Persistent Cache Plugin](http://codex.wordpress.org/Class_Reference/WP_Object_Cache#Persistent_Cache_Plugins) which replaces the database with a more efficient caching backend, such as memcached or APC. That might require some fiddling around, though.

Caching can be deactivated in the `wp-config.php` with the following line: `define('PODLOVE_TEMPLATE_CACHE', false);`

* Cache Publisher templates
* Cache feed discovery header
* Cache Bitlove widget
* Other minor performance improvements

**Templates**

* There is now a default template containing the player and download section
* Episode contributions can be sorted by comment and position, for example: `episode.contributors({orderby: "comment", order: "DESC"})` or episode.contributors({orderby: "position", order: "ASC"})
* Iterate over the list of episode tags: `{% for tag in episode.tags({order: "DESC", orderby: "count"}) %} {{ tag.name }} {% endfor %}`

**Other**

* Display available processing time in Auphonic production box
* Episode slugs may contain a wider variety of characters now, such as umlauts.
* Feeds now only contain contributors with an URI. Also, output of contributors in feeds can be filtered by group and/or role.
* New donation option for Auphonic Credits
* Remove scary debug output on failed media file validations. This can be found in the log now.
* Fix Auphonic authentication issue by providing the whole certificate chain
* Fix contributor related feed rendering issue

= 1.10.13 =

We decided to remove the "Force Download" feature. Its purpose was to guarantee that a click on a download button results in a download dialogue, rather than playing the media file in the browser. The way we implemented it worked, but came with many downsides. Just to name two of them:
1) We doubled the traffic and significantly increased load since we had to pull all the bytes through the webserver in addition to the download server (even if both are the same).
2) It was impossible to support HTTP range requests. That means no client was able to resume a broken or paused download. It also seemed to lead to strange behaviour in the web player.

But there is another, superior way to force downloads: configure your download server. The important setting here is [Content-Disposition](http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1).

In *Apache*, you need the `headers` module (`a2enmod headers` on Debian-ish distributions). Then you can add this to your configuration:

    <FilesMatch "\.(mp3|m4a|ogg|oga|ogv|opus|mpg|m4v|webm|flac|pdf|epub|zip)$">
        Header set Content-Disposition attachment
    </FilesMatch>

*lighttpd*:

    $HTTP["url"] =~ "\.(mp3|m4a|ogg|oga|ogv|opus|mpg|m4v|webm|flac|pdf|epub|zip)$" {
        setenv.add-response-header = ("Content-Disposition" => "attachment")
    }

*Nginx*:

    if ($request_filename ~ "\.(mp3|m4a|ogg|oga|ogv|opus|mpg|m4v|webm|flac|pdf|epub)$"){
        add_header Content-Disposition 'attachment';
    }

**Other Changes**

* Trim whitespace around some URLs that appear in the podcast feed.
* Update certificate for auth.podlove.org
* Fix an issue with saving contributors in `Podlove > Podcast Settings > Contributors`

= 1.10.12 =

**Tracking**

* Never redirect media file URLs to trailing-slash-URLs (WordPress has a habit of adding a trailing slash to every URL via redirect. That is undesirable here, since it create two download intents).
* Handle empty user agent strings
* Do not write anything to tracking-database unless tracking is in analytics mode.

**Other**

* Compress export files via gzip.
* Add tracking data to export files.

= 1.10.11 =

**Tracking**

* For increased compatibility (we are looking at you, iTunes), new file URLs without parameters are used when analytics are active.
* Add `&ptm_file=<episode-slug>.<file-extension>` parameter to the end of Parameter-URLs, so tools like wget generate a filename with a correct extension by default.
* Feed URLs now support a `&tracking=no` parameter, which dynamically disables tracking parameters in feed enclosures. This is introduced for debugging purposes and is only mentioned here for the sake of completeness.
* Fix PHP glitch that caused tracking to go into "Tracking URL Parameters" mode even when it was disabled

**ADN Module**

* Fix issue that could lead to repostings
* Fix tags description
* Messages longer than 256 characters will be shortened now and "…" will be appended

**Other**

* Fix: reenable "force download" option

= 1.10.10 =

We discovered incompatibilities between our tracking implementation and some clients. To avoid further trouble, we are *deactivating tracking* until we solve the issue. The option is still available, we just switch it off automatically with this release and it isn't on by default any more.

If you're of the curious type, feel free to activate it and tell us any issues you run into. Thanks!

= 1.10.9 =

* Fix: When tracking was active but no geo-location database available, downloads would fail. This exception is handled correctly now. You can check the status of tracking and the geo-location database in `Expert Settings > Tracking`

= 1.10.8 =

* Feature: Services in templates can be filtered by their type. That way, you can, for example, iterate over all Twitter accounts via `podcast.services({type: "twitter"})`. The previous "type" parameter (for choosing between "social", "donation" and "all") has been renamed to "category". All default templates have been adjusted accordingly _but if you were using this API in a custom template, you need to change it_.
* Feature: `podcast.contributors` in templates are sorted by name now. You can change the order by writing `podcast.contributors({order: "DESC"})`. When using grouping, each group will be sorted separately.
* Feature: `podcast.contributors({scope: "global-active"})` is limited to contributors with at least one contribution in a published episode. To list contributors ignoring this limitation, use `podcast.contributors({scope: "global"})`. "global-active" is the new default.
* Feature: Allow manual posting of ADN announcements
* Feature: Add contributor support to ADN announcements
* Feature: We are beginning to implement download intent tracking and statistics. As a first step, we are now tracking download intents. A following release will contain an analytics section where you can examine the statistics.
* Feature: The feed `<link>` can be configured in `Expert Settings > Website` now. It still defaults to the home page. Other options include the episode archive and any WordPress page.
* Enhancement: remove encryption for "protected feed" password to prevent autofill browser features to destroy contents
* Enhancement: default WordPress search now covers episode subtitle, summary and chapters
* Enhancement: add Vimeo, Gittip and about.me to services
* Enhancement: The expert setting "Display episodes on front page together with blog posts" changed to "Include episode posts on the front page and in the blog feed". So if you set it, episodes will additionally appear in `/feed`. However, only in the form of a post. You will not find enclosures, iTunes metadata etc. in `/feed` items.
* Enhancement: sort chapters imported from Auphonic by time
* Enhancement: Changes to feed list: redirect URL is shown and added screen options to hide columns
* Enhancement: Added Publisher version as an attribute to the export file. If a file is imported with a version different from the current Publisher, a warning is displayed.
* Fix: enable group and role selection in contributor shortcodes
* Fix: failing delayed ADN broadcast
* Fix: stop sending ADN announcements for old episodes
* Fix: refresh of Auphonic presets keeps current preset
* Fix: `contributor.episodes` does not return duplicate episodes any more
* Fix: Jabber URL scheme is now prefixed with `jabber:`
* Fix: Display podcast subtitle in feed description (it was the blog description before)
* Fix: Hide contributors missing a URI from feeds
* Fix: Escaping issue when saving podcast description settings

= 1.10.7 =

* Feature: Direct episode access in templates via `{{ podcast.episodes({slug: 'pod001'}).title }}`
* Feature: Episodes in templates can be filtered and ordered, for example `{{ podcast.episodes({orderby: 'title', 'order': 'ASC'}) }}`. For details, see [`podcast.episodes` documentation](http://docs.podlove.org/ref/template-tags.html#podcast)
* Feature: Direct contributor access in templates via `{{ podcast.contributors({id: 'john'}).name }}`
* Feature: Add shortcode `[podlove-podcast-social-media-list]`, which lists all social media accounts for the podcast
* Feature: Add shortcode `[podlove-podcast-donations-list]`, which lists all donation accounts for the podcast
* Feature: Add tag support for Auphonic
* Enhancement: Add "Save and Continue Editing" buttons to all table based management screens
* Enhancement: Use translations for month and day names in formatted template dates (if a language other than english is used)
* Enhancement: Add refresh buttons for Auphonic preset selector
* Enhancement: Pass more data to web player (as preparation for the next release)
* Enhancement: Improved export format: It has its own namespace and a version now. Publisher version and export date are included as XML comments. XML elements are indented for better readability.
* Remove default content for new templates
* Fix: "Network Activate" works now
* Fix: group and role filters for `[podlove-podcast-contributor-list]` shortcode work as expected now
* Fix: Add services and donations to export format
* Fix: `episode.player` in episode loops, outside the WordPress loop works now
* Fix: Auphonic chapter integration issue
* Fix: Instagram URL scheme

= 1.10.6 =

* Fix: contributor services will be saved correctly
* Enhancement: add a donation column to contributor management table

= 1.10.5 =

**Changes to the Templating System**

`episode.recordingDate` and `episode.publicationDate` are DateTime objects now. Available accessors are: year, month, day, hours, minutes, seconds. For custom formatting, use `episode.recordingDate.format("Y-m-d H:i:s")` for example. Calling `episode.recordingDate` directly is still supported and defaults to the format configured in WordPress.

**Other Changes**

* Enhancement: Add refresh buttons for ADN patter and broadcast channel selectors
* Fix: Avoid "Grey Goo" scenario of self-replicating contributors

= 1.10.4 =

* Hotfix: solve migration issue

= 1.10.3 =

**Changes to the Templating System**

* New filter: `padLeft(padCharacter, padLength)` can be used to append a character to the left of the given string until a certain length is reached. Example: `{{ "4"|padLeft("0",2) }}` returns "04";
* For consistency `{{ contributor.avatar }}` is now an object. To render an HTML image tag, use `{% include '@contributors/avatar.twig' with {'avatar': contributor.avatar} only %}`.
* `{{ episode.duration }}` has been turned into an object to enable custom time renderings. The duration object has the following accessors: hours, minutes, seconds, milliseconds and totalMilliseconds.

__DEPRECATIONS/WARNINGS__

* `{{ episode.duration }}` should not be used any more. The default templates are updated but if you have used it in a custom template, you must replace it. Example: `{{ episode.duration.hours }}:{{ episode.duration.minutes|padLeft("0",2) }}:{{ episode.duration.seconds|padLeft("0",2) }}`
* `{{ episode.license.html }}` and `{{ podcast.license.html }}` are deprecated. Use `{% include '@core/license.twig' %}` for the previous behaviour of choosing the correct license based on context. If you want to be more specific, use `{% include '@core/license.twig' with {'license': episode.license} %}` or `{% include '@core/license.twig' with {'license': podcast.license} %}`.

**Other Changes**

* Feature: ADN Module supports broadcasts
* Enhancement: Contributor shortcode defaults to `donations="yes"` to avoid confusion
* Enhancement: `[podlove-episode-downloads]` now uses templates internally
* Enhancement: Added 500px, Last.fm, OpenStreetMap and Soup to Services
* Enhancement: Use custom contributor social/donation titles as icon titles
* Enhancement: Template form has a "Save Changes and Continue Editing" button now
* Enhancement: feed validation is asynchronous now and has improved performance
* Enhancement: Licenses have a new interface and are compatible with Auphonic now: they can be imported from a finished production and are included when creating a production.
* Enhancement: Default MySQL character set is utf8 now when creating tables
* Enhancement: Add datepicker for episode recording date
* Fix: all default contributors appear in new episodes again
* Fix: change Tumblr URLs from https to http since Tumblr does not support them
* Fix: `[podlove-podcast-contributor-list]` shows the correct contributors now
* Fix: internal template warning when accessing empty contributor roles or groups
* Fix: episode rendering when no files are available
* Fix: flattr script in rss feeds
* Fix: importer issue where sometimes modules would not activate properly

= 1.10.2 =

* Feature: add template filter `formatBytes` to format an integer as kilobytes, megabytes etc. Example: `{{ file.size|formatBytes }}`
* Feature: New accessor `{{ file.id }}`. This is required to generate download forms.
* Fix: `[podlove-episode-contributor-list]` shortcode: Firstly, the "title" attribute works again. Secondly, output by group is optional now and defaults to "not grouped" (as it was before 1.10). If you are using contributor groups and would like grouped output, use `[podlove-episode-contributor-list groupby="group"]`
* Fix: division by zero bug in statistics dashboard
* Fix: parse time in statistics dashboard correctly as normalplaytime
* Fix: add missing template accessor `{{ episode.recordingDate }}`
* Remove separate "publication date" field in episodes. Instead, use the episode post publication date maintained by WordPress. It can be accessed via `{{ episode.publicationDate }}`
* Fix: missing contributor-edit-icon on last entries

= 1.10.1 =

* Fix: podlove-episode-contributor-list shortcode: add support for "group" and "role" attributes
* Fix: podlove-episode-contributor-list shortcode: fix broken flattr button
* Fix: feed widget: only compress if zlib extension is loaded

= 1.10.0 =

**All-new, mighty Templating system**

You can now use the [Twig Template Syntax](http://twig.sensiolabs.org/documentation) in all templates. Access all podcast/episode data via the new template API. Please read the [Template Guide](http://docs.podlove.org/tut/understanding-templates.html) to get started.

If you have used templates before, please note that some shortcodes are now _DEPRECATED_. That means they still work but will be removed at some point. Following is a list of affected shortcodes and their replacements:

Instead of `[podlove-web-player]`, write `{{ episode.player }}`.

Instead of `[podlove-podcast-license]`, write `{{ podcast.license.html }}`.

Instead of `[podlove-episode-license]`, write `{{ episode.license.html }}`.

Instead of `[podlove-episode field="subtitle"]`, write `{{ episode.subtitle }}`. Instead of `[podlove-episode field="summary"]`, write `{{ episode.summary }}` etc. When in doubt, look at the [Episode Template Reference](http://docs.podlove.org/ref/template-tags.html#episode).

Changing the podcast data shortcodes works exactly the same: Instead of `[podlove-podcast field="title"]`, write `{{ podcast.title }}` etc. When in doubt, look at the [Podcast Template Reference](http://docs.podlove.org/ref/template-tags.html#podcast).

**Other Changes**

* Feature: The Podlove dashboard includes a section for feeds if you activate the "Feed Validation" module. It is intended as an overview for the state of your feeds. It shows the latest modification date, the number of entries, compressed and uncompressed size and the latest item. Additionally, you can validate your feeds against the w3c feed validator right from the dashboard.
* Feature" Better Bitlove integration. There is a new setting in `Podlove > Podcast Feeds > Directory Settings` called "Available via Bitlove?". It checks if there is a corresponding Bitlove feed and verifies it on a regular basis.
* Feature: Support for the oEmbed format
* New shortcode: `[podlove-episode-list]` lists all episodes including their episode image, publication date, title, subtitle and duration chronologically. This replaces the archive pages generated by the [Archivist - Custom Archive Templates](https://wordpress.org/plugins/archivist-custom-archive-templates/) plugin, if you are using it right now.
* New shortcode: `[podlove-feed-list]` lists all public feeds
* New shortcode: `[podlove-global-contributor-list]` shows all podcast contributors and lists related episodes.
* New shortcode: `[podlove-podcast-contributor-list]` shows regular podcast contributors
* Enhancement: The feed title may now include the asset title for easier discovery. This setting can be found at `Podlove > Feed Settings`
* Changed shortcode: `[podlove-contributor-list]` is _DEPRECATED_. Please use `[podlove-episode-contributor-list]` instead.
* Enhancement: add "autogrow" feature to chaptermarks text field
* Enhancement: globally hide the migration-tool banner once dismissed rather than per-client via cookie
* Fix: When setting the chapter asset to manual, delete all chapter caches to avoid hiccups
* Fix: Contributor links in the backend use an ID now rather than the contributor slug. That way they work when no slug is set.
* Fix ADN backslash escaping issue in post titles
* Fix: all contributions can be deleted

= 1.9.12 =
* Enhancement: Take over chapters when switching from chapter asset to manual
* Enhancement: Contributor tables look better in a wider range of themes
* Fix: Auphonic module: Buttons cannot be clicked again while the corresponding action is in progress

= 1.9.11 =
* Enhancement: Split podcast settings into tabs.
* Enhancement: Import/Export module supports contributors and contributions
* Enhancement: Separate "default contributors" and "podcast contributors". You can configure default contributors in "Contributor Settings > Defaults" and podcast contributors in "Podcast Settings > Contributors". Display podcast contributors using the shortcode `[podlove-podcast-contributor-list]`.
* Enhancements: Plethora of adjustments in contributor interfaces to avoid confusions and smoothen workflows
* Feature: Contributions may have a public comment (to describe the context of the person), which can be displayed in contributor lists.
* Fix: Skip contributions with missing contributors.

= 1.9.10 =
* Fix: episode images when using manual entry
* Fix: do not include episodes in blog feed
* Fix: paged feed calculation of number of pages when using global Publisher default
* Fix: remove unused IDs from contributor lists

= 1.9.9 =
* Fix: several contributor episode form bugs
* Fix: sum of all media file sizes in dashboard statistics
* Add lost bugfix: Bundle crt file to avoid StartSSL trust issues.

= 1.9.8 =
* Enhancement: WordPress has an option to close commenting for posts after a certain amount of days. This now also applies to podcast episodes.
* Enhancement: Fallback for Contributor Names.
* We had to change the generated Flattr URL for contributors in episodes to a less error prone scheme. Flattr counts for those buttons will therefore reset to 0 (the actual clicks are _not_ lost! they are just not displayed).
* fix sum of all media file sizes in dashboard statistics
* fix license URLs
* fix feed paging issue
* Fix: Feed Item Limit is now displayed correctly
* Fix: Ignore deleted contributors if they were assigned to an Episode or Podcast
* Fix: activation / deactivation of multiple modules at once works as expected now
* add filter "podlove_enable_gzip_for_feeds" to disable gzip feed compression
* Contributor role and group columns will be hidden if no roles or groups were added

= 1.9.7 =
* fix and enhance dashboard statistics
* gender statistics: use episode contributions instead of contributors for counting

= 1.9.6 =
* fix redirect issue after podcast migrations
* fix legacy ADN module publishing issue
* only show `itunes:complete` in feeds if it is set avoid a feedvalidator.org bug
* add experimental episode fun facts in dashboard
* add PayPal Button link in contributor settings
* other contributor admin enhancements
* contributor public name defaults to real name now

= 1.9.5 =
* Contributor Module improvements
  * New icon graphics
  * "Contributor Groups" as a new way to divide contributors by participation. For example, you might want to have a "Team" group and one for supporting contributions.
  * No more default roles. It's just not possible to provide a sensible default set. So just add the ones you need :) (existing roles will *not* be deleted)
  * The contributors defined in `Podcast Settings > Contributors` are now the default contributors for new episodes
  * Reworked contributor management table. Better use of space, hideable columns, avatars and more.
  * Reworked episode contributor table. Avatars, edit links and more.
  * Support for more services
  * ... and a bunch of other tweaks
* Web Player Update: compatible with WordPress theme "Twenty Fourteen"
* Fix: don't gzip feeds when zlib compression is active
* Fix: episode media file checkbox width for WP3.8
* Fix: menu icons for WP3.8

= 1.9.4 =
* Fix: gzip feeds on compatible systems only (avoids failing feed generation)
* Fix: Feed paging (again)

= 1.9.3 =
* Fix: provide global feed limit default on setup
* Fix: managing contributor roles no longer outputs permission issues
* Fix: corrected a faulty "Add New" contributor link
* Fix: paged feeds were broken

= 1.9.2 =
* Fix: _Module: Contributors_ prevent initial migration to import duplicate contributors
* Fix: _Module: Contributors_ Fix faulty default roles

= 1.9.0 / 1.9.1 =

**New Module: Contributors**

Podcasts are not possible without their active communities. Huge contributions are being made behind the scenes and nobody notices except the podcaster. The contributors module shines light on all those diligent people. It's now easy to manage contributors of an episode and list them on the blog. The list contains references to their social profiles and the donation service Flattr. Shortcode to display them in an episode post: [`[podlove-contributor-list]`](http://docs.podlove.org/ref/template-tags.html#contributors).

**Simple Protected Feeds**

You can now protect some or all of your feeds using HTTP authentication. Authenticate via a defined username and password or use the WordPress user database as backend.

**License Selector**

We built an interface to generate a Creative Commons license for your podcast and episodes. You can still use a custom URL and name if you don't want a CC license. Use `[podlove-podcast-license]` and `[podlove-episode-license]` to display them in your episode posts.

**Other Changes**

* Feature: Add "Expert Settings" option to always redirect to media files instead of forcing a browser download. This is interesting for you if you want to minimize traffic on your server hosting the Publisher.
* Feature: add global setting to configure feed item limits
* Feature: Set "itunes:explicit" tag per episode if you want to (you have to activate the feature in the expert settings)
* Enhancement: Feeds are delivered with gzip compression if possible
* Enhancement: Support for temporary redirects in expert settings
* Fix: keep ?redirect=no flag in paged feeds
* Fix: _Module: Import/Export_ Importing episodes no longer causes floods of ADN posts.
* Fix: _Module: Auphonic_ respect Auphonic chapter offset
* _DEPRECATED_: `podlove-contributors` shortcode. Use `podlove-contributor-list` instead

= 1.8.13 =
* Feature: Update Web Player to 2.0.17 (for realsies). It fixes an issue with icon/font display.

= 1.8.12 =
* Feature: Update Web Player to 2.0.17
* Bugfix: Fix PHP 5.3 issue in import module

= 1.8.11 =
* Feature: New module for Import/Export. Now you can easily move all your podcast data to another WordPress instance.
* Feature: Add support for `<itunes:complete>` tag. If there won't be any additional episodes, you can go to `Podlove > Podcast Settings` and activate this setting.
* Bugfix: Bundle crt file to avoid StartSSL trust issues.

= 1.8.10 =
* Hotfix: Removes incompletely updated license feature which wasn't supposed to be in that release in the first place. Sorry!

= 1.8.9 =
* Feature: Update Web Player to 2.0.16
* Enhancement: Render Twitter and OpenGraph tags using a DOM-Generator to avoid all possible escaping issues.
* Enhancement: Allow multiple mime types for web player config slots. Fixes an issue with Firefox and Opus.
* Enhancement: I CAN HAZ SECURETEH?! auth.podlove.org haz https nao.
* Bugfix: Module settings screen rendering issue with PHP 5.3
* Bugfix: Fix link to shortcode documentation

= 1.8.7 / 1.8.8 =
* Enhancement: Refined Auphonic Workflow: Always import duration and slug; new option to automatically start productions after creation; new option to automatically publish episodes as soon as the production is ready
* Hotfix: escaping issue

= 1.8.6 =
* Enhancement: Change feed redirect hook and priority so it works better with Domain Mapping plugin
* Enhancement: Extend OpenGraph metadata by post thumbnail and episode description (thanks smichaelsen!)
* Feature: Update Web Player to 2.0.15
* Fix: Solve rare issue where first chapter line would be ignored
* Fix: Firefox display issue in migration assistant

= 1.8.5 (2013-08-11) =
* Fix: JavaScript issue preventing certain UI elements from working correctly (Tagging, Auphonic, …)

= 1.8.4 (2013-07-27) =
* Fix: Performance issue in Auphonic plugin

= 1.8.3 (2013-07-27) =
* Enhancement: dates with leading zeros in Auphonic module
* Enhancement: Auphonic UI smoothifications
* Enhancement: Update assets after successful production

= 1.8.2 (2013-07-27) =
Auphonic integration Enhancements

* Preset is only applied once
* Add Text for "Open Production" button
* "Start Production" button more prominent

= 1.8.1 (2013-07-27) =
* Fix Release

= 1.8.0 (2013-07-27) =
* Auphonic Module Update. You are now able to manage productions directly from within the Publisher without visiting Auphonic at all. As always, any feedback is more than welcome.
* App.net Module Update. Support for Patter, language annotations and delayed posting.
* Enhancement: Control sequence in which audio elements are printed in the web player. This encourages browsers to use superior codecs (rather than mp3).

= 1.7.3 (2013-07-18) =
* Enhancement: Show expected and actual mime type in log when an error occurs
* Bugfix: Fix Bitlove integration
* Bugfix: Correctly hide content in password protected posts
* Bugfix: ADN Plugin announced new episode every time the episode got saved
* Fix some PHP 5.4 Strict warnings

= 1.7.2 (2013-07-11) =
* Feature: Update Web Player to 2.0.13
* Bugfix: Feed web player with existing/valid files only
* Bugfix: Downloads work without JavaScript enabled
* Bugfix: Episode previews should work now
* Bugfix: Migration Assistant: you are now able to import file slugs containing dots
* Bugfix: Fix podlove_alternate_url issue

= 1.7.1 (2013-07-06) =
* Logging Module: Deactivate sending of mails until we figure out what causes some misbehaviours
* Enhancement: System Report: check for SimpleXML availability
* Bugfix: ADN Announcements should work with all kinds of templates now

= 1.7.0-alpha (2013-07-03) =
* New Module: App.net. Right now, it lets you announce new podcast episodes on ADN whenever you publish a new one. It's the groundwork for more ADN integrations. (Thanks @chemiker!)
* New Module: Auphonic. We did not shy away from writing a completely new module to present to you the best Auphonic integration the world has seen in a WordPress plugin. It replaces the previous one ("Auphonic Production Data"). You are now able to import Auphonic production data without the need for a production description file. Like the ADN module, this lays the groundwork for much deeper Auphonic integration. (Thanks @chemiker!)
* Enhancement: Return the correct content type when initiating a download so devices may choose intelligently whether to save the file or open it in a certain application.
* Enhancement: Remove download button styles so the style adjusts based on used browser and theme
* Bugfix: Fix incompatibility to some file name schemes
* Bugfix: Fix 404 status for paged feedburner feeds

= 1.6.11-alpha =
* Bugfix: use NPT library

= 1.6.10-alpha =
* Fix release issues

= 1.6.7-alpha =
* Enhancement: Move file types settings to expert settings
* Enhancement: Saving a template redirects to template list
* Enhancement: System Report is a readonly textarea
* Enhancement: Group modules
* Enhancement: When creating an asset: if that web player slot is not taken yet, assign it automatically
* Enhancement: Accept time formats with minutes > 59 if no hours are given
* Bugfix: Fix "Chapters Visibility" setting

= 1.6.6-alpha =
* Enhancement: When validating, ignore timeouts (so files don't disappear from feeds just because one request took too long)
* Enhancement: When episode permalinks are invalid, try to autoresolve by switching to "Use Post Permastruct"
* Bugfix: Fix some expert setting migration issues
* Bugfix: Hide invalid media files from downloads

= 1.6.5-alpha =
* Feature: Feeds are sortable
* Feature: You can revalidate single media files in the dashboard
* Enhancement: Use pretty status icons
* Enhancement: Add "sortable handle" for asset and feed lists, so the sortability feature is more discoverable
* Enhancement: Add "Podlove" entry to WordPress toolbar
* Enhancement: Organize "Expert Settings" into tabs
* Enhancement: Don't log "File not Modified"
* Bugfix: Activate feature "Activate asset for all existing episodes" for pending episodes
* Bugfix: Solve issue with chapter asset cache invalidation
* Bugfix: Solve chapter encoding issue when chapters start with umlauts
* Bugfix: Fix video display in some themes
* Other small UI changes in various places

= 1.6.4-alpha =
* Bugfix: use manual chapter entries if available
* Bugfix: PSC assets work properly
* Bugfix: URL magic doesn't interfere with other post types
* Bugfix: deactivate preload in web player

= 1.6.3-alpha =
* Bugfix: "Display episodes on front page together with blog posts" works again
* Bugfix: chapters at 0 seconds are not ignored any more
* Bugfix: correctly show feed title in deletion confirmation
* Bugfix: handle missing/invalid PSC file with appropriate grace
* Bugfix: remove player from feed
* Bugfix: fix false negatives in error log; reenable logging-mails
* Bugfix: fix timezone in logs

= 1.6.2-alpha =
* Bugfix: fix template autoinsert migration issue

= 1.6.1-alpha =
* Bugfix: fix call-time pass-by-reference
* Bugfix: deactivate logging-mails until we find out what's wrong

= 1.6.0-alpha =
* Feature: New modules "Asset Validation" and "Logging". Automatically verify assets once in a while (fresh posts will be validated more often than old posts). Detailed logging in Podlove dashboard. Receive an email when all episode assets are unavailable.
* Feature: always print PSC in feed if any chapter format is available (psc, mp4chaps, json)
* Feature: upgrade web player to v2.0.10
* Enhancement: template autoinsert settings are on templates page now
* Enhancement: correctly fall back to podcast image when episode image is activated but missing
* Enhancement: various UI fixes (thanks @MaZderMind)
* Enhancement: improve feed deletion dialogue
* Enhancement: default title for episode assets is file format title
* Bugfix: solve permalink issue after migrations
* Bugfix: migrate comment hierarchy correctly

= 1.5.4-alpha =
* Feature: PubSubHubbub support via new module
* Enhancement: Check for iconv availability in system report
* Turn permalink compatibility up to eleven

= 1.5.3-alpha =
* Bugfix: more robust permalink fix

= 1.5.2-alpha =
* Bugfix: Fix using the same permalink structure / 404 on pages

= 1.5.1-alpha =
* Enhancement: episodes may share the same permalink structure with WordPress posts
* Enhancement: episode archive url can be configured
* Enhancement: run system report more intelligently
* Enhancement: Auphonic module works more smoothly for new episodes
* Enhancement: Fallback to 302 redirects for HTTP/1.0 clients
* Enhancement: Confirm before deleting feeds and templates
* Enhancement: Parse time strictly following the NPT specification: http://www.w3.org/TR/media-frags/#npttimedef
* Bugfix: don't use feed redirect when a feed archive page is specified

= 1.4.8-alpha =

Minor fixes and improvements:

* feed: remove style tags from content:encoded (feedvalidator.org warning)
* feed: ensure description precedes content:encoded (feedvalidator.org warning)
* prevent feed proxy issue
* `HEAD` requests for paged feeds return correct responses
* enable paging for `/podcast` archives
* add description to redirect settings
* rename "record date" to "recording date"

= 1.4.7-alpha =
* Hotfix: ignore empty redirect rules

= 1.4.6-alpha =
* Bugfix: The podcast archive is available via `/podcast` again.

= 1.4.5-alpha =
* Enhancement: always show critical errors found by system report
* Enhancement: flush rewrite rules after migration and feed changes
* Enhancement: redirect settings support URL parameters

= 1.4.4-alpha =
* Feature: configure permanent redirects in Expert Settings
* Bugfix: fix feed url generation for "default style" permalinks
* Bugfix: migration assistant shows enclosure errors/warnings
* Bugfix: add missing atom prefix in feed link elements
* Bugfix: generate valid episode permalinks for "Default"/"Not Pretty" permalink settings
* Bugfix: change default episode permalink structure from `%podcast%` to `podcast/%podcast%` to avoid conflicts with those setups using %postname% as WordPress permalink — which is quite common.

= 1.4.3-alpha =
* Bugfix: fix system report issue
* Bugfix: fix feed setting "No limit. Include all items."

= 1.4.2-alpha =
* Bugfix: add Auphonic metadata file type
* Bugfix: fix bug regarding limiting feed items

= 1.4.1-alpha =
* Bugfix: reactivate /podcast url

= 1.4.0-alpha =
* Feature: "Soft Launch" for migration tool. It isn't activated by default but if you are adventurous, feel free to give it a try. Any feedback is greatly appreciated!
* Feature: Support paged feeds (RFC5005) so clients may always fetch all episodes even if the default feed only contains the most recent episodes
* Feature/Change: Similar to the web player setting, you now can insert templates automatically at the beginning or end of a post. You could even create multiple templates, one to append and one to prepend. This replaces the previous template-autoinsert feature.
* Feature: New module "Auphonic Production Data". Thanks @tobybaier!
* Enhancement: Update Web Player to v2.0.7
* Enhancement: open graph title is podcast title

= 1.3.30-alpha =
* Feature: Option to autoinsert web player at beginning or end of post
* Feature: Add "Support" page including a system report
* Enhancement: Add .post class to article-classes list to improve theme compatibility
* Bugfix: Fix feed validation mixup
* Bugfix: Support "future publishing" of episodes (thanks Marc!)

= 1.3.29-alpha =
* Bugfix: Fix some media file mixups

= 1.3.28-alpha =
* Feature: Two new episode fields `publication_date` and `record_date`. Accessible via episode shortcode. Must be enabled in expert settings.
* Feature: Assets can be sorted via drag'n'drop. Influences download button/list order.
* Bugfix: fix "No More Enclosures" feature. I was using a deprecated hook
* Enhancement: upgrade Podlove Web Player to 2.0.5
* Enhancement: move episode asset url to expert settings
* Change: Drop support for Atom feeds
* Change: Remove support for mnemonic and Episode Assistant module

In the beginning, everything evolved around the episode numbers and the
mnemonic. Then, it made sense to support this concept by something like the
episode assistant.

Now, the mnemonic is merely an afterthought. It's used by no part of
the system except the episode assistant. And this doesn't do a lot that
can't be done without it either. So we decided to drop both for now.

A similar concept might return once we tackle stuff like seasons.

= 1.3.27-alpha =
* Enhancement: enforce trailing slash at the end media file base url
* Enhancement: fix huge download-select-font
* Enhancement: doublecheck curl availability
* Bugfix: double quote escaping for Web Player title, subtitle and summary

= 1.3.26-alpha =
* Enhancement: upgrade Podlove Web Player to 2.0.4

= 1.3.25-alpha =
* Feature: Setting for Web Player to show or hide chapters by default
* Enhancement: Open Graph now correctly excludes non-audio assets
* Enhancement: "File not found" errors now result in some debug output which may help tracing the issue
* Enhancement: upgrade Podlove Web Player
* Bugfix: Generated Template shortcodes now use the "id" attribute rather than "title"

= 1.3.24-alpha =
* Enhancement: remove mediaelementjs demo files

= 1.3.23-alpha =
* Enhancement: upgrade Podlove Web Player
* Enhancement: improve handling of url_fopen setting
* Enhancement: feed item limit is now a select box. default is now "all" instead of "WordPress Default"

= 1.3.22-alpha =
* Hotfix: solve White Screen of Death issue for PHP 5.4

= 1.3.21-alpha =
* Bugfix: allow deletion of unused assets
* Enhancement: if an asset shouldn't be deleted, display where it's in use (allow deletion anyway)
* Enhancement: Downloads redirect to file if `allow_url_fopen` is disabled.

= 1.3.20-alpha =
* Enhancement: always add a trailing slash to media file base url
* Bugfix: trying to fix escaping part whatnotsoever

= 1.3.19-alpha =
* Hotfix: slugs are not forced into lowercase any more

= 1.3.18-alpha =
* Feature: Module for Bitlove.org support! Adds links to torrent-files to the downloads-section of your episodes.
* Feature: add video support for web player
* Enhancement: fix a (possibly rare) memory bug when downloading files
* Enhancement: enable episodes on home page by default
* Enhancement: change default download widget style to the select-thingy
* Bugfix: fix feed warning

= 1.3.17-alpha =
* Bugfix: fix issue with 3rd party custom post types
* Enhancement: improve Feed Settings screen

= 1.3.16-alpha =
* Feature: new style for file downloads `[podlove-episode-downloads style="select"]`
* Enhancement: Solve feed url issues:
** ensure validity on save
** support non-pretty url format
* Enhancement: un-default some modules: episode assistant, twitter card summary
* Enhancement: fix asset & feed setting redirect issue
* Enhancement: add caption file types
* Enhancement: new icons!
* Enhancement: allow underscores and dots in slugs
* Bugfix: fix issue with multiple backslash-escapings

= 1.3.15-alpha =
* Hotfix: fix 404 issue concerning episode prefixes and posts

= 1.3.14-alpha =
* Feature: ajaxy asset revalidation in dashboard
* Feature: duration support for web player
* Feature: add option to provide web players with opus format
* Enhancement: slightly improved web player settings pane
* Enhancement: deprecate [podlove-template title=""] in favor of [podlove-template id=""] for clarity
* Enhancement: move category support for episodes into a module
* Enhancement: force feed & episode slugs into url conformity
* update plugin description and add a FAQ section

= 1.3.13-alpha =
* Bugfix: Podcast model works with `switch_to_blog` now

= 1.3.12-alpha =
* Enhancement: don't embed cover image fallback in feed as episode image when there is no episode image
* Feature: add action link for assets to enable it for all existing episodes. useful when adding a new asset for an existing podcast

= 1.3.11-alpha =
* Enhancement: Image input fields try to show pasted image immediately
* Enhancement: remove unused "post episode to show" setting
* Bugfix: fix asset preview glitch when changing the episode slug
* Bugfix: fix GUID upgrade migration

= 1.3.10-alpha =
* Hotfix: too much escaping when `get_magic_quotes` is on

= 1.3.9-alpha =
* Enhancement: rectify feed generator title
* Bugfix: add missing sql escaping

= 1.3.8-alpha =
* Bugfix: fix episode image fallback to podcast image

= 1.3.7-alpha =
* Enhancement: In feed settings, URL preview updates live now
* Enhancement: "Add New" button in blank list table views
* Enhancement: display `<language>` tag in RSS channel and correct xml:lang in ATOM
* Enhancement: forbid asset deletion when used in feed or web player
* Bugfix: Templates list view highlights template preview correctly now for more than one entry
* Bugfix: remove duplicate rel="self" entry from RSS feeds
* Bugfix: correct escaping for all input fields
* Bugfix: fix 404s when using an empty episode url prefix

= 1.3.6-alpha =
* Bugfix: Minor WordPress 3.5 compatibility issue
* Bugfix: Use correct shortcodes in default template
* Enhancement: Add support for `[podlove-episode field="title"]`
* Enhancement: Improve auto-updating of media files. It will now work correctly without the need to save the post after changing the media file slug. It updates every time you change the slug and lose focus of the input field.

= 1.3.5-alpha =
* Bugfix: pages and menu items don't appear unexpectedly in main loop any more
* Bugfix: when using the WordPress importer, don't create new GUIDs
* Enhancement: rename GUID meta so it doesn't appear as custom field

= 1.3.4-alpha =
* Hotfix: fix asset creation issue

= 1.3.3-alpha =
* Enhancement: Use episode image fallback to podcast image in webplayer.

= 1.3.2-alpha =
* Feature: When using manual mp4chaps style chapter marks, the Publisher generates "Podlove Simple Chapters" for the feed automatically. Includes link support using chevrons (example: `00:00:00 Intro <http://podlove.org>`).

= 1.3.1-alpha =
* update web player to 1.2.1

= 1.3.0-alpha =
* Feature: [Podlove Deep Linking](http://podlove.org/deep-link/) support
* Feature: support for new web player
* Bugfix: enable tag and category search results for all post types
* Bugfix: Feed item limit setting works now
* Bugfix: avoid rare curl warning
* Bugfix: improve feed validity
* Enhancement: remove unused feed setting `show description`
* Enhancement: Podlove feeds don't override /feed/* WordPress feeds any more
* Enhancement: Rename plugin to "Podlove Podcast Publisher"
* Enhancement: Move asset assignments from podcast settings to asset settings

= 1.2.24-alpha =
* Bugfix: don't show milliseconds in feed so feedvalidator.org stops complaining

= 1.2.22/23-alpha =
* Fix deployment bug, delete unused files from SVN

= 1.2.21-alpha =
* Bugfix: check for asset relations (not just media file relations) when trying to delete assets
* Bugfix: asset form can handle file types using brackets now
* Bugfix: There was an undocumented way to just show episodes on the front page. However, this made using static pages as front page unusable. So for now, this functionality has been deactivated. The expert option to display both episodes and articles on the front page is not affected and will continue to work.
* Enhancement: duration is now normalized and can be printed full (HH:MM:SS.mmm) or HH:MM:SS using `[podlove-episode field="duration" format="full/HH:MM:SS"]`
* Enhancement: curl requests set user agent

= 1.2.20-alpha =
* Bugfix: forbid deletion of episode assets referenced by existing media files
* Bugfix: fix episode asset type selector

= 1.2.19-alpha =
* Feature: add episode image shortcode `[podlove-episode field="image"]`
* Bugfix: fix some bugs
* Enhancement: when creating new form entries, the user is now redirected to the index page rather than the edit form

= 1.2.18-alpha =
* Feature: 4 new podcast fields: publisher_name, publisher_url, license_name, license_url
* Feature: Shortcode `[podlove-podcast]` to access podcast data. See [Shortcode Documentation](https://github.com/eteubert/podlove/wiki/Shortcodes) for more details.
* Feature: Shortcode `[podlove-episode]` to access episode data. *all previous episode accessors are deprecated!* See [Shortcode Documentation](https://github.com/eteubert/podlove/wiki/Shortcodes) for more details.
* Feature: Add support for tags and categories in episodes.
* Feature: Chapter File (txt and psc) as episode asset
* Feature: Feed redirects can be a) turned off and b) permanent c) temporary
* Feature: Module for Twitter Card support
* Enhancement: Minor template editor enhancements and updated default template.
* Enhancement: Enable revisions for episodes.
* Enhancement: RSS/Atom cleanup. Less WordPress, more Podlove.
* Enhancement: UI improvements in episode asset forms
* Enhancement: Menu reorganisation. Moved important stuff up, expert stuff down. Separate site for modules.

= 1.2.17-alpha =
* Nothing. Just some WordPress-Plugin-Directory-Thingamajig-Version-Foobar.

= 1.2.16-alpha =
* Feature: Episode templates. Go to `Podlove > Templates` to find out more. See [Shortcode Documentation](https://github.com/eteubert/podlove/wiki/Shortcodes) for more details.
* Feature: Custom GUID for episodes. A GUID in the form of "podlove-`time`-`hash`" is generated for each new episode. It removes the ambiguity of the permalink-ish looking WordPress GUID. Bonus: If you need podcatchers to redownload all media files (maybe you detected a glitch in your files and fixed it), you are now able to change the GUID to achieve that.
* Enhancement: remove episode excerpt support in favor of episode summary
* Bugfix: Short Episode Routing compatibility

= 1.2.15-alpha =
* Bugfix: remove all Show model references for now
* Enhancement: proper summary/description feed elements

= 1.2.14-alpha =
* Enhancement: rename "media locations" to "episode assets" for clarity
* Enhancement: rename "podlove formats" to "file types" for clarity
* Enhancement: start to rework validation section
* Enhancement: check for episode files when slug changes

= 1.2.13-alpha =
* Enhancement: use episode summary as excerpt if available
* Bugfix: episode assistant file slugs respect mnemonic case
* Bugfix: solve 404 issue with pages

= 1.2.12-alpha =
* Bugfix: Minor JavaScript glitch

= 1.2.11-alpha =
* New Module: Contributors Taxonomy — display with shortcode `[podlove-contributors]` (go to `Podlove > Settings` to activate the module)

= 1.2.10-alpha =
* Feature: Add Shortcodes to display episode data: `[podlove-episode-subtitle] [podlove-episode-summary] [podlove-episode-slug] [podlove-episode-duration] [podlove-episode-chapters]`
* Feature: Add Opus File Format ([see Auphonic blog for more info](http://auphonic.com/blog/2012/09/26/opus-revolutionary-open-audio-codec-podcasts-and-internet-audio/))
* Feature: Show red warning in dashboard if one of the following podlove settings is missing: `title`, `mnemonic`, `base url`
* Enhancement: Remove pagination from formats settings page

== Upgrade Notice ==

= 2.0.0 =

Upgrade only if you are on PHP 5.4 or higher.

= 1.2.0-alpha =
Before you update, delete all shows but one to ensure your important data stays. Watch out: Your feed URLs will change!
