forked from podlove/podlove-publisher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
2737 lines (1949 loc) · 138 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
= 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)