Skip to content
Snippets Groups Projects
Commit f9572e41 authored by semantic-release-bot's avatar semantic-release-bot
Browse files

chore(release): 1.0.0 [skip ci]

# 1.0.0 (2022-10-20)

### Bug Fixes

* **a11y:** replace active tab color to contrast with background on podcast and episode pages ([f3785e14](f3785e14))
* **activity-pub:** cache issues when navigating to activity stream urls ([7bcbfb32](7bcbfb32))
* **activity-pub:** get database records using new model instances ([92536ddb](92536ddb))
* **activitypub:** add conditions for possibly missing actor properties + add user-agent to requests ([8fbf948f](8fbf948f))
* **activitypub:** add target actor id to like / announce activities to send directly to note's actor ([962dd305](962dd305))
* **activitypub:** add target_actor_id for create activity to broadcast post reply ([0128a21e](0128a21e))
* **activitypub:** allow cors on get requests for routes exposing acitivitypub objects ([2f248099](2f248099))
* **activitypub:** set created_by to null for reblog if no user + update episode oembed data ([209dfbd1](209dfbd1))
* add admin-audio-player to vite config to have admin player show up ([93cb9b24](93cb9b24))
* add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error ([339bef87](339bef87)), closes [#145](#145)
* add category_label component to include parent category in about podcast page ([74e7d68a](74e7d68a))
* add explicit int conversion when formatting episode duration ([12530961](12530961))
* add head request to analytics_hit route ([f0a2f0be](f0a2f0be))
* add href to castopod website on login page ([cc542573](cc542573))
* add missing explicit badge for podcasts and episodes ([cdf9f9d5](cdf9f9d5))
* add open graph size for podcast images to replace the inadequate large format ([33aae1f7](33aae1f7))
* add public/media folder to castopod bundle ([8053d352](8053d352)), closes [#52](#52)
* add translation key for audio-clipper trim labels ([db191ac3](db191ac3))
* add underline and semibold font weight for prose links to have them stand out ([d4d86712](d4d86712))
* add where condition to get episode count without deleted episodes ([7661734e](7661734e)), closes [#67](#67)
* **admin:** save block and lock switches ([b66c0afc](b66c0afc))
* **analytics:** redirect to mp3 file even when referer was not set ([9fc388d1](9fc388d1))
* **analytics:** remove charts empty values + remove useless language cache ([16787941](16787941))
* **analytics:** set duration field to precise decimal as episode's audio file duration ([d7726854](d7726854))
* **analytics:** set initial value for duration and bandwidth ([ee505395](ee505395))
* **analytics:** update migrations to set decimal precision for latitude and longitude ([714d6b5d](714d6b5d))
* **analytics:** update service management so that it works with new OPAWG slug values ([7fe9d425](7fe9d425))
* **audio-clipper:** add mouse position offset when stretching clip to prevent content from jumping ([602654b9](602654b9))
* **audio-clipper:** show audio playing progress + put waveform behind audio clipper ([01a09dc4](01a09dc4))
* **avatar:** use default avatar when no avatar url has been set ([9d23c7e7](9d23c7e7)), closes [#111](#111)
* **bundle:** include modules and themes when copying files with rsync ([cd5bb883](cd5bb883))
* **bundle:** update vite input files path + add `set -e` in bash scripts to fail if command fails ([0ee53c71](0ee53c71))
* **cache:** add locale for podcast and episode pages + clear some persisting cache in models ([9cec8a81](9cec8a81)), closes [#42](#42) [#61](#61)
* **cache:** delete posts and comments pages cache when updating platform links ([f7c3e5bf](f7c3e5bf)), closes [#169](#169)
* **cache:** return a non cached view when connected ([e2e73581](e2e73581))
* **cache:** suffix cache names with authenticated for credits, map and pages ([418a70b2](418a70b2))
* cast actor_id to pass as int to set_interact_as_actor() function ([56a8e5d7](56a8e5d7))
* **category:** remove uncategorized option to enforce users in choosing a category ([8c64f25a](8c64f25a))
* change image size requirement hints ([ea20206e](ea20206e))
* change message upon cancellation of episode publication ([9859c743](9859c743))
* check for database connection and podcasts table existence before redirecting to install ([eb74e81c](eb74e81c))
* check that additional files are valid when creating episode ([eac5bc87](eac5bc87))
* check that note has a preview_card_id before displaying it ([acb8b3a4](acb8b3a4)), closes [#114](#114)
* clear cache when deleting podcast banner ([99bb40b8](99bb40b8))
* comment all cache clean after page update to prevent analytics cache deletion ([e6197a49](e6197a49))
* **comments:** add comment view partials for public pages ([fcecbe1c](fcecbe1c))
* correct chart data ([4d3e9c8c](4d3e9c8c))
* correct percona compatibility issue ([e53f8192](e53f8192))
* correct php-fpm issues ([1ef55d73](1ef55d73))
* correct referrer bug ([ed69b2f5](ed69b2f5))
* correction for servers with low int precision ([31b7828e](31b7828e))
* **cors:** add preflight option routes for episode, podcast and status objects ([a281abfd](a281abfd))
* declare typed properties in PHPDoc for php<7.4 ([14dd44d0](14dd44d0)), closes [#23](#23)
* define podcast_id and platform_slug as foreign keys in podcasts_plaforms table ([6e9451a1](6e9451a1))
* define podcastNamespaceLink value ([0d744d21](0d744d21))
* **email:** set the correct url in the activation and forgot emails ([10fc6f17](10fc6f17)), closes [#204](#204)
* **embeddable-player:** enable any ancestor when X-Frame-Options is set on server ([44a4962e](44a4962e))
* **embed:** open embedded player's links in new tab ([4aa73d71](4aa73d71))
* **episode-form:** show warning to set `memory_limit`, `upload_max_filesize` & `post_max_size` ([3b3c218b](3b3c218b)), closes [#5](#5) [#86](#86)
* **episode-unpublish:** set consistent posts_counts' increments/decrements for actors and episodes ([8acdafd2](8acdafd2)), closes [#233](#233)
* **episodeCount:** add missing brackets to French language file ([c1b41126](c1b41126))
* **episode:** replace guid's empty string value to null ([441052af](441052af))
* **episodes-page:** handle defaultQuery being null when no podcast episodes ([15183b7e](15183b7e)), closes [#100](#100)
* **episodes-table:** set descriptions to be not null ([6774ec10](6774ec10))
* **episodes:** add publication status + set publication date to null when none has been set ([d882981b](d882981b)), closes [#70](#70)
* escape characters for `min` in format_duration_symbol ([3b6722a4](3b6722a4))
* escape generated feed tag values and remove new lines from public pages meta description ([6238a438](6238a438)), closes [#57](#57) [#46](#46)
* expire default query cache upon scheduled episode publication ([b72e7c86](b72e7c86)), closes [#81](#81)
* explicitly cast seconds to int in iso8601_duration helper function ([779653f7](779653f7))
* **fediverse:** set default castopod avatar url when actor avatar is not present ([460f52f7](460f52f7))
* **fediverse:** set model instances as non shared to prevent overlapping ([91128fad](91128fad))
* fix layout bugs in admin and update translation files ([a8341718](a8341718)), closes [#40](#40)
* **follow:** add missing helpers to Actor controller ([ee53a732](ee53a732))
* **get_browser_language:** return defaultLocale if browser doesn't send user preferred language ([9cc29962](9cc29962))
* handle HEAD requests on podcast_feed route ([74b2640f](74b2640f)), closes [#79](#79)
* **home:** remove hardcoded prefix in getAllPodcasts query ([92d5cc50](92d5cc50))
* **housekeeping:** replace the use of GLOB_BRACE with looping over file extensions ([42d92d0c](42d92d0c)), closes [#154](#154)
* **housekeeping:** set default sizes value + ignore illegal IFD size error to proceed with script ([f21ca576](f21ca576))
* **housekeeping:** use EpisodeModel's builder to reset comments count ([65e9c0b0](65e9c0b0))
* **htaccess:** add ? after index.php in RewriteRule ([d9d139ee](d9d139ee)), closes [#152](#152)
* **http-signature:** update SIGNATURE_PATTERN allowing signature keys to be sent in any order ([b7f285e4](b7f285e4))
* **images:** set default mimetype if none is specified when getting size info ([6e4acc64](6e4acc64))
* **import-with-escaped-characters:** remove \CodeIgniter\HTTP\URI in download_file, closes [#103](#103) ([35b5be09](35b5be09))
* **import:** add extension when downloading file without + truncate slug if too long ([c5f18bb6](c5f18bb6))
* **import:** add validation for handle field to prevent Router.invalidParameterType error ([5bf7200f](5bf7200f)), closes [#119](#119)
* **import:** cast description's SimpleXMLElement to string ([02d17be4](02d17be4))
* **import:** remove query string from files url ([109c4aa1](109c4aa1))
* **import:** save media files during podcast import + set missing media fields ([a9989d84](a9989d84))
* **import:** set default episode type if not set ([d7250ab0](d7250ab0))
* **import:** set episode and season numbers to null when not present in item tag ([3211398c](3211398c))
* **import:** use <image><url> tag when no <itunes:image> is present ([20e607af](20e607af))
* include missing variables on public ui's episode page and remote_actions ([193b373b](193b373b))
* **input-component:** unset required attribute to prevent rendering it when false ([db9ac138](db9ac138))
* **install:** add password validation when creating super admin ([5a2ca0cc](5a2ca0cc))
* **install:** redirect manually to install wizard on first visit ([2ceaaca4](2ceaaca4))
* **install:** redirect to host_url install route on instanceConfig validation error ([99250b18](99250b18))
* **install:** redirect to input baseUrl after instance config ([2426af7d](2426af7d)), closes [#53](#53)
* **install:** set message block on forms to show error messages ([3a0a20d5](3a0a20d5)), closes [#157](#157)
* **interact-as:** set actor_id instead of podcast id upon login event ([5dfade7c](5dfade7c)), closes [#104](#104)
* **json-ld:** add missing properties to PodcastSeries object ([e97266c5](e97266c5))
* keep subtitle line breaks when parsing srt file to json ([cfb3da65](cfb3da65))
* **layouts:** replace holy-grail layout with tailwind config + widen public podcast layout ([be5a2878](be5a2878))
* **map:** update episode markers query to discard unpublished episodes ([b3caac45](b3caac45))
* **markdown-editor:** remove unnecessary buttons for podcast and episode editors + add extensions ([9c4f60e0](9c4f60e0))
* **md-editor:** build new markdown editor with lit + github/markdown-toolbar-element ([9ec1cb93](9ec1cb93)), closes [#93](#93) [#94](#94) [#120](#120)
* **migrations:** ignore invalid utf8 chars for media files metadata + update transcript parser ([45e8f99e](45e8f99e))
* minor corrections ([13be3868](13be3868))
* move analytics to helper ([d3119173](d3119173))
* move html escaping on credits page ([fbffdbde](fbffdbde))
* **multiselect:** add missing class names in choices options for purge to work properly ([719538d0](719538d0))
* **notifications:** add trigger after activities update + update insert trigger ([e5d16e87](e5d16e87))
* **notifications:** notify actors after activities insert / update using model callback methods ([e08555a4](e08555a4))
* **open-graph:** replace non existant episode description to podcast description in podcast page ([b02584ee](b02584ee))
* overwrite common lang function to escape returned string ([4c490c15](4c490c15)), closes [#196](#196) [#198](#198)
* overwrite getActorById to return app's Actor entity ([f2bc2f7e](f2bc2f7e))
* **package.json:** update destination of postcss generation scripts ([21413f8a](21413f8a))
* **pages:** add locale to page cache ([8f999ce2](8f999ce2))
* **partner:** set correct image URL ([61554be1](61554be1))
* pass timezone to relative time component to show the localized time in the UI ([b9db9364](b9db9364))
* **persons:** prevent overflow of persons list by adding horizontal scroll ([9e8995dc](9e8995dc))
* **persons:** set person picture as optional for better ux ([7fdea63d](7fdea63d)), closes [#125](#125)
* **platforms:** display platform link only when visible is toggled on ([6e503c8d](6e503c8d)), closes [#39](#39)
* **player-styling:** revert vite to 2.8 to reference the player css ([e07d3afe](e07d3afe))
* **podcast-activity:** check if transcript and chapters are set before including them in audio ([5855a250](5855a250))
* **podcast-import:** move guid attribute declaration for Episode entity to include slug data ([5d02ae39](5d02ae39))
* **podcast:** use markdown description value for editor + set prose class to about description ([f304d97b](f304d97b)), closes [#156](#156)
* prefill description footer input when creating a new episode ([9ea5ca31](9ea5ca31))
* **premium-podcasts:** display unlock button in embed when premium episode ([ca109ba3](ca109ba3))
* **premium-podcasts:** remove cache in unlock form + redirect to podcast if podcast is not premium ([242352c4](242352c4))
* **premium-podcasts:** return different cached page when podcast is unlocked ([b1303c52](b1303c52))
* **pwa:** add scope to webmanifests to allow installing an app per podcast ([74c683eb](74c683eb))
* **pwa:** set app display as standalone in the webmanifests ([7aa37d24](7aa37d24))
* re-order graph values ([35f633b4](35f633b4))
* redirect to non cached views when authenticated in public views ([482b47ba](482b47ba))
* **release:** add missing version number to castopod-host package ([8f3e9d90](8f3e9d90))
* remove cache from remote follow form to display error messages ([90e44437](90e44437))
* remove defer from js script declaration as it is a module ([18ae557e](18ae557e))
* remove fixed size from podcast sidebar + rearrange account info + space out import radio inputs ([776eec6f](776eec6f))
* remove heavy image cover data from audio file metadata ([f74403bd](f74403bd))
* remove required for other_categories field and add podcast_id to latest podcasts query ([5417be00](5417be00))
* remove required property to persons picture ([c546be38](c546be38)), closes [#125](#125)
* remove value escaping for form inputs and textareas ([bc6dea2f](bc6dea2f))
* rename field status to task_status to get scheduled activities ([4ff82a5f](4ff82a5f))
* rename issue_templates labels ([9f003058](9f003058))
* rename MyAccount controller file ([e109df30](e109df30)), closes [#60](#60)
* rename podcast name to podcast handle to clarify field usage ([9dd4c774](9dd4c774)), closes [#126](#126)
* reorder fields as composite primary keys for analytics tables ([9660aa97](9660aa97))
* replace deletedField with published_at for episodes ([14d7d078](14d7d078))
* replace getWebEnclosureUrl with getEnclosureWebUrl ([8122ceaf](8122ceaf))
* replace hardcoded style links with vite service + set default value for remote transcript url ([3f2e0560](3f2e0560)), closes [#149](#149) [#150](#150)
* replace website key for webpages in breadcrumb translate file ([50e32ff7](50e32ff7))
* restore default podcast icon on public website ([342778ba](342778ba))
* revert to beta.1's codeigniter4 version ([e8314112](e8314112))
* rewrite regenerate image function to use saveSizes method from Image entity ([38899124](38899124))
* **router:** check if Accept header is set before getting value ([10a2ae02](10a2ae02)), closes [#228](#228)
* **router:** trim URI slash to match same routes for URIs with and without trailing slash ([9e9375f9](9e9375f9))
* **rss-import:** add Castopod user-agent, handle redirects for downloaded files, add Content namespace ([214243b3](214243b3))
* **rss:** cast number type values to string in rss_helper ([7180ae9e](7180ae9e)), closes [#148](#148)
* **rss:** do not escape podcast and episode titles in the xml ([0dd3b7e0](0dd3b7e0)), closes [#138](#138) [#71](#71)
* **rss:** remove escaping for publisher and owner name ([6fc63478](6fc63478))
* **rss:** round episode durations and soundbites ([c9fb987f](c9fb987f)), closes [#214](#214)
* **rss:** set ❬itunes:author❭ tag to owner_name if publisher not specified ([2271c144](2271c144)), closes [#96](#96)
* **rss:** use originalPath instead of originalMediaPath in Image library ([b4012b7d](b4012b7d))
* save transcript and chapters files to podcasts folder ([63f49c71](63f49c71))
* **search-episodes:** add fallback sql query using LIKE for search query with less than 4 characters ([e66bf443](e66bf443)), closes [#236](#236)
* **security:** add csrf filter + prevent xss attacks by escaping user input ([cd2e1e1d](cd2e1e1d))
* set cache expiration to next note publish to show note on publication date ([0a66de3e](0a66de3e))
* set episode description footer to null when empty value ([3a7d97d6](3a7d97d6))
* set episode duration translation to hardcoded english ([c39efc94](c39efc94)), closes [#64](#64)
* set episode guid upon episode creation ([ad8b153f](ad8b153f)), closes [#48](#48)
* set episode numbers during import + remove all custom form_helpers + minor ui issues ([99a3b8d3](99a3b8d3))
* set interact_as_actor for user upon password reset ([ad8f5f5a](ad8f5f5a)), closes [#178](#178)
* set localized slug_field key as string in french language ([17fb29b2](17fb29b2))
* set location to null when getting empty string ([71b1b5f7](71b1b5f7))
* set storage limit as disk_total_space instead of free space ([7512e2ed](7512e2ed))
* **settings:** add .jpg extension to site-icon file input to display all jpeg images ([f611a16c](f611a16c))
* **socialinteract:** move social interact uri into uri attribute + update social data upon import ([12b22008](12b22008))
* sort episodes by published_at with unpublished episodes at the begining ([1686f840](1686f840)), closes [#249](#249)
* sort episodic podcasts by season ([d7b6794f](d7b6794f))
* **themes:** update themes stylesheet route and remove css extension ([e4e7e000](e4e7e000))
* **types:** update fake seeders types + fix bugs ([76a4bf34](76a4bf34))
* **ui:** remove empty tooltip when hovering on sponsor button ([40aa6612](40aa6612))
* unpublish episode before deleting it + add validation step before deletion ([f75bd764](f75bd764)), closes [#112](#112) [#55](#55)
* update .htaccess for shared hosting config ([23798263](23798263))
* update broken contributor dropdown fields ([e5b75150](e5b75150))
* update condition in AnalyticsTrait ([fbc0967c](fbc0967c))
* update condition in home controller to redirect to install page ([33f1b91d](33f1b91d))
* update conditions when checking for empty max_episodes and season_number ([fbad0b59](fbad0b59))
* update form_textarea to prevent escaping value ([78548b5c](78548b5c))
* update iso-369 language table seeder ([0c90db44](0c90db44))
* update ivoox podcasting icon ([f2b69a47](f2b69a47))
* update MarkdownEditor component + restyle Button and other components ([b05d177f](b05d177f))
* update purgecss content path for php helper files ([eb70bb4f](eb70bb4f)), closes [#59](#59)
* update translations for settings' tasks to include what they should be used for ([06b1a8b2](06b1a8b2))
* use slash instead of backslash to call layout ([a80adb22](a80adb22))
* use UTC_TIMESTAMP() to get current utc date instead of NOW() in sql queries ([4e22a0d5](4e22a0d5))
* **users:** remove required roles input when editing user + prevent owner's roles from being edited ([1c8af755](1c8af755)), closes [#239](#239)
* **ux:** allow for empty message upon episode publication and warn user on submit ([33d01b8d](33d01b8d)), closes [#129](#129)
* **ux:** have podcast dashboard card link to podcast dashboard if only one podcast in instance ([7dabee58](7dabee58))
* **ux:** redirect user to install page on database error in home page ([9017e30b](9017e30b))
* validate slug length when submitting episode form + clean permalink edit prefix ([b07ac093](b07ac093))
* **video-clips:** check if created video exists before recreating it and failing ([dff12087](dff12087))
* **video-clips:** clear video clip cache after process has finished ([3ae62325](3ae62325))
* **video-clips:** create unique temporary files for resources to be deleted after generation ([7f7c878c](7f7c878c))
* **video-clips:** set audio codec to aac, fixing audio issue on twitter ([3c22c68e](3c22c68e))
* **video-clips:** set longer podcast and episode lengths for squared format ([c0301134](c0301134))
* **video-clips:** tweak portrait parameters to have subtitles display without overflowing ([2385b1a2](2385b1a2))
* **video-clips:** update condition to check if ffmpeg is installed ([b57f0b6e](b57f0b6e)), closes [#163](#163)
* **xml-editor:** escape xml editor's content + restyle form sections to prevent overflowing ([588590bd](588590bd))
* **xml-editor:** prettify xml even without root node ([ca55c248](ca55c248))

### Features

* **activitypub:** add Podcast actor and PodcastEpisode object with comments ([9e1e5d2e](9e1e5d2e))
* add about page in admin with instance info + database update button ([d0836f3e](d0836f3e))
* add alternate rss feed link tag to podcast page head ([a973c097](a973c097)), closes [#35](#35)
* add analytics and unknown useragents ([ec92e65a](ec92e65a))
* add audio-clipper toolbar + add video-clip-previewer ([02557539](02557539))
* add audio-clipper webcomponent (wip) ([21d4251b](21d4251b))
* add autofocus to input field "Email or username" on login page ([19caed4b](19caed4b))
* add basic stats on podcast about page ([16705584](16705584))
* add breadcrumb in admin area ([7fb1de2c](7fb1de2c)), closes [#17](#17)
* add cache to ActivityPub sql queries + cache activity and note pages ([2d297f45](2d297f45))
* add CDN url ([972bcbf6](972bcbf6)), closes [#37](#37)
* add codemirror to display xml editor for custom rss field ([f15f2624](f15f2624))
* add cumulative listening time charts ([588b4d28](588b4d28))
* add default icons to Alert component ([0d980012](0d980012))
* add DropdownMenu component + remove global audio player in admin ([abb7fbac](abb7fbac))
* add episode_numbering() component helper to display episode and season numbers ([3f4a6bd0](3f4a6bd0))
* add french translation ([196920d6](196920d6))
* add heading component + update ecs rules to fix views ([23bdc6f8](23bdc6f8))
* add housekeeping task to run after migrations ([89dee41d](89dee41d))
* add install wizard form to bootstrap database and create the first superadmin user ([cba871c5](cba871c5)), closes [#2](#2)
* add instructions on production error page to ease Castopod debugging process ([9eab54e0](9eab54e0)), closes [#224](#224)
* add ISO 3166 country codes ([97cd94b4](97cd94b4))
* add js audio player on podcast, admin and embeddable player pages + fix admon episodes ux ([0e14eb4d](0e14eb4d)), closes [#131](#131)
* add label to sponsor button on podcast page ([c29c018c](c29c018c)), closes [#162](#162)
* add legalNoticeURL to app config for setting an external url to legal notice ([711843a0](711843a0))
* add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import ([72b30127](72b30127))
* add map analytics, add episodes analytics, clean analytics page layout, translate countries ([07eae83a](07eae83a))
* add media entity and link documents, images and audio files to it ([6ecf2866](6ecf2866))
* add notifications inbox for actors ([999999e3](999999e3)), closes [#215](#215)
* add Noto Sans Mono font to use for durations + button to access new video clip form in list ([7609bb60](7609bb60))
* add npm for js dependencies + move src/ files to root folder ([cbb83a6f](cbb83a6f))
* add Open Graph and Twitter meta tags ([af970b8b](af970b8b)), closes [#41](#41)
* add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) ([9c224a8a](9c224a8a)), closes [#24](#24)
* add permanent delete feature for podcasts :tada: ([dbb4030d](dbb4030d)), closes [#89](#89)
* add platform models ([a333d291](a333d291))
* add platforms form in podcast settings ([043f49c7](043f49c7))
* add platforms tables ([ce593441](ce593441))
* add podcast banner field for each podcast + refactor images configuration ([4a8147bf](4a8147bf))
* add premium podcasts to manage subscriptions for premium episodes ([3234500e](3234500e)), closes [#193](#193)
* add publish feature for podcasts and set draft by default ([3d363f2e](3d363f2e)), closes [#128](#128) [#220](#220)
* add remote_url alternative for transcript and chapters files ([3143c9ad](3143c9ad))
* add replied to post or comment to reply element ([d0f9c601](d0f9c601))
* add schema.org json-ld objects to podcasts, episodes, posts and comments pages ([902f959b](902f959b))
* add task to housekeeping setting for resetting all instance counts ([9303e51b](9303e51b))
* add unique listeners analytics ([3a492581](3a492581))
* add update rss feed feature for podcasts to import their latest episodes ([5eb9dc16](5eb9dc16)), closes [#183](#183)
* add user permissions and basic groups to handle authorizations ([d58e5187](d58e5187)), closes [#3](#3) [#18](#18)
* add WebSub module for pushing feed updates to open hubs ([10d3f737](10d3f737))
* **admin:** add instance wide dashboard with storage and bandwidth usage ([b1a6c02e](b1a6c02e)), closes [#216](#216)
* **admin:** add search form in podcast episodes list ([6be5d128](6be5d128)), closes [#26](#26)
* **admin:** make header stick on scroll and show title + action buttons using css only ([d60498c1](d60498c1))
* **admin:** update admin layout for better ux + update brand pine colors ([d86142eb](d86142eb))
* allow cross origin requests on episode comments ([e12f95ac](e12f95ac))
* **analytics-gdpr:** update cached personal data to expire at midnight ([0188b673](0188b673))
* **analytics:** add 'other' group to pie charts in order to display more accurate data ([73acef93](73acef93))
* **analytics:** add charts and data export ([78625c47](78625c47))
* **analytics:** add current date and secret salt to analytics hash for improved privacy ([6f2e7c00](6f2e7c00))
* **analytics:** add service name from rss user-agent ([7202b986](7202b986))
* **analytics:** add weekday and hour bar charts ([8ab31329](8ab31329))
* **api:** add rest api with podcasts read endpoints ([e64001d0](e64001d0)), closes [#210](#210)
* apply colour theme to embed player ([9548337a](9548337a)), closes [#201](#201)
* **auth:** add auth.enable2FA config to enable two-factor authentication ([7213ed29](7213ed29))
* build hashed static files to renew browser cache ([37c54d24](37c54d24)), closes [#107](#107)
* **cache:** add podcast and episode pages to cache + clear them after insert or update ([da0f0472](da0f0472))
* **categories:** create model, entity, migrations and seeds ([f73b042c](f73b042c))
* **clips:** setup clip entities and model + save video clip to have it generated in the background ([2f6fdf90](2f6fdf90))
* **comments:** add comments to episodes + update naming of status to post ([bb4752c3](bb4752c3))
* **comments:** add like / undo like to comment + add comment page ([0c187ef7](0c187ef7))
* **components:** add custom view renderer with ComponentRenderer adapted from bonfire2 ([a95de8ba](a95de8ba))
* create optimized & resized images upon upload ([02e4441f](02e4441f)), closes [#6](#6)
* **custom-rss:** add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ ([6ecdaad9](6ecdaad9))
* **datetime-picker:** set material_green theme to flatpickr ([3ce65410](3ce65410))
* **devcontainer:** add devcontainer settings for dev environment ([69e72667](69e72667))
* display castopod version in admin footer ([9f2574e6](9f2574e6)), closes [#68](#68)
* display legal disclaimer and warning on podcast import page ([2f07992e](2f07992e)), closes [#34](#34)
* edit + delete podcast and episode ([ac5f0c73](ac5f0c73))
* **embeddable-player:**  add embeddable player widget ([141788fa](141788fa))
* enhance admin ui with responsive design and ux improvements ([2d44b457](2d44b457)), closes [#31](#31) [#9](#9)
* enhance ui using javascript in admin area ([c0e66d5f](c0e66d5f))
* **episode-unpublish:** remove episode comments upon unpublish ([78acd7f5](78acd7f5))
* **episode:** add form to allow editing episode's publication date to a past date ([d783d16e](d783d16e)), closes [#97](#97)
* **episodes:** add create form and view pages for episode ([f3b2c8b8](f3b2c8b8)), closes [#1](#1)
* **episodes:** add migrations, model and entity for episodes table ([04448217](04448217))
* **episodes:** replace all audio file URL parameters with base64 encoded data ([e1f65cd3](e1f65cd3))
* **episodes:** replace soft delete with permanent delete ([eb9ff522](eb9ff522))
* **episodes:** schedule episode with future publication_date by using cache expiration time ([4f1e773c](4f1e773c)), closes [#47](#47)
* **fediverse:** implement activitypub protocols + update user interface ([2f525c0f](2f525c0f)), closes [#69](#69) [#65](#65) [#85](#85) [#51](#51) [#91](#91) [#92](#92) [#88](#88)
* **fonts:** replace Montserrat with Inter for better readablity ([bfa11d00](bfa11d00))
* **GDPR:** add GDPR.yml file to public/.well-known/ ([86bccc3d](86bccc3d))
* **gdpr:** add purpose for granting access to premium content ([47d6d81b](47d6d81b))
* **home:** sort podcasts by recent activity + add dropdown menu to choose between sorting options ([7b89da61](7b89da61)), closes [#164](#164)
* **housekeeping:** add clear_cache option to flush redis or files cache ([99bfac0b](99bfac0b))
* **i18n:** add 7 new languages + update german translations ([d021abb5](d021abb5))
* **i18n:** add german language as supported locale + create Language files from english source ([c220b310](c220b310))
* **i18n:** add Norwegian Nynorsk to supported locales ([ced61fc2](ced61fc2))
* **i18n:** add Polish translation ([2d83b44a](2d83b44a))
* **i18n:** add Spanish to supported locales ([e340b54a](e340b54a))
* **i18n:** add support for German and Brazilian Portuguese languages ([c9b9fe4e](c9b9fe4e))
* **i18n:** add support for Simplified Chinese (zh-Hans) and Catalan (ca) locales ([48d14434](48d14434))
* **icons:** add default icons for podcasting, social and funding platforms + remove complex icons ([5bcdfebe](5bcdfebe)), closes [#166](#166) [#167](#167) [#170](#170)
* **icons:** add podnews icon to podcasting platforms ([5f423557](5f423557)), closes [#190](#190)
* import podcast from an rss feed url ([9a5d5a15](9a5d5a15)), closes [#21](#21)
* integrate stylized form components and update podcast edit page ([65367295](65367295))
* make displayed publication time as relative time using @github/time-elements ([230e139e](230e139e))
* make episode description more visible on episode pages ([90533be0](90533be0)), closes [#171](#171)
* **map:** display geolocated episodes on a map page ([4357cc25](4357cc25))
* **media:** clean media api + create an entity per media type ([fafaa7e6](fafaa7e6))
* **media:** save audio, images, transcripts and chapters to media for episode and persons ([58e2a00a](58e2a00a))
* **meta-tags:** add activitypub alternate links to podcast, episode, comment and post pages ([bd61752b](bd61752b))
* minor corrections to some tables ([3bf9420b](3bf9420b))
* **monetization:** add Web Monetization support ([96a6026f](96a6026f))
* **nodeinfo2:** add .well-known route for nodeinfo2 containing metadata about the castopod instance ([88fddc81](88fddc81))
* **partner:** add link and image in episode description ([ad07bb93](ad07bb93))
* **person:** add podcastindex.org namespace person tag ([8acd011f](8acd011f))
* **platforms:** add AntennaPod ([53e9cfd6](53e9cfd6))
* **platforms:** add Fediverse and some funding platforms, add link on logo ([afc3d502](afc3d502))
* **platforms:** add helloasso ([16cb993e](16cb993e))
* **platforms:** add missing newpodcastapps.com's platforms ([92dd370e](92dd370e))
* **platforms:** add pod.link ([3d7a2320](3d7a2320))
* **platforms:** add Podcast Index ([ad52b1cc](ad52b1cc))
* **platforms:** add podfriend ([9fdc8d32](9fdc8d32))
* **podcast-form:** add new_feed_url field to set an url when changing domain or host ([e7eec48e](e7eec48e))
* **podcast-form:** update routes and redirect to podcast page ([12ce9057](12ce9057))
* **podcast:** create a podcast using form ([1202ba35](1202ba35))
* **podcasting 2.0:** update podcast:social tag to adhere to latest spec ([a597cf4e](a597cf4e))
* prefill season and episode numbers + set episode number as mandatory for serial podcasts ([07d740b7](07d740b7)), closes [#134](#134) [#136](#136)
* **public-ui:** adapt public podcast and episode pages to wireframes ([40a0535f](40a0535f)), closes [#30](#30) [#13](#13)
* **pwa:** add service-worker + webmanifest for each podcasts to have them install on devices ([fee2c1c0](fee2c1c0))
* redesign public podcast and episode pages + remove any information clutter for better ux ([93214007](93214007))
* replace form helper functions with components in admin template ([e64548b9](e64548b9))
* replace slug field with interactive permalink component ([578022b8](578022b8))
* restyle episode and person cards + add focus style to interactive elements for a11y ([a505a1de](a505a1de))
* **rss:** add ˂podcast:guid˃ tag for channel ([1fab10eb](1fab10eb))
* **rss:** add podcast-namespace tags for platforms + previousUrl tag ([dbba8dc5](dbba8dc5)), closes [#73](#73) [#75](#75) [#76](#76) [#80](#80)
* **rss:** add podcast:comments tag to link to episode comments ([32e8c7c1](32e8c7c1))
* **rss:** add podcast:location tag ([c0a22829](c0a22829))
* **rss:** add rss feed route without the `.xml` extension ([94c0b7c1](94c0b7c1)), closes [#247](#247)
* **rss:** add soundbites according to the podcastindex specs ([6b34617d](6b34617d)), closes [#83](#83)
* **rss:** add transcript and chapters support ([e769d83a](e769d83a)), closes [#72](#72) [#82](#82)
* **rss:** generate rss feed from podcast entity ([c815ecd6](c815ecd6))
* **rss:** update monetization tag so that it meets PodcastIndex requirements ([4c7ecbee](4c7ecbee))
* **select:** enhance select input with choices.js ([910d457c](910d457c))
* set app parameter forceGlobalSecureRequests = true forcing requests to go through https ([d9dff1b8](d9dff1b8))
* set podcast / episode description in the pages description meta tag ([1c4a5044](1c4a5044)), closes [#44](#44)
* **settings:** add general config for instance (site name, description and icon) ([5c56f3e6](5c56f3e6))
* **settings:** add theme settings to set an accent color for all public pages ([5c529a83](5c529a83))
* simplify podcast page's layout for better ux ([2c0efc65](2c0efc65))
* **soundbites:** add soundbite list and creation forms with audio-clipper component ([de193171](de193171))
* style file inputs using tailwind's file class ([8208ab67](8208ab67))
* **themes:** add ViewThemes library to set views in root themes folder ([7a276764](7a276764))
* **themes:** set different default banner per theme ([11c916fe](11c916fe))
* **themes:** set generic css variables for colors to enable instance themes ([a746a781](a746a781))
* toggle podcast sidebar on smaller screens ([f0205ec2](f0205ec2))
* **transcript:** parse srt subtitles into json file + add max file size info below audio file input ([00987610](00987610))
* **ui:** create ViewComponents library to enable building class and view files components ([94872f23](94872f23))
* update analytics so to meet IABv2 requirements ([03e23a28](03e23a28)), closes [#10](#10)
* update pine colors + create charts components ([a50abc13](a50abc13))
* **users:** add myth-auth to handle users crud + add admin gateway only accessible by login ([c63a0776](c63a0776)), closes [#11](#11)
* **ux:** remove admin dashboard and redirect directly to podcast list ([27c48b8f](27c48b8f))
* **video-clip:** add video-clip page with video preview + logs ([42538dd7](42538dd7))
* **video-clip:** generate video clips in the bg using a cron job + add video clip page + tidy up UI ([db0e4272](db0e4272))
* **video-clips:** add dimensions for portrait and squared formats ([3af404da](3af404da))
* **video-clips:** add new themes + add castopod logo as a watermark ([1d1490b0](1d1490b0))
* **video-clips:** add route for scheduled video clips + list video clips with status ([2065ebbe](2065ebbe))
* **video-clips:** allow episodeNumbering text to stand in the indent of episodeTitle paragraph ([71a063da](71a063da))
* **video-clips:** generate a 16:9 video using ffmpeg ([35aa7ea5](35aa7ea5))
* **video-clips:** generate subtitles clip using transcript json to have subtitles accross video ([3ce07e45](3ce07e45))
* **video-clips:** replace hardcoded colors with config's theme colors ([e462abf6](e462abf6))
* **vite:** add vite config to decouple it from CI_ENVIRONMENT ([8721719c](8721719c))
* write id3v2 tags to episode's audio file ([4651d01a](4651d01a))

### Performance Improvements

* **cache:** update CI4 to use cache's deleteMatching method ([54b84f96](54b84f96))
* **cache:** use deleteMatching method to prevent forgetting cached elements in models ([76afc0cf](76afc0cf))
* defer javascript + lazy load images for faster page loads ([f0685e44](f0685e44))
* **docker:** add redis caching service for development ([05ace8cf](05ace8cf))

### Reverts

* **install:** redirect to install in homepage if no database was set ([73f094da](73f094da))
* set deprecated config options back in App config ([433745f1](433745f1))
* **soundbites:** remove soundbite table from episode's public page ([5dc0f196](5dc0f196))
* use basic input file for episodes audio files instead of button for better UX ([d5f22fbb](d5f22fbb))

### BREAKING CHANGES

* **analytics:** analytics_podcasts_by_player table and analytics_podcasts procedure were updated
parent d76a1d9f
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment