mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-19 13:01:19 +00:00

# 1.0.0 (2022-10-20) ### Bug Fixes * **a11y:** replace active tab color to contrast with background on podcast and episode pages ([f3785e1](f3785e1401
)) * **activity-pub:** cache issues when navigating to activity stream urls ([7bcbfb3](7bcbfb32f7
)) * **activity-pub:** get database records using new model instances ([92536dd](92536ddb38
)) * **activitypub:** add conditions for possibly missing actor properties + add user-agent to requests ([8fbf948](8fbf948fbb
)) * **activitypub:** add target actor id to like / announce activities to send directly to note's actor ([962dd30](962dd305f5
)) * **activitypub:** add target_actor_id for create activity to broadcast post reply ([0128a21](0128a21ec5
)) * **activitypub:** allow cors on get requests for routes exposing acitivitypub objects ([2f24809](2f2480998f
)) * **activitypub:** set created_by to null for reblog if no user + update episode oembed data ([209dfbd](209dfbd134
)) * add admin-audio-player to vite config to have admin player show up ([93cb9b2](93cb9b2470
)) * add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error ([339bef8](339bef878e
)), closes [#145](https://code.castopod.org/adaures/castopod/issues/145) * add category_label component to include parent category in about podcast page ([74e7d68](74e7d68ac8
)) * add explicit int conversion when formatting episode duration ([1253096](1253096197
)) * add head request to analytics_hit route ([f0a2f0b](f0a2f0bea4
)) * add href to castopod website on login page ([cc54257](cc54257351
)) * add missing explicit badge for podcasts and episodes ([cdf9f9d](cdf9f9d53f
)) * add open graph size for podcast images to replace the inadequate large format ([33aae1f](33aae1f793
)) * add public/media folder to castopod bundle ([8053d35](8053d3521b
)), closes [#52](https://code.castopod.org/adaures/castopod/issues/52) * add translation key for audio-clipper trim labels ([db191ac](db191ac31b
)) * add underline and semibold font weight for prose links to have them stand out ([d4d8671](d4d867121c
)) * add where condition to get episode count without deleted episodes ([7661734](7661734ed2
)), closes [#67](https://code.castopod.org/adaures/castopod/issues/67) * **admin:** save block and lock switches ([b66c0af](b66c0afc8f
)) * **analytics:** redirect to mp3 file even when referer was not set ([9fc388d](9fc388d154
)) * **analytics:** remove charts empty values + remove useless language cache ([1678794](1678794153
)) * **analytics:** set duration field to precise decimal as episode's audio file duration ([d772685](d772685405
)) * **analytics:** set initial value for duration and bandwidth ([ee50539](ee50539591
)) * **analytics:** update migrations to set decimal precision for latitude and longitude ([714d6b5](714d6b5d49
)) * **analytics:** update service management so that it works with new OPAWG slug values ([7fe9d42](7fe9d42500
)) * **audio-clipper:** add mouse position offset when stretching clip to prevent content from jumping ([602654b](602654b99b
)) * **audio-clipper:** show audio playing progress + put waveform behind audio clipper ([01a09dc](01a09dc447
)) * **avatar:** use default avatar when no avatar url has been set ([9d23c7e](9d23c7e7e1
)), closes [#111](https://code.castopod.org/adaures/castopod/issues/111) * **bundle:** include modules and themes when copying files with rsync ([cd5bb88](cd5bb8835c
)) * **bundle:** update vite input files path + add `set -e` in bash scripts to fail if command fails ([0ee53c7](0ee53c71ff
)) * **cache:** add locale for podcast and episode pages + clear some persisting cache in models ([9cec8a8](9cec8a81cc
)), closes [#42](https://code.castopod.org/adaures/castopod/issues/42) [#61](https://code.castopod.org/adaures/castopod/issues/61) * **cache:** delete posts and comments pages cache when updating platform links ([f7c3e5b](f7c3e5bf4a
)), closes [#169](https://code.castopod.org/adaures/castopod/issues/169) * **cache:** return a non cached view when connected ([e2e7358](e2e735815d
)) * **cache:** suffix cache names with authenticated for credits, map and pages ([418a70b](418a70b2a6
)) * cast actor_id to pass as int to set_interact_as_actor() function ([56a8e5d](56a8e5d7dd
)) * **category:** remove uncategorized option to enforce users in choosing a category ([8c64f25](8c64f25a0e
)) * change image size requirement hints ([ea20206](ea20206ee6
)) * change message upon cancellation of episode publication ([9859c74](9859c7434c
)) * check for database connection and podcasts table existence before redirecting to install ([eb74e81](eb74e81c3d
)) * check that additional files are valid when creating episode ([eac5bc8](eac5bc876d
)) * check that note has a preview_card_id before displaying it ([acb8b3a](acb8b3a401
)), closes [#114](https://code.castopod.org/adaures/castopod/issues/114) * clear cache when deleting podcast banner ([99bb40b](99bb40b8bc
)) * comment all cache clean after page update to prevent analytics cache deletion ([e6197a4](e6197a4972
)) * **comments:** add comment view partials for public pages ([fcecbe1](fcecbe1c68
)) * correct chart data ([4d3e9c8](4d3e9c8c02
)) * correct percona compatibility issue ([e53f819](e53f819264
)) * correct php-fpm issues ([1ef55d7](1ef55d7315
)) * correct referrer bug ([ed69b2f](ed69b2f500
)) * correction for servers with low int precision ([31b7828](31b7828e77
)) * **cors:** add preflight option routes for episode, podcast and status objects ([a281abf](a281abfda4
)) * declare typed properties in PHPDoc for php<7.4 ([14dd44d](14dd44d03d
)), closes [#23](https://code.castopod.org/adaures/castopod/issues/23) * define podcast_id and platform_slug as foreign keys in podcasts_plaforms table ([6e9451a](6e9451a110
)) * define podcastNamespaceLink value ([0d744d2](0d744d212d
)) * **email:** set the correct url in the activation and forgot emails ([10fc6f1](10fc6f17c6
)), closes [#204](https://code.castopod.org/adaures/castopod/issues/204) * **embeddable-player:** enable any ancestor when X-Frame-Options is set on server ([44a4962](44a4962e0b
)) * **embed:** open embedded player's links in new tab ([4aa73d7](4aa73d71e3
)) * **episode-form:** show warning to set `memory_limit`, `upload_max_filesize` & `post_max_size` ([3b3c218](3b3c218b9c
)), closes [#5](https://code.castopod.org/adaures/castopod/issues/5) [#86](https://code.castopod.org/adaures/castopod/issues/86) * **episode-unpublish:** set consistent posts_counts' increments/decrements for actors and episodes ([8acdafd](8acdafd260
)), closes [#233](https://code.castopod.org/adaures/castopod/issues/233) * **episodeCount:** add missing brackets to French language file ([c1b4112](c1b411265a
)) * **episode:** replace guid's empty string value to null ([441052a](441052af8d
)) * **episodes-page:** handle defaultQuery being null when no podcast episodes ([15183b7](15183b7eab
)), closes [#100](https://code.castopod.org/adaures/castopod/issues/100) * **episodes-table:** set descriptions to be not null ([6774ec1](6774ec10fa
)) * **episodes:** add publication status + set publication date to null when none has been set ([d882981](d882981b3a
)), closes [#70](https://code.castopod.org/adaures/castopod/issues/70) * escape characters for `min` in format_duration_symbol ([3b6722a](3b6722a42b
)) * escape generated feed tag values and remove new lines from public pages meta description ([6238a43](6238a43863
)), closes [#57](https://code.castopod.org/adaures/castopod/issues/57) [#46](https://code.castopod.org/adaures/castopod/issues/46) * expire default query cache upon scheduled episode publication ([b72e7c8](b72e7c8691
)), closes [#81](https://code.castopod.org/adaures/castopod/issues/81) * explicitly cast seconds to int in iso8601_duration helper function ([779653f](779653f75b
)) * **fediverse:** set default castopod avatar url when actor avatar is not present ([460f52f](460f52f70e
)) * **fediverse:** set model instances as non shared to prevent overlapping ([91128fa](91128fad7a
)) * fix layout bugs in admin and update translation files ([a834171](a83417180c
)), closes [#40](https://code.castopod.org/adaures/castopod/issues/40) * **follow:** add missing helpers to Actor controller ([ee53a73](ee53a732dc
)) * **get_browser_language:** return defaultLocale if browser doesn't send user preferred language ([9cc2996](9cc2996261
)) * handle HEAD requests on podcast_feed route ([74b2640](74b2640f2a
)), closes [#79](https://code.castopod.org/adaures/castopod/issues/79) * **home:** remove hardcoded prefix in getAllPodcasts query ([92d5cc5](92d5cc50a3
)) * **housekeeping:** replace the use of GLOB_BRACE with looping over file extensions ([42d92d0](42d92d0c8d
)), closes [#154](https://code.castopod.org/adaures/castopod/issues/154) * **housekeeping:** set default sizes value + ignore illegal IFD size error to proceed with script ([f21ca57](f21ca57603
)) * **housekeeping:** use EpisodeModel's builder to reset comments count ([65e9c0b](65e9c0b05e
)) * **htaccess:** add ? after index.php in RewriteRule ([d9d139e](d9d139eefa
)), closes [#152](https://code.castopod.org/adaures/castopod/issues/152) * **http-signature:** update SIGNATURE_PATTERN allowing signature keys to be sent in any order ([b7f285e](b7f285e4e2
)) * **images:** set default mimetype if none is specified when getting size info ([6e4acc6](6e4acc64ad
)) * **import-with-escaped-characters:** remove \CodeIgniter\HTTP\URI in download_file, closes [#103](https://code.castopod.org/adaures/castopod/issues/103) ([35b5be0](35b5be095f
)) * **import:** add extension when downloading file without + truncate slug if too long ([c5f18bb](c5f18bb6dc
)) * **import:** add validation for handle field to prevent Router.invalidParameterType error ([5bf7200](5bf7200fb3
)), closes [#119](https://code.castopod.org/adaures/castopod/issues/119) * **import:** cast description's SimpleXMLElement to string ([02d17be](02d17be4ff
)) * **import:** remove query string from files url ([109c4aa](109c4aa1af
)) * **import:** save media files during podcast import + set missing media fields ([a9989d8](a9989d841a
)) * **import:** set default episode type if not set ([d7250ab](d7250ab03f
)) * **import:** set episode and season numbers to null when not present in item tag ([3211398](3211398c78
)) * **import:** use <image><url> tag when no <itunes:image> is present ([20e607a](20e607afb7
)) * include missing variables on public ui's episode page and remote_actions ([193b373](193b373bc9
)) * **input-component:** unset required attribute to prevent rendering it when false ([db9ac13](db9ac13860
)) * **install:** add password validation when creating super admin ([5a2ca0c](5a2ca0cc4a
)) * **install:** redirect manually to install wizard on first visit ([2ceaaca](2ceaaca44f
)) * **install:** redirect to host_url install route on instanceConfig validation error ([99250b1](99250b1868
)) * **install:** redirect to input baseUrl after instance config ([2426af7](2426af7de8
)), closes [#53](https://code.castopod.org/adaures/castopod/issues/53) * **install:** set message block on forms to show error messages ([3a0a20d](3a0a20d59c
)), closes [#157](https://code.castopod.org/adaures/castopod/issues/157) * **interact-as:** set actor_id instead of podcast id upon login event ([5dfade7](5dfade7cf3
)), closes [#104](https://code.castopod.org/adaures/castopod/issues/104) * **json-ld:** add missing properties to PodcastSeries object ([e97266c](e97266c5d4
)) * keep subtitle line breaks when parsing srt file to json ([cfb3da6](cfb3da6592
)) * **layouts:** replace holy-grail layout with tailwind config + widen public podcast layout ([be5a287](be5a28787f
)) * **map:** update episode markers query to discard unpublished episodes ([b3caac4](b3caac45b1
)) * **markdown-editor:** remove unnecessary buttons for podcast and episode editors + add extensions ([9c4f60e](9c4f60e00b
)) * **md-editor:** build new markdown editor with lit + github/markdown-toolbar-element ([9ec1cb9](9ec1cb93da
)), closes [#93](https://code.castopod.org/adaures/castopod/issues/93) [#94](https://code.castopod.org/adaures/castopod/issues/94) [#120](https://code.castopod.org/adaures/castopod/issues/120) * **migrations:** ignore invalid utf8 chars for media files metadata + update transcript parser ([45e8f99](45e8f99e75
)) * minor corrections ([13be386](13be386842
)) * move analytics to helper ([d311917](d31191732e
)) * move html escaping on credits page ([fbffdbd](fbffdbde78
)) * **multiselect:** add missing class names in choices options for purge to work properly ([719538d](719538d0cc
)) * **notifications:** add trigger after activities update + update insert trigger ([e5d16e8](e5d16e8711
)) * **notifications:** notify actors after activities insert / update using model callback methods ([e08555a](e08555a4e9
)) * **open-graph:** replace non existant episode description to podcast description in podcast page ([b02584e](b02584ee60
)) * overwrite common lang function to escape returned string ([4c490c1](4c490c15bb
)), closes [#196](https://code.castopod.org/adaures/castopod/issues/196) [#198](https://code.castopod.org/adaures/castopod/issues/198) * overwrite getActorById to return app's Actor entity ([f2bc2f7](f2bc2f7e01
)) * **package.json:** update destination of postcss generation scripts ([21413f8](21413f8af3
)) * **pages:** add locale to page cache ([8f999ce](8f999ce2f7
)) * **partner:** set correct image URL ([61554be](61554be12a
)) * pass timezone to relative time component to show the localized time in the UI ([b9db936](b9db936461
)) * **persons:** prevent overflow of persons list by adding horizontal scroll ([9e8995d](9e8995dc6e
)) * **persons:** set person picture as optional for better ux ([7fdea63](7fdea63de7
)), closes [#125](https://code.castopod.org/adaures/castopod/issues/125) * **platforms:** display platform link only when visible is toggled on ([6e503c8](6e503c8d61
)), closes [#39](https://code.castopod.org/adaures/castopod/issues/39) * **player-styling:** revert vite to 2.8 to reference the player css ([e07d3af](e07d3afea9
)) * **podcast-activity:** check if transcript and chapters are set before including them in audio ([5855a25](5855a25093
)) * **podcast-import:** move guid attribute declaration for Episode entity to include slug data ([5d02ae3](5d02ae3990
)) * **podcast:** use markdown description value for editor + set prose class to about description ([f304d97](f304d97b14
)), closes [#156](https://code.castopod.org/adaures/castopod/issues/156) * prefill description footer input when creating a new episode ([9ea5ca3](9ea5ca3169
)) * **premium-podcasts:** display unlock button in embed when premium episode ([ca109ba](ca109ba3a8
)) * **premium-podcasts:** remove cache in unlock form + redirect to podcast if podcast is not premium ([242352c](242352c4d9
)) * **premium-podcasts:** return different cached page when podcast is unlocked ([b1303c5](b1303c5255
)) * **pwa:** add scope to webmanifests to allow installing an app per podcast ([74c683e](74c683eb44
)) * **pwa:** set app display as standalone in the webmanifests ([7aa37d2](7aa37d24ac
)) * re-order graph values ([35f633b](35f633b4c7
)) * redirect to non cached views when authenticated in public views ([482b47b](482b47ba6b
)) * **release:** add missing version number to castopod-host package ([8f3e9d9](8f3e9d90c1
)) * remove cache from remote follow form to display error messages ([90e4443](90e44437bd
)) * remove defer from js script declaration as it is a module ([18ae557](18ae557e97
)) * remove fixed size from podcast sidebar + rearrange account info + space out import radio inputs ([776eec6](776eec6f0d
)) * remove heavy image cover data from audio file metadata ([f74403b](f74403bd7a
)) * remove required for other_categories field and add podcast_id to latest podcasts query ([5417be0](5417be0049
)) * remove required property to persons picture ([c546be3](c546be385b
)), closes [#125](https://code.castopod.org/adaures/castopod/issues/125) * remove value escaping for form inputs and textareas ([bc6dea2](bc6dea2f8a
)) * rename field status to task_status to get scheduled activities ([4ff82a5](4ff82a5f0a
)) * rename issue_templates labels ([9f00305](9f00305844
)) * rename MyAccount controller file ([e109df3](e109df3004
)), closes [#60](https://code.castopod.org/adaures/castopod/issues/60) * rename podcast name to podcast handle to clarify field usage ([9dd4c77](9dd4c7741e
)), closes [#126](https://code.castopod.org/adaures/castopod/issues/126) * reorder fields as composite primary keys for analytics tables ([9660aa9](9660aa97c8
)) * replace deletedField with published_at for episodes ([14d7d07](14d7d07822
)) * replace getWebEnclosureUrl with getEnclosureWebUrl ([8122cea](8122ceaf8a
)) * replace hardcoded style links with vite service + set default value for remote transcript url ([3f2e056](3f2e05608e
)), closes [#149](https://code.castopod.org/adaures/castopod/issues/149) [#150](https://code.castopod.org/adaures/castopod/issues/150) * replace website key for webpages in breadcrumb translate file ([50e32ff](50e32ff756
)) * restore default podcast icon on public website ([342778b](342778bac3
)) * revert to beta.1's codeigniter4 version ([e831411](e831411270
)) * rewrite regenerate image function to use saveSizes method from Image entity ([3889912](38899124ec
)) * **router:** check if Accept header is set before getting value ([10a2ae0](10a2ae0248
)), closes [#228](https://code.castopod.org/adaures/castopod/issues/228) * **router:** trim URI slash to match same routes for URIs with and without trailing slash ([9e9375f](9e9375f9a2
)) * **rss-import:** add Castopod user-agent, handle redirects for downloaded files, add Content namespace ([214243b](214243b3fe
)) * **rss:** cast number type values to string in rss_helper ([7180ae9](7180ae9ec7
)), closes [#148](https://code.castopod.org/adaures/castopod/issues/148) * **rss:** do not escape podcast and episode titles in the xml ([0dd3b7e](0dd3b7e0bf
)), closes [#138](https://code.castopod.org/adaures/castopod/issues/138) [#71](https://code.castopod.org/adaures/castopod/issues/71) * **rss:** remove escaping for publisher and owner name ([6fc6347](6fc6347846
)) * **rss:** round episode durations and soundbites ([c9fb987](c9fb987fcf
)), closes [#214](https://code.castopod.org/adaures/castopod/issues/214) * **rss:** set ❬itunes:author❭ tag to owner_name if publisher not specified ([2271c14](2271c1445b
)), closes [#96](https://code.castopod.org/adaures/castopod/issues/96) * **rss:** use originalPath instead of originalMediaPath in Image library ([b4012b7](b4012b7d2e
)) * save transcript and chapters files to podcasts folder ([63f49c7](63f49c719f
)) * **search-episodes:** add fallback sql query using LIKE for search query with less than 4 characters ([e66bf44](e66bf44341
)), closes [#236](https://code.castopod.org/adaures/castopod/issues/236) * **security:** add csrf filter + prevent xss attacks by escaping user input ([cd2e1e1](cd2e1e1dc3
)) * set cache expiration to next note publish to show note on publication date ([0a66de3](0a66de3e6c
)) * set episode description footer to null when empty value ([3a7d97d](3a7d97d660
)) * set episode duration translation to hardcoded english ([c39efc9](c39efc9489
)), closes [#64](https://code.castopod.org/adaures/castopod/issues/64) * set episode guid upon episode creation ([ad8b153](ad8b153f2a
)), closes [#48](https://code.castopod.org/adaures/castopod/issues/48) * set episode numbers during import + remove all custom form_helpers + minor ui issues ([99a3b8d](99a3b8d33e
)) * set interact_as_actor for user upon password reset ([ad8f5f5](ad8f5f5a0f
)), closes [#178](https://code.castopod.org/adaures/castopod/issues/178) * set localized slug_field key as string in french language ([17fb29b](17fb29b209
)) * set location to null when getting empty string ([71b1b5f](71b1b5f775
)) * set storage limit as disk_total_space instead of free space ([7512e2e](7512e2ed1f
)) * **settings:** add .jpg extension to site-icon file input to display all jpeg images ([f611a16](f611a16cd0
)) * **socialinteract:** move social interact uri into uri attribute + update social data upon import ([12b2200](12b22008a2
)) * sort episodes by published_at with unpublished episodes at the begining ([1686f84](1686f840d1
)), closes [#249](https://code.castopod.org/adaures/castopod/issues/249) * sort episodic podcasts by season ([d7b6794](d7b6794f68
)) * **themes:** update themes stylesheet route and remove css extension ([e4e7e00](e4e7e0005e
)) * **types:** update fake seeders types + fix bugs ([76a4bf3](76a4bf3441
)) * **ui:** remove empty tooltip when hovering on sponsor button ([40aa661](40aa661289
)) * unpublish episode before deleting it + add validation step before deletion ([f75bd76](f75bd76458
)), closes [#112](https://code.castopod.org/adaures/castopod/issues/112) [#55](https://code.castopod.org/adaures/castopod/issues/55) * update .htaccess for shared hosting config ([2379826](2379826352
)) * update broken contributor dropdown fields ([e5b7515](e5b7515023
)) * update condition in AnalyticsTrait ([fbc0967](fbc0967caa
)) * update condition in home controller to redirect to install page ([33f1b91](33f1b91d55
)) * update conditions when checking for empty max_episodes and season_number ([fbad0b5](fbad0b59f6
)) * update form_textarea to prevent escaping value ([78548b5](78548b5cd7
)) * update iso-369 language table seeder ([0c90db4](0c90db44c4
)) * update ivoox podcasting icon ([f2b69a4](f2b69a4733
)) * update MarkdownEditor component + restyle Button and other components ([b05d177](b05d177f1b
)) * update purgecss content path for php helper files ([eb70bb4](eb70bb4f70
)), closes [#59](https://code.castopod.org/adaures/castopod/issues/59) * update translations for settings' tasks to include what they should be used for ([06b1a8b](06b1a8b29b
)) * use slash instead of backslash to call layout ([a80adb2](a80adb2295
)) * use UTC_TIMESTAMP() to get current utc date instead of NOW() in sql queries ([4e22a0d](4e22a0d5e4
)) * **users:** remove required roles input when editing user + prevent owner's roles from being edited ([1c8af75](1c8af7550b
)), closes [#239](https://code.castopod.org/adaures/castopod/issues/239) * **ux:** allow for empty message upon episode publication and warn user on submit ([33d01b8](33d01b8d4f
)), closes [#129](https://code.castopod.org/adaures/castopod/issues/129) * **ux:** have podcast dashboard card link to podcast dashboard if only one podcast in instance ([7dabee5](7dabee58a1
)) * **ux:** redirect user to install page on database error in home page ([9017e30](9017e30bf4
)) * validate slug length when submitting episode form + clean permalink edit prefix ([b07ac09](b07ac093b2
)) * **video-clips:** check if created video exists before recreating it and failing ([dff1208](dff1208725
)) * **video-clips:** clear video clip cache after process has finished ([3ae6232](3ae6232585
)) * **video-clips:** create unique temporary files for resources to be deleted after generation ([7f7c878](7f7c878cb6
)) * **video-clips:** set audio codec to aac, fixing audio issue on twitter ([3c22c68](3c22c68ee8
)) * **video-clips:** set longer podcast and episode lengths for squared format ([c030113](c0301134c2
)) * **video-clips:** tweak portrait parameters to have subtitles display without overflowing ([2385b1a](2385b1a292
)) * **video-clips:** update condition to check if ffmpeg is installed ([b57f0b6](b57f0b6eb6
)), closes [#163](https://code.castopod.org/adaures/castopod/issues/163) * **xml-editor:** escape xml editor's content + restyle form sections to prevent overflowing ([588590b](588590bd2c
)) * **xml-editor:** prettify xml even without root node ([ca55c24](ca55c248d0
)) ### Features * **activitypub:** add Podcast actor and PodcastEpisode object with comments ([9e1e5d2](9e1e5d2e86
)) * add about page in admin with instance info + database update button ([d0836f3](d0836f3ee3
)) * add alternate rss feed link tag to podcast page head ([a973c09](a973c097d5
)), closes [#35](https://code.castopod.org/adaures/castopod/issues/35) * add analytics and unknown useragents ([ec92e65](ec92e65aa4
)) * add audio-clipper toolbar + add video-clip-previewer ([0255753](02557539e6
)) * add audio-clipper webcomponent (wip) ([21d4251](21d4251b9b
)) * add autofocus to input field "Email or username" on login page ([19caed4](19caed4bce
)) * add basic stats on podcast about page ([1670558](1670558473
)) * add breadcrumb in admin area ([7fb1de2](7fb1de2cf3
)), closes [#17](https://code.castopod.org/adaures/castopod/issues/17) * add cache to ActivityPub sql queries + cache activity and note pages ([2d297f4](2d297f45b3
)) * add CDN url ([972bcbf](972bcbf65e
)), closes [#37](https://code.castopod.org/adaures/castopod/issues/37) * add codemirror to display xml editor for custom rss field ([f15f262](f15f26240c
)) * add cumulative listening time charts ([588b4d2](588b4d28da
)) * add default icons to Alert component ([0d98001](0d9800123b
)) * add DropdownMenu component + remove global audio player in admin ([abb7fba](abb7fbac27
)) * add episode_numbering() component helper to display episode and season numbers ([3f4a6bd](3f4a6bd0b9
)) * add french translation ([196920d](196920d62f
)) * add heading component + update ecs rules to fix views ([23bdc6f](23bdc6f8e3
)) * add housekeeping task to run after migrations ([89dee41](89dee41d58
)) * add install wizard form to bootstrap database and create the first superadmin user ([cba871c](cba871c5df
)), closes [#2](https://code.castopod.org/adaures/castopod/issues/2) * add instructions on production error page to ease Castopod debugging process ([9eab54e](9eab54e085
)), closes [#224](https://code.castopod.org/adaures/castopod/issues/224) * add ISO 3166 country codes ([97cd94b](97cd94b474
)) * add js audio player on podcast, admin and embeddable player pages + fix admon episodes ux ([0e14eb4](0e14eb4d3f
)), closes [#131](https://code.castopod.org/adaures/castopod/issues/131) * add label to sponsor button on podcast page ([c29c018](c29c018c7a
)), closes [#162](https://code.castopod.org/adaures/castopod/issues/162) * add legalNoticeURL to app config for setting an external url to legal notice ([711843a](711843a0c8
)) * add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import ([72b3012](72b301272e
)) * add map analytics, add episodes analytics, clean analytics page layout, translate countries ([07eae83](07eae83a00
)) * add media entity and link documents, images and audio files to it ([6ecf286](6ecf2866cf
)) * add notifications inbox for actors ([999999e](999999e3ef
)), closes [#215](https://code.castopod.org/adaures/castopod/issues/215) * add Noto Sans Mono font to use for durations + button to access new video clip form in list ([7609bb6](7609bb6033
)) * add npm for js dependencies + move src/ files to root folder ([cbb83a6](cbb83a6f30
)) * add Open Graph and Twitter meta tags ([af970b8](af970b8bac
)), closes [#41](https://code.castopod.org/adaures/castopod/issues/41) * add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) ([9c224a8](9c224a8ac6
)), closes [#24](https://code.castopod.org/adaures/castopod/issues/24) * add permanent delete feature for podcasts 🎉 ([dbb4030](dbb4030da4
)), closes [#89](https://code.castopod.org/adaures/castopod/issues/89) * add platform models ([a333d29](a333d29196
)) * add platforms form in podcast settings ([043f49c](043f49c784
)) * add platforms tables ([ce59344](ce5934419a
)) * add podcast banner field for each podcast + refactor images configuration ([4a8147b](4a8147bfbb
)) * add premium podcasts to manage subscriptions for premium episodes ([3234500](3234500e2d
)), closes [#193](https://code.castopod.org/adaures/castopod/issues/193) * add publish feature for podcasts and set draft by default ([3d363f2](3d363f2efe
)), closes [#128](https://code.castopod.org/adaures/castopod/issues/128) [#220](https://code.castopod.org/adaures/castopod/issues/220) * add remote_url alternative for transcript and chapters files ([3143c9a](3143c9ad36
)) * add replied to post or comment to reply element ([d0f9c60](d0f9c6018f
)) * add schema.org json-ld objects to podcasts, episodes, posts and comments pages ([902f959](902f959b30
)) * add task to housekeeping setting for resetting all instance counts ([9303e51](9303e51bc5
)) * add unique listeners analytics ([3a49258](3a4925816f
)) * add update rss feed feature for podcasts to import their latest episodes ([5eb9dc1](5eb9dc168e
)), closes [#183](https://code.castopod.org/adaures/castopod/issues/183) * add user permissions and basic groups to handle authorizations ([d58e518](d58e51874a
)), closes [#3](https://code.castopod.org/adaures/castopod/issues/3) [#18](https://code.castopod.org/adaures/castopod/issues/18) * add WebSub module for pushing feed updates to open hubs ([10d3f73](10d3f73786
)) * **admin:** add instance wide dashboard with storage and bandwidth usage ([b1a6c02](b1a6c02e56
)), closes [#216](https://code.castopod.org/adaures/castopod/issues/216) * **admin:** add search form in podcast episodes list ([6be5d12](6be5d12877
)), closes [#26](https://code.castopod.org/adaures/castopod/issues/26) * **admin:** make header stick on scroll and show title + action buttons using css only ([d60498c](d60498c1be
)) * **admin:** update admin layout for better ux + update brand pine colors ([d86142e](d86142ebe7
)) * allow cross origin requests on episode comments ([e12f95a](e12f95aca1
)) * **analytics-gdpr:** update cached personal data to expire at midnight ([0188b67](0188b67354
)) * **analytics:** add 'other' group to pie charts in order to display more accurate data ([73acef9](73acef933f
)) * **analytics:** add charts and data export ([78625c4](78625c471b
)) * **analytics:** add current date and secret salt to analytics hash for improved privacy ([6f2e7c0](6f2e7c009c
)) * **analytics:** add service name from rss user-agent ([7202b98](7202b9867b
)) * **analytics:** add weekday and hour bar charts ([8ab3132](8ab313296b
)) * **api:** add rest api with podcasts read endpoints ([e64001d](e64001d006
)), closes [#210](https://code.castopod.org/adaures/castopod/issues/210) * apply colour theme to embed player ([9548337](9548337a7c
)), closes [#201](https://code.castopod.org/adaures/castopod/issues/201) * **auth:** add auth.enable2FA config to enable two-factor authentication ([7213ed2](7213ed290c
)) * build hashed static files to renew browser cache ([37c54d2](37c54d2477
)), closes [#107](https://code.castopod.org/adaures/castopod/issues/107) * **cache:** add podcast and episode pages to cache + clear them after insert or update ([da0f047](da0f047281
)) * **categories:** create model, entity, migrations and seeds ([f73b042](f73b042cc0
)) * **clips:** setup clip entities and model + save video clip to have it generated in the background ([2f6fdf9](2f6fdf9091
)) * **comments:** add comments to episodes + update naming of status to post ([bb4752c](bb4752c35e
)) * **comments:** add like / undo like to comment + add comment page ([0c187ef](0c187ef7a9
)) * **components:** add custom view renderer with ComponentRenderer adapted from bonfire2 ([a95de8b](a95de8bab0
)) * create optimized & resized images upon upload ([02e4441](02e4441f98
)), closes [#6](https://code.castopod.org/adaures/castopod/issues/6) * **custom-rss:** add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ ([6ecdaad](6ecdaad911
)) * **datetime-picker:** set material_green theme to flatpickr ([3ce6541](3ce6541003
)) * **devcontainer:** add devcontainer settings for dev environment ([69e7266](69e7266736
)) * display castopod version in admin footer ([9f2574e](9f2574e6fb
)), closes [#68](https://code.castopod.org/adaures/castopod/issues/68) * display legal disclaimer and warning on podcast import page ([2f07992](2f07992e55
)), closes [#34](https://code.castopod.org/adaures/castopod/issues/34) * edit + delete podcast and episode ([ac5f0c7](ac5f0c7328
)) * **embeddable-player:** add embeddable player widget ([141788f](141788fa08
)) * enhance admin ui with responsive design and ux improvements ([2d44b45](2d44b457a0
)), closes [#31](https://code.castopod.org/adaures/castopod/issues/31) [#9](https://code.castopod.org/adaures/castopod/issues/9) * enhance ui using javascript in admin area ([c0e66d5](c0e66d5f70
)) * **episode-unpublish:** remove episode comments upon unpublish ([78acd7f](78acd7f5c0
)) * **episode:** add form to allow editing episode's publication date to a past date ([d783d16](d783d16eb7
)), closes [#97](https://code.castopod.org/adaures/castopod/issues/97) * **episodes:** add create form and view pages for episode ([f3b2c8b](f3b2c8b84f
)), closes [#1](https://code.castopod.org/adaures/castopod/issues/1) * **episodes:** add migrations, model and entity for episodes table ([0444821](044482174e
)) * **episodes:** replace all audio file URL parameters with base64 encoded data ([e1f65cd](e1f65cd3b5
)) * **episodes:** replace soft delete with permanent delete ([eb9ff52](eb9ff522c2
)) * **episodes:** schedule episode with future publication_date by using cache expiration time ([4f1e773](4f1e773c0f
)), closes [#47](https://code.castopod.org/adaures/castopod/issues/47) * **fediverse:** implement activitypub protocols + update user interface ([2f525c0](2f525c0f6e
)), closes [#69](https://code.castopod.org/adaures/castopod/issues/69) [#65](https://code.castopod.org/adaures/castopod/issues/65) [#85](https://code.castopod.org/adaures/castopod/issues/85) [#51](https://code.castopod.org/adaures/castopod/issues/51) [#91](https://code.castopod.org/adaures/castopod/issues/91) [#92](https://code.castopod.org/adaures/castopod/issues/92) [#88](https://code.castopod.org/adaures/castopod/issues/88) * **fonts:** replace Montserrat with Inter for better readablity ([bfa11d0](bfa11d007d
)) * **GDPR:** add GDPR.yml file to public/.well-known/ ([86bccc3](86bccc3d5c
)) * **gdpr:** add purpose for granting access to premium content ([47d6d81](47d6d81b79
)) * **home:** sort podcasts by recent activity + add dropdown menu to choose between sorting options ([7b89da6](7b89da6106
)), closes [#164](https://code.castopod.org/adaures/castopod/issues/164) * **housekeeping:** add clear_cache option to flush redis or files cache ([99bfac0](99bfac0b42
)) * **i18n:** add 7 new languages + update german translations ([d021abb](d021abb52f
)) * **i18n:** add german language as supported locale + create Language files from english source ([c220b31](c220b310ed
)) * **i18n:** add Norwegian Nynorsk to supported locales ([ced61fc](ced61fc236
)) * **i18n:** add Polish translation ([2d83b44](2d83b44add
)) * **i18n:** add Spanish to supported locales ([e340b54](e340b54a84
)) * **i18n:** add support for German and Brazilian Portuguese languages ([c9b9fe4](c9b9fe4ee8
)) * **i18n:** add support for Simplified Chinese (zh-Hans) and Catalan (ca) locales ([48d1443](48d1443472
)) * **icons:** add default icons for podcasting, social and funding platforms + remove complex icons ([5bcdfeb](5bcdfebe64
)), closes [#166](https://code.castopod.org/adaures/castopod/issues/166) [#167](https://code.castopod.org/adaures/castopod/issues/167) [#170](https://code.castopod.org/adaures/castopod/issues/170) * **icons:** add podnews icon to podcasting platforms ([5f42355](5f423557c2
)), closes [#190](https://code.castopod.org/adaures/castopod/issues/190) * import podcast from an rss feed url ([9a5d5a1](9a5d5a15b4
)), closes [#21](https://code.castopod.org/adaures/castopod/issues/21) * integrate stylized form components and update podcast edit page ([6536729](6536729546
)) * make displayed publication time as relative time using @github/time-elements ([230e139](230e139e43
)) * make episode description more visible on episode pages ([90533be](90533be029
)), closes [#171](https://code.castopod.org/adaures/castopod/issues/171) * **map:** display geolocated episodes on a map page ([4357cc2](4357cc25cc
)) * **media:** clean media api + create an entity per media type ([fafaa7e](fafaa7e689
)) * **media:** save audio, images, transcripts and chapters to media for episode and persons ([58e2a00](58e2a00a87
)) * **meta-tags:** add activitypub alternate links to podcast, episode, comment and post pages ([bd61752](bd61752be2
)) * minor corrections to some tables ([3bf9420](3bf9420b59
)) * **monetization:** add Web Monetization support ([96a6026](96a6026f1d
)) * **nodeinfo2:** add .well-known route for nodeinfo2 containing metadata about the castopod instance ([88fddc8](88fddc81d7
)) * **partner:** add link and image in episode description ([ad07bb9](ad07bb9330
)) * **person:** add podcastindex.org namespace person tag ([8acd011](8acd011f13
)) * **platforms:** add AntennaPod ([53e9cfd](53e9cfd61c
)) * **platforms:** add Fediverse and some funding platforms, add link on logo ([afc3d50](afc3d50289
)) * **platforms:** add helloasso ([16cb993](16cb993ee6
)) * **platforms:** add missing newpodcastapps.com's platforms ([92dd370](92dd370e2f
)) * **platforms:** add pod.link ([3d7a232](3d7a2320dd
)) * **platforms:** add Podcast Index ([ad52b1c](ad52b1cc2b
)) * **platforms:** add podfriend ([9fdc8d3](9fdc8d3293
)) * **podcast-form:** add new_feed_url field to set an url when changing domain or host ([e7eec48](e7eec48e7b
)) * **podcast-form:** update routes and redirect to podcast page ([12ce905](12ce905799
)) * **podcast:** create a podcast using form ([1202ba3](1202ba3545
)) * **podcasting 2.0:** update podcast:social tag to adhere to latest spec ([a597cf4](a597cf4ecf
)) * prefill season and episode numbers + set episode number as mandatory for serial podcasts ([07d740b](07d740b79f
)), closes [#134](https://code.castopod.org/adaures/castopod/issues/134) [#136](https://code.castopod.org/adaures/castopod/issues/136) * **public-ui:** adapt public podcast and episode pages to wireframes ([40a0535](40a0535fc1
)), closes [#30](https://code.castopod.org/adaures/castopod/issues/30) [#13](https://code.castopod.org/adaures/castopod/issues/13) * **pwa:** add service-worker + webmanifest for each podcasts to have them install on devices ([fee2c1c](fee2c1c0d0
)) * redesign public podcast and episode pages + remove any information clutter for better ux ([9321400](932140077c
)) * replace form helper functions with components in admin template ([e64548b](e64548b982
)) * replace slug field with interactive permalink component ([578022b](578022b8c5
)) * restyle episode and person cards + add focus style to interactive elements for a11y ([a505a1d](a505a1de56
)) * **rss:** add ˂podcast:guid˃ tag for channel ([1fab10e](1fab10eb0d
)) * **rss:** add podcast-namespace tags for platforms + previousUrl tag ([dbba8dc](dbba8dc581
)), closes [#73](https://code.castopod.org/adaures/castopod/issues/73) [#75](https://code.castopod.org/adaures/castopod/issues/75) [#76](https://code.castopod.org/adaures/castopod/issues/76) [#80](https://code.castopod.org/adaures/castopod/issues/80) * **rss:** add podcast:comments tag to link to episode comments ([32e8c7c](32e8c7c16a
)) * **rss:** add podcast:location tag ([c0a2282](c0a22829bd
)) * **rss:** add rss feed route without the `.xml` extension ([94c0b7c](94c0b7c159
)), closes [#247](https://code.castopod.org/adaures/castopod/issues/247) * **rss:** add soundbites according to the podcastindex specs ([6b34617](6b34617d07
)), closes [#83](https://code.castopod.org/adaures/castopod/issues/83) * **rss:** add transcript and chapters support ([e769d83](e769d83a93
)), closes [#72](https://code.castopod.org/adaures/castopod/issues/72) [#82](https://code.castopod.org/adaures/castopod/issues/82) * **rss:** generate rss feed from podcast entity ([c815ecd](c815ecd664
)) * **rss:** update monetization tag so that it meets PodcastIndex requirements ([4c7ecbe](4c7ecbee83
)) * **select:** enhance select input with choices.js ([910d457](910d457cf8
)) * set app parameter forceGlobalSecureRequests = true forcing requests to go through https ([d9dff1b](d9dff1b8bf
)) * set podcast / episode description in the pages description meta tag ([1c4a504](1c4a50442b
)), closes [#44](https://code.castopod.org/adaures/castopod/issues/44) * **settings:** add general config for instance (site name, description and icon) ([5c56f3e](5c56f3e6f0
)) * **settings:** add theme settings to set an accent color for all public pages ([5c529a8](5c529a83aa
)) * simplify podcast page's layout for better ux ([2c0efc6](2c0efc6563
)) * **soundbites:** add soundbite list and creation forms with audio-clipper component ([de19317](de19317138
)) * style file inputs using tailwind's file class ([8208ab6](8208ab6785
)) * **themes:** add ViewThemes library to set views in root themes folder ([7a27676](7a276764e6
)) * **themes:** set different default banner per theme ([11c916f](11c916fe43
)) * **themes:** set generic css variables for colors to enable instance themes ([a746a78](a746a781b4
)) * toggle podcast sidebar on smaller screens ([f0205ec](f0205ec274
)) * **transcript:** parse srt subtitles into json file + add max file size info below audio file input ([0098761](00987610a0
)) * **ui:** create ViewComponents library to enable building class and view files components ([94872f2](94872f2338
)) * update analytics so to meet IABv2 requirements ([03e23a2](03e23a28bf
)), closes [#10](https://code.castopod.org/adaures/castopod/issues/10) * update pine colors + create charts components ([a50abc1](a50abc138d
)) * **users:** add myth-auth to handle users crud + add admin gateway only accessible by login ([c63a077](c63a077618
)), closes [#11](https://code.castopod.org/adaures/castopod/issues/11) * **ux:** remove admin dashboard and redirect directly to podcast list ([27c48b8](27c48b8fa9
)) * **video-clip:** add video-clip page with video preview + logs ([42538dd](42538dd757
)) * **video-clip:** generate video clips in the bg using a cron job + add video clip page + tidy up UI ([db0e427](db0e4272bd
)) * **video-clips:** add dimensions for portrait and squared formats ([3af404d](3af404da3d
)) * **video-clips:** add new themes + add castopod logo as a watermark ([1d1490b](1d1490b06a
)) * **video-clips:** add route for scheduled video clips + list video clips with status ([2065ebb](2065ebbee5
)) * **video-clips:** allow episodeNumbering text to stand in the indent of episodeTitle paragraph ([71a063d](71a063dac3
)) * **video-clips:** generate a 16:9 video using ffmpeg ([35aa7ea](35aa7ea5d9
)) * **video-clips:** generate subtitles clip using transcript json to have subtitles accross video ([3ce07e4](3ce07e455d
)) * **video-clips:** replace hardcoded colors with config's theme colors ([e462abf](e462abf6d6
)) * **vite:** add vite config to decouple it from CI_ENVIRONMENT ([8721719](8721719cd7
)) * write id3v2 tags to episode's audio file ([4651d01](4651d01a84
)) ### Performance Improvements * **cache:** update CI4 to use cache's deleteMatching method ([54b84f9](54b84f9684
)) * **cache:** use deleteMatching method to prevent forgetting cached elements in models ([76afc0c](76afc0cfa2
)) * defer javascript + lazy load images for faster page loads ([f0685e4](f0685e4479
)) * **docker:** add redis caching service for development ([05ace8c](05ace8cff2
)) ### Reverts * **install:** redirect to install in homepage if no database was set ([73f094d](73f094daf2
)) * set deprecated config options back in App config ([433745f](433745f194
)) * **soundbites:** remove soundbite table from episode's public page ([5dc0f19](5dc0f19656
)) * use basic input file for episodes audio files instead of button for better UX ([d5f22fb](d5f22fbb38
)) ### BREAKING CHANGES * **analytics:** analytics_podcasts_by_player table and analytics_podcasts procedure were updated
192 KiB
192 KiB
1.0.0 (2022-10-20)
Bug Fixes
- a11y: replace active tab color to contrast with background on podcast and episode pages (f3785e1)
- activity-pub: cache issues when navigating to activity stream urls (7bcbfb3)
- activity-pub: get database records using new model instances (92536dd)
- activitypub: add conditions for possibly missing actor properties + add user-agent to requests (8fbf948)
- activitypub: add target actor id to like / announce activities to send directly to note's actor (962dd30)
- activitypub: add target_actor_id for create activity to broadcast post reply (0128a21)
- activitypub: allow cors on get requests for routes exposing acitivitypub objects (2f24809)
- activitypub: set created_by to null for reblog if no user + update episode oembed data (209dfbd)
- add admin-audio-player to vite config to have admin player show up (93cb9b2)
- add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error (339bef8), closes #145
- add category_label component to include parent category in about podcast page (74e7d68)
- add explicit int conversion when formatting episode duration (1253096)
- add head request to analytics_hit route (f0a2f0b)
- add href to castopod website on login page (cc54257)
- add missing explicit badge for podcasts and episodes (cdf9f9d)
- add open graph size for podcast images to replace the inadequate large format (33aae1f)
- add public/media folder to castopod bundle (8053d35), closes #52
- add translation key for audio-clipper trim labels (db191ac)
- add underline and semibold font weight for prose links to have them stand out (d4d8671)
- add where condition to get episode count without deleted episodes (7661734), closes #67
- admin: save block and lock switches (b66c0af)
- analytics: redirect to mp3 file even when referer was not set (9fc388d)
- analytics: remove charts empty values + remove useless language cache (1678794)
- analytics: set duration field to precise decimal as episode's audio file duration (d772685)
- analytics: set initial value for duration and bandwidth (ee50539)
- analytics: update migrations to set decimal precision for latitude and longitude (714d6b5)
- analytics: update service management so that it works with new OPAWG slug values (7fe9d42)
- audio-clipper: add mouse position offset when stretching clip to prevent content from jumping (602654b)
- audio-clipper: show audio playing progress + put waveform behind audio clipper (01a09dc)
- avatar: use default avatar when no avatar url has been set (9d23c7e), closes #111
- bundle: include modules and themes when copying files with rsync (cd5bb88)
- bundle: update vite input files path + add
set -e
in bash scripts to fail if command fails (0ee53c7) - cache: add locale for podcast and episode pages + clear some persisting cache in models (9cec8a8), closes #42 #61
- cache: delete posts and comments pages cache when updating platform links (f7c3e5b), closes #169
- cache: return a non cached view when connected (e2e7358)
- cache: suffix cache names with authenticated for credits, map and pages (418a70b)
- cast actor_id to pass as int to set_interact_as_actor() function (56a8e5d)
- category: remove uncategorized option to enforce users in choosing a category (8c64f25)
- change image size requirement hints (ea20206)
- change message upon cancellation of episode publication (9859c74)
- check for database connection and podcasts table existence before redirecting to install (eb74e81)
- check that additional files are valid when creating episode (eac5bc8)
- check that note has a preview_card_id before displaying it (acb8b3a), closes #114
- clear cache when deleting podcast banner (99bb40b)
- comment all cache clean after page update to prevent analytics cache deletion (e6197a4)
- comments: add comment view partials for public pages (fcecbe1)
- correct chart data (4d3e9c8)
- correct percona compatibility issue (e53f819)
- correct php-fpm issues (1ef55d7)
- correct referrer bug (ed69b2f)
- correction for servers with low int precision (31b7828)
- cors: add preflight option routes for episode, podcast and status objects (a281abf)
- declare typed properties in PHPDoc for php<7.4 (14dd44d), closes #23
- define podcast_id and platform_slug as foreign keys in podcasts_plaforms table (6e9451a)
- define podcastNamespaceLink value (0d744d2)
- email: set the correct url in the activation and forgot emails (10fc6f1), closes #204
- embeddable-player: enable any ancestor when X-Frame-Options is set on server (44a4962)
- embed: open embedded player's links in new tab (4aa73d7)
- episode-form: show warning to set
memory_limit
,upload_max_filesize
&post_max_size
(3b3c218), closes #5 #86 - episode-unpublish: set consistent posts_counts' increments/decrements for actors and episodes (8acdafd), closes #233
- episodeCount: add missing brackets to French language file (c1b4112)
- episode: replace guid's empty string value to null (441052a)
- episodes-page: handle defaultQuery being null when no podcast episodes (15183b7), closes #100
- episodes-table: set descriptions to be not null (6774ec1)
- episodes: add publication status + set publication date to null when none has been set (d882981), closes #70
- escape characters for
min
in format_duration_symbol (3b6722a) - escape generated feed tag values and remove new lines from public pages meta description (6238a43), closes #57 #46
- expire default query cache upon scheduled episode publication (b72e7c8), closes #81
- explicitly cast seconds to int in iso8601_duration helper function (779653f)
- fediverse: set default castopod avatar url when actor avatar is not present (460f52f)
- fediverse: set model instances as non shared to prevent overlapping (91128fa)
- fix layout bugs in admin and update translation files (a834171), closes #40
- follow: add missing helpers to Actor controller (ee53a73)
- get_browser_language: return defaultLocale if browser doesn't send user preferred language (9cc2996)
- handle HEAD requests on podcast_feed route (74b2640), closes #79
- home: remove hardcoded prefix in getAllPodcasts query (92d5cc5)
- housekeeping: replace the use of GLOB_BRACE with looping over file extensions (42d92d0), closes #154
- housekeeping: set default sizes value + ignore illegal IFD size error to proceed with script (f21ca57)
- housekeeping: use EpisodeModel's builder to reset comments count (65e9c0b)
- htaccess: add ? after index.php in RewriteRule (d9d139e), closes #152
- http-signature: update SIGNATURE_PATTERN allowing signature keys to be sent in any order (b7f285e)
- images: set default mimetype if none is specified when getting size info (6e4acc6)
- import-with-escaped-characters: remove \CodeIgniter\HTTP\URI in download_file, closes #103 (35b5be0)
- import: add extension when downloading file without + truncate slug if too long (c5f18bb)
- import: add validation for handle field to prevent Router.invalidParameterType error (5bf7200), closes #119
- import: cast description's SimpleXMLElement to string (02d17be)
- import: remove query string from files url (109c4aa)
- import: save media files during podcast import + set missing media fields (a9989d8)
- import: set default episode type if not set (d7250ab)
- import: set episode and season numbers to null when not present in item tag (3211398)
- import: use tag when no itunes:image is present (20e607a)
- include missing variables on public ui's episode page and remote_actions (193b373)
- input-component: unset required attribute to prevent rendering it when false (db9ac13)
- install: add password validation when creating super admin (5a2ca0c)
- install: redirect manually to install wizard on first visit (2ceaaca)
- install: redirect to host_url install route on instanceConfig validation error (99250b1)
- install: redirect to input baseUrl after instance config (2426af7), closes #53
- install: set message block on forms to show error messages (3a0a20d), closes #157
- interact-as: set actor_id instead of podcast id upon login event (5dfade7), closes #104
- json-ld: add missing properties to PodcastSeries object (e97266c)
- keep subtitle line breaks when parsing srt file to json (cfb3da6)
- layouts: replace holy-grail layout with tailwind config + widen public podcast layout (be5a287)
- map: update episode markers query to discard unpublished episodes (b3caac4)
- markdown-editor: remove unnecessary buttons for podcast and episode editors + add extensions (9c4f60e)
- md-editor: build new markdown editor with lit + github/markdown-toolbar-element (9ec1cb9), closes #93 #94 #120
- migrations: ignore invalid utf8 chars for media files metadata + update transcript parser (45e8f99)
- minor corrections (13be386)
- move analytics to helper (d311917)
- move html escaping on credits page (fbffdbd)
- multiselect: add missing class names in choices options for purge to work properly (719538d)
- notifications: add trigger after activities update + update insert trigger (e5d16e8)
- notifications: notify actors after activities insert / update using model callback methods (e08555a)
- open-graph: replace non existant episode description to podcast description in podcast page (b02584e)
- overwrite common lang function to escape returned string (4c490c1), closes #196 #198
- overwrite getActorById to return app's Actor entity (f2bc2f7)
- package.json: update destination of postcss generation scripts (21413f8)
- pages: add locale to page cache (8f999ce)
- partner: set correct image URL (61554be)
- pass timezone to relative time component to show the localized time in the UI (b9db936)
- persons: prevent overflow of persons list by adding horizontal scroll (9e8995d)
- persons: set person picture as optional for better ux (7fdea63), closes #125
- platforms: display platform link only when visible is toggled on (6e503c8), closes #39
- player-styling: revert vite to 2.8 to reference the player css (e07d3af)
- podcast-activity: check if transcript and chapters are set before including them in audio (5855a25)
- podcast-import: move guid attribute declaration for Episode entity to include slug data (5d02ae3)
- podcast: use markdown description value for editor + set prose class to about description (f304d97), closes #156
- prefill description footer input when creating a new episode (9ea5ca3)
- premium-podcasts: display unlock button in embed when premium episode (ca109ba)
- premium-podcasts: remove cache in unlock form + redirect to podcast if podcast is not premium (242352c)
- premium-podcasts: return different cached page when podcast is unlocked (b1303c5)
- pwa: add scope to webmanifests to allow installing an app per podcast (74c683e)
- pwa: set app display as standalone in the webmanifests (7aa37d2)
- re-order graph values (35f633b)
- redirect to non cached views when authenticated in public views (482b47b)
- release: add missing version number to castopod-host package (8f3e9d9)
- remove cache from remote follow form to display error messages (90e4443)
- remove defer from js script declaration as it is a module (18ae557)
- remove fixed size from podcast sidebar + rearrange account info + space out import radio inputs (776eec6)
- remove heavy image cover data from audio file metadata (f74403b)
- remove required for other_categories field and add podcast_id to latest podcasts query (5417be0)
- remove required property to persons picture (c546be3), closes #125
- remove value escaping for form inputs and textareas (bc6dea2)
- rename field status to task_status to get scheduled activities (4ff82a5)
- rename issue_templates labels (9f00305)
- rename MyAccount controller file (e109df3), closes #60
- rename podcast name to podcast handle to clarify field usage (9dd4c77), closes #126
- reorder fields as composite primary keys for analytics tables (9660aa9)
- replace deletedField with published_at for episodes (14d7d07)
- replace getWebEnclosureUrl with getEnclosureWebUrl (8122cea)
- replace hardcoded style links with vite service + set default value for remote transcript url (3f2e056), closes #149 #150
- replace website key for webpages in breadcrumb translate file (50e32ff)
- restore default podcast icon on public website (342778b)
- revert to beta.1's codeigniter4 version (e831411)
- rewrite regenerate image function to use saveSizes method from Image entity (3889912)
- router: check if Accept header is set before getting value (10a2ae0), closes #228
- router: trim URI slash to match same routes for URIs with and without trailing slash (9e9375f)
- rss-import: add Castopod user-agent, handle redirects for downloaded files, add Content namespace (214243b)
- rss: cast number type values to string in rss_helper (7180ae9), closes #148
- rss: do not escape podcast and episode titles in the xml (0dd3b7e), closes #138 #71
- rss: remove escaping for publisher and owner name (6fc6347)
- rss: round episode durations and soundbites (c9fb987), closes #214
- rss: set ❬itunes:author❭ tag to owner_name if publisher not specified (2271c14), closes #96
- rss: use originalPath instead of originalMediaPath in Image library (b4012b7)
- save transcript and chapters files to podcasts folder (63f49c7)
- search-episodes: add fallback sql query using LIKE for search query with less than 4 characters (e66bf44), closes #236
- security: add csrf filter + prevent xss attacks by escaping user input (cd2e1e1)
- set cache expiration to next note publish to show note on publication date (0a66de3)
- set episode description footer to null when empty value (3a7d97d)
- set episode duration translation to hardcoded english (c39efc9), closes #64
- set episode guid upon episode creation (ad8b153), closes #48
- set episode numbers during import + remove all custom form_helpers + minor ui issues (99a3b8d)
- set interact_as_actor for user upon password reset (ad8f5f5), closes #178
- set localized slug_field key as string in french language (17fb29b)
- set location to null when getting empty string (71b1b5f)
- set storage limit as disk_total_space instead of free space (7512e2e)
- settings: add .jpg extension to site-icon file input to display all jpeg images (f611a16)
- socialinteract: move social interact uri into uri attribute + update social data upon import (12b2200)
- sort episodes by published_at with unpublished episodes at the begining (1686f84), closes #249
- sort episodic podcasts by season (d7b6794)
- themes: update themes stylesheet route and remove css extension (e4e7e00)
- types: update fake seeders types + fix bugs (76a4bf3)
- ui: remove empty tooltip when hovering on sponsor button (40aa661)
- unpublish episode before deleting it + add validation step before deletion (f75bd76), closes #112 #55
- update .htaccess for shared hosting config (2379826)
- update broken contributor dropdown fields (e5b7515)
- update condition in AnalyticsTrait (fbc0967)
- update condition in home controller to redirect to install page (33f1b91)
- update conditions when checking for empty max_episodes and season_number (fbad0b5)
- update form_textarea to prevent escaping value (78548b5)
- update iso-369 language table seeder (0c90db4)
- update ivoox podcasting icon (f2b69a4)
- update MarkdownEditor component + restyle Button and other components (b05d177)
- update purgecss content path for php helper files (eb70bb4), closes #59
- update translations for settings' tasks to include what they should be used for (06b1a8b)
- use slash instead of backslash to call layout (a80adb2)
- use UTC_TIMESTAMP() to get current utc date instead of NOW() in sql queries (4e22a0d)
- users: remove required roles input when editing user + prevent owner's roles from being edited (1c8af75), closes #239
- ux: allow for empty message upon episode publication and warn user on submit (33d01b8), closes #129
- ux: have podcast dashboard card link to podcast dashboard if only one podcast in instance (7dabee5)
- ux: redirect user to install page on database error in home page (9017e30)
- validate slug length when submitting episode form + clean permalink edit prefix (b07ac09)
- video-clips: check if created video exists before recreating it and failing (dff1208)
- video-clips: clear video clip cache after process has finished (3ae6232)
- video-clips: create unique temporary files for resources to be deleted after generation (7f7c878)
- video-clips: set audio codec to aac, fixing audio issue on twitter (3c22c68)
- video-clips: set longer podcast and episode lengths for squared format (c030113)
- video-clips: tweak portrait parameters to have subtitles display without overflowing (2385b1a)
- video-clips: update condition to check if ffmpeg is installed (b57f0b6), closes #163
- xml-editor: escape xml editor's content + restyle form sections to prevent overflowing (588590b)
- xml-editor: prettify xml even without root node (ca55c24)
Features
- activitypub: add Podcast actor and PodcastEpisode object with comments (9e1e5d2)
- add about page in admin with instance info + database update button (d0836f3)
- add alternate rss feed link tag to podcast page head (a973c09), closes #35
- add analytics and unknown useragents (ec92e65)
- add audio-clipper toolbar + add video-clip-previewer (0255753)
- add audio-clipper webcomponent (wip) (21d4251)
- add autofocus to input field "Email or username" on login page (19caed4)
- add basic stats on podcast about page (1670558)
- add breadcrumb in admin area (7fb1de2), closes #17
- add cache to ActivityPub sql queries + cache activity and note pages (2d297f4)
- add CDN url (972bcbf), closes #37
- add codemirror to display xml editor for custom rss field (f15f262)
- add cumulative listening time charts (588b4d2)
- add default icons to Alert component (0d98001)
- add DropdownMenu component + remove global audio player in admin (abb7fba)
- add episode_numbering() component helper to display episode and season numbers (3f4a6bd)
- add french translation (196920d)
- add heading component + update ecs rules to fix views (23bdc6f)
- add housekeeping task to run after migrations (89dee41)
- add install wizard form to bootstrap database and create the first superadmin user (cba871c), closes #2
- add instructions on production error page to ease Castopod debugging process (9eab54e), closes #224
- add ISO 3166 country codes (97cd94b)
- add js audio player on podcast, admin and embeddable player pages + fix admon episodes ux (0e14eb4), closes #131
- add label to sponsor button on podcast page (c29c018), closes #162
- add legalNoticeURL to app config for setting an external url to legal notice (711843a)
- add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import (72b3012)
- add map analytics, add episodes analytics, clean analytics page layout, translate countries (07eae83)
- add media entity and link documents, images and audio files to it (6ecf286)
- add notifications inbox for actors (999999e), closes #215
- add Noto Sans Mono font to use for durations + button to access new video clip form in list (7609bb6)
- add npm for js dependencies + move src/ files to root folder (cbb83a6)
- add Open Graph and Twitter meta tags (af970b8), closes #41
- add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) (9c224a8), closes #24
- add permanent delete feature for podcasts 🎉 (dbb4030), closes #89
- add platform models (a333d29)
- add platforms form in podcast settings (043f49c)
- add platforms tables (ce59344)
- add podcast banner field for each podcast + refactor images configuration (4a8147b)
- add premium podcasts to manage subscriptions for premium episodes (3234500), closes #193
- add publish feature for podcasts and set draft by default (3d363f2), closes #128 #220
- add remote_url alternative for transcript and chapters files (3143c9a)
- add replied to post or comment to reply element (d0f9c60)
- add schema.org json-ld objects to podcasts, episodes, posts and comments pages (902f959)
- add task to housekeeping setting for resetting all instance counts (9303e51)
- add unique listeners analytics (3a49258)
- add update rss feed feature for podcasts to import their latest episodes (5eb9dc1), closes #183
- add user permissions and basic groups to handle authorizations (d58e518), closes #3 #18
- add WebSub module for pushing feed updates to open hubs (10d3f73)
- admin: add instance wide dashboard with storage and bandwidth usage (b1a6c02), closes #216
- admin: add search form in podcast episodes list (6be5d12), closes #26
- admin: make header stick on scroll and show title + action buttons using css only (d60498c)
- admin: update admin layout for better ux + update brand pine colors (d86142e)
- allow cross origin requests on episode comments (e12f95a)
- analytics-gdpr: update cached personal data to expire at midnight (0188b67)
- analytics: add 'other' group to pie charts in order to display more accurate data (73acef9)
- analytics: add charts and data export (78625c4)
- analytics: add current date and secret salt to analytics hash for improved privacy (6f2e7c0)
- analytics: add service name from rss user-agent (7202b98)
- analytics: add weekday and hour bar charts (8ab3132)
- api: add rest api with podcasts read endpoints (e64001d), closes #210
- apply colour theme to embed player (9548337), closes #201
- auth: add auth.enable2FA config to enable two-factor authentication (7213ed2)
- build hashed static files to renew browser cache (37c54d2), closes #107
- cache: add podcast and episode pages to cache + clear them after insert or update (da0f047)
- categories: create model, entity, migrations and seeds (f73b042)
- clips: setup clip entities and model + save video clip to have it generated in the background (2f6fdf9)
- comments: add comments to episodes + update naming of status to post (bb4752c)
- comments: add like / undo like to comment + add comment page (0c187ef)
- components: add custom view renderer with ComponentRenderer adapted from bonfire2 (a95de8b)
- create optimized & resized images upon upload (02e4441), closes #6
- custom-rss: add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ (6ecdaad)
- datetime-picker: set material_green theme to flatpickr (3ce6541)
- devcontainer: add devcontainer settings for dev environment (69e7266)
- display castopod version in admin footer (9f2574e), closes #68
- display legal disclaimer and warning on podcast import page (2f07992), closes #34
- edit + delete podcast and episode (ac5f0c7)
- embeddable-player: add embeddable player widget (141788f)
- enhance admin ui with responsive design and ux improvements (2d44b45), closes #31 #9
- enhance ui using javascript in admin area (c0e66d5)
- episode-unpublish: remove episode comments upon unpublish (78acd7f)
- episode: add form to allow editing episode's publication date to a past date (d783d16), closes #97
- episodes: add create form and view pages for episode (f3b2c8b), closes #1
- episodes: add migrations, model and entity for episodes table (0444821)
- episodes: replace all audio file URL parameters with base64 encoded data (e1f65cd)
- episodes: replace soft delete with permanent delete (eb9ff52)
- episodes: schedule episode with future publication_date by using cache expiration time (4f1e773), closes #47
- fediverse: implement activitypub protocols + update user interface (2f525c0), closes #69 #65 #85 #51 #91 #92 #88
- fonts: replace Montserrat with Inter for better readablity (bfa11d0)
- GDPR: add GDPR.yml file to public/.well-known/ (86bccc3)
- gdpr: add purpose for granting access to premium content (47d6d81)
- home: sort podcasts by recent activity + add dropdown menu to choose between sorting options (7b89da6), closes #164
- housekeeping: add clear_cache option to flush redis or files cache (99bfac0)
- i18n: add 7 new languages + update german translations (d021abb)
- i18n: add german language as supported locale + create Language files from english source (c220b31)
- i18n: add Norwegian Nynorsk to supported locales (ced61fc)
- i18n: add Polish translation (2d83b44)
- i18n: add Spanish to supported locales (e340b54)
- i18n: add support for German and Brazilian Portuguese languages (c9b9fe4)
- i18n: add support for Simplified Chinese (zh-Hans) and Catalan (ca) locales (48d1443)
- icons: add default icons for podcasting, social and funding platforms + remove complex icons (5bcdfeb), closes #166 #167 #170
- icons: add podnews icon to podcasting platforms (5f42355), closes #190
- import podcast from an rss feed url (9a5d5a1), closes #21
- integrate stylized form components and update podcast edit page (6536729)
- make displayed publication time as relative time using @github/time-elements (230e139)
- make episode description more visible on episode pages (90533be), closes #171
- map: display geolocated episodes on a map page (4357cc2)
- media: clean media api + create an entity per media type (fafaa7e)
- media: save audio, images, transcripts and chapters to media for episode and persons (58e2a00)
- meta-tags: add activitypub alternate links to podcast, episode, comment and post pages (bd61752)
- minor corrections to some tables (3bf9420)
- monetization: add Web Monetization support (96a6026)
- nodeinfo2: add .well-known route for nodeinfo2 containing metadata about the castopod instance (88fddc8)
- partner: add link and image in episode description (ad07bb9)
- person: add podcastindex.org namespace person tag (8acd011)
- platforms: add AntennaPod (53e9cfd)
- platforms: add Fediverse and some funding platforms, add link on logo (afc3d50)
- platforms: add helloasso (16cb993)
- platforms: add missing newpodcastapps.com's platforms (92dd370)
- platforms: add pod.link (3d7a232)
- platforms: add Podcast Index (ad52b1c)
- platforms: add podfriend (9fdc8d3)
- podcast-form: add new_feed_url field to set an url when changing domain or host (e7eec48)
- podcast-form: update routes and redirect to podcast page (12ce905)
- podcast: create a podcast using form (1202ba3)
- podcasting 2.0: update podcast:social tag to adhere to latest spec (a597cf4)
- prefill season and episode numbers + set episode number as mandatory for serial podcasts (07d740b), closes #134 #136
- public-ui: adapt public podcast and episode pages to wireframes (40a0535), closes #30 #13
- pwa: add service-worker + webmanifest for each podcasts to have them install on devices (fee2c1c)
- redesign public podcast and episode pages + remove any information clutter for better ux (9321400)
- replace form helper functions with components in admin template (e64548b)
- replace slug field with interactive permalink component (578022b)
- restyle episode and person cards + add focus style to interactive elements for a11y (a505a1d)
- rss: add ˂podcast:guid˃ tag for channel (1fab10e)
- rss: add podcast-namespace tags for platforms + previousUrl tag (dbba8dc), closes #73 #75 #76 #80
- rss: add podcast:comments tag to link to episode comments (32e8c7c)
- rss: add podcast:location tag (c0a2282)
- rss: add rss feed route without the
.xml
extension (94c0b7c), closes #247 - rss: add soundbites according to the podcastindex specs (6b34617), closes #83
- rss: add transcript and chapters support (e769d83), closes #72 #82
- rss: generate rss feed from podcast entity (c815ecd)
- rss: update monetization tag so that it meets PodcastIndex requirements (4c7ecbe)
- select: enhance select input with choices.js (910d457)
- set app parameter forceGlobalSecureRequests = true forcing requests to go through https (d9dff1b)
- set podcast / episode description in the pages description meta tag (1c4a504), closes #44
- settings: add general config for instance (site name, description and icon) (5c56f3e)
- settings: add theme settings to set an accent color for all public pages (5c529a8)
- simplify podcast page's layout for better ux (2c0efc6)
- soundbites: add soundbite list and creation forms with audio-clipper component (de19317)
- style file inputs using tailwind's file class (8208ab6)
- themes: add ViewThemes library to set views in root themes folder (7a27676)
- themes: set different default banner per theme (11c916f)
- themes: set generic css variables for colors to enable instance themes (a746a78)
- toggle podcast sidebar on smaller screens (f0205ec)
- transcript: parse srt subtitles into json file + add max file size info below audio file input (0098761)
- ui: create ViewComponents library to enable building class and view files components (94872f2)
- update analytics so to meet IABv2 requirements (03e23a2), closes #10
- update pine colors + create charts components (a50abc1)
- users: add myth-auth to handle users crud + add admin gateway only accessible by login (c63a077), closes #11
- ux: remove admin dashboard and redirect directly to podcast list (27c48b8)
- video-clip: add video-clip page with video preview + logs (42538dd)
- video-clip: generate video clips in the bg using a cron job + add video clip page + tidy up UI (db0e427)
- video-clips: add dimensions for portrait and squared formats (3af404d)
- video-clips: add new themes + add castopod logo as a watermark (1d1490b)
- video-clips: add route for scheduled video clips + list video clips with status (2065ebb)
- video-clips: allow episodeNumbering text to stand in the indent of episodeTitle paragraph (71a063d)
- video-clips: generate a 16:9 video using ffmpeg (35aa7ea)
- video-clips: generate subtitles clip using transcript json to have subtitles accross video (3ce07e4)
- video-clips: replace hardcoded colors with config's theme colors (e462abf)
- vite: add vite config to decouple it from CI_ENVIRONMENT (8721719)
- write id3v2 tags to episode's audio file (4651d01)
Performance Improvements
- cache: update CI4 to use cache's deleteMatching method (54b84f9)
- cache: use deleteMatching method to prevent forgetting cached elements in models (76afc0c)
- defer javascript + lazy load images for faster page loads (f0685e4)
- docker: add redis caching service for development (05ace8c)
Reverts
- install: redirect to install in homepage if no database was set (73f094d)
- set deprecated config options back in App config (433745f)
- soundbites: remove soundbite table from episode's public page (5dc0f19)
- use basic input file for episodes audio files instead of button for better UX (d5f22fb)
BREAKING CHANGES
- analytics: analytics_podcasts_by_player table and analytics_podcasts procedure were updated
1.0.0-beta.24 (2022-10-14)
Bug Fixes
- router: trim URI slash to match same routes for URIs with and without trailing slash (9e9375f)
Features
- episode: add form to allow editing episode's publication date to a past date (d783d16), closes #97
- rss: add rss feed route without the
.xml
extension (94c0b7c), closes #247
1.0.0-beta.23 (2022-09-29)
Bug Fixes
- premium-podcasts: display unlock button in embed when premium episode (ca109ba)
- premium-podcasts: remove cache in unlock form + redirect to podcast if podcast is not premium (242352c)
- premium-podcasts: return different cached page when podcast is unlocked (b1303c5)
Features
- add instructions on production error page to ease Castopod debugging process (9eab54e), closes #224
- add premium podcasts to manage subscriptions for premium episodes (3234500), closes #193
- gdpr: add purpose for granting access to premium content (47d6d81)
1.0.0-beta.22 (2022-09-23)
Bug Fixes
- fediverse: set default castopod avatar url when actor avatar is not present (460f52f)
- import: set default episode type if not set (d7250ab)
- input-component: unset required attribute to prevent rendering it when false (db9ac13)
- notifications: notify actors after activities insert / update using model callback methods (e08555a)
- overwrite getActorById to return app's Actor entity (f2bc2f7)
- remove heavy image cover data from audio file metadata (f74403b)
- set storage limit as disk_total_space instead of free space (7512e2e)
- ui: remove empty tooltip when hovering on sponsor button (40aa661)
- users: remove required roles input when editing user + prevent owner's roles from being edited (1c8af75), closes #239
- ux: have podcast dashboard card link to podcast dashboard if only one podcast in instance (7dabee5)
1.0.0-beta.21 (2022-09-06)
Bug Fixes
- email: set the correct url in the activation and forgot emails (10fc6f1), closes #204
- notifications: add trigger after activities update + update insert trigger (e5d16e8)
Features
- i18n: add support for Simplified Chinese (zh-Hans) and Catalan (ca) locales (48d1443)
1.0.0-beta.20 (2022-08-12)
Bug Fixes
- add underline and semibold font weight for prose links to have them stand out (d4d8671)
- router: check if Accept header is set before getting value (10a2ae0), closes #228
- search-episodes: add fallback sql query using LIKE for search query with less than 4 characters (e66bf44), closes #236
- set interact_as_actor for user upon password reset (ad8f5f5), closes #178
Features
- add label to sponsor button on podcast page (c29c018), closes #162
- add notifications inbox for actors (999999e), closes #215
1.0.0-beta.19 (2022-07-21)
Bug Fixes
- episode-unpublish: set consistent posts_counts' increments/decrements for actors and episodes (8acdafd), closes #233
- get_browser_language: return defaultLocale if browser doesn't send user preferred language (9cc2996)
Features
- episode-unpublish: remove episode comments upon unpublish (78acd7f)
1.0.0-beta.18 (2022-07-07)
Bug Fixes
- player-styling: revert vite to 2.8 to reference the player css (e07d3af)
Features
- add legalNoticeURL to app config for setting an external url to legal notice (711843a)
1.0.0-beta.17 (2022-07-06)
Bug Fixes
- explicitly cast seconds to int in iso8601_duration helper function (779653f)
- housekeeping: use EpisodeModel's builder to reset comments count (65e9c0b)
- rss: round episode durations and soundbites (c9fb987), closes #214
- xml-editor: prettify xml even without root node (ca55c24)
Features
- add publish feature for podcasts and set draft by default (3d363f2), closes #128 #220
- admin: add instance wide dashboard with storage and bandwidth usage (b1a6c02), closes #216
- datetime-picker: set material_green theme to flatpickr (3ce6541)
1.0.0-beta.16 (2022-06-24)
Bug Fixes
- change image size requirement hints (ea20206)
Features
- add update rss feed feature for podcasts to import their latest episodes (5eb9dc1), closes #183
- admin: add search form in podcast episodes list (6be5d12), closes #26
- api: add rest api with podcasts read endpoints (e64001d), closes #210
1.0.0-beta.15 (2022-06-14)
Bug Fixes
- replace deletedField with published_at for episodes (14d7d07)
Features
- add default icons to Alert component (0d98001)
- add permanent delete feature for podcasts 🎉 (dbb4030), closes #89
- apply colour theme to embed player (9548337), closes #201
- episodes: replace soft delete with permanent delete (eb9ff52)
1.0.0-beta.14 (2022-04-23)
Bug Fixes
- home: remove hardcoded prefix in getAllPodcasts query (92d5cc5)
- overwrite common lang function to escape returned string (4c490c1), closes #196 #198
Features
- i18n: add Spanish to supported locales (e340b54)
1.0.0-beta.13 (2022-04-14)
Bug Fixes
- rss: remove escaping for publisher and owner name (e2046e4)
- use UTC_TIMESTAMP() to get current utc date instead of NOW() in sql queries (853a6ba)
Features
- i18n: add Norwegian Nynorsk to supported locales (744340d)
1.0.0-beta.12 (2022-04-05)
Bug Fixes
- update form_textarea to prevent escaping value (78548b5)
Features
- i18n: add support for German and Brazilian Portuguese languages (19da003)
1.0.0-beta.11 (2022-04-01)
Bug Fixes
- change message upon cancellation of episode publication (9859c74)
- prefill description footer input when creating a new episode (9ea5ca3)
- remove value escaping for form inputs and textareas (bc6dea2)
- restore default podcast icon on public website (342778b)
- socialinteract: move social interact uri into uri attribute + update social data upon import (12b2200)
Features
- analytics-gdpr: update cached personal data to expire at midnight (0188b67)
- analytics: add current date and secret salt to analytics hash for improved privacy (6f2e7c0)
- i18n: add 7 new languages + update german translations (d021abb)
- i18n: add german language as supported locale + create Language files from english source (c220b31)
- icons: add podnews icon to podcasting platforms (5f42355), closes #190
1.0.0-beta.10 (2022-03-15)
Bug Fixes
- add explicit int conversion when formatting episode duration (1253096)
- add href to castopod website on login page (cc54257)
- move html escaping on credits page (fbffdbd)
- remove cache from remote follow form to display error messages (90e4443)
Features
- add autofocus to input field "Email or username" on login page (19caed4)
- add WebSub module for pushing feed updates to open hubs (10d3f73)
- GDPR: add GDPR.yml file to public/.well-known/ (86bccc3)
1.0.0-beta.9 (2022-03-04)
Bug Fixes
- cache: delete posts and comments pages cache when updating platform links (f7c3e5b), closes #169
- escape characters for
min
in format_duration_symbol (3b6722a) - security: add csrf filter + prevent xss attacks by escaping user input (cd2e1e1)
- update ivoox podcasting icon (f2b69a4)
- video-clips: update condition to check if ffmpeg is installed (b57f0b6), closes #163
Features
- i18n: add Polish translation (2d83b44)
- icons: add default icons for podcasting, social and funding platforms + remove complex icons (5bcdfeb), closes #166 #167 #170
- make episode description more visible on episode pages (90533be), closes #171
- podcasting 2.0: update podcast:social tag to adhere to latest spec (a597cf4)
1.0.0-beta.8 (2022-02-10)
Features
- podcast-form: add new_feed_url field to set an url when changing domain or host (e7eec48)
1.0.0-beta.7 (2022-02-05)
Bug Fixes
- activitypub: allow cors on get requests for routes exposing acitivitypub objects (2f24809)
- fediverse: set model instances as non shared to prevent overlapping (91128fa)
- htaccess: add ? after index.php in RewriteRule (d9d139e), closes #152
Features
- home: sort podcasts by recent activity + add dropdown menu to choose between sorting options (7b89da6), closes #164
1.0.0-beta.6 (2022-02-03)
Bug Fixes
- activitypub: add conditions for possibly missing actor properties + add user-agent to requests (8fbf948)
- activitypub: add target actor id to like / announce activities to send directly to note's actor (962dd30)
- activitypub: add target_actor_id for create activity to broadcast post reply (0128a21)
- http-signature: update SIGNATURE_PATTERN allowing signature keys to be sent in any order (b7f285e)
- install: set message block on forms to show error messages (3a0a20d), closes #157
- markdown-editor: remove unnecessary buttons for podcast and episode editors + add extensions (9c4f60e)
- podcast-activity: check if transcript and chapters are set before including them in audio (5855a25)
- podcast: use markdown description value for editor + set prose class to about description (f304d97), closes #156
1.0.0-beta.5 (2022-01-31)
Bug Fixes
- analytics: set initial value for duration and bandwidth (ee50539)
1.0.0-beta.4 (2022-01-29)
Bug Fixes
- housekeeping: replace the use of GLOB_BRACE with looping over file extensions (42d92d0), closes #154
- housekeeping: set default sizes value + ignore illegal IFD size error to proceed with script (f21ca57)
Features
- housekeeping: add clear_cache option to flush redis or files cache (99bfac0)
1.0.0-beta.3 (2022-01-28)
Bug Fixes
- revert to beta.1's codeigniter4 version (e831411)
1.0.0-beta.2 (2022-01-28)
Bug Fixes
- migrations: ignore invalid utf8 chars for media files metadata + update transcript parser (45e8f99)
- video-clips: set audio codec to aac, fixing audio issue on twitter (3c22c68)
- video-clips: set longer podcast and episode lengths for squared format (c030113)
1.0.0-beta.1 (2022-01-23)
Bug Fixes
- a11y: replace active tab color to contrast with background on podcast and episode pages (f3785e1)
- activity-pub: cache issues when navigating to activity stream urls (7bcbfb3)
- activity-pub: get database records using new model instances (92536dd)
- activitypub: set created_by to null for reblog if no user + update episode oembed data (209dfbd)
- add admin-audio-player to vite config to have admin player show up (93cb9b2)
- add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error (339bef8), closes #145
- add category_label component to include parent category in about podcast page (74e7d68)
- add head request to analytics_hit route (f0a2f0b)
- add missing explicit badge for podcasts and episodes (cdf9f9d)
- add open graph size for podcast images to replace the inadequate large format (33aae1f)
- add public/media folder to castopod bundle (8053d35), closes #52
- add translation key for audio-clipper trim labels (db191ac)
- add where condition to get episode count without deleted episodes (7661734), closes #67
- admin: save block and lock switches (b66c0af)
- analytics: redirect to mp3 file even when referer was not set (9fc388d)
- analytics: remove charts empty values + remove useless language cache (1678794)
- analytics: set duration field to precise decimal as episode's audio file duration (d772685)
- analytics: update migrations to set decimal precision for latitude and longitude (714d6b5)
- analytics: update service management so that it works with new OPAWG slug values (7fe9d42)
- audio-clipper: add mouse position offset when stretching clip to prevent content from jumping (602654b)
- audio-clipper: show audio playing progress + put waveform behind audio clipper (01a09dc)
- avatar: use default avatar when no avatar url has been set (9d23c7e), closes #111
- bundle: include modules and themes when copying files with rsync (cd5bb88)
- bundle: update vite input files path + add
set -e
in bash scripts to fail if command fails (0ee53c7) - cache: add locale for podcast and episode pages + clear some persisting cache in models (9cec8a8), closes #42 #61
- cache: return a non cached view when connected (e2e7358)
- cache: suffix cache names with authenticated for credits, map and pages (418a70b)
- cast actor_id to pass as int to set_interact_as_actor() function (56a8e5d)
- category: remove uncategorized option to enforce users in choosing a category (8c64f25)
- check for database connection and podcasts table existence before redirecting to install (eb74e81)
- check that additional files are valid when creating episode (eac5bc8)
- check that note has a preview_card_id before displaying it (acb8b3a), closes #114
- clear cache when deleting podcast banner (99bb40b)
- comment all cache clean after page update to prevent analytics cache deletion (e6197a4)
- comments: add comment view partials for public pages (fcecbe1)
- correct chart data (4d3e9c8)
- correct percona compatibility issue (e53f819)
- correct php-fpm issues (1ef55d7)
- correct referrer bug (ed69b2f)
- correction for servers with low int precision (31b7828)
- cors: add preflight option routes for episode, podcast and status objects (a281abf)
- declare typed properties in PHPDoc for php<7.4 (14dd44d), closes #23
- define podcast_id and platform_slug as foreign keys in podcasts_plaforms table (6e9451a)
- define podcastNamespaceLink value (0d744d2)
- embeddable-player: enable any ancestor when X-Frame-Options is set on server (44a4962)
- embed: open embedded player's links in new tab (4aa73d7)
- episode-form: show warning to set
memory_limit
,upload_max_filesize
&post_max_size
(3b3c218), closes #5 #86 - episodeCount: add missing brackets to French language file (c1b4112)
- episode: replace guid's empty string value to null (441052a)
- episodes-page: handle defaultQuery being null when no podcast episodes (15183b7), closes #100
- episodes-table: set descriptions to be not null (6774ec1)
- episodes: add publication status + set publication date to null when none has been set (d882981), closes #70
- escape generated feed tag values and remove new lines from public pages meta description (6238a43), closes #57 #46
- expire default query cache upon scheduled episode publication (b72e7c8), closes #81
- fix layout bugs in admin and update translation files (a834171), closes #40
- follow: add missing helpers to Actor controller (ee53a73)
- handle HEAD requests on podcast_feed route (74b2640), closes #79
- images: set default mimetype if none is specified when getting size info (6e4acc6)
- import-with-escaped-characters: remove \CodeIgniter\HTTP\URI in download_file, closes #103 (35b5be0)
- import: add extension when downloading file without + truncate slug if too long (c5f18bb)
- import: add validation for handle field to prevent Router.invalidParameterType error (5bf7200), closes #119
- import: cast description's SimpleXMLElement to string (02d17be)
- import: remove query string from files url (109c4aa)
- import: save media files during podcast import + set missing media fields (a9989d8)
- import: set episode and season numbers to null when not present in item tag (3211398)
- import: use tag when no itunes:image is present (20e607a)
- include missing variables on public ui's episode page and remote_actions (193b373)
- install: redirect manually to install wizard on first visit (2ceaaca)
- install: redirect to host_url install route on instanceConfig validation error (99250b1)
- install: redirect to input baseUrl after instance config (2426af7), closes #53
- interact-as: set actor_id instead of podcast id upon login event (5dfade7), closes #104
- json-ld: add missing properties to PodcastSeries object (e97266c)
- keep subtitle line breaks when parsing srt file to json (cfb3da6)
- layouts: replace holy-grail layout with tailwind config + widen public podcast layout (be5a287)
- map: update episode markers query to discard unpublished episodes (b3caac4)
- md-editor: build new markdown editor with lit + github/markdown-toolbar-element (9ec1cb9), closes #93 #94 #120
- minor corrections (13be386)
- move analytics to helper (d311917)
- multiselect: add missing class names in choices options for purge to work properly (719538d)
- open-graph: replace non existant episode description to podcast description in podcast page (b02584e)
- package.json: update destination of postcss generation scripts (21413f8)
- pages: add locale to page cache (8f999ce)
- partner: set correct image URL (61554be)
- pass timezone to relative time component to show the localized time in the UI (b9db936)
- persons: prevent overflow of persons list by adding horizontal scroll (9e8995d)
- persons: set person picture as optional for better ux (7fdea63), closes #125
- platforms: display platform link only when visible is toggled on (6e503c8), closes #39
- podcast-import: move guid attribute declaration for Episode entity to include slug data (5d02ae3)
- pwa: add scope to webmanifests to allow installing an app per podcast (74c683e)
- pwa: set app display as standalone in the webmanifests (7aa37d2)
- re-order graph values (35f633b)
- redirect to non cached views when authenticated in public views (482b47b)
- release: add missing version number to castopod-host package (8f3e9d9)
- remove defer from js script declaration as it is a module (18ae557)
- remove fixed size from podcast sidebar + rearrange account info + space out import radio inputs (776eec6)
- remove required for other_categories field and add podcast_id to latest podcasts query (5417be0)
- remove required property to persons picture (c546be3), closes #125
- rename field status to task_status to get scheduled activities (4ff82a5)
- rename issue_templates labels (9f00305)
- rename MyAccount controller file (e109df3), closes #60
- rename podcast name to podcast handle to clarify field usage (9dd4c77), closes #126
- reorder fields as composite primary keys for analytics tables (9660aa9)
- replace getWebEnclosureUrl with getEnclosureWebUrl (8122cea)
- replace hardcoded style links with vite service + set default value for remote transcript url (3f2e056), closes #149 #150
- replace website key for webpages in breadcrumb translate file (50e32ff)
- rewrite regenerate image function to use saveSizes method from Image entity (3889912)
- rss-import: add Castopod user-agent, handle redirects for downloaded files, add Content namespace (214243b)
- rss: cast number type values to string in rss_helper (7180ae9), closes #148
- rss: do not escape podcast and episode titles in the xml (0dd3b7e), closes #138 #71
- rss: set ❬itunes:author❭ tag to owner_name if publisher not specified (2271c14), closes #96
- rss: use originalPath instead of originalMediaPath in Image library (b4012b7)
- save transcript and chapters files to podcasts folder (63f49c7)
- set cache expiration to next note publish to show note on publication date (0a66de3)
- set episode description footer to null when empty value (3a7d97d)
- set episode duration translation to hardcoded english (c39efc9), closes #64
- set episode guid upon episode creation (ad8b153), closes #48
- set episode numbers during import + remove all custom form_helpers + minor ui issues (99a3b8d)
- set localized slug_field key as string in french language (17fb29b)
- set location to null when getting empty string (71b1b5f)
- settings: add .jpg extension to site-icon file input to display all jpeg images (f611a16)
- sort episodic podcasts by season (d7b6794)
- themes: update themes stylesheet route and remove css extension (e4e7e00)
- types: update fake seeders types + fix bugs (76a4bf3)
- unpublish episode before deleting it + add validation step before deletion (f75bd76), closes #112 #55
- update .htaccess for shared hosting config (2379826)
- update broken contributor dropdown fields (e5b7515)
- update condition in AnalyticsTrait (fbc0967)
- update condition in home controller to redirect to install page (33f1b91)
- update conditions when checking for empty max_episodes and season_number (fbad0b5)
- update iso-369 language table seeder (0c90db4)
- update MarkdownEditor component + restyle Button and other components (b05d177)
- update purgecss content path for php helper files (eb70bb4), closes #59
- update translations for settings' tasks to include what they should be used for (06b1a8b)
- use slash instead of backslash to call layout (a80adb2)
- ux: allow for empty message upon episode publication and warn user on submit (33d01b8), closes #129
- ux: redirect user to install page on database error in home page (9017e30)
- video-clips: check if created video exists before recreating it and failing (dff1208)
- video-clips: clear video clip cache after process has finished (3ae6232)
- video-clips: create unique temporary files for resources to be deleted after generation (7f7c878)
- video-clips: tweak portrait parameters to have subtitles display without overflowing (2385b1a)
- xml-editor: escape xml editor's content + restyle form sections to prevent overflowing (588590b)
Features
- activitypub: add Podcast actor and PodcastEpisode object with comments (9e1e5d2)
- add alternate rss feed link tag to podcast page head (a973c09), closes #35
- add analytics and unknown useragents (ec92e65)
- add audio-clipper toolbar + add video-clip-previewer (0255753)
- add audio-clipper webcomponent (wip) (21d4251)
- add basic stats on podcast about page (1670558)
- add breadcrumb in admin area (7fb1de2), closes #17
- add cache to ActivityPub sql queries + cache activity and note pages (2d297f4)
- add CDN url (972bcbf), closes #37
- add codemirror to display xml editor for custom rss field (f15f262)
- add cumulative listening time charts (588b4d2)
- add DropdownMenu component + remove global audio player in admin (abb7fba)
- add episode_numbering() component helper to display episode and season numbers (3f4a6bd)
- add french translation (196920d)
- add heading component + update ecs rules to fix views (23bdc6f)
- add housekeeping task to run after migrations (89dee41)
- add install wizard form to bootstrap database and create the first superadmin user (cba871c), closes #2
- add ISO 3166 country codes (97cd94b)
- add js audio player on podcast, admin and embeddable player pages + fix admon episodes ux (0e14eb4), closes #131
- add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import (72b3012)
- add map analytics, add episodes analytics, clean analytics page layout, translate countries (07eae83)
- add media entity and link documents, images and audio files to it (6ecf286)
- add Noto Sans Mono font to use for durations + button to access new video clip form in list (7609bb6)
- add npm for js dependencies + move src/ files to root folder (cbb83a6)
- add Open Graph and Twitter meta tags (af970b8), closes #41
- add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) (9c224a8), closes #24
- add platform models (a333d29)
- add platforms form in podcast settings (043f49c)
- add platforms tables (ce59344)
- add podcast banner field for each podcast + refactor images configuration (4a8147b)
- add remote_url alternative for transcript and chapters files (3143c9a)
- add replied to post or comment to reply element (d0f9c60)
- add schema.org json-ld objects to podcasts, episodes, posts and comments pages (902f959)
- add task to housekeeping setting for resetting all instance counts (9303e51)
- add unique listeners analytics (3a49258)
- add user permissions and basic groups to handle authorizations (d58e518), closes #3 #18
- admin: make header stick on scroll and show title + action buttons using css only (d60498c)
- admin: update admin layout for better ux + update brand pine colors (d86142e)
- allow cross origin requests on episode comments (e12f95a)
- analytics: add 'other' group to pie charts in order to display more accurate data (73acef9)
- analytics: add charts and data export (78625c4)
- analytics: add service name from rss user-agent (7202b98)
- analytics: add weekday and hour bar charts (8ab3132)
- build hashed static files to renew browser cache (37c54d2), closes #107
- cache: add podcast and episode pages to cache + clear them after insert or update (da0f047)
- categories: create model, entity, migrations and seeds (f73b042)
- clips: setup clip entities and model + save video clip to have it generated in the background (2f6fdf9)
- comments: add comments to episodes + update naming of status to post (bb4752c)
- comments: add like / undo like to comment + add comment page (0c187ef)
- components: add custom view renderer with ComponentRenderer adapted from bonfire2 (a95de8b)
- create optimized & resized images upon upload (02e4441), closes #6
- custom-rss: add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ (6ecdaad)
- devcontainer: add devcontainer settings for dev environment (69e7266)
- display castopod version in admin footer (9f2574e), closes #68
- display legal disclaimer and warning on podcast import page (2f07992), closes #34
- edit + delete podcast and episode (ac5f0c7)
- embeddable-player: add embeddable player widget (141788f)
- enhance admin ui with responsive design and ux improvements (2d44b45), closes #31 #9
- enhance ui using javascript in admin area (c0e66d5)
- episodes: add create form and view pages for episode (f3b2c8b), closes #1
- episodes: add migrations, model and entity for episodes table (0444821)
- episodes: replace all audio file URL parameters with base64 encoded data (e1f65cd)
- episodes: schedule episode with future publication_date by using cache expiration time (4f1e773), closes #47
- fediverse: implement activitypub protocols + update user interface (2f525c0), closes #69 #65 #85 #51 #91 #92 #88
- fonts: replace Montserrat with Inter for better readablity (bfa11d0)
- import podcast from an rss feed url (9a5d5a1), closes #21
- integrate stylized form components and update podcast edit page (6536729)
- make displayed publication time as relative time using @github/time-elements (230e139)
- map: display geolocated episodes on a map page (4357cc2)
- media: clean media api + create an entity per media type (fafaa7e)
- media: save audio, images, transcripts and chapters to media for episode and persons (58e2a00)
- meta-tags: add activitypub alternate links to podcast, episode, comment and post pages (bd61752)
- minor corrections to some tables (3bf9420)
- monetization: add Web Monetization support (96a6026)
- nodeinfo2: add .well-known route for nodeinfo2 containing metadata about the castopod instance (88fddc8)
- partner: add link and image in episode description (ad07bb9)
- person: add podcastindex.org namespace person tag (8acd011)
- platforms: add AntennaPod (53e9cfd)
- platforms: add Fediverse and some funding platforms, add link on logo (afc3d50)
- platforms: add helloasso (16cb993)
- platforms: add missing newpodcastapps.com's platforms (92dd370)
- platforms: add pod.link (3d7a232)
- platforms: add Podcast Index (ad52b1c)
- platforms: add podfriend (9fdc8d3)
- podcast-form: update routes and redirect to podcast page (12ce905)
- podcast: create a podcast using form (1202ba3)
- prefill season and episode numbers + set episode number as mandatory for serial podcasts (07d740b), closes #134 #136
- public-ui: adapt public podcast and episode pages to wireframes (40a0535), closes #30 #13
- pwa: add service-worker + webmanifest for each podcasts to have them install on devices (fee2c1c)
- redesign public podcast and episode pages + remove any information clutter for better ux (9321400)
- replace form helper functions with components in admin template (e64548b)
- replace slug field with interactive permalink component (578022b)
- restyle episode and person cards + add focus style to interactive elements for a11y (a505a1d)
- rss: add ˂podcast:guid˃ tag for channel (1fab10e)
- rss: add podcast-namespace tags for platforms + previousUrl tag (dbba8dc), closes #73 #75 #76 #80
- rss: add podcast:comments tag to link to episode comments (32e8c7c)
- rss: add podcast:location tag (c0a2282)
- rss: add soundbites according to the podcastindex specs (6b34617), closes #83
- rss: add transcript and chapters support (e769d83), closes #72 #82
- rss: generate rss feed from podcast entity (c815ecd)
- rss: update monetization tag so that it meets PodcastIndex requirements (4c7ecbe)
- select: enhance select input with choices.js (910d457)
- set app parameter forceGlobalSecureRequests = true forcing requests to go through https (d9dff1b)
- set podcast / episode description in the pages description meta tag (1c4a504), closes #44
- settings: add general config for instance (site name, description and icon) (5c56f3e)
- settings: add theme settings to set an accent color for all public pages (5c529a8)
- simplify podcast page's layout for better ux (2c0efc6)
- soundbites: add soundbite list and creation forms with audio-clipper component (de19317)
- style file inputs using tailwind's file class (8208ab6)
- themes: add ViewThemes library to set views in root themes folder (7a27676)
- themes: set different default banner per theme (11c916f)
- themes: set generic css variables for colors to enable instance themes (a746a78)
- toggle podcast sidebar on smaller screens (f0205ec)
- transcript: parse srt subtitles into json file + add max file size info below audio file input (0098761)
- ui: create ViewComponents library to enable building class and view files components (94872f2)
- update analytics so to meet IABv2 requirements (03e23a2), closes #10
- update pine colors + create charts components (a50abc1)
- users: add myth-auth to handle users crud + add admin gateway only accessible by login (c63a077), closes #11
- ux: remove admin dashboard and redirect directly to podcast list (27c48b8)
- video-clip: add video-clip page with video preview + logs (42538dd)
- video-clip: generate video clips in the bg using a cron job + add video clip page + tidy up UI (db0e427)
- video-clips: add dimensions for portrait and squared formats (3af404d)
- video-clips: add new themes + add castopod logo as a watermark (1d1490b)
- video-clips: add route for scheduled video clips + list video clips with status (2065ebb)
- video-clips: allow episodeNumbering text to stand in the indent of episodeTitle paragraph (71a063d)
- video-clips: generate a 16:9 video using ffmpeg (35aa7ea)
- video-clips: generate subtitles clip using transcript json to have subtitles accross video (3ce07e4)
- video-clips: replace hardcoded colors with config's theme colors (e462abf)
- vite: add vite config to decouple it from CI_ENVIRONMENT (8721719)
- write id3v2 tags to episode's audio file (4651d01)
Performance Improvements
- cache: update CI4 to use cache's deleteMatching method (54b84f9)
- cache: use deleteMatching method to prevent forgetting cached elements in models (76afc0c)
- defer javascript + lazy load images for faster page loads (f0685e4)
- docker: add redis caching service for development (05ace8c)
Reverts
- set deprecated config options back in App config (433745f)
- soundbites: remove soundbite table from episode's public page (5dc0f19)
- use basic input file for episodes audio files instead of button for better UX (d5f22fb)
BREAKING CHANGES
- analytics: analytics_podcasts_by_player table and analytics_podcasts procedure were updated
1.0.0-alpha.80 (2021-12-29)
Bug Fixes
- add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error (339bef8), closes #145
1.0.0-alpha.79 (2021-12-20)
Bug Fixes
- import: set episode and season numbers to null when not present in item tag (3211398)
1.0.0-alpha.78 (2021-12-15)
Bug Fixes
- import: add extension when downloading file without + truncate slug if too long (c5f18bb)
1.0.0-alpha.77 (2021-11-23)
Bug Fixes
- cors: add preflight option routes for episode, podcast and status objects (a281abf)
- podcast-import: move guid attribute declaration for Episode entity to include slug data (5d02ae3)
1.0.0-alpha.76 (2021-10-26)
Bug Fixes
- replace hardcoded style links with vite service + set default value for remote transcript url (3f2e056), closes #149 #150
1.0.0-alpha.75 (2021-10-05)
Bug Fixes
1.0.0-alpha.74 (2021-09-28)
Features
- platforms: add missing newpodcastapps.com's platforms (92dd370)
1.0.0-alpha.73 (2021-09-22)
Bug Fixes
- map: update episode markers query to discard unpublished episodes (b3caac4)
1.0.0-alpha.72 (2021-09-20)
Bug Fixes
- rename field status to task_status to get scheduled activities (4ff82a5)
1.0.0-alpha.71 (2021-09-17)
Features
- map: display geolocated episodes on a map page (4357cc2)
1.0.0-alpha.70 (2021-08-31)
Bug Fixes
- partner: set correct image URL (61554be)
1.0.0-alpha.69 (2021-08-23)
Bug Fixes
- import: cast description's SimpleXMLElement to string (02d17be)
1.0.0-alpha.68 (2021-08-19)
Bug Fixes
- analytics: redirect to mp3 file even when referer was not set (9fc388d)
1.0.0-alpha.67 (2021-07-24)
Features
- allow cross origin requests on episode comments (e12f95a)
1.0.0-alpha.66 (2021-07-24)
Features
- rss: add podcast:comments tag to link to episode comments (32e8c7c)
1.0.0-alpha.65 (2021-07-22)
Bug Fixes
- update conditions when checking for empty max_episodes and season_number (fbad0b5)
1.0.0-alpha.64 (2021-07-12)
Features
- activitypub: add Podcast actor and PodcastEpisode object with comments (9e1e5d2)
1.0.0-alpha.63 (2021-07-12)
Features
1.0.0-alpha.62 (2021-07-02)
Bug Fixes
- episode: replace guid's empty string value to null (441052a)
1.0.0-alpha.61 (2021-06-23)
Bug Fixes
- release: add missing version number to castopod-host package (8f3e9d9)
- ux: allow for empty message upon episode publication and warn user on submit (33d01b8), closes #129
1.0.0-alpha.60 (2021-06-21)
Features
- rss: add ˂podcast:guid˃ tag for channel (1fab10e)
1.0.0-alpha.59 (2021-06-15)
Bug Fixes
- check that additional files are valid when creating episode (eac5bc8)
1.0.0-alpha.58 (2021-06-11)
Bug Fixes
- cast actor_id to pass as int to set_interact_as_actor() function (56a8e5d)
- analytics: set duration field to precise decimal as episode's audio file duration (d772685)
- analytics: update migrations to set decimal precision for latitude and longitude (714d6b5)
- check for database connection and podcasts table existence before redirecting to install (eb74e81)
- save transcript and chapters files to podcasts folder (63f49c7)
- set cache expiration to next note publish to show note on publication date (0a66de3)
- set episode description footer to null when empty value (3a7d97d)
- set location to null when getting empty string (71b1b5f)
- update condition in home controller to redirect to install page (33f1b91)
- activity-pub: cache issues when navigating to activity stream urls (7bcbfb3)
- activity-pub: get database records using new model instances (92536dd)
- category: remove uncategorized option to enforce users in choosing a category (8c64f25)
- install: redirect manually to install wizard on first visit (2ceaaca)
- types: update fake seeders types + fix bugs (76a4bf3)
- update broken contributor dropdown fields (e5b7515)
- ux: redirect user to install page on database error in home page (9017e30)
- update condition in AnalyticsTrait (fbc0967)
Performance Improvements
- cache: use deleteMatching method to prevent forgetting cached elements in models (76afc0c)
Reverts
- set deprecated config options back in App config (433745f)
1.0.0-alpha.57 (2021-05-12)
Bug Fixes
- follow: add missing helpers to Actor controller (ee53a73)
1.0.0-alpha.56 (2021-05-12)
Bug Fixes
- rss: use originalPath instead of originalMediaPath in Image library (b4012b7)
1.0.0-alpha.55 (2021-05-03)
Features
- add remote_url alternative for transcript and chapters files (3143c9a)
1.0.0-alpha.54 (2021-05-03)
Features
- set app parameter forceGlobalSecureRequests = true forcing requests to go through https (d9dff1b)
- ux: remove admin dashboard and redirect directly to podcast list (27c48b8)
- add cache to ActivityPub sql queries + cache activity and note pages (2d297f4)
Performance Improvements
- cache: update CI4 to use cache's deleteMatching method (54b84f9)
- docker: add redis caching service for development (05ace8c)
1.0.0-alpha.53 (2021-04-16)
Bug Fixes
1.0.0-alpha.52 (2021-04-16)
Bug Fixes
1.0.0-alpha.51 (2021-04-15)
Bug Fixes
1.0.0-alpha.50 (2021-04-14)
Bug Fixes
- persons: prevent overflow of persons list by adding horizontal scroll (9e8995d)
1.0.0-alpha.49 (2021-04-12)
Bug Fixes
- multiselect: add missing class names in choices options for purge to work properly (719538d)
1.0.0-alpha.48 (2021-04-10)
Bug Fixes
- import-with-escaped-characters: remove \CodeIgniter\HTTP\URI in download_file, closes #103 (35b5be0)
1.0.0-alpha.47 (2021-04-10)
Bug Fixes
- episodeCount: add missing brackets to French language file (c1b4112)
1.0.0-alpha.46 (2021-04-09)
Bug Fixes
1.0.0-alpha.45 (2021-04-08)
Bug Fixes
- add head request to analytics_hit route (f0a2f0b)
1.0.0-alpha.44 (2021-04-08)
Bug Fixes
1.0.0-alpha.43 (2021-04-08)
Bug Fixes
- episode-form: show warning to set
memory_limit
,upload_max_filesize
&post_max_size
(3b3c218), closes #5 #86
1.0.0-alpha.42 (2021-04-02)
Features
- fediverse: implement activitypub protocols + update user interface (2f525c0), closes #69 #65 #85 #51 #91 #92 #88
1.0.0-alpha.41 (2021-03-30)
Features
- partner: add link and image in episode description (ad07bb9)
1.0.0-alpha.40 (2021-03-19)
Features
- custom-rss: add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ (6ecdaad)
1.0.0-alpha.39 (2021-03-01)
Bug Fixes
- embeddable-player: enable any ancestor when X-Frame-Options is set on server (44a4962)
1.0.0-alpha.38 (2021-02-27)
Features
- embeddable-player: add embeddable player widget (141788f)
1.0.0-alpha.37 (2021-02-17)
Bug Fixes
- import: remove query string from files url (109c4aa)
1.0.0-alpha.36 (2021-02-16)
Features
- platforms: add pod.link (3d7a232)
1.0.0-alpha.35 (2021-02-12)
Bug Fixes
- admin: save block and lock switches (b66c0af)
1.0.0-alpha.34 (2021-02-11)
Bug Fixes
- rss-import: add Castopod user-agent, handle redirects for downloaded files, add Content namespace (214243b)
1.0.0-alpha.33 (2021-02-10)
Features
- platforms: add helloasso (16cb993)
1.0.0-alpha.32 (2021-02-10)
Features
- person: add podcastindex.org namespace person tag (8acd011)
1.0.0-alpha.31 (2020-12-23)
Features
- rss: add podcast:location tag (c0a2282)
1.0.0-alpha.30 (2020-12-21)
Features
- rss: update monetization tag so that it meets PodcastIndex requirements (4c7ecbe)
1.0.0-alpha.29 (2020-12-10)
Bug Fixes
- episodes: add publication status + set publication date to null when none has been set (d882981), closes #70
Reverts
- soundbites: remove soundbite table from episode's public page (5dc0f19)
1.0.0-alpha.28 (2020-12-07)
Features
1.0.0-alpha.27 (2020-12-07)
Features
- platforms: add AntennaPod (53e9cfd)
1.0.0-alpha.26 (2020-11-30)
Bug Fixes
- analytics: update service management so that it works with new OPAWG slug values (7fe9d42)
1.0.0-alpha.25 (2020-11-30)
Features
- platforms: add podfriend (9fdc8d3)
1.0.0-alpha.24 (2020-11-26)
Features
- monetization: add Web Monetization support (96a6026)
1.0.0-alpha.23 (2020-11-24)
Bug Fixes
- define podcastNamespaceLink value (0d744d2)
1.0.0-alpha.22 (2020-11-24)
Features
1.0.0-alpha.21 (2020-11-24)
Features
- platforms: add Fediverse and some funding platforms, add link on logo (afc3d50)
1.0.0-alpha.20 (2020-11-24)
Bug Fixes
- import: use tag when no itunes:image is present (20e607a)
Features
1.0.0-alpha.19 (2020-11-13)
Bug Fixes
1.0.0-alpha.18 (2020-11-09)
Features
- platforms: add Podcast Index (ad52b1c)
1.0.0-alpha.17 (2020-11-05)
Bug Fixes
- open-graph: replace non existant episode description to podcast description in podcast page (b02584e)
1.0.0-alpha.16 (2020-11-04)
Features
1.0.0-alpha.15 (2020-11-03)
Features
- analytics: add 'other' group to pie charts in order to display more accurate data (73acef9)
1.0.0-alpha.14 (2020-11-02)
Features
- analytics: add weekday and hour bar charts (8ab3132)
1.0.0-alpha.13 (2020-10-29)
Bug Fixes
- episodes-table: set descriptions to be not null (6774ec1)
Features
- add episode_numbering() component helper to display episode and season numbers (3f4a6bd)
- episodes: replace all audio file URL parameters with base64 encoded data (e1f65cd)
1.0.0-alpha.12 (2020-10-26)
Bug Fixes
- replace getWebEnclosureUrl with getEnclosureWebUrl (8122cea)
1.0.0-alpha.11 (2020-10-26)
Features
1.0.0-alpha.10 (2020-10-26)
Bug Fixes
- install: redirect to host_url install route on instanceConfig validation error (99250b1)
1.0.0-alpha.9 (2020-10-26)
Features
1.0.0-alpha.8 (2020-10-22)
Features
- episodes: schedule episode with future publication_date by using cache expiration time (4f1e773), closes #47
1.0.0-alpha.7 (2020-10-21)
Features
- analytics: add service name from rss user-agent (7202b98)
BREAKING CHANGES
- analytics: analytics_podcasts_by_player table and analytics_podcasts procedure were updated
1.0.0-alpha.6 (2020-10-20)
Bug Fixes
- cache: add locale for podcast and episode pages + clear some persisting cache in models (9cec8a8), closes #42 #61
1.0.0-alpha.5 (2020-10-20)
Features
- add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import (72b3012)
1.0.0-alpha.4 (2020-10-20)
Features
- analytics: add charts and data export (78625c4)
1.0.0-alpha.3 (2020-10-19)
Bug Fixes
- analytics: remove charts empty values + remove useless language cache (1678794)
1.0.0-alpha.2 (2020-10-19)
Features
- add cumulative listening time charts (588b4d2)
1.0.0-alpha.1 (2020-10-16)
Bug Fixes
- add public/media folder to castopod bundle (8053d35), closes #52
- add where condition to get episode count without deleted episodes (7661734), closes #67
- comment all cache clean after page update to prevent analytics cache deletion (e6197a4)
- correct chart data (4d3e9c8)
- correct percona compatibility issue (e53f819)
- correct php-fpm issues (1ef55d7)
- correct referrer bug (ed69b2f)
- correction for servers with low int precision (31b7828)
- declare typed properties in PHPDoc for php<7.4 (14dd44d), closes #23
- escape generated feed tag values and remove new lines from public pages meta description (6238a43), closes #57 #46
- fix layout bugs in admin and update translation files (a834171), closes #40
- minor corrections (13be386)
- move analytics to helper (d311917)
- re-order graph values (35f633b)
- remove required for other_categories field and add podcast_id to latest podcasts query (5417be0)
- rename issue_templates labels (9f00305)
- rename MyAccount controller file (e109df3), closes #60
- reorder fields as composite primary keys for analytics tables (9660aa9)
- replace website key for webpages in breadcrumb translate file (50e32ff)
- set episode duration translation to hardcoded english (c39efc9), closes #64
- set episode guid upon episode creation (ad8b153), closes #48
- update purgecss content path for php helper files (eb70bb4), closes #59
- install: redirect to input baseUrl after instance config (2426af7), closes #53
- platforms: display platform link only when visible is toggled on (6e503c8), closes #39
- sort episodic podcasts by season (d7b6794)
- update .htaccess for shared hosting config (2379826)
- update iso-369 language table seeder (0c90db4)
- package.json: update destination of postcss generation scripts (21413f8)
- use slash instead of backslash to call layout (a80adb2)
Features
- add alternate rss feed link tag to podcast page head (a973c09), closes #35
- add analytics and unknown useragents (ec92e65)
- add breadcrumb in admin area (7fb1de2), closes #17
- add french translation (196920d)
- add install wizard form to bootstrap database and create the first superadmin user (cba871c), closes #2
- add ISO 3166 country codes (97cd94b)
- add map analytics, add episodes analytics, clean analytics page layout, translate countries (07eae83)
- add npm for js dependencies + move src/ files to root folder (cbb83a6)
- add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) (9c224a8), closes #24
- add platform models (a333d29)
- add platforms form in podcast settings (043f49c)
- add platforms tables (ce59344)
- add unique listeners analytics (3a49258)
- add user permissions and basic groups to handle authorizations (d58e518), closes #3 #18
- create optimized & resized images upon upload (02e4441), closes #6
- display legal disclaimer and warning on podcast import page (2f07992), closes #34
- edit + delete podcast and episode (ac5f0c7)
- enhance admin ui with responsive design and ux improvements (2d44b45), closes #31 #9
- enhance ui using javascript in admin area (c0e66d5)
- import podcast from an rss feed url (9a5d5a1), closes #21
- set podcast / episode description in the pages description meta tag (1c4a504), closes #44
- update analytics so to meet IABv2 requirements (03e23a2), closes #10
- cache: add podcast and episode pages to cache + clear them after insert or update (da0f047)
- categories: create model, entity, migrations and seeds (f73b042)
- devcontainer: add devcontainer settings for dev environment (69e7266)
- episodes: add create form and view pages for episode (f3b2c8b), closes #1
- episodes: add migrations, model and entity for episodes table (0444821)
- podcast: create a podcast using form (1202ba3)
- podcast-form: update routes and redirect to podcast page (12ce905)
- public-ui: adapt public podcast and episode pages to wireframes (40a0535), closes #30 #13
- rss: generate rss feed from podcast entity (c815ecd)
- users: add myth-auth to handle users crud + add admin gateway only accessible by login (c63a077), closes #11
- minor corrections to some tables (3bf9420)
- write id3v2 tags to episode's audio file (4651d01)
Reverts
- use basic input file for episodes audio files instead of button for better UX (d5f22fb)