Commit Graph

681 Commits

Author SHA1 Message Date
Yassine Doghri 3f4a6bd0b9 feat: add episode_numbering() component helper to display episode and season numbers 2020-10-29 17:25:15 +00:00
Benjamin Bellamy e1f65cd3b5 feat(episodes): replace all audio file URL parameters with base64 encoded data 2020-10-29 17:27:16 +01:00
Yassine Doghri 391c349daa refactor(database): add / update fields to optimize storage
- harmonize field types and use explicit names
- store html value alongside markdown descriptions for better performance
- add duration and bandwidth to podcast analytics
- add new analytics table for podcast hits by hour
- replace visible MAXMIND_LICENCE_KEY with variable
2020-10-29 15:45:19 +00:00
semantic-release-bot 21da91eb9d chore(release): 1.0.0-alpha.12 [skip ci]
# [1.0.0-alpha.12](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.11...v1.0.0-alpha.12) (2020-10-26)

### Bug Fixes

* replace getWebEnclosureUrl with getEnclosureWebUrl ([8122cea](8122ceaf8a))
2020-10-26 17:30:40 +00:00
Benjamin Bellamy 8122ceaf8a fix: replace getWebEnclosureUrl with getEnclosureWebUrl 2020-10-26 17:26:41 +00:00
semantic-release-bot 0683ea94d8 chore(release): 1.0.0-alpha.11 [skip ci]
# [1.0.0-alpha.11](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.10...v1.0.0-alpha.11) (2020-10-26)

### Features

* add CDN url ([972bcbf](972bcbf65e)), closes [#37](https://code.podlibre.org/podlibre/castopod/issues/37)
2020-10-26 16:17:35 +00:00
Benjamin Bellamy 972bcbf65e feat: add CDN url
feat: rename ?s to ?_from to match podcastindex recommendation
feat: adust map height
feat: display pie chart on 1 column for small and medium screens
feat: handle empty rss user agent
fix: correct bug when importing episode with empty image
fix: add service to FakePodcastsAnalyticsSeeder, resize pie charts so that all lines fit
fix: set page title to ->title when it exists
fix: replace %20 with +

closes #37
2020-10-26 16:13:43 +00:00
semantic-release-bot 384b6b27a3 chore(release): 1.0.0-alpha.10 [skip ci]
# [1.0.0-alpha.10](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.9...v1.0.0-alpha.10) (2020-10-26)

### Bug Fixes

* **install:** redirect to host_url install route on instanceConfig validation error ([99250b1](99250b1868))
2020-10-26 15:29:29 +00:00
Yassine Doghri 99250b1868 fix(install): redirect to host_url install route on instanceConfig validation error 2020-10-26 15:21:21 +00:00
semantic-release-bot 414b23a3b7 chore(release): 1.0.0-alpha.9 [skip ci]
# [1.0.0-alpha.9](https://code.podlibre.org/podlibre/castopod/compare/v1.0.0-alpha.8...v1.0.0-alpha.9) (2020-10-26)

### Features

* display castopod version in admin footer ([9f2574e](9f2574e6fb)), closes [#68](https://code.podlibre.org/podlibre/castopod/issues/68)
2020-10-26 14:20:19 +00:00
Yassine Doghri 9f2574e6fb feat: display castopod version in admin footer
add CP_VERSION constant in app/Config/Constants.php that updates upon release through
prepare-release.sh script

closes #68
2020-10-26 11:48:17 +00:00
Yassine Doghri 4f1e773c0f feat(episodes): schedule episode with future publication_date by using cache expiration time
- merge publication date fields into one field instanciated with flatpickr datetime picker
- get user timezone to convert user publication_date input to UTC
- remove setPublishedAt() method from episode entity
- add publication pill component to display the episode publication date info
- clear cache after episode insert
- use CI is_really_writable() helper in install instead of is_writable()
- fix latest episodes layout
- update tsconfig to only include ts folders
- update DEPENDENCIES.md to include flatpickr
- add format_duration helper to format episode enclosure duration instead of translating it (causes
translation bug)
- add Time.ts module to convert UTC time to user localized time for episode publication dates
- fix some layout issues
- update php and js dependencies to latest versions

closes #47
2020-10-22 17:41:59 +00:00
Benjamin Bellamy 7202b9867b feat(analytics): add service name from rss user-agent
BREAKING CHANGE: analytics_podcasts_by_player table and analytics_podcasts procedure were updated
2020-10-21 16:04:18 +00:00
Yassine Doghri 9cec8a81cc fix(cache): add locale for podcast and episode pages + clear some persisting cache in models
fixes #42, #61
2020-10-20 15:39:20 +00:00
Benjamin Bellamy 72b301272e feat: add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import 2020-10-20 13:46:00 +00:00
Benjamin Bellamy 78625c471b feat(analytics): add charts and data export 2020-10-20 09:32:03 +00:00
Benjamin Bellamy 1678794153 fix(analytics): remove charts empty values + remove useless language cache
fix(install): edit host_url helper and remove back() when create .env
2020-10-19 16:47:22 +00:00
Benjamin Bellamy 588b4d28da feat: add cumulative listening time charts 2020-10-19 10:33:23 +00:00
Yassine Doghri 50e32ff756 fix: replace website key for webpages in breadcrumb translate file 2020-10-15 20:22:33 +00:00
Yassine Doghri 96b39002eb chore: clean interactive rebase conflicts 2020-10-15 15:24:16 +00:00
Yassine Doghri d5f22fbb38 revert: use basic input file for episodes audio files instead of button for better UX
replace platform visible checkbox with switch
2020-10-15 14:42:33 +00:00
Yassine Doghri 7661734ed2 fix: add where condition to get episode count without deleted episodes
contain podcast page header info within an md width

fixes #67
2020-10-15 14:42:32 +00:00
Yassine Doghri e6197a4972 fix: comment all cache clean after page update to prevent analytics cache deletion 2020-10-15 14:42:31 +00:00
Yassine Doghri eb70bb4f70 fix: update purgecss content path for php helper files
- fix overshooting podcast name when too long in podcast sidebar
- update npm packages to latest versions

fixes #59
2020-10-15 14:42:30 +00:00
Yassine Doghri c39efc9489 fix: set episode duration translation to hardcoded english
- intl NumberFormatter doesn't work as it should with french language
- fix typo in episode french tranlation

fixes #64
2020-10-15 14:42:29 +00:00
Benjamin Bellamy 07eae83a00 feat: add map analytics, add episodes analytics, clean analytics page layout, translate countries 2020-10-15 14:42:28 +00:00
Benjamin Bellamy 196920d62f feat: add french translation 2020-10-15 14:42:25 +00:00
Yassine Doghri 93eb9e1056 style: update 404 and 500 error pages to use tailwindcss and Castopod mascot
- add back to previous page button to 404 page
- replace public/favicon.ico
2020-10-15 14:42:24 +00:00
Yassine Doghri a83417180c fix: fix layout bugs in admin and update translation files
fixes #40
2020-10-15 14:42:23 +00:00
Yassine Doghri e109df3004 fix: rename MyAccount controller file
Myaccount controller causes 404 page on certain systems

fixes #60
2020-10-15 14:42:22 +00:00
Yassine Doghri 6238a43863 fix: escape generated feed tag values and remove new lines from public pages meta description
fixes #57, #46
2020-10-15 14:42:21 +00:00
Yassine Doghri ad8b153f2a fix: set episode guid upon episode creation
fixes #48
2020-10-15 14:42:19 +00:00
Yassine Doghri 2426af7de8 fix(install): redirect to input baseUrl after instance config
install was redirecting to default baseUrl because `redirect->back()` uses the `site_url()` function

fix #53
2020-10-15 14:42:17 +00:00
Yassine Doghri 1c4a50442b feat: set podcast / episode description in the pages description meta tag
strip html tags from description_html attributes to generate text only description

closes #44
2020-10-15 14:42:15 +00:00
Benjamin Bellamy 4d3e9c8c02 fix: correct chart data 2020-10-15 14:42:14 +00:00
Yassine Doghri 769ea469c9 refactor: update install logic and add missing cache config step
- add `.env.example` and `INSTALL.md` to castopod bundle for installation docs
- update seeders to be silent on insert errors
- update install layout
- add manual config instructions when .env file is not writable
- fix eslint error in Charts.ts module

closes #32
2020-10-15 14:42:13 +00:00
Benjamin Bellamy 35f633b4c7 fix: re-order graph values 2020-10-15 14:42:11 +00:00
Benjamin Bellamy e53f819264 fix: correct percona compatibility issue 2020-10-15 14:42:10 +00:00
Benjamin Bellamy 3a4925816f feat: add unique listeners analytics
- add unique listener
- add some charts
- correct minor bugs
2020-10-15 14:42:09 +00:00
Benjamin Bellamy 9660aa97c8 fix: reorder fields as composite primary keys for analytics tables 2020-10-15 14:42:07 +00:00
Benjamin Bellamy ed69b2f500 fix: correct referrer bug 2020-10-15 14:42:06 +00:00
Yassine Doghri 6e503c8d61 fix(platforms): display platform link only when visible is toggled on
add condition to podcast page

fix #39
2020-10-15 14:42:05 +00:00
Yassine Doghri 2f07992e55 feat: display legal disclaimer and warning on podcast import page
updated podcast import translations

closes #34
2020-10-15 14:42:04 +00:00
Yassine Doghri a973c097d5 feat: add alternate rss feed link tag to podcast page head
update composer packages to latest versions

closes #35
2020-10-15 14:42:03 +00:00
Benjamin Bellamy 03e23a28bf feat: update analytics so to meet IABv2 requirements
- https://iabtechlab.com/wp-content/uploads/2017/12/Podcast_Measurement_v2-Dec-20-2017.pdf
  - no IP address is ever stored on the server. Only aggregate data is stored in the dababase.
  - rolling 24-hour window
  - castopod does not do pre-load
  - IP Blacklisting https://github.com/client9/ipcat
  - user-agent Filtering https://github.com/opawg/user-agents
  - ignores 2 bytes range "Range: 0-1" (performed by official Apple iOS Podcast app)
  - in case of partial content, adds up all requests to check >1mn was downloaded
  - identifying Uniques is done with a combination of IP Address and User Agent
- add AMcharts
- add some graphs
- add regions to analytics
- add ipcat blacklist
- enhance useragents performances
- add filesize and header size in order to calculate 1mn downloads
- update publisher ID3 field
- update castopod icon
- add disclaimer and warning import form translation
- update docs/setup-development.md

closes #10
2020-10-15 14:42:02 +00:00
Benjamin Bellamy 5417be0049 fix: remove required for other_categories field and add podcast_id to latest podcasts query 2020-10-15 14:41:57 +00:00
Yassine Doghri 2d44b457a0 feat: enhance admin ui with responsive design and ux improvements
- add podcast sidebar navigation
- add podcast dashboard with latest episodes
- add pagination to podcast episodes
- add components helper to reuse ui components (button, data_table, etc.)
- enhance podcast and episode forms by splitting them into form sections
- add hint tooltips to podcast and episode forms
- transform radio inputs as buttons for better ux
- replace explicit field by parental_advisory
- replace author field by publisher
- add podcasts_categories table to set multiple categories
- use choices.js to enhance multiselect fields
- update Language files
- update js dependencies to latest versions

closes #31, #9
2020-10-15 14:41:56 +00:00
Benjamin Bellamy 31b7828e77 fix: correction for servers with low int precision 2020-10-15 14:41:49 +00:00
Benjamin Bellamy d7b6794f68 fix: sort episodic podcasts by season 2020-10-15 14:41:49 +00:00
Benjamin Bellamy 1ef55d7315 fix: correct php-fpm issues 2020-10-15 14:41:47 +00:00
Yassine Doghri 02e4441f98 feat: create optimized & resized images upon upload
- resize uploaded image to thumbnail, medium, large, feed, and id3 formats
- set image url formats where adapted in views
- set format sizes and extensions in Images config file for customization
- add validation for image uploads: `min_dims` and `is_image_squared`
- update codeigniter4 and myth-auth php packages to latest develop versions
- update npm packages to latest versions
- update public/.htaccess

closes #6
2020-10-15 14:41:45 +00:00
Yassine Doghri 40a0535fc1 feat(public-ui): adapt public podcast and episode pages to wireframes
- adapt wireframes with responsive design
- refactor models methods to cache requests for faster queries
- update public controllers to cache pages while retaining analytics hits
- add platform links to podcast page
- add previous / next episodes in episode page
- update npm packages to latest versions

closes #30, #13
2020-10-15 14:41:43 +00:00
Yassine Doghri 2517808cd4 refactor: remove unnecessary permissions and update route filters
- add missing pages-manage permission
- remove some instance wide permissions for superadmin

closes #29
2020-10-15 14:41:41 +00:00
Yassine Doghri 043f49c784 feat: add platforms form in podcast settings
- set and remove platform links for a podcast
- remove unnecessary fields from platforms and platform_links tables
- add platforms svg icons to show in form
- update platform and auth seeders
- update svgo config for images
2020-10-15 14:41:39 +00:00
Benjamin Bellamy 9a5d5a15b4 feat: import podcast from an rss feed url
* add podcast import form
* add League\\HTMLToMarkdown
* add guid field in podcast table
* change podcast category from string to id

closes #21
2020-10-15 14:41:36 +00:00
Yassine Doghri 9c224a8ac6 feat: add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.)
- add pages  migration, model and entity
- add page controllers
- update routes config to input page forms and page view in public
- fix markdow editor focus area
- show pages links in public side footer

closes #24
2020-10-15 14:41:34 +00:00
Yassine Doghri a1a28de702 refactor: rewrite form pages using form helper
- add installGateway to app config
- update route names and groups
- remove `author_name` and `author_email` from `episodes` table
- remove `author_name` and `author_email` from `podcasts` table
- remove `owner_id` + add `created_by` and `updated_by` fields in `podcasts` and `episodes` tables
- remove unnecessary comments in database fields
- remove confirm password inputs from auth forms for better ux
- rename `pub_date` field to `published_at` and add publication time field in episode form

closes #14, #28
2020-10-15 14:41:32 +00:00
Benjamin Bellamy 012de2072e docs: add translation keys for tooltips helper messages 2020-10-15 14:41:29 +00:00
Yassine Doghri cba871c5df feat: add install wizard form to bootstrap database and create the first superadmin user
- generate .env file to configure instance's environment
- add phpdotenv dependency to verify .env file
- add AppSeeder to call all required seeds at once
- add env and superadmin form views using form helpers

closes #2
2020-10-15 14:41:28 +00:00
Yassine Doghri 14dd44d03d fix: declare typed properties in PHPDoc for php<7.4
- fixes error when running castopod on php<7.4

fixes #23
2020-10-15 14:41:26 +00:00
Yassine Doghri 7fb1de2cf3 feat: add breadcrumb in admin area
- add Breadcrumb library and service
- update authorizations
- add missing routes to avoid 404 links in breadcrumb
- add svg_helper globally in base controller
- update purgecss config to check .ts files

closes #17
2020-10-15 14:41:25 +00:00
Yassine Doghri ed6e953010 refactor: add php_codesniffer to define castopod's coding style based on psr-1
- add .editorconfig file
- format all files to comply with castopod's coding style
- switch parsedown dependency with commonmark library to better follow commonmark spec for markdown
- add prettier command to format all project files at once

closes #16
2020-10-15 14:41:22 +00:00
Yassine Doghri 58364bfed1 refactor(auth): change contributor's role logic to have it included in the users_podcasts table
- update myth-auth and codeigniter to latest develop changes
- improve permission check: remove all
dynamic permissions per podcast and overwrite myth-auth services and permission filter
- remove
unnecessary code because of myth-auth upgrade
- refactor some controller code for better clarity
-
add remaining seeders in docs

closes #19, #20
2020-10-15 14:41:14 +00:00
Yassine Doghri e0da11517d refactor: update js files to typescript and replace parcel with rollup
- add basic rollup config to bundle minified and browser compatible js
- use babel to transpile
typescript files to js
- add static code checkers: eslint and stylelint
- update package.json
scripts
- update DEPENDENCIES.md file to include rollup and popper
- set html in rss feed
description fields
- update Podcast and Episode entities to add description_html attribute
generated by parsing markdown to html using parsedown

#9
2020-10-15 14:41:12 +00:00
Yassine Doghri c0e66d5f70 feat: enhance ui using javascript in admin area
- bundle js using parcel
- add markdown editor, html editor, dropdown and tooltip features using third-party packages
- integrate optimized inline svg icons from RemixIcon using svgo and a php helper
- add scripts in package.json to bundle icons, images, css and js
- update tailwind config to add purgecss lookups and typography plugin
- refactor views to add missing pages in user journey
- update admin's holy grail layout using css grid
2020-10-15 14:41:09 +00:00
Yassine Doghri d58e51874a feat: add user permissions and basic groups to handle authorizations
- add AuthSeeder to bootstrap authorization data and remove UserSeeder
- create a superadmin group having all authorizations
- refactor routes and controller methods to separate get and post requests
- refactor admin views with a title section in layout
- add contributors section to podcasts to manage contributions (add, edit roles and remove)

closes #3, #18
2020-10-15 14:41:06 +00:00
Yassine Doghri c63a077618 feat(users): add myth-auth to handle users crud + add admin gateway only accessible by login
- overwrite myth/auth config with castopod app needs
- create custom views for users authentication
- add admin area bootstrapped by admin controller
- shift podcast and episodes crud to admin area
- reorganize view layouts
- update docs for database migration
- add myth-auth to DEPENDENCIES.md

closes #11
2020-10-15 14:41:03 +00:00
Yassine Doghri da0f047281 feat(cache): add podcast and episode pages to cache + clear them after insert or update
- throw not found page error if no podcast in podcast controller
- delete unnecessary unknownuseragents view
2020-10-15 14:40:58 +00:00
Yassine Doghri ac5f0c7328 feat: edit + delete podcast and episode
- refactor model / entity and controller logic for DRY code
- update episodes and podcasts
migrations
- define callbacks for podcast and episode models for enclosure update and cache
clearing
2020-10-15 14:40:57 +00:00
Yassine Doghri c815ecd664 feat(rss): generate rss feed from podcast entity
- refactor episode, podcast and category entities to add dynamic properties
- refactor Routes when adding feed route
- update migration files to better fit itunes' and rss' specs
- update podcast and episode forms
- add SimpleRSSElement class to Libraries
- add rss_helper
- update home controller to redirect if system has only one podcast
2020-10-15 14:40:55 +00:00
Benjamin Bellamy d31191732e fix: move analytics to helper 2020-10-15 14:40:52 +00:00
Benjamin Bellamy 13be386842 fix: minor corrections 2020-10-15 14:40:52 +00:00
Benjamin Bellamy ec92e65aa4 feat: add analytics and unknown useragents 2020-10-15 14:40:51 +00:00
Yassine Doghri 4651d01a84 feat: write id3v2 tags to episode's audio file
- add $mediaRoot parameter in app config
- add and refactor helpers : id3, media and url
- add basic vscode settings for code formatting in devcontainer.json
- set post_max_size to Dockerfile
2020-10-15 14:40:49 +00:00
Yassine Doghri f3b2c8b84f feat(episodes): add create form and view pages for episode
- add james-heinrich/getid3 library as a dependency to composer.json
- update DEPENDENCIES.md file
- fix episodes table migration script
- add js devDependencies: prettier, @prettier/plugin-php and lint-staged to automatically format staged files before commit
- reformat all files to the prettier format
- refactor code by separating some logic as helper functions
- overwrite existing files when uploading new files with the same name

fixes #1
2020-10-15 14:40:47 +00:00
Yassine Doghri 044482174e feat(episodes): add migrations, model and entity for episodes table 2020-10-15 14:40:44 +00:00
Benjamin Bellamy a333d29196 feat: add platform models 2020-10-15 14:40:18 +00:00
Benjamin Bellamy ce5934419a feat: add platforms tables 2020-10-15 14:39:17 +00:00
Benjamin Bellamy 97cd94b474 feat: add ISO 3166 country codes 2020-10-15 14:08:04 +00:00
Benjamin Bellamy 0c90db44c4 fix: update iso-369 language table seeder 2020-10-15 14:07:07 +00:00
Yassine Doghri cbb83a6f30 feat: add npm for js dependencies + move src/ files to root folder
- add node service in docker-compose.yml
- update .devcontainer Dockerfile by adding node, npm and vim
- init package.json for npm with tailwindcss, postcss, commitlint and commitizen as dev dependencies
- update default layout main header and footer
- replace CI's welcome_message.php with home.php listing all podcasts
- add AUTHORS.md file
- add docs folder in which to place castopod's technical documentation
2020-10-15 14:05:36 +00:00