diff --git a/app/Common.php b/app/Common.php index c86b60da..6f720768 100644 --- a/app/Common.php +++ b/app/Common.php @@ -2,7 +2,6 @@ declare(strict_types=1); -use Config\View; use ViewThemes\Theme; /** @@ -37,7 +36,8 @@ if (! function_exists('view')) { /** @var CodeIgniter\View\View $renderer */ $renderer = single_service('renderer', $path); - $saveData = config(View::class)->saveData; + $saveData = config('View') +->saveData; if (array_key_exists('saveData', $options)) { $saveData = (bool) $options['saveData']; diff --git a/app/Config/Fediverse.php b/app/Config/Fediverse.php index e9f46680..b622d2a3 100644 --- a/app/Config/Fediverse.php +++ b/app/Config/Fediverse.php @@ -34,10 +34,10 @@ class Fediverse extends FediverseBaseConfig try { $appTheme = service('settings') ->get('App.theme'); - $defaultBanner = config(Images::class) - ->podcastBannerDefaultPaths[$appTheme] ?? config(Images::class)->podcastBannerDefaultPaths['default']; + $defaultBanner = config('Images') + ->podcastBannerDefaultPaths[$appTheme] ?? config('Images')->podcastBannerDefaultPaths['default']; } catch (Exception) { - $defaultBanner = config(Images::class) + $defaultBanner = config('Images') ->podcastBannerDefaultPaths['default']; } diff --git a/app/Controllers/ActorController.php b/app/Controllers/ActorController.php index 298a6028..bb879be2 100644 --- a/app/Controllers/ActorController.php +++ b/app/Controllers/ActorController.php @@ -18,7 +18,7 @@ class ActorController extends FediverseActorController use AnalyticsTrait; /** - * @var string[] + * @var list */ protected $helpers = ['svg', 'components', 'misc', 'seo']; diff --git a/app/Controllers/ColorsController.php b/app/Controllers/ColorsController.php index 4aa1a47c..82d6eed9 100644 --- a/app/Controllers/ColorsController.php +++ b/app/Controllers/ColorsController.php @@ -12,7 +12,6 @@ namespace App\Controllers; use CodeIgniter\Controller; use CodeIgniter\HTTP\Response; -use Config\Colors; class ColorsController extends Controller { @@ -29,7 +28,7 @@ class ColorsController extends Controller if ( ! ($colorsCssBody = cache($cacheName)) ) { - $colorThemes = config(Colors::class) + $colorThemes = config('Colors') ->themes; $colorsCssBody = ''; diff --git a/app/Controllers/EpisodeCommentController.php b/app/Controllers/EpisodeCommentController.php index 44486b0a..87f2864e 100644 --- a/app/Controllers/EpisodeCommentController.php +++ b/app/Controllers/EpisodeCommentController.php @@ -16,7 +16,6 @@ use App\Entities\Podcast; use App\Libraries\CommentObject; use App\Models\EpisodeCommentModel; use App\Models\EpisodeModel; -use App\Models\LikeModel; use App\Models\PodcastModel; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; @@ -170,7 +169,7 @@ class EpisodeCommentController extends BaseController return redirect()->back(); } - model(LikeModel::class) + model('LikeModel') ->toggleLike($interactAsActor, $this->comment); return redirect()->back(); @@ -182,7 +181,7 @@ class EpisodeCommentController extends BaseController return redirect()->back(); } - model(LikeModel::class) + model('LikeModel') ->toggleLike($interactAsActor, $this->comment); return redirect()->back(); diff --git a/app/Controllers/EpisodeController.php b/app/Controllers/EpisodeController.php index 5a7cc54d..335d96d8 100644 --- a/app/Controllers/EpisodeController.php +++ b/app/Controllers/EpisodeController.php @@ -16,13 +16,11 @@ use App\Libraries\NoteObject; use App\Libraries\PodcastEpisode; use App\Models\EpisodeModel; use App\Models\PodcastModel; -use App\Models\PostModel; use CodeIgniter\Database\BaseBuilder; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\ResponseInterface; use Config\Embed; -use Config\Images; use Config\Services; use Modules\Analytics\AnalyticsTrait; use Modules\Fediverse\Objects\OrderedCollectionObject; @@ -351,15 +349,15 @@ class EpisodeController extends BaseController 'author_url' => $this->podcast->link, 'html' => '', - 'width' => config(Embed::class) + '" width="100%" height="' . config('Embed')->height . '" frameborder="0" scrolling="no">', + 'width' => config('Embed') ->width, - 'height' => config(Embed::class) + 'height' => config('Embed') ->height, 'thumbnail_url' => $this->episode->cover->og_url, - 'thumbnail_width' => config(Images::class) + 'thumbnail_width' => config('Images') ->podcastCoverSizes['og']['width'], - 'thumbnail_height' => config(Images::class) + 'thumbnail_height' => config('Images') ->podcastCoverSizes['og']['height'], ]); } @@ -376,8 +374,8 @@ class EpisodeController extends BaseController $oembed->addChild('author_name', $this->podcast->title); $oembed->addChild('author_url', $this->podcast->link); $oembed->addChild('thumbnail', $this->episode->cover->og_url); - $oembed->addChild('thumbnail_width', (string) config(Images::class)->podcastCoverSizes['og']['width']); - $oembed->addChild('thumbnail_height', (string) config(Images::class)->podcastCoverSizes['og']['height']); + $oembed->addChild('thumbnail_width', (string) config('Images')->podcastCoverSizes['og']['width']); + $oembed->addChild('thumbnail_height', (string) config('Images')->podcastCoverSizes['og']['height']); $oembed->addChild( 'html', htmlspecialchars( @@ -388,8 +386,8 @@ class EpisodeController extends BaseController )->height . '" frameborder="0" scrolling="no">', ), ); - $oembed->addChild('width', (string) config(Embed::class)->width); - $oembed->addChild('height', (string) config(Embed::class)->height); + $oembed->addChild('width', (string) config('Embed')->width); + $oembed->addChild('height', (string) config('Embed')->height); // @phpstan-ignore-next-line return $this->response->setXML($oembed); @@ -409,7 +407,7 @@ class EpisodeController extends BaseController /** * get comments: aggregated replies from posts referring to the episode */ - $episodeComments = model(PostModel::class) + $episodeComments = model('PostModel') ->whereIn('in_reply_to_id', fn (BaseBuilder $builder): BaseBuilder => $builder->select('id') ->from('fediverse_posts') ->where('episode_id', $this->episode->id)) diff --git a/app/Controllers/HomeController.php b/app/Controllers/HomeController.php index 5acdfd16..515c0d0b 100644 --- a/app/Controllers/HomeController.php +++ b/app/Controllers/HomeController.php @@ -14,7 +14,6 @@ use App\Models\PodcastModel; use CodeIgniter\Database\Exceptions\DatabaseException; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\ResponseInterface; -use Config\Cache; use Modules\Media\FileManagers\FileManagerInterface; class HomeController extends BaseController @@ -54,7 +53,7 @@ class HomeController extends BaseController } // --- Can Castopod connect to the cache handler - if (config(Cache::class)->handler !== 'dummy' && cache()->getCacheInfo() === null) { + if (config('Cache')->handler !== 'dummy' && cache()->getCacheInfo() === null) { $errors[] = 'Unable connect to the cache handler.'; } diff --git a/app/Controllers/PodcastController.php b/app/Controllers/PodcastController.php index f586248c..46a42c1f 100644 --- a/app/Controllers/PodcastController.php +++ b/app/Controllers/PodcastController.php @@ -278,11 +278,11 @@ class PodcastController extends BaseController { if ($this->podcast->type === 'serial') { // podcast is serial - $episodes = model(EpisodeModel::class) + $episodes = model('EpisodeModel') ->where('`published_at` <= UTC_TIMESTAMP()', null, false) ->orderBy('season_number DESC, number ASC'); } else { - $episodes = model(EpisodeModel::class) + $episodes = model('EpisodeModel') ->where('`published_at` <= UTC_TIMESTAMP()', null, false) ->orderBy('published_at', 'DESC'); } diff --git a/app/Controllers/PostController.php b/app/Controllers/PostController.php index 7e0ea87e..6a8b24f2 100644 --- a/app/Controllers/PostController.php +++ b/app/Controllers/PostController.php @@ -37,7 +37,7 @@ class PostController extends FediversePostController protected $post; /** - * @var string[] + * @var list */ protected $helpers = ['auth', 'fediverse', 'svg', 'components', 'misc', 'seo', 'premium_podcasts']; diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php index 1df0cf49..44651d07 100644 --- a/app/Entities/Episode.php +++ b/app/Entities/Episode.php @@ -22,7 +22,6 @@ use CodeIgniter\Entity\Entity; use CodeIgniter\Files\File; use CodeIgniter\HTTP\Files\UploadedFile; use CodeIgniter\I18n\Time; -use Config\Images; use Exception; use League\CommonMark\Environment\Environment; use League\CommonMark\Extension\Autolink\AutolinkExtension; @@ -201,7 +200,7 @@ class Episode extends Entity } else { $cover = new Image([ 'file_key' => 'podcasts/' . $this->getPodcast()->handle . '/' . $this->attributes['slug'] . '.' . $file->getExtension(), - 'sizes' => config(Images::class) + 'sizes' => config('Images') ->podcastCoverSizes, 'uploaded_by' => $this->attributes['updated_by'], 'updated_by' => $this->attributes['updated_by'], diff --git a/app/Entities/Person.php b/app/Entities/Person.php index 9af5f92c..961f5603 100644 --- a/app/Entities/Person.php +++ b/app/Entities/Person.php @@ -14,7 +14,6 @@ use App\Models\PersonModel; use CodeIgniter\Entity\Entity; use CodeIgniter\Files\File; use CodeIgniter\HTTP\Files\UploadedFile; -use Config\Images; use Modules\Media\Entities\Image; use Modules\Media\Models\MediaModel; use RuntimeException; @@ -72,7 +71,7 @@ class Person extends Entity } else { $avatar = new Image([ 'file_key' => 'persons/' . $this->attributes['unique_name'] . '.' . $file->getExtension(), - 'sizes' => config(Images::class) + 'sizes' => config('Images') ->personAvatarSizes, 'uploaded_by' => $this->attributes['updated_by'], 'updated_by' => $this->attributes['updated_by'], diff --git a/app/Entities/Podcast.php b/app/Entities/Podcast.php index 4198b382..db74d409 100644 --- a/app/Entities/Podcast.php +++ b/app/Entities/Podcast.php @@ -20,7 +20,6 @@ use CodeIgniter\Files\File; use CodeIgniter\HTTP\Files\UploadedFile; use CodeIgniter\I18n\Time; use CodeIgniter\Shield\Entities\User; -use Config\Images; use Exception; use League\CommonMark\Environment\Environment; use League\CommonMark\Extension\Autolink\AutolinkExtension; @@ -255,7 +254,7 @@ class Podcast extends Entity } else { $cover = new Image([ 'file_key' => 'podcasts/' . $this->attributes['handle'] . '/cover.' . $file->getExtension(), - 'sizes' => config(Images::class) + 'sizes' => config('Images') ->podcastCoverSizes, 'uploaded_by' => $this->attributes['updated_by'], 'updated_by' => $this->attributes['updated_by'], @@ -298,7 +297,7 @@ class Podcast extends Entity } else { $banner = new Image([ 'file_key' => 'podcasts/' . $this->attributes['handle'] . '/banner.' . $file->getExtension(), - 'sizes' => config(Images::class) + 'sizes' => config('Images') ->podcastBannerSizes, 'uploaded_by' => $this->attributes['updated_by'], 'updated_by' => $this->attributes['updated_by'], diff --git a/app/Helpers/misc_helper.php b/app/Helpers/misc_helper.php index f19ca5a6..b26fab00 100644 --- a/app/Helpers/misc_helper.php +++ b/app/Helpers/misc_helper.php @@ -5,7 +5,6 @@ declare(strict_types=1); use App\Entities\Person; use App\Entities\Podcast; use Cocur\Slugify\Slugify; -use Config\App; use Config\Images; use Modules\Media\Entities\Image; @@ -25,7 +24,7 @@ if (! function_exists('get_browser_language')) { function get_browser_language(?string $httpAcceptLanguage = null): string { if ($httpAcceptLanguage === null) { - return config(App::class)->defaultLocale; + return config('App')->defaultLocale; } $langs = explode(',', $httpAcceptLanguage); @@ -192,7 +191,7 @@ if (! function_exists('format_bytes')) { if (! function_exists('get_site_icon_url')) { function get_site_icon_url(string $size): string { - if (config(App::class)->siteIcon['ico'] === service('settings')->get('App.siteIcon')['ico']) { + if (config('App')->siteIcon['ico'] === service('settings')->get('App.siteIcon')['ico']) { // return default site icon url return base_url(service('settings')->get('App.siteIcon')[$size]); } @@ -205,12 +204,12 @@ if (! function_exists('get_podcast_banner')) { function get_podcast_banner_url(Podcast $podcast, string $size): string { if (! $podcast->banner instanceof Image) { - $defaultBanner = config(Images::class) + $defaultBanner = config('Images') ->podcastBannerDefaultPaths[service('settings')->get('App.theme')] ?? config( Images::class )->podcastBannerDefaultPaths['default']; - $sizes = config(Images::class) + $sizes = config('Images') ->podcastBannerSizes; $sizeConfig = $sizes[$size]; @@ -231,7 +230,7 @@ if (! function_exists('get_podcast_banner_mimetype')) { function get_podcast_banner_mimetype(Podcast $podcast, string $size): string { if (! $podcast->banner instanceof Image) { - $sizes = config(Images::class) + $sizes = config('Images') ->podcastBannerSizes; $sizeConfig = $sizes[$size]; @@ -252,10 +251,10 @@ if (! function_exists('get_avatar_url')) { function get_avatar_url(Person $person, string $size): string { if (! $person->avatar instanceof Image) { - $defaultAvatarPath = config(Images::class) + $defaultAvatarPath = config('Images') ->avatarDefaultPath; - $sizes = config(Images::class) + $sizes = config('Images') ->personAvatarSizes; $sizeConfig = $sizes[$size]; diff --git a/app/Helpers/page_helper.php b/app/Helpers/page_helper.php index 49d15a79..253b0135 100644 --- a/app/Helpers/page_helper.php +++ b/app/Helpers/page_helper.php @@ -9,7 +9,6 @@ declare(strict_types=1); */ use App\Models\PageModel; -use Config\App; if (! function_exists('render_page_links')) { /** @@ -42,8 +41,8 @@ if (! function_exists('render_page_links')) { } // if set in .env, add legal notice link at the end of page links - if (config(App::class)->legalNoticeURL !== null) { - $links .= anchor(config(App::class)->legalNoticeURL, lang('Common.legal_notice'), [ + if (config('App')->legalNoticeURL !== null) { + $links .= anchor(config('App')->legalNoticeURL, lang('Common.legal_notice'), [ 'class' => 'px-2 py-1 underline hover:no-underline focus:ring-accent', 'target' => '_blank', 'rel' => 'noopener noreferrer', diff --git a/app/Helpers/seo_helper.php b/app/Helpers/seo_helper.php index 782afbf4..e18e659a 100644 --- a/app/Helpers/seo_helper.php +++ b/app/Helpers/seo_helper.php @@ -8,8 +8,6 @@ use App\Entities\EpisodeComment; use App\Entities\Page; use App\Entities\Podcast; use App\Entities\Post; -use Config\Embed; -use Config\Images; use Melbahja\Seo\MetaTags; use Melbahja\Seo\Schema; use Melbahja\Seo\Schema\Thing; @@ -57,8 +55,8 @@ if (! function_exists('get_podcast_metatags')) { ->description(esc($podcast->description)) ->image((string) $podcast->cover->og_url) ->canonical((string) current_url()) - ->og('image:width', (string) config(Images::class)->podcastCoverSizes['og']['width']) - ->og('image:height', (string) config(Images::class)->podcastCoverSizes['og']['height']) + ->og('image:width', (string) config('Images')->podcastCoverSizes['og']['width']) + ->og('image:height', (string) config('Images')->podcastCoverSizes['og']['height']) ->og('locale', $podcast->language_code) ->og('site_name', esc(service('settings')->get('App.siteName'))) ->push('link', [ @@ -107,8 +105,8 @@ if (! function_exists('get_episode_metatags')) { ->image((string) $episode->cover->og_url, 'player') ->canonical($episode->link) ->og('site_name', esc(service('settings')->get('App.siteName'))) - ->og('image:width', (string) config(Images::class)->podcastCoverSizes['og']['width']) - ->og('image:height', (string) config(Images::class)->podcastCoverSizes['og']['height']) + ->og('image:width', (string) config('Images')->podcastCoverSizes['og']['width']) + ->og('image:height', (string) config('Images')->podcastCoverSizes['og']['height']) ->og('locale', $episode->podcast->language_code) ->og('audio', $episode->audio_opengraph_url) ->og('audio:type', $episode->audio->file_mimetype) @@ -117,8 +115,8 @@ if (! function_exists('get_episode_metatags')) { ->twitter('audio:partner', $episode->podcast->publisher ?? '') ->twitter('audio:artist_name', esc($episode->podcast->owner_name)) ->twitter('player', $episode->getEmbedUrl('light')) - ->twitter('player:width', (string) config(Embed::class)->width) - ->twitter('player:height', (string) config(Embed::class)->height) + ->twitter('player:width', (string) config('Embed')->width) + ->twitter('player:height', (string) config('Embed')->height) ->push('link', [ 'rel' => 'alternate', 'type' => 'application/activity+json', diff --git a/app/Libraries/Router.php b/app/Libraries/Router.php index dc1cc8c1..1f3abc55 100644 --- a/app/Libraries/Router.php +++ b/app/Libraries/Router.php @@ -81,7 +81,7 @@ class Router extends CodeIgniterRouter ); if ($this->collection->shouldUseSupportedLocalesOnly() - && ! in_array($matched['locale'], config(App::class)->supportedLocales, true)) { + && ! in_array($matched['locale'], config('App')->supportedLocales, true)) { // Throw exception to prevent the autorouter, if enabled, // from trying to find a route throw PageNotFoundException::forLocaleNotSupported($matched['locale']); diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php index eb8bd205..79f24e02 100644 --- a/app/Models/PodcastModel.php +++ b/app/Models/PodcastModel.php @@ -14,7 +14,6 @@ use App\Entities\Actor; use App\Entities\Podcast; use CodeIgniter\HTTP\URI; use CodeIgniter\Model; -use Config\Fediverse; use phpseclib\Crypt\RSA; class PodcastModel extends Model @@ -349,7 +348,7 @@ class PodcastModel extends Model // delete all cache for podcast actor cache() - ->deleteMatching(config(Fediverse::class) ->cachePrefix . "actor#{$podcast->actor_id}*"); + ->deleteMatching(config('Fediverse') ->cachePrefix . "actor#{$podcast->actor_id}*"); // delete model requests cache, includes feed / query / episode lists, etc. cache() diff --git a/app/Models/PostModel.php b/app/Models/PostModel.php index ae409903..25a834a7 100644 --- a/app/Models/PostModel.php +++ b/app/Models/PostModel.php @@ -21,7 +21,7 @@ class PostModel extends FediversePostModel protected $returnType = Post::class; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', diff --git a/composer.json b/composer.json index ec81313c..b00fe83f 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "php": "^8.1", "adaures/ipcat-php": "^v1.0.0", "adaures/podcast-persons-taxonomy": "^v1.0.1", - "aws/aws-sdk-php": "^3.305.3", + "aws/aws-sdk-php": "^3.305.4", "chrisjean/php-ico": "^1.0.4", "cocur/slugify": "^v4.5.1", "codeigniter4/framework": "v4.5.1", diff --git a/composer.lock b/composer.lock index fdc0a69b..6615e830 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "063a673edd8a39e318bae89316709ef0", + "content-hash": "b0b783684ed8d36e636fac3632c78c27", "packages": [ { "name": "adaures/ipcat-php", @@ -188,16 +188,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.305.3", + "version": "3.305.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "b190e24bd6568713436e1f13f9022bf28f491fc1" + "reference": "fc26a2ebf720e0b75a353d7e8fe206796671e00b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b190e24bd6568713436e1f13f9022bf28f491fc1", - "reference": "b190e24bd6568713436e1f13f9022bf28f491fc1", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fc26a2ebf720e0b75a353d7e8fe206796671e00b", + "reference": "fc26a2ebf720e0b75a353d7e8fe206796671e00b", "shasum": "" }, "require": { @@ -273,31 +273,31 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.305.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.305.4" }, - "time": "2024-04-25T18:07:15+00:00" + "time": "2024-04-26T18:06:31+00:00" }, { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -315,12 +315,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -328,7 +333,7 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "chrisjean/php-ico", @@ -2796,20 +2801,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -2864,7 +2869,7 @@ "keywords": ["guid", "identifier", "uuid"], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -2876,7 +2881,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3393,12 +3398,12 @@ "source": { "type": "git", "url": "https://github.com/yassinedoghri/podcast-feed.git", - "reference": "366ddcedfb4b89c7093d03b2398184435f930843" + "reference": "f34156e62c9eef8bd5561f8a585d99501e235505" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yassinedoghri/podcast-feed/zipball/366ddcedfb4b89c7093d03b2398184435f930843", - "reference": "366ddcedfb4b89c7093d03b2398184435f930843", + "url": "https://api.github.com/repos/yassinedoghri/podcast-feed/zipball/f34156e62c9eef8bd5561f8a585d99501e235505", + "reference": "f34156e62c9eef8bd5561f8a585d99501e235505", "shasum": "" }, "require": { @@ -3434,7 +3439,7 @@ "issues": "https://github.com/yassinedoghri/podcast-feed/issues", "source": "https://github.com/yassinedoghri/podcast-feed/tree/main" }, - "time": "2023-06-22T13:54:05+00:00" + "time": "2024-04-28T16:17:41+00:00" } ], "packages-dev": [ diff --git a/modules/Admin/Config/Routes.php b/modules/Admin/Config/Routes.php index 24f451b2..42bd4281 100644 --- a/modules/Admin/Config/Routes.php +++ b/modules/Admin/Config/Routes.php @@ -15,7 +15,8 @@ $routes->add('scheduled-video-clips', 'SchedulerController::generateVideoClips', // Admin area routes $routes->group( - config(Admin::class)->gateway, + config('Admin') +->gateway, [ 'namespace' => 'Modules\Admin\Controllers', ], diff --git a/modules/Admin/Controllers/AboutController.php b/modules/Admin/Controllers/AboutController.php index f7cba14d..4b69352c 100644 --- a/modules/Admin/Controllers/AboutController.php +++ b/modules/Admin/Controllers/AboutController.php @@ -11,7 +11,6 @@ declare(strict_types=1); namespace Modules\Admin\Controllers; use CodeIgniter\HTTP\RedirectResponse; -use Config\App; use Config\Services; class AboutController extends BaseController @@ -23,7 +22,7 @@ class AboutController extends BaseController 'version' => CP_VERSION, 'php_version' => PHP_VERSION, 'os' => PHP_OS, - 'languages' => implode(', ', config(App::class)->supportedLocales), + 'languages' => implode(', ', config('App')->supportedLocales), ]; return view('settings/about', [ diff --git a/modules/Admin/Controllers/DashboardController.php b/modules/Admin/Controllers/DashboardController.php index 6ac175af..7d6f4821 100644 --- a/modules/Admin/Controllers/DashboardController.php +++ b/modules/Admin/Controllers/DashboardController.php @@ -13,7 +13,6 @@ namespace Modules\Admin\Controllers; use App\Models\EpisodeModel; use App\Models\PodcastModel; use CodeIgniter\I18n\Time; -use Config\App; use Modules\Media\Models\MediaModel; class DashboardController extends BaseController @@ -51,7 +50,7 @@ class DashboardController extends BaseController ->get() ->getResultArray()[0]; - $appStorageLimit = config(App::class) + $appStorageLimit = config('App') ->storageLimit; if ($appStorageLimit === null || $appStorageLimit < 0) { $storageLimitBytes = disk_total_space('./'); @@ -71,7 +70,7 @@ class DashboardController extends BaseController ->id; } - $bandwidthLimit = config(App::class) + $bandwidthLimit = config('App') ->bandwidthLimit; $data = [ diff --git a/modules/Admin/Controllers/EpisodeController.php b/modules/Admin/Controllers/EpisodeController.php index acd742fc..d83bae5c 100644 --- a/modules/Admin/Controllers/EpisodeController.php +++ b/modules/Admin/Controllers/EpisodeController.php @@ -855,7 +855,7 @@ class EpisodeController extends BaseController // set podcast is_published_on_hubs to false to trigger websub push (new PodcastModel())->update($this->episode->podcast->id, [ - 'is_published_on_hubs' => false, + 'is_published_on_hubs' => 0, ]); $db->transComplete(); diff --git a/modules/Admin/Controllers/PodcastController.php b/modules/Admin/Controllers/PodcastController.php index 1fd27d8d..aa8c726f 100644 --- a/modules/Admin/Controllers/PodcastController.php +++ b/modules/Admin/Controllers/PodcastController.php @@ -32,7 +32,6 @@ use Modules\Analytics\Models\AnalyticsPodcastModel; use Modules\Analytics\Models\AnalyticsWebsiteByBrowserModel; use Modules\Analytics\Models\AnalyticsWebsiteByEntryPageModel; use Modules\Analytics\Models\AnalyticsWebsiteByRefererModel; -use Modules\Auth\Config\AuthGroups; use Modules\Media\Entities\Image; use Modules\Media\FileManagers\FileManagerInterface; use Modules\Media\Models\MediaModel; @@ -244,7 +243,7 @@ class PodcastController extends BaseController // generate podcast roles and permissions // before setting current user as podcast admin - config(AuthGroups::class) + config('AuthGroups') ->generatePodcastAuthorizations($newPodcastId); add_podcast_group(auth()->user(), (int) $newPodcastId, setting('AuthGroups.mostPowerfulPodcastGroup')); diff --git a/modules/Admin/Controllers/VideoClipsController.php b/modules/Admin/Controllers/VideoClipsController.php index ddece561..7bf1d0d1 100644 --- a/modules/Admin/Controllers/VideoClipsController.php +++ b/modules/Admin/Controllers/VideoClipsController.php @@ -18,10 +18,8 @@ use App\Models\EpisodeModel; use App\Models\PodcastModel; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; -use Config\Colors; use Modules\Media\Entities\Transcript; use Modules\Media\Models\MediaModel; -use Modules\MediaClipper\Config\MediaClipper; class VideoClipsController extends BaseController { @@ -91,7 +89,7 @@ class VideoClipsController extends BaseController return view('episode/video_clips_list', $data); } - public function view($videoClipId): string + public function view(string $videoClipId): string { $videoClip = (new ClipModel())->getVideoClipById((int) $videoClipId); @@ -146,8 +144,8 @@ class VideoClipsController extends BaseController 'title' => 'required', 'start_time' => 'required|greater_than_equal_to[0]', 'duration' => 'required|greater_than[0]', - 'format' => 'required|in_list[' . implode(',', array_keys(config(MediaClipper::class)->formats)) . ']', - 'theme' => 'required|in_list[' . implode(',', array_keys(config(Colors::class)->themes)) . ']', + 'format' => 'required|in_list[' . implode(',', array_keys(config('MediaClipper')->formats)) . ']', + 'theme' => 'required|in_list[' . implode(',', array_keys(config('Colors')->themes)) . ']', ]; if (! $this->validate($rules)) { @@ -160,7 +158,7 @@ class VideoClipsController extends BaseController $validData = $this->validator->getValidated(); $themeName = $validData['theme']; - $themeColors = config(MediaClipper::class) + $themeColors = config('MediaClipper') ->themes[$themeName]; $theme = [ 'name' => $themeName, diff --git a/modules/Admin/Language/ar/Breadcrumb.php b/modules/Admin/Language/ar/Breadcrumb.php index 887dd362..251d9788 100644 --- a/modules/Admin/Language/ar/Breadcrumb.php +++ b/modules/Admin/Language/ar/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'الرئيسية', 'podcasts' => 'بودكاستات', 'episodes' => 'حلقات', diff --git a/modules/Admin/Language/br/Breadcrumb.php b/modules/Admin/Language/br/Breadcrumb.php index 10d011df..65d62836 100644 --- a/modules/Admin/Language/br/Breadcrumb.php +++ b/modules/Admin/Language/br/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'roll-istor', - config(Admin::class) + config('Admin') ->gateway => 'Degemer', 'podcasts' => 'podkastoù', 'episodes' => 'rannoù', diff --git a/modules/Admin/Language/ca/Breadcrumb.php b/modules/Admin/Language/ca/Breadcrumb.php index 75141943..8beefd66 100644 --- a/modules/Admin/Language/ca/Breadcrumb.php +++ b/modules/Admin/Language/ca/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'Ruta de navegació', - config(Admin::class) + config('Admin') ->gateway => 'Inici', 'podcasts' => 'podcasts', 'episodes' => 'episodis', diff --git a/modules/Admin/Language/da/Breadcrumb.php b/modules/Admin/Language/da/Breadcrumb.php index 0adb76ba..f02c83ac 100644 --- a/modules/Admin/Language/da/Breadcrumb.php +++ b/modules/Admin/Language/da/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'brødkrumme', - config(Admin::class) + config('Admin') ->gateway => 'Hjem', 'podcasts' => 'podcasts', 'episodes' => 'episoder', diff --git a/modules/Admin/Language/de/Breadcrumb.php b/modules/Admin/Language/de/Breadcrumb.php index 89fc585d..986f03dd 100644 --- a/modules/Admin/Language/de/Breadcrumb.php +++ b/modules/Admin/Language/de/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'Pfad', - config(Admin::class) + config('Admin') ->gateway => 'Startseite', 'podcasts' => 'Podcasts', 'episodes' => 'Folgen', diff --git a/modules/Admin/Language/el/Breadcrumb.php b/modules/Admin/Language/el/Breadcrumb.php index d08f66f7..217f6edb 100644 --- a/modules/Admin/Language/el/Breadcrumb.php +++ b/modules/Admin/Language/el/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'διαδρομή (Breadcrumb)', - config(Admin::class) + config('Admin') ->gateway => 'Αρχική σελίδα', 'podcasts' => 'podcasts', 'episodes' => 'επεισόδια', diff --git a/modules/Admin/Language/en/Breadcrumb.php b/modules/Admin/Language/en/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/en/Breadcrumb.php +++ b/modules/Admin/Language/en/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/es/Breadcrumb.php b/modules/Admin/Language/es/Breadcrumb.php index 41de91c1..6ffb6387 100644 --- a/modules/Admin/Language/es/Breadcrumb.php +++ b/modules/Admin/Language/es/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'ruta de navegación', - config(Admin::class) + config('Admin') ->gateway => 'Inicio', 'podcasts' => 'podcasts', 'episodes' => 'episodios', diff --git a/modules/Admin/Language/eu/Breadcrumb.php b/modules/Admin/Language/eu/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/eu/Breadcrumb.php +++ b/modules/Admin/Language/eu/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/fa/Breadcrumb.php b/modules/Admin/Language/fa/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/fa/Breadcrumb.php +++ b/modules/Admin/Language/fa/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/fr/Breadcrumb.php b/modules/Admin/Language/fr/Breadcrumb.php index 5986e189..a4ac57a2 100644 --- a/modules/Admin/Language/fr/Breadcrumb.php +++ b/modules/Admin/Language/fr/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'Fil d’Ariane', - config(Admin::class) + config('Admin') ->gateway => 'Accueil', 'podcasts' => 'podcasts', 'episodes' => 'épisodes', diff --git a/modules/Admin/Language/fr2/Breadcrumb.php b/modules/Admin/Language/fr2/Breadcrumb.php index 13b077df..52e423ee 100644 --- a/modules/Admin/Language/fr2/Breadcrumb.php +++ b/modules/Admin/Language/fr2/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'fil d’Ariane', - config(Admin::class) + config('Admin') ->gateway => 'Accueil', 'podcasts' => 'podcasts', 'episodes' => 'épisodes', diff --git a/modules/Admin/Language/fr_CA/Breadcrumb.php b/modules/Admin/Language/fr_CA/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/fr_CA/Breadcrumb.php +++ b/modules/Admin/Language/fr_CA/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/fr_trad/Breadcrumb.php b/modules/Admin/Language/fr_trad/Breadcrumb.php index 896c373c..558b90f7 100644 --- a/modules/Admin/Language/fr_trad/Breadcrumb.php +++ b/modules/Admin/Language/fr_trad/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/gd/Breadcrumb.php b/modules/Admin/Language/gd/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/gd/Breadcrumb.php +++ b/modules/Admin/Language/gd/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/gl/Breadcrumb.php b/modules/Admin/Language/gl/Breadcrumb.php index 3c49d0e6..fa515f15 100644 --- a/modules/Admin/Language/gl/Breadcrumb.php +++ b/modules/Admin/Language/gl/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'menú', - config(Admin::class) + config('Admin') ->gateway => 'Inicio', 'podcasts' => 'podcasts', 'episodes' => 'episodios', diff --git a/modules/Admin/Language/id/Breadcrumb.php b/modules/Admin/Language/id/Breadcrumb.php index 290483af..4e6f3a8e 100644 --- a/modules/Admin/Language/id/Breadcrumb.php +++ b/modules/Admin/Language/id/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/it/Breadcrumb.php b/modules/Admin/Language/it/Breadcrumb.php index fa31a5fe..7c492350 100644 --- a/modules/Admin/Language/it/Breadcrumb.php +++ b/modules/Admin/Language/it/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodi', diff --git a/modules/Admin/Language/ja/Breadcrumb.php b/modules/Admin/Language/ja/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/ja/Breadcrumb.php +++ b/modules/Admin/Language/ja/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/kk/Breadcrumb.php b/modules/Admin/Language/kk/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/kk/Breadcrumb.php +++ b/modules/Admin/Language/kk/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/ko/Breadcrumb.php b/modules/Admin/Language/ko/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/ko/Breadcrumb.php +++ b/modules/Admin/Language/ko/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/nl/Breadcrumb.php b/modules/Admin/Language/nl/Breadcrumb.php index 374ddc2e..e87e4d3d 100644 --- a/modules/Admin/Language/nl/Breadcrumb.php +++ b/modules/Admin/Language/nl/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'kruimelpad', - config(Admin::class) + config('Admin') ->gateway => 'Hoofdpagina', 'podcasts' => 'podcasts', 'episodes' => 'afleveringen', diff --git a/modules/Admin/Language/nn-NO/Breadcrumb.php b/modules/Admin/Language/nn-NO/Breadcrumb.php index 15a1c2a9..422e71df 100644 --- a/modules/Admin/Language/nn-NO/Breadcrumb.php +++ b/modules/Admin/Language/nn-NO/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'navigeringslenke', - config(Admin::class) + config('Admin') ->gateway => 'Heim', 'podcasts' => 'podkastar', 'episodes' => 'episodar', diff --git a/modules/Admin/Language/oc/Breadcrumb.php b/modules/Admin/Language/oc/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/oc/Breadcrumb.php +++ b/modules/Admin/Language/oc/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/pl/Breadcrumb.php b/modules/Admin/Language/pl/Breadcrumb.php index 37e81c6f..67100981 100644 --- a/modules/Admin/Language/pl/Breadcrumb.php +++ b/modules/Admin/Language/pl/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'okruszki', - config(Admin::class) + config('Admin') ->gateway => 'Początek', 'podcasts' => 'podcasty', 'episodes' => 'odcinki', diff --git a/modules/Admin/Language/pt-BR/Breadcrumb.php b/modules/Admin/Language/pt-BR/Breadcrumb.php index 29c73be3..7ca40d76 100644 --- a/modules/Admin/Language/pt-BR/Breadcrumb.php +++ b/modules/Admin/Language/pt-BR/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Início', 'podcasts' => 'podcasts', 'episodes' => 'episódios', diff --git a/modules/Admin/Language/pt/Breadcrumb.php b/modules/Admin/Language/pt/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/pt/Breadcrumb.php +++ b/modules/Admin/Language/pt/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/ro/Breadcrumb.php b/modules/Admin/Language/ro/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/ro/Breadcrumb.php +++ b/modules/Admin/Language/ro/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/ru/Breadcrumb.php b/modules/Admin/Language/ru/Breadcrumb.php index 097ddc1c..635a3806 100644 --- a/modules/Admin/Language/ru/Breadcrumb.php +++ b/modules/Admin/Language/ru/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'навигационная цепочка', - config(Admin::class) + config('Admin') ->gateway => 'Главная', 'podcasts' => 'подкасты', 'episodes' => 'выпуски', diff --git a/modules/Admin/Language/sk/Breadcrumb.php b/modules/Admin/Language/sk/Breadcrumb.php index b47dd878..26cf0b17 100644 --- a/modules/Admin/Language/sk/Breadcrumb.php +++ b/modules/Admin/Language/sk/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'omrvinky', - config(Admin::class) + config('Admin') ->gateway => 'Úvod', 'podcasts' => 'podcasty', 'episodes' => 'časti', diff --git a/modules/Admin/Language/sr-Latn/Breadcrumb.php b/modules/Admin/Language/sr-Latn/Breadcrumb.php index 48e20d41..3376dedd 100644 --- a/modules/Admin/Language/sr-Latn/Breadcrumb.php +++ b/modules/Admin/Language/sr-Latn/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb polja', - config(Admin::class) + config('Admin') ->gateway => 'Početna', 'podcasts' => 'podkasti', 'episodes' => 'epizode', diff --git a/modules/Admin/Language/sv/Breadcrumb.php b/modules/Admin/Language/sv/Breadcrumb.php index cf8a2e95..7acad68e 100644 --- a/modules/Admin/Language/sv/Breadcrumb.php +++ b/modules/Admin/Language/sv/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Hem', 'podcasts' => 'podcasts', 'episodes' => 'avsnitt', diff --git a/modules/Admin/Language/uk/Breadcrumb.php b/modules/Admin/Language/uk/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/uk/Breadcrumb.php +++ b/modules/Admin/Language/uk/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Admin/Language/zh-Hans/Breadcrumb.php b/modules/Admin/Language/zh-Hans/Breadcrumb.php index d0344a98..db129570 100644 --- a/modules/Admin/Language/zh-Hans/Breadcrumb.php +++ b/modules/Admin/Language/zh-Hans/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => '面包屑导航', - config(Admin::class) + config('Admin') ->gateway => '主页', 'podcasts' => '播客', 'episodes' => '剧集', diff --git a/modules/Admin/Language/zh-Hant/Breadcrumb.php b/modules/Admin/Language/zh-Hant/Breadcrumb.php index 6a678d4e..408c9f9f 100644 --- a/modules/Admin/Language/zh-Hant/Breadcrumb.php +++ b/modules/Admin/Language/zh-Hant/Breadcrumb.php @@ -2,8 +2,6 @@ declare(strict_types=1); -use Modules\Admin\Config\Admin; - /** * @copyright 2020 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -12,7 +10,7 @@ use Modules\Admin\Config\Admin; return [ 'label' => 'breadcrumb', - config(Admin::class) + config('Admin') ->gateway => 'Home', 'podcasts' => 'podcasts', 'episodes' => 'episodes', diff --git a/modules/Analytics/Config/Routes.php b/modules/Analytics/Config/Routes.php index 04ed7eb6..d24e716f 100644 --- a/modules/Analytics/Config/Routes.php +++ b/modules/Analytics/Config/Routes.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use Modules\Analytics\Config\Analytics; +use CodeIgniter\Router\RouteCollection; /** * @copyright 2021 Ad Aures @@ -27,17 +27,17 @@ $routes->addPlaceholder( $routes->group('', [ 'namespace' => 'Modules\Analytics\Controllers', ], static function ($routes): void { - $routes->group(config(Analytics::class)->gateway . '/(:num)/(:class)', static function ($routes): void { + $routes->group(config('Analytics')->gateway . '/(:num)/(:class)', static function ($routes): void { $routes->get('/', 'AnalyticsController::getData/$1/$2', [ 'as' => 'analytics-full-data', - 'filter' => config(Analytics::class) + 'filter' => config('Analytics') ->routeFilters[ 'analytics-full-data' ], ]); $routes->get('(:filter)', 'AnalyticsController::getData/$1/$2/$3', [ 'as' => 'analytics-data', - 'filter' => config(Analytics::class) + 'filter' => config('Analytics') ->routeFilters['analytics-data'], ]); $routes->get( @@ -45,14 +45,14 @@ $routes->group('', [ 'AnalyticsController::getData/$1/$2/$3/$4', [ 'as' => 'analytics-filtered-data', - 'filter' => config(Analytics::class) + 'filter' => config('Analytics') ->routeFilters[ 'analytics-filtered-data' ], ], ); }); - $routes->get(config(Analytics::class)->gateway . '/(:class)/(:filter)', 'AnalyticsController::getData/$1/$2', [ + $routes->get(config('Analytics')->gateway . '/(:class)/(:filter)', 'AnalyticsController::getData/$1/$2', [ 'as' => 'analytics-data-instance', ]); diff --git a/modules/Analytics/Controllers/AnalyticsController.php b/modules/Analytics/Controllers/AnalyticsController.php index fb0a0315..adf7e3e0 100644 --- a/modules/Analytics/Controllers/AnalyticsController.php +++ b/modules/Analytics/Controllers/AnalyticsController.php @@ -31,11 +31,13 @@ class AnalyticsController extends Controller } if (! is_numeric($params[0])) { + // @phpstan-ignore-next-line $this->analyticsModel = model('Analytics' . $params[0] . 'Model'); $this->methodName = 'getData' . $params[1]; return $this->{$method}(); } + // @phpstan-ignore-next-line $this->analyticsModel = model('Analytics' . $params[1] . 'Model'); $this->methodName = 'getData' . (count($params) >= 3 ? $params[2] : ''); diff --git a/modules/Analytics/Entities/AnalyticsPodcasts.php b/modules/Analytics/Entities/AnalyticsPodcasts.php index 5faf503b..3ff2b58e 100644 --- a/modules/Analytics/Entities/AnalyticsPodcasts.php +++ b/modules/Analytics/Entities/AnalyticsPodcasts.php @@ -27,7 +27,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcasts extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsByCountry.php b/modules/Analytics/Entities/AnalyticsPodcastsByCountry.php index 105e6c08..d9dd478a 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsByCountry.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsByCountry.php @@ -26,7 +26,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcastsByCountry extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsByEpisode.php b/modules/Analytics/Entities/AnalyticsPodcastsByEpisode.php index 27e561c9..354d98ec 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsByEpisode.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsByEpisode.php @@ -25,7 +25,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcastsByEpisode extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsByHour.php b/modules/Analytics/Entities/AnalyticsPodcastsByHour.php index e0b66ed4..e74ef64a 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsByHour.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsByHour.php @@ -25,7 +25,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcastsByHour extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsByPlayer.php b/modules/Analytics/Entities/AnalyticsPodcastsByPlayer.php index 1129668a..6f2b5044 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsByPlayer.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsByPlayer.php @@ -28,7 +28,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcastsByPlayer extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsByRegion.php b/modules/Analytics/Entities/AnalyticsPodcastsByRegion.php index 618e74ef..777c4148 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsByRegion.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsByRegion.php @@ -28,7 +28,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcastsByRegion extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsByService.php b/modules/Analytics/Entities/AnalyticsPodcastsByService.php index 0b024b96..f86d6db6 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsByService.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsByService.php @@ -30,7 +30,7 @@ use Opawg\UserAgentsV2Php\UserAgentsRSS; class AnalyticsPodcastsByService extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsPodcastsBySubscription.php b/modules/Analytics/Entities/AnalyticsPodcastsBySubscription.php index 160bd7ff..f048fea0 100644 --- a/modules/Analytics/Entities/AnalyticsPodcastsBySubscription.php +++ b/modules/Analytics/Entities/AnalyticsPodcastsBySubscription.php @@ -24,7 +24,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsPodcastsBySubscription extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsUnknownUserAgent.php b/modules/Analytics/Entities/AnalyticsUnknownUserAgent.php index 94be0951..1c897d7c 100644 --- a/modules/Analytics/Entities/AnalyticsUnknownUserAgent.php +++ b/modules/Analytics/Entities/AnalyticsUnknownUserAgent.php @@ -24,7 +24,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsUnknownUserAgent extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsWebsiteByBrowser.php b/modules/Analytics/Entities/AnalyticsWebsiteByBrowser.php index 0dbbd74f..80c568c8 100644 --- a/modules/Analytics/Entities/AnalyticsWebsiteByBrowser.php +++ b/modules/Analytics/Entities/AnalyticsWebsiteByBrowser.php @@ -25,7 +25,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsWebsiteByBrowser extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsWebsiteByEntryPage.php b/modules/Analytics/Entities/AnalyticsWebsiteByEntryPage.php index 5e04659a..51d436b6 100644 --- a/modules/Analytics/Entities/AnalyticsWebsiteByEntryPage.php +++ b/modules/Analytics/Entities/AnalyticsWebsiteByEntryPage.php @@ -25,7 +25,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsWebsiteByEntryPage extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Entities/AnalyticsWebsiteByReferer.php b/modules/Analytics/Entities/AnalyticsWebsiteByReferer.php index a685e072..15819f73 100644 --- a/modules/Analytics/Entities/AnalyticsWebsiteByReferer.php +++ b/modules/Analytics/Entities/AnalyticsWebsiteByReferer.php @@ -25,7 +25,7 @@ use CodeIgniter\Entity\Entity; class AnalyticsWebsiteByReferer extends Entity { /** - * @var string[] + * @var list */ protected $dates = ['date', 'created_at', 'updated_at']; diff --git a/modules/Analytics/Helpers/analytics_helper.php b/modules/Analytics/Helpers/analytics_helper.php index 48625117..99a21ed9 100644 --- a/modules/Analytics/Helpers/analytics_helper.php +++ b/modules/Analytics/Helpers/analytics_helper.php @@ -11,7 +11,6 @@ declare(strict_types=1); use AdAures\Ipcat\IpDb; use Config\Services; use GeoIp2\Database\Reader; -use Modules\Analytics\Config\Analytics; use Opawg\UserAgentsV2Php\UserAgents; use WhichBrowser\Parser; @@ -41,11 +40,12 @@ if (! function_exists('client_ip')) { */ function client_ip(): string { - if (! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { - return $_SERVER['HTTP_X_FORWARDED_FOR']; + $superglobals = service('superglobals'); + if (! empty($superglobals->server('HTTP_X_FORWARDED_FOR'))) { + return $superglobals->server('HTTP_X_FORWARDED_FOR'); } - return $_SERVER['REMOTE_ADDR']; + return $superglobals->server('REMOTE_ADDR'); } } @@ -109,7 +109,8 @@ if (! function_exists('set_user_session_player')) { if (! $session->has('player')) { $playerFound = null; - $userAgent = $_SERVER['HTTP_USER_AGENT']; + $userAgent = service('superglobals') + ->server('HTTP_USER_AGENT'); try { $playerFound = UserAgents::find($userAgent); @@ -175,7 +176,8 @@ if (! function_exists('set_user_session_referer')) { { $session = Services::session(); - $newreferer = $_SERVER['HTTP_REFERER'] ?? '- Direct -'; + $newreferer = service('superglobals') + ->server('HTTP_REFERER') ?? '- Direct -'; $newreferer = parse_url((string) $newreferer, PHP_URL_HOST) === parse_url(current_url(false), PHP_URL_HOST) @@ -195,7 +197,8 @@ if (! function_exists('set_user_session_entry_page')) { { $session = Services::session(); - $entryPage = $_SERVER['REQUEST_URI']; + $entryPage = service('superglobals') + ->server('REQUEST_URI'); if (! $session->has('entryPage')) { $session->set('entryPage', $entryPage); } @@ -243,10 +246,11 @@ if (! function_exists('podcast_hit')) { $session->get('player')['bot'] = true; } + $superglobals = service('superglobals'); //We get the HTTP header field `Range`: - $httpRange = $_SERVER['HTTP_RANGE'] ?? null; + $httpRange = $superglobals->server('HTTP_RANGE') ?? null; - $salt = config(Analytics::class) + $salt = config('Analytics') ->salt; // We create a sha1 hash for this Salt+Current_Date+IP_Address+User_Agent+Episode_ID (used to count only once multiple episode downloads): $episodeListenerHashId = @@ -254,11 +258,14 @@ if (! function_exists('podcast_hit')) { sha1( $salt . '_' . date( 'Y-m-d' - ) . '_' . $clientIp . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $episodeId + ) . '_' . $clientIp . '_' . $superglobals->server('HTTP_USER_AGENT') . '_' . $episodeId ); // The cache expires at midnight: $secondsToMidnight = strtotime('tomorrow') - time(); + + /** @var int|null $downloadedBytes */ $downloadedBytes = cache($episodeListenerHashId); + if ($downloadedBytes === null) { // If it was never downloaded that means that zero bytes were downloaded: $downloadedBytes = 0; @@ -301,13 +308,16 @@ if (! function_exists('podcast_hit')) { sha1( $salt . '_' . date( 'Y-m-d' - ) . '_' . $clientIp . '_' . $_SERVER['HTTP_USER_AGENT'] . '_' . $podcastId + ) . '_' . $clientIp . '_' . $superglobals->server('HTTP_USER_AGENT') . '_' . $podcastId ); $newListener = 1; + // Has this listener already downloaded an episode today: + /** @var int|null $downloadsByUser */ $downloadsByUser = cache($podcastListenerHashId); + // We add one download - if ($downloadsByUser) { + if ($downloadsByUser === null) { $newListener = 0; ++$downloadsByUser; } else { diff --git a/modules/Analytics/Models/AnalyticsPodcastModel.php b/modules/Analytics/Models/AnalyticsPodcastModel.php index 782934fe..e58f574e 100644 --- a/modules/Analytics/Models/AnalyticsPodcastModel.php +++ b/modules/Analytics/Models/AnalyticsPodcastModel.php @@ -12,7 +12,6 @@ declare(strict_types=1); namespace Modules\Analytics\Models; -use App\Entities\Media\BaseMedia; use CodeIgniter\Model; use Modules\Analytics\Entities\AnalyticsPodcasts; use Modules\Media\Models\MediaModel; @@ -263,7 +262,7 @@ class AnalyticsPodcastModel extends Model /** * Get total storage * - * @return BaseMedia[] + * @return AnalyticsPodcasts[] */ public function getDataTotalStorageByMonth(): array { diff --git a/modules/Analytics/Models/AnalyticsUnknownUseragentsModel.php b/modules/Analytics/Models/AnalyticsUnknownUserAgentsModel.php similarity index 94% rename from modules/Analytics/Models/AnalyticsUnknownUseragentsModel.php rename to modules/Analytics/Models/AnalyticsUnknownUserAgentsModel.php index 21cf11d2..846ca598 100644 --- a/modules/Analytics/Models/AnalyticsUnknownUseragentsModel.php +++ b/modules/Analytics/Models/AnalyticsUnknownUserAgentsModel.php @@ -15,7 +15,7 @@ namespace Modules\Analytics\Models; use CodeIgniter\Model; use Modules\Analytics\Entities\AnalyticsUnknownUserAgent; -class AnalyticsUnknownUserAgentModel extends Model +class AnalyticsUnknownUserAgentsModel extends Model { /** * @var string diff --git a/modules/Api/Rest/V1/Config/Registrar.php b/modules/Api/Rest/V1/Config/Registrar.php index ec76dcee..43814934 100644 --- a/modules/Api/Rest/V1/Config/Registrar.php +++ b/modules/Api/Rest/V1/Config/Registrar.php @@ -8,6 +8,9 @@ use Modules\Api\Rest\V1\Filters\ApiFilter; class Registrar { + /** + * @return array + */ public static function Filters(): array { return [ diff --git a/modules/Api/Rest/V1/Config/Routes.php b/modules/Api/Rest/V1/Config/Routes.php index 0951a7d5..6cbba9d8 100644 --- a/modules/Api/Rest/V1/Config/Routes.php +++ b/modules/Api/Rest/V1/Config/Routes.php @@ -9,7 +9,7 @@ use CodeIgniter\Router\RouteCollection; /** @var RouteCollection $routes */ $routes->group( - config(RestApi::class) + config('RestApi') ->gateway . 'podcasts', [ 'namespace' => 'Modules\Api\Rest\V1\Controllers', @@ -23,7 +23,7 @@ $routes->group( ); $routes->group( - config(RestApi::class) + config('RestApi') ->gateway . 'episodes', [ 'namespace' => 'Modules\Api\Rest\V1\Controllers', diff --git a/modules/Api/Rest/V1/Config/Services.php b/modules/Api/Rest/V1/Config/Services.php index 48c94897..40806e82 100644 --- a/modules/Api/Rest/V1/Config/Services.php +++ b/modules/Api/Rest/V1/Config/Services.php @@ -5,17 +5,16 @@ declare(strict_types=1); namespace Modules\Api\Rest\V1\Config; use CodeIgniter\Config\BaseService; -use Config\Exceptions as ExceptionsConfig; -use Modules\Api\Rest\V1\Core\Exceptions; +use Modules\Api\Rest\V1\Core\RestApiExceptions; class Services extends BaseService { - public static function restApiExceptions(bool $getShared = true) + public static function restApiExceptions(bool $getShared = true): RestApiExceptions { if ($getShared) { return static::getSharedInstance('restApiExceptions'); } - return new Exceptions(config(ExceptionsConfig::class), static::request(), static::response()); + return new RestApiExceptions(config('Exceptions')); } } diff --git a/modules/Api/Rest/V1/Controllers/EpisodeController.php b/modules/Api/Rest/V1/Controllers/EpisodeController.php index f09737e8..104d0318 100644 --- a/modules/Api/Rest/V1/Controllers/EpisodeController.php +++ b/modules/Api/Rest/V1/Controllers/EpisodeController.php @@ -8,8 +8,7 @@ use App\Entities\Episode; use App\Models\EpisodeModel; use CodeIgniter\API\ResponseTrait; use CodeIgniter\Controller; -use CodeIgniter\HTTP\Response; -use Modules\Api\Rest\V1\Config\RestApi; +use CodeIgniter\HTTP\ResponseInterface; use Modules\Api\Rest\V1\Config\Services; class EpisodeController extends Controller @@ -21,7 +20,7 @@ class EpisodeController extends Controller Services::restApiExceptions()->initialize(); } - public function list(): Response + public function list(): ResponseInterface { $query = $this->request->getGet('query'); $order = $this->request->getGet('order') ?? 'newest'; @@ -46,7 +45,7 @@ class EpisodeController extends Controller } $data = $builder->findAll( - (int) ($this->request->getGet('limit') ?? config(RestApi::class)->limit), + (int) ($this->request->getGet('limit') ?? config('RestApi')->limit), (int) $this->request->getGet('offset') ); @@ -57,7 +56,7 @@ class EpisodeController extends Controller return $this->respond($data); } - public function view(int $id): Response + public function view(int $id): ResponseInterface { $episode = (new EpisodeModel())->getEpisodeById($id); @@ -65,6 +64,7 @@ class EpisodeController extends Controller return $this->failNotFound('Episode not found'); } + // @phpstan-ignore-next-line return $this->respond(static::mapEpisode($episode)); } diff --git a/modules/Api/Rest/V1/Controllers/ExceptionController.php b/modules/Api/Rest/V1/Controllers/ExceptionController.php index 50dd7863..1f77bcc9 100644 --- a/modules/Api/Rest/V1/Controllers/ExceptionController.php +++ b/modules/Api/Rest/V1/Controllers/ExceptionController.php @@ -6,13 +6,13 @@ namespace Modules\Api\Rest\V1\Controllers; use CodeIgniter\API\ResponseTrait; use CodeIgniter\Controller; -use CodeIgniter\HTTP\Response; +use CodeIgniter\HTTP\ResponseInterface; class ExceptionController extends Controller { use ResponseTrait; - public function notFound(): Response + public function notFound(): ResponseInterface { return $this->failNotFound('Podcast not found'); } diff --git a/modules/Api/Rest/V1/Controllers/PodcastController.php b/modules/Api/Rest/V1/Controllers/PodcastController.php index 4a1ac146..98fa68b8 100644 --- a/modules/Api/Rest/V1/Controllers/PodcastController.php +++ b/modules/Api/Rest/V1/Controllers/PodcastController.php @@ -8,7 +8,7 @@ use App\Entities\Podcast; use App\Models\PodcastModel; use CodeIgniter\API\ResponseTrait; use CodeIgniter\Controller; -use CodeIgniter\HTTP\Response; +use CodeIgniter\HTTP\ResponseInterface; use Modules\Api\Rest\V1\Config\Services; class PodcastController extends Controller @@ -20,7 +20,7 @@ class PodcastController extends Controller Services::restApiExceptions()->initialize(); } - public function list(): Response + public function list(): ResponseInterface { $data = (new PodcastModel())->findAll(); array_map(static function ($podcast): void { @@ -29,13 +29,14 @@ class PodcastController extends Controller return $this->respond($data); } - public function view(int $id): Response + public function view(int $id): ResponseInterface { $podcast = (new PodcastModel())->getPodcastById($id); if (! $podcast instanceof Podcast) { return $this->failNotFound('Podcast not found'); } + // @phpstan-ignore-next-line return $this->respond(self::mapPodcast($podcast)); } @@ -50,7 +51,7 @@ class PodcastController extends Controller $categories = [$podcast->getCategory(), ...$podcast->getOtherCategories()]; foreach ($categories as $category) { - $category->translated = lang('Podcast.category_options.' . $category->code, [], null, false); + $category->translated = lang('Podcast.category_options.' . $category->code); } $podcast->categories = $categories; diff --git a/modules/Api/Rest/V1/Core/Exceptions.php b/modules/Api/Rest/V1/Core/RestApiExceptions.php similarity index 91% rename from modules/Api/Rest/V1/Core/Exceptions.php rename to modules/Api/Rest/V1/Core/RestApiExceptions.php index 95796efd..7484c1b0 100644 --- a/modules/Api/Rest/V1/Core/Exceptions.php +++ b/modules/Api/Rest/V1/Core/RestApiExceptions.php @@ -4,9 +4,10 @@ declare(strict_types=1); namespace Modules\Api\Rest\V1\Core; +use CodeIgniter\Debug\Exceptions; use Throwable; -class Exceptions extends \CodeIgniter\Debug\Exceptions +class RestApiExceptions extends Exceptions { protected function render(Throwable $exception, int $statusCode): void { diff --git a/modules/Api/Rest/V1/Filters/ApiFilter.php b/modules/Api/Rest/V1/Filters/ApiFilter.php index 85f7e538..ba03bc2e 100644 --- a/modules/Api/Rest/V1/Filters/ApiFilter.php +++ b/modules/Api/Rest/V1/Filters/ApiFilter.php @@ -21,7 +21,7 @@ class ApiFilter implements FilterInterface public function before(RequestInterface $request, $arguments = null) { /** @var RestApi $restApiConfig */ - $restApiConfig = config(RestApi::class); + $restApiConfig = config('RestApi'); if (! $restApiConfig->enabled) { throw PageNotFoundException::forPageNotFound(); diff --git a/modules/Auth/Auth.php b/modules/Auth/Auth.php index 35a5e31d..2e123609 100644 --- a/modules/Auth/Auth.php +++ b/modules/Auth/Auth.php @@ -6,8 +6,6 @@ namespace Modules\Auth; use CodeIgniter\Router\RouteCollection; use CodeIgniter\Shield\Auth as ShieldAuth; -use Modules\Auth\Config\Auth as AuthConfig; -use Modules\Auth\Config\AuthRoutes; class Auth extends ShieldAuth { @@ -18,13 +16,15 @@ class Auth extends ShieldAuth * Usage (in Config/Routes.php): * - auth()->routes($routes); * - auth()->routes($routes, ['except' => ['login', 'register']]) + * + * @param array{except?:list} $config */ public function routes(RouteCollection &$routes, array $config = []): void { - $authRoutes = config(AuthRoutes::class) + $authRoutes = config('AuthRoutes') ->routes; - $routes->group(config(AuthConfig::class)->gateway, [ + $routes->group(config('Auth')->gateway, [ 'namespace' => 'Modules\Auth\Controllers', ], static function (RouteCollection $routes) use ($authRoutes, $config): void { foreach ($authRoutes as $name => $row) { diff --git a/modules/Auth/Commands/RolesDoc.php b/modules/Auth/Commands/RolesDoc.php index 6e15583e..00732a53 100644 --- a/modules/Auth/Commands/RolesDoc.php +++ b/modules/Auth/Commands/RolesDoc.php @@ -44,7 +44,12 @@ class RolesDoc extends BaseCommand { // loop over all files in path $defaultFile = glob(ROOTPATH . 'docs/src/getting-started/auth.md'); - $localizedFiles = glob(ROOTPATH . 'docs/src/**/getting-started/auth.md') ?? []; + $localizedFiles = glob(ROOTPATH . 'docs/src/**/getting-started/auth.md'); + + if (! $localizedFiles) { + $localizedFiles = []; + } + $files = array_merge($defaultFile, $localizedFiles); CLI::write(implode(', ', $files)); @@ -74,7 +79,7 @@ class RolesDoc extends BaseCommand } } - protected function handleInstanceRoles($authGroups, string $fileContents, string $pattern): string + protected function handleInstanceRoles(AuthGroups $authGroups, string $fileContents, string $pattern): string { $instanceMatrix = $authGroups->matrix; return $this->renderCommentBlock( @@ -88,7 +93,7 @@ class RolesDoc extends BaseCommand ); } - protected function handleInstancePermissions($authGroups, string $fileContents, string $pattern): string + protected function handleInstancePermissions(AuthGroups $authGroups, string $fileContents, string $pattern): string { return $this->renderCommentBlock( $fileContents, @@ -101,7 +106,7 @@ class RolesDoc extends BaseCommand ); } - protected function handlePodcastRoles($authGroups, string $fileContents, string $pattern): string + protected function handlePodcastRoles(AuthGroups $authGroups, string $fileContents, string $pattern): string { $podcastMatrix = $authGroups->podcastMatrix; return $this->renderCommentBlock( @@ -115,7 +120,7 @@ class RolesDoc extends BaseCommand ); } - protected function handlePodcastPermissions($authGroups, string $fileContents, string $pattern): string + protected function handlePodcastPermissions(AuthGroups $authGroups, string $fileContents, string $pattern): string { return $this->renderCommentBlock( $fileContents, @@ -128,6 +133,10 @@ class RolesDoc extends BaseCommand ); } + /** + * @param array $tableHeading + * @param array|array> $data + */ private function renderCommentBlock( string $fileContents, string $pattern, @@ -171,13 +180,9 @@ class RolesDoc extends BaseCommand return $newFileContents; } - private function detectLocaleFromPath($fileKey): string + private function detectLocaleFromPath(string $fileKey): string { - preg_match( - '~docs\/src\/(?:([a-z]{2}(?:-[A-Za-z]{2,})?)\/)getting-started\/auth\.md~', - (string) $fileKey, - $match - ); + preg_match('~docs\/src\/(?:([a-z]{2}(?:-[A-Za-z]{2,})?)\/)getting-started\/auth\.md~', $fileKey, $match); if ($match === []) { return 'en'; diff --git a/modules/Auth/Config/Auth.php b/modules/Auth/Config/Auth.php index 44250914..fd935745 100644 --- a/modules/Auth/Config/Auth.php +++ b/modules/Auth/Config/Auth.php @@ -6,8 +6,9 @@ namespace Modules\Auth\Config; use CodeIgniter\Shield\Authentication\Actions\ActionInterface; use CodeIgniter\Shield\Authentication\Actions\Email2FA; +use CodeIgniter\Shield\Authentication\AuthenticatorInterface; use CodeIgniter\Shield\Config\Auth as ShieldAuth; -use Modules\Admin\Config\Admin; +use CodeIgniter\Shield\Entities\User; use Modules\Auth\Models\UserModel; class Auth extends ShieldAuth @@ -123,7 +124,7 @@ class Auth extends ShieldAuth { parent::__construct(); - $adminGateway = config(Admin::class) + $adminGateway = config('Admin') ->gateway; $this->redirects = [ @@ -155,14 +156,16 @@ class Auth extends ShieldAuth // activate user upon magic-link login as it is done via email if (! auth()->user()->active) { - /** @var Session $authenticator */ + /** @var AuthenticatorInterface $authenticator */ $authenticator = auth('session') ->getAuthenticator(); $user = $authenticator->getUser(); - // Set the user active now - $user->activate(); + if ($user instanceof User) { + // Set the user active now + $user->activate(); + } } // prompt user to change their password diff --git a/modules/Auth/Config/AuthGroups.php b/modules/Auth/Config/AuthGroups.php index 869ae99c..06fe419b 100644 --- a/modules/Auth/Config/AuthGroups.php +++ b/modules/Auth/Config/AuthGroups.php @@ -200,7 +200,7 @@ class AuthGroups extends ShieldAuthGroups /** * Fill groups, permissions and matrix based on */ - public function __construct($locale = null) + public function __construct() { parent::__construct(); @@ -228,7 +228,7 @@ class AuthGroups extends ShieldAuthGroups */ $podcasts = (new PodcastModel())->findAll(); foreach ($podcasts as $podcast) { - $this->generatePodcastAuthorizations($podcast->id, $locale); + $this->generatePodcastAuthorizations($podcast->id); } } diff --git a/modules/Auth/Config/AuthRoutes.php b/modules/Auth/Config/AuthRoutes.php index 2a546139..8e7540a2 100644 --- a/modules/Auth/Config/AuthRoutes.php +++ b/modules/Auth/Config/AuthRoutes.php @@ -8,6 +8,9 @@ use CodeIgniter\Shield\Config\AuthRoutes as ShieldAuthRoutes; class AuthRoutes extends ShieldAuthRoutes { + /** + * @var array>> + */ public array $routes = [ 'register' => [ ['get', 'register', 'RegisterController::registerView', 'register'], diff --git a/modules/Auth/Config/AuthToken.php b/modules/Auth/Config/AuthToken.php index c82f653f..4f56dc76 100644 --- a/modules/Auth/Config/AuthToken.php +++ b/modules/Auth/Config/AuthToken.php @@ -31,6 +31,8 @@ class AuthToken extends ShieldAuthToken * The name of Header that the Authorization token should be found. * According to the specs, this should be `Authorization`, but rare * circumstances might need a different header. + * + * @var array */ public array $authenticatorHeader = [ 'tokens' => 'Authorization', diff --git a/modules/Auth/Config/Routes.php b/modules/Auth/Config/Routes.php index d2a69999..4c374982 100644 --- a/modules/Auth/Config/Routes.php +++ b/modules/Auth/Config/Routes.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Modules\Auth\Config; use CodeIgniter\Router\RouteCollection; -use Modules\Admin\Config\Admin; /** * @var RouteCollection $routes @@ -16,7 +15,7 @@ service('auth') // Admin routes for users and podcast contributors $routes->group( - config(Admin::class) + config('Admin') ->gateway, [ 'namespace' => 'Modules\Auth\Controllers', diff --git a/modules/Auth/Config/Services.php b/modules/Auth/Config/Services.php index 0771681e..1ef66bae 100644 --- a/modules/Auth/Config/Services.php +++ b/modules/Auth/Config/Services.php @@ -6,7 +6,6 @@ namespace Modules\Auth\Config; use Config\Services as BaseService; use Modules\Auth\Auth; -use Modules\Auth\Config\Auth as AuthConfig; class Services extends BaseService { @@ -20,7 +19,7 @@ class Services extends BaseService return self::getSharedInstance('auth'); } - $config = config(AuthConfig::class); + $config = config('Auth'); return new Auth($config); } diff --git a/modules/Auth/Controllers/ContributorController.php b/modules/Auth/Controllers/ContributorController.php index 77c5162c..da5989df 100644 --- a/modules/Auth/Controllers/ContributorController.php +++ b/modules/Auth/Controllers/ContributorController.php @@ -115,6 +115,7 @@ class ContributorController extends BaseController public function attemptCreate(): RedirectResponse { + /** @var User $user */ $user = (new UserModel())->find((int) $this->request->getPost('user')); if (get_podcast_group($user, $this->podcast->id)) { diff --git a/modules/Auth/Controllers/MagicLinkController.php b/modules/Auth/Controllers/MagicLinkController.php index 46170271..609aed15 100644 --- a/modules/Auth/Controllers/MagicLinkController.php +++ b/modules/Auth/Controllers/MagicLinkController.php @@ -8,8 +8,7 @@ use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\Shield\Controllers\MagicLinkController as ShieldMagicLinkController; -use Modules\Auth\Config\Auth; -use Modules\Auth\Models\UserModel; +use CodeIgniter\Shield\Entities\User; use Psr\Log\LoggerInterface; use ViewThemes\Theme; @@ -33,7 +32,7 @@ class MagicLinkController extends ShieldMagicLinkController public function setPasswordView(): string | RedirectResponse { if (! session('magicLogin')) { - return redirect()->to(config(Auth::class)->loginRedirect()); + return redirect()->to(config('Auth')->loginRedirect()); } return view(setting('Auth.views')['magic-link-set-password']); @@ -54,17 +53,16 @@ class MagicLinkController extends ShieldMagicLinkController $validData = $this->validator->getValidated(); - // set new password to user - auth() - ->user() - ->password = $validData['new_password']; + $user = auth() + ->user(); - $userModel = new UserModel(); - if (! $userModel->update(auth()->user()->id, auth()->user())) { - return redirect() - ->back() - ->withInput() - ->with('errors', $userModel->errors()); + if ($user instanceof User) { + // set new password to user + $user->password = $validData['new_password']; + + $userModel = auth() + ->getProvider(); + $userModel->save($user); } // remove magic login session to reinstate normal check @@ -73,7 +71,7 @@ class MagicLinkController extends ShieldMagicLinkController } // Success! - return redirect()->to(config(Auth::class)->loginRedirect()) + return redirect()->to(config('Auth')->loginRedirect()) ->with('message', lang('MyAccount.messages.passwordChangeSuccess')); } } diff --git a/modules/Auth/Controllers/MyAccountController.php b/modules/Auth/Controllers/MyAccountController.php index 4e0d2687..87cd97b1 100644 --- a/modules/Auth/Controllers/MyAccountController.php +++ b/modules/Auth/Controllers/MyAccountController.php @@ -11,8 +11,8 @@ declare(strict_types=1); namespace Modules\Auth\Controllers; use CodeIgniter\HTTP\RedirectResponse; +use CodeIgniter\Shield\Entities\User; use Modules\Admin\Controllers\BaseController; -use Modules\Auth\Models\UserModel; class MyAccountController extends BaseController { @@ -60,17 +60,16 @@ class MyAccountController extends BaseController ->with('error', lang('MyAccount.messages.wrongPasswordError')); } - // set new password to user - auth() - ->user() - ->password = $validData['new_password']; + $user = auth() + ->user(); - $userModel = new UserModel(); - if (! $userModel->update(auth()->user()->id, auth()->user())) { - return redirect() - ->back() - ->withInput() - ->with('errors', $userModel->errors()); + if ($user instanceof User) { + // set new password to user + $user->password = $validData['new_password']; + + $userModel = auth() + ->getProvider(); + $userModel->save($user); } // Success! diff --git a/modules/Auth/Controllers/UserController.php b/modules/Auth/Controllers/UserController.php index 729f1d0a..98a07f3f 100644 --- a/modules/Auth/Controllers/UserController.php +++ b/modules/Auth/Controllers/UserController.php @@ -16,7 +16,6 @@ use CodeIgniter\I18n\Time; use CodeIgniter\Shield\Authentication\Authenticators\Session; use CodeIgniter\Shield\Entities\User; use CodeIgniter\Shield\Exceptions\ValidationException; -use CodeIgniter\Shield\Models\UserIdentityModel; use Modules\Admin\Controllers\BaseController; use Modules\Auth\Models\UserModel; @@ -115,8 +114,7 @@ class UserController extends BaseController // **** SEND WELCOME LINK FOR FIRST LOGIN **** - /** @var UserIdentityModel $identityModel */ - $identityModel = model(UserIdentityModel::class); + $identityModel = model('UserIdentityModel'); // Delete any previous magic-link identities $identityModel->deleteIdentitiesByType($user, Session::ID_TYPE_MAGIC_LINK); @@ -137,7 +135,7 @@ class UserController extends BaseController $email->setTo($user->email); $email->setSubject(lang('Auth.welcomeSubject', [ 'siteName' => setting('App.siteName'), - ], null, false)); + ])); $email->setMessage(view(setting('Auth.views')['welcome-email'], [ 'token' => $token, ], [ diff --git a/modules/Auth/Models/UserModel.php b/modules/Auth/Models/UserModel.php index 2fbdbd07..16ac112a 100644 --- a/modules/Auth/Models/UserModel.php +++ b/modules/Auth/Models/UserModel.php @@ -16,7 +16,7 @@ use CodeIgniter\Shield\Models\UserModel as ShieldUserModel; class UserModel extends ShieldUserModel { /** - * @var string[] + * @var list */ protected $allowedFields = [ 'username', diff --git a/modules/Fediverse/Commands/Broadcast.php b/modules/Fediverse/Commands/Broadcast.php index 6f74f5d9..559dc682 100644 --- a/modules/Fediverse/Commands/Broadcast.php +++ b/modules/Fediverse/Commands/Broadcast.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Modules\Fediverse\Commands; use CodeIgniter\CLI\BaseCommand; -use Modules\Fediverse\Models\ActivityModel; class Broadcast extends BaseCommand { @@ -20,7 +19,7 @@ class Broadcast extends BaseCommand helper('fediverse'); // retrieve scheduled activities from database - $scheduledActivities = model(ActivityModel::class, false) + $scheduledActivities = model('ActivityModel', false) ->getScheduledActivities(); // Send activity to all followers @@ -43,7 +42,7 @@ class Broadcast extends BaseCommand } // set activity post to delivered - model(ActivityModel::class, false) + model('ActivityModel', false) ->update($scheduledActivity->id, [ 'status' => 'delivered', ]); diff --git a/modules/Fediverse/Config/Registrar.php b/modules/Fediverse/Config/Registrar.php index e4a43826..3c28460f 100644 --- a/modules/Fediverse/Config/Registrar.php +++ b/modules/Fediverse/Config/Registrar.php @@ -8,6 +8,9 @@ use Modules\Fediverse\Filters\FediverseFilter; class Registrar { + /** + * @return array + */ public static function Filters(): array { return [ diff --git a/modules/Fediverse/Controllers/ActivityPubController.php b/modules/Fediverse/Controllers/ActivityPubController.php index d8fbbe86..bceee417 100644 --- a/modules/Fediverse/Controllers/ActivityPubController.php +++ b/modules/Fediverse/Controllers/ActivityPubController.php @@ -11,11 +11,11 @@ declare(strict_types=1); namespace Modules\Fediverse\Controllers; use CodeIgniter\Controller; -use CodeIgniter\HTTP\Response; +use CodeIgniter\HTTP\ResponseInterface; class ActivityPubController extends Controller { - public function preflight(): Response + public function preflight(): ResponseInterface { return $this->response->setHeader('Access-Control-Allow-Origin', '*') // for allowing any domain, insecure ->setHeader('Access-Control-Allow-Headers', '*') // for allowing any headers, insecure diff --git a/modules/Fediverse/Controllers/ActorController.php b/modules/Fediverse/Controllers/ActorController.php index dd13c638..f5b6d186 100644 --- a/modules/Fediverse/Controllers/ActorController.php +++ b/modules/Fediverse/Controllers/ActorController.php @@ -26,7 +26,7 @@ use Modules\Fediverse\Objects\OrderedCollectionPage; class ActorController extends Controller { /** - * @var string[] + * @var list */ protected $helpers = ['fediverse']; @@ -36,7 +36,7 @@ class ActorController extends Controller public function __construct() { - $this->config = config(Fediverse::class); + $this->config = config('Fediverse'); } public function _remap(string $method, string ...$params): mixed @@ -89,7 +89,6 @@ class ActorController extends Controller ); // switch/case on activity type - /** @phpstan-ignore-next-line */ switch ($payload->type) { case 'Create': if ($payload->object->type === 'Note') { @@ -192,7 +191,6 @@ class ActorController extends Controller ->setJSON([]); case 'Undo': // switch/case on the type of activity to undo - /** @phpstan-ignore-next-line */ switch ($payload->object->type) { case 'Follow': // revert side-effect by removing follow from database diff --git a/modules/Fediverse/Controllers/BlockController.php b/modules/Fediverse/Controllers/BlockController.php index 6ab44e17..c279ce4e 100644 --- a/modules/Fediverse/Controllers/BlockController.php +++ b/modules/Fediverse/Controllers/BlockController.php @@ -17,7 +17,7 @@ use Exception; class BlockController extends Controller { /** - * @var string[] + * @var list */ protected $helpers = ['fediverse']; diff --git a/modules/Fediverse/Controllers/NodeInfo2Controller.php b/modules/Fediverse/Controllers/NodeInfo2Controller.php index 753f66f3..4457c600 100644 --- a/modules/Fediverse/Controllers/NodeInfo2Controller.php +++ b/modules/Fediverse/Controllers/NodeInfo2Controller.php @@ -12,7 +12,6 @@ namespace Modules\Fediverse\Controllers; use CodeIgniter\Controller; use CodeIgniter\HTTP\ResponseInterface; -use Modules\Auth\Config\Auth; class NodeInfo2Controller extends Controller { @@ -36,7 +35,7 @@ class NodeInfo2Controller extends Controller 'version' => CP_VERSION, ], 'protocols' => ['activitypub'], - 'openRegistrations' => config(Auth::class) + 'openRegistrations' => config('Auth') ->allowRegistration, 'usage' => [ 'users' => [ diff --git a/modules/Fediverse/Controllers/PostController.php b/modules/Fediverse/Controllers/PostController.php index f188d013..c67ed66c 100644 --- a/modules/Fediverse/Controllers/PostController.php +++ b/modules/Fediverse/Controllers/PostController.php @@ -14,7 +14,6 @@ use CodeIgniter\Controller; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RedirectResponse; -use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\I18n\Time; use Modules\Fediverse\Config\Fediverse; @@ -32,7 +31,7 @@ class PostController extends Controller protected $request; /** - * @var string[] + * @var list */ protected $helpers = ['fediverse']; @@ -45,7 +44,7 @@ class PostController extends Controller public function __construct() { - $this->config = config(Fediverse::class); + $this->config = config('Fediverse'); } public function _remap(string $method, string ...$params): mixed @@ -65,7 +64,7 @@ class PostController extends Controller return $this->{$method}(...$params); } - public function index(): Response + public function index(): ResponseInterface { $noteObjectClass = $this->config->noteObject; $noteObject = new $noteObjectClass($this->post); @@ -75,7 +74,7 @@ class PostController extends Controller ->setBody($noteObject->toJSON()); } - public function replies(): Response + public function replies(): ResponseInterface { /** * get post replies @@ -167,7 +166,7 @@ class PostController extends Controller ->getActorById($validData['actor_id']); model('FavouriteModel', false) - ->toggleFavourite($actor, $this->post->id); + ->toggleFavourite($actor, $this->post); return redirect()->back(); } diff --git a/modules/Fediverse/Core/AbstractObject.php b/modules/Fediverse/Core/AbstractObject.php index cfe7ff53..7870f60c 100644 --- a/modules/Fediverse/Core/AbstractObject.php +++ b/modules/Fediverse/Core/AbstractObject.php @@ -24,7 +24,7 @@ abstract class AbstractObject } /** - * @return array + * @return array */ public function toArray(): array { diff --git a/modules/Fediverse/Entities/Activity.php b/modules/Fediverse/Entities/Activity.php index 6f1bd8e2..ba017f16 100644 --- a/modules/Fediverse/Entities/Activity.php +++ b/modules/Fediverse/Entities/Activity.php @@ -41,7 +41,7 @@ class Activity extends UuidEntity protected $uuids = ['id', 'post_id']; /** - * @var string[] + * @var list */ protected $dates = ['scheduled_at', 'created_at']; diff --git a/modules/Fediverse/Entities/Notification.php b/modules/Fediverse/Entities/Notification.php index d23bd66c..5e5f89d0 100644 --- a/modules/Fediverse/Entities/Notification.php +++ b/modules/Fediverse/Entities/Notification.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace Modules\Fediverse\Entities; +use CodeIgniter\I18n\Time; use Michalsn\Uuid\UuidEntity; use Modules\Fediverse\Models\ActorModel; use Modules\Fediverse\Models\PostModel; @@ -46,7 +47,7 @@ class Notification extends UuidEntity protected $uuids = ['post_id', 'activity_id']; /** - * @var string[] + * @var list */ protected $dates = ['read_at', 'created_at', 'updated_at']; diff --git a/modules/Fediverse/Entities/Post.php b/modules/Fediverse/Entities/Post.php index f0990601..f791d57f 100644 --- a/modules/Fediverse/Entities/Post.php +++ b/modules/Fediverse/Entities/Post.php @@ -65,7 +65,7 @@ class Post extends UuidEntity protected $uuids = ['id', 'in_reply_to_id', 'reblog_of_id']; /** - * @var string[] + * @var list */ protected $dates = ['published_at', 'created_at']; diff --git a/modules/Fediverse/Filters/FediverseFilter.php b/modules/Fediverse/Filters/FediverseFilter.php index 3b99cca3..355bfa3a 100644 --- a/modules/Fediverse/Filters/FediverseFilter.php +++ b/modules/Fediverse/Filters/FediverseFilter.php @@ -44,6 +44,7 @@ class FediverseFilter implements FilterInterface } if (in_array('verify-blocks', $params, true)) { + // @phpstan-ignore-next-line $payload = $request->getJSON(); $actorUri = $payload->actor; diff --git a/modules/Fediverse/Helpers/fediverse_helper.php b/modules/Fediverse/Helpers/fediverse_helper.php index 195149e4..0a020a58 100644 --- a/modules/Fediverse/Helpers/fediverse_helper.php +++ b/modules/Fediverse/Helpers/fediverse_helper.php @@ -17,7 +17,6 @@ use Modules\Fediverse\ActivityRequest; use Modules\Fediverse\Core\ObjectType; use Modules\Fediverse\Entities\Actor; use Modules\Fediverse\Entities\PreviewCard; -use Modules\Fediverse\Models\ActivityModel; if (! function_exists('get_webfinger_data')) { /** @@ -79,7 +78,7 @@ if (! function_exists('accept_follow')) { $db = db_connect(); $db->transStart(); - $activityModel = model(ActivityModel::class, false); + $activityModel = model('ActivityModel', false); $activityId = $activityModel->newActivity( 'Accept', $actor->id, @@ -488,7 +487,7 @@ if (! function_exists('linkify')) { return preg_replace_callback( '~<(\d+)>~', static function (array $match) use (&$links): string { - return $links[$match[1] - 1]; + return $links[(int) $match[1] - 1]; }, (string) $text, ); diff --git a/modules/Fediverse/HttpSignature.php b/modules/Fediverse/HttpSignature.php index b2287cab..d0399038 100644 --- a/modules/Fediverse/HttpSignature.php +++ b/modules/Fediverse/HttpSignature.php @@ -142,9 +142,10 @@ class HttpSignature $strings[] = sprintf( '(request-target): %s %s%s', $this->request->getMethod(), - '/' . $this->request->uri->getPath(), - $this->request->uri->getQuery() !== '' - ? '?' . $this->request->uri->getQuery() + '/' . $this->request->getUri()->getPath(), + $this->request->getUri() + ->getQuery() !== '' + ? '?' . $this->request->getUri()->getQuery() : '', ); diff --git a/modules/Fediverse/Models/ActivityModel.php b/modules/Fediverse/Models/ActivityModel.php index ada9b40d..47341b93 100644 --- a/modules/Fediverse/Models/ActivityModel.php +++ b/modules/Fediverse/Models/ActivityModel.php @@ -14,7 +14,6 @@ use CodeIgniter\Database\BaseResult; use CodeIgniter\I18n\Time; use DateTimeInterface; use Michalsn\Uuid\UuidModel; -use Modules\Fediverse\Config\Fediverse; use Modules\Fediverse\Entities\Activity; class ActivityModel extends UuidModel @@ -35,17 +34,17 @@ class ActivityModel extends UuidModel protected $uuidFields = ['id', 'post_id']; /** - * @var string[] + * @var list */ protected $afterInsert = ['notify']; /** - * @var string[] + * @var list */ protected $afterUpdate = ['notify']; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', @@ -78,7 +77,7 @@ class ActivityModel extends UuidModel public function getActivityById(string $activityId): ?Activity { $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "activity#{$activityId}"; if (! ($found = cache($cacheName))) { $found = $this->find($activityId); @@ -133,11 +132,12 @@ class ActivityModel extends UuidModel } /** - * @param array> $data + * @param array $data * @return array> */ protected function notify(array $data): array { + /** @var ?Activity $activity */ $activity = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']); if (! $activity instanceof Activity) { diff --git a/modules/Fediverse/Models/ActorModel.php b/modules/Fediverse/Models/ActorModel.php index 53564f61..28079a62 100644 --- a/modules/Fediverse/Models/ActorModel.php +++ b/modules/Fediverse/Models/ActorModel.php @@ -12,7 +12,6 @@ namespace Modules\Fediverse\Models; use CodeIgniter\Events\Events; use CodeIgniter\Model; -use Modules\Fediverse\Config\Fediverse; use Modules\Fediverse\Entities\Actor; class ActorModel extends Model @@ -23,7 +22,7 @@ class ActorModel extends Model protected $table = 'fediverse_actors'; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', @@ -99,7 +98,7 @@ class ActorModel extends Model { $hashedActorUri = md5($actorUri); $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "actor-{$hashedActorUri}"; if (! ($found = cache($cacheName))) { $found = $this->where('uri', $actorUri) @@ -118,7 +117,7 @@ class ActorModel extends Model public function getFollowers(int $actorId): array { $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "actor#{$actorId}_followers"; if (! ($found = cache($cacheName))) { $found = $this->join('fediverse_follows', 'fediverse_follows.actor_id = id', 'inner') @@ -151,7 +150,7 @@ class ActorModel extends Model */ public function getBlockedActors(): array { - $cacheName = config(Fediverse::class) + $cacheName = config('Fediverse') ->cachePrefix . 'blocked_actors'; if (! ($found = cache($cacheName))) { $found = $this->where('is_blocked', 1) @@ -166,7 +165,7 @@ class ActorModel extends Model public function blockActor(int $actorId): void { - $prefix = config(Fediverse::class) + $prefix = config('Fediverse') ->cachePrefix; cache() ->delete($prefix . 'blocked_actors'); @@ -182,7 +181,7 @@ class ActorModel extends Model public function unblockActor(int $actorId): void { - $prefix = config(Fediverse::class) + $prefix = config('Fediverse') ->cachePrefix; cache() ->delete($prefix . 'blocked_actors'); @@ -200,10 +199,11 @@ class ActorModel extends Model { helper('fediverse'); - $cacheName = config(Fediverse::class) + $cacheName = config('Fediverse') ->cachePrefix . 'blocked_actors'; if (! ($found = cache($cacheName))) { - $result = $this->select('COUNT(*) as total_local_actors') + $result = $this->builder() + ->select('COUNT(*) as total_local_actors') ->where('domain', get_current_domain()) ->get() ->getResultArray(); @@ -221,15 +221,13 @@ class ActorModel extends Model { helper('fediverse'); - $cacheName = config(Fediverse::class) + $cacheName = config('Fediverse') ->cachePrefix . 'blocked_actors'; if (! ($found = cache($cacheName))) { - $tablePrefix = config(Database::class) + $tablePrefix = config('Database') ->default['DBPrefix']; - $result = $this->select( - 'COUNT(DISTINCT `' . $tablePrefix . 'fediverse_actors`.`id`) as `total_active_actors`', - false - ) + $result = $this->builder() + ->select('COUNT(DISTINCT `' . $tablePrefix . 'fediverse_actors`.`id`) as `total_active_actors`', false) ->join( $tablePrefix . 'fediverse_posts', $tablePrefix . 'fediverse_actors.id = ' . $tablePrefix . 'fediverse_posts.actor_id', @@ -300,7 +298,7 @@ class ActorModel extends Model public function clearCache(Actor $actor): void { - $cachePrefix = config(Fediverse::class) + $cachePrefix = config('Fediverse') ->cachePrefix; $hashedActorUri = md5($actor->uri); $cacheDomain = str_replace(':', '', $actor->domain); diff --git a/modules/Fediverse/Models/BlockedDomainModel.php b/modules/Fediverse/Models/BlockedDomainModel.php index e2052243..e5444126 100644 --- a/modules/Fediverse/Models/BlockedDomainModel.php +++ b/modules/Fediverse/Models/BlockedDomainModel.php @@ -13,7 +13,6 @@ namespace Modules\Fediverse\Models; use CodeIgniter\Database\BaseResult; use CodeIgniter\Events\Events; use CodeIgniter\Model; -use Modules\Fediverse\Config\Fediverse; use Modules\Fediverse\Entities\BlockedDomain; class BlockedDomainModel extends Model @@ -29,7 +28,7 @@ class BlockedDomainModel extends Model protected $primaryKey = 'name'; /** - * @var string[] + * @var list */ protected $allowedFields = ['name']; @@ -57,7 +56,7 @@ class BlockedDomainModel extends Model */ public function getBlockedDomains(): array { - $cacheName = config(Fediverse::class) + $cacheName = config('Fediverse') ->cachePrefix . 'blocked_domains'; if (! ($found = cache($cacheName))) { $found = $this->findAll(); @@ -73,7 +72,7 @@ class BlockedDomainModel extends Model { $hashedDomainName = md5($name); $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "domain#{$hashedDomainName}_isBlocked"; if (! ($found = cache($cacheName))) { @@ -89,7 +88,7 @@ class BlockedDomainModel extends Model public function blockDomain(string $name): int | bool { $hashedDomain = md5($name); - $prefix = config(Fediverse::class) + $prefix = config('Fediverse') ->cachePrefix; cache() ->delete($prefix . "domain#{$hashedDomain}_isBlocked"); @@ -121,7 +120,7 @@ class BlockedDomainModel extends Model public function unblockDomain(string $name): BaseResult | bool { $hashedDomain = md5($name); - $prefix = config(Fediverse::class) + $prefix = config('Fediverse') ->cachePrefix; cache() ->delete($prefix . "domain#{$hashedDomain}_isBlocked"); diff --git a/modules/Fediverse/Models/FavouriteModel.php b/modules/Fediverse/Models/FavouriteModel.php index bdb20fd8..315fa8e5 100644 --- a/modules/Fediverse/Models/FavouriteModel.php +++ b/modules/Fediverse/Models/FavouriteModel.php @@ -31,7 +31,7 @@ class FavouriteModel extends UuidModel protected $uuidFields = ['post_id']; /** - * @var string[] + * @var list */ protected $allowedFields = ['actor_id', 'post_id']; @@ -57,6 +57,7 @@ class FavouriteModel extends UuidModel ]); model('PostModel', false) + ->builder() ->where('id', service('uuid') ->fromString($post->id) ->getBytes()) ->increment('favourites_count'); @@ -97,6 +98,7 @@ class FavouriteModel extends UuidModel $this->db->transStart(); model('PostModel', false) + ->builder() ->where('id', service('uuid') ->fromString($post->id) ->getBytes()) ->decrement('favourites_count'); diff --git a/modules/Fediverse/Models/FollowModel.php b/modules/Fediverse/Models/FollowModel.php index 15595d29..93c6cf55 100644 --- a/modules/Fediverse/Models/FollowModel.php +++ b/modules/Fediverse/Models/FollowModel.php @@ -27,7 +27,7 @@ class FollowModel extends Model protected $table = 'fediverse_follows'; /** - * @var string[] + * @var list */ protected $allowedFields = ['actor_id', 'target_actor_id']; @@ -59,6 +59,7 @@ class FollowModel extends Model // increment followers_count for target actor model('ActorModel', false) + ->builder() ->where('id', $targetActor->id) ->increment('followers_count'); @@ -114,6 +115,7 @@ class FollowModel extends Model // decrement followers_count for target actor model('ActorModel', false) + ->builder() ->where('id', $targetActor->id) ->decrement('followers_count'); diff --git a/modules/Fediverse/Models/NotificationModel.php b/modules/Fediverse/Models/NotificationModel.php index 53d4f0eb..813313ac 100644 --- a/modules/Fediverse/Models/NotificationModel.php +++ b/modules/Fediverse/Models/NotificationModel.php @@ -41,7 +41,7 @@ class NotificationModel extends UuidModel protected $uuidFields = ['post_id', 'activity_id']; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'actor_id', diff --git a/modules/Fediverse/Models/PostModel.php b/modules/Fediverse/Models/PostModel.php index ac409844..cec9dcf8 100644 --- a/modules/Fediverse/Models/PostModel.php +++ b/modules/Fediverse/Models/PostModel.php @@ -20,7 +20,6 @@ use Modules\Fediverse\Activities\AnnounceActivity; use Modules\Fediverse\Activities\CreateActivity; use Modules\Fediverse\Activities\DeleteActivity; use Modules\Fediverse\Activities\UndoActivity; -use Modules\Fediverse\Config\Fediverse; use Modules\Fediverse\Entities\Actor; use Modules\Fediverse\Entities\Post; use Modules\Fediverse\Objects\TombstoneObject; @@ -43,7 +42,7 @@ class PostModel extends UuidModel protected $uuidFields = ['id', 'in_reply_to_id', 'reblog_of_id']; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', @@ -85,7 +84,7 @@ class PostModel extends UuidModel ]; /** - * @var string[] + * @var list */ protected $beforeInsert = ['setPostId']; @@ -98,7 +97,7 @@ class PostModel extends UuidModel { $hashedPostUri = md5($postUri); $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "post-{$hashedPostUri}"; if (! ($found = cache($cacheName))) { $found = $this->where('uri', $postUri) @@ -119,7 +118,7 @@ class PostModel extends UuidModel public function getActorPublishedPosts(int $actorId): array { $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "actor#{$actorId}_published_posts"; if (! ($found = cache($cacheName))) { @@ -146,7 +145,8 @@ class PostModel extends UuidModel */ public function getSecondsToNextUnpublishedPosts(int $actorId): int | false { - $result = $this->select('TIMESTAMPDIFF(SECOND, UTC_TIMESTAMP(), `published_at`) as timestamp_diff') + $result = $this->builder() + ->select('TIMESTAMPDIFF(SECOND, UTC_TIMESTAMP(), `published_at`) as timestamp_diff') ->where([ 'actor_id' => $actorId, ]) @@ -168,7 +168,7 @@ class PostModel extends UuidModel public function getPostReplies(string $postId, bool $withBlocked = false): array { $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "post#{$postId}_replies" . ($withBlocked ? '_withBlocked' : ''); @@ -200,7 +200,7 @@ class PostModel extends UuidModel public function getPostReblogs(string $postId): array { $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "post#{$postId}_reblogs"; if (! ($found = cache($cacheName))) { @@ -265,6 +265,7 @@ class PostModel extends UuidModel if ($post->in_reply_to_id === null) { // post is not a reply model('ActorModel', false) + ->builder() ->where('id', $post->actor_id) ->increment('posts_count'); @@ -277,7 +278,7 @@ class PostModel extends UuidModel $post->uri = url_to('post', esc($post->actor->username), $newPostId); $createActivity = new CreateActivity(); - $noteObjectClass = config(Fediverse::class) + $noteObjectClass = config('Fediverse') ->noteObject; $createActivity ->set('actor', $post->actor->uri) @@ -402,6 +403,7 @@ class PostModel extends UuidModel if ($post->in_reply_to_id === null && $post->reblog_of_id === null) { model('ActorModel', false) + ->builder() ->where('id', $post->actor_id) ->decrement('posts_count'); @@ -409,6 +411,7 @@ class PostModel extends UuidModel } elseif ($post->in_reply_to_id !== null) { // Post to remove is a reply model('PostModel', false) + ->builder() ->where('id', $this->uuid->fromString($post->in_reply_to_id) ->getBytes()) ->decrement('replies_count'); @@ -439,6 +442,7 @@ class PostModel extends UuidModel $postId = $this->addPost($reply, $createPreviewCard, $registerActivity); model('PostModel', false) + ->builder() ->where('id', $this->uuid->fromString($reply->in_reply_to_id) ->getBytes()) ->increment('replies_count'); @@ -471,10 +475,12 @@ class PostModel extends UuidModel $reblogId = $this->insert($reblog); model('ActorModel', false) + ->builder() ->where('id', $actor->id) ->increment('posts_count'); model('PostModel', false) + ->builder() ->where('id', $this->uuid->fromString($post->id)->getBytes()) ->increment('reblogs_count'); @@ -514,10 +520,12 @@ class PostModel extends UuidModel $this->db->transStart(); model('ActorModel', false) + ->builder() ->where('id', $reblogPost->actor_id) ->decrement('posts_count'); model('PostModel', false) + ->builder() ->where('id', $this->uuid->fromString($reblogPost->reblog_of_id) ->getBytes()) ->decrement('reblogs_count'); @@ -592,10 +600,11 @@ class PostModel extends UuidModel { helper('fediverse'); - $cacheName = config(Fediverse::class) + $cacheName = config('Fediverse') ->cachePrefix . 'blocked_actors'; if (! ($found = cache($cacheName))) { - $result = $this->select('COUNT(*) as total_local_posts') + $result = $this->builder() + ->select('COUNT(*) as total_local_posts') ->join('fediverse_actors', 'fediverse_actors.id = fediverse_posts.actor_id') ->where('fediverse_actors.domain', get_current_domain()) ->where('`published_at` <= UTC_TIMESTAMP()', null, false) @@ -629,7 +638,8 @@ class PostModel extends UuidModel public function resetReblogsCount(): int | false { - $postsReblogsCount = $this->select('fediverse_posts.id, COUNT(*) as `replies_count`') + $postsReblogsCount = $this->builder() + ->select('fediverse_posts.id, COUNT(*) as `replies_count`') ->join('fediverse_posts as p2', 'fediverse_posts.id = p2.reblog_of_id') ->groupBy('fediverse_posts.id') ->get() @@ -645,7 +655,8 @@ class PostModel extends UuidModel public function resetRepliesCount(): int | false { - $postsRepliesCount = $this->select('fediverse_posts.id, COUNT(*) as `replies_count`') + $postsRepliesCount = $this->builder() + ->select('fediverse_posts.id, COUNT(*) as `replies_count`') ->join('fediverse_posts as p2', 'fediverse_posts.id = p2.in_reply_to_id') ->groupBy('fediverse_posts.id') ->get() @@ -661,7 +672,7 @@ class PostModel extends UuidModel public function clearCache(Post $post): void { - $cachePrefix = config(Fediverse::class) + $cachePrefix = config('Fediverse') ->cachePrefix; $hashedPostUri = md5($post->uri); diff --git a/modules/Fediverse/Models/PreviewCardModel.php b/modules/Fediverse/Models/PreviewCardModel.php index ed333b1c..917fe215 100644 --- a/modules/Fediverse/Models/PreviewCardModel.php +++ b/modules/Fediverse/Models/PreviewCardModel.php @@ -12,7 +12,6 @@ namespace Modules\Fediverse\Models; use CodeIgniter\Database\BaseResult; use CodeIgniter\Model; -use Modules\Fediverse\Config\Fediverse; use Modules\Fediverse\Entities\PreviewCard; class PreviewCardModel extends Model @@ -23,7 +22,7 @@ class PreviewCardModel extends Model protected $table = 'fediverse_preview_cards'; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', @@ -58,7 +57,7 @@ class PreviewCardModel extends Model { $hashedPreviewCardUrl = md5($url); $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}"; if (! ($found = cache($cacheName))) { @@ -74,7 +73,7 @@ class PreviewCardModel extends Model public function getPostPreviewCard(string $postId): ?PreviewCard { $cacheName = - config(Fediverse::class) + config('Fediverse') ->cachePrefix . "post#{$postId}_preview_card"; if (! ($found = cache($cacheName))) { $found = $this->join( @@ -96,7 +95,7 @@ class PreviewCardModel extends Model { $hashedPreviewCardUrl = md5($url); cache() - ->delete(config(Fediverse::class) ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}"); + ->delete(config('Fediverse') ->cachePrefix . "preview_card-{$hashedPreviewCardUrl}"); return $this->delete($id); } diff --git a/modules/Fediverse/WebFinger.php b/modules/Fediverse/WebFinger.php index 788e0fdf..c66886ec 100644 --- a/modules/Fediverse/WebFinger.php +++ b/modules/Fediverse/WebFinger.php @@ -68,7 +68,7 @@ class WebFinger throw new Exception('Could not find actor'); } - $this->aliases = [$actor->id]; + $this->aliases = [$actor->uri]; $this->links = [ [ 'rel' => 'self', diff --git a/modules/Install/Commands/CreateSuperadmin.php b/modules/Install/Commands/CreateSuperadmin.php index f260ba3b..799b36b8 100644 --- a/modules/Install/Commands/CreateSuperadmin.php +++ b/modules/Install/Commands/CreateSuperadmin.php @@ -127,7 +127,6 @@ class CreateSuperadmin extends BaseCommand unset($passwordRules[$key]); } - /** @var Auth $config */ $config = config('Auth'); // Add `min_length` diff --git a/modules/Install/Config/Routes.php b/modules/Install/Config/Routes.php index 78012464..42aec944 100644 --- a/modules/Install/Config/Routes.php +++ b/modules/Install/Config/Routes.php @@ -10,7 +10,7 @@ use CodeIgniter\Router\RouteCollection; // Install Wizard routes $routes->group( - config(Install::class) + config('Install') ->gateway, [ 'namespace' => 'Modules\Install\Controllers', diff --git a/modules/Install/Controllers/InstallController.php b/modules/Install/Controllers/InstallController.php index 0991d11d..6a967e8c 100644 --- a/modules/Install/Controllers/InstallController.php +++ b/modules/Install/Controllers/InstallController.php @@ -17,13 +17,12 @@ use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\Shield\Entities\User; -use Config\App; +use CodeIgniter\Shield\Exceptions\ValidationException as ShieldValidationException; use Config\Database; use Config\Services; use Dotenv\Dotenv; use Dotenv\Exception\ValidationException; use Modules\Auth\Models\UserModel; -use Modules\Install\Config\Install; use Psr\Log\LoggerInterface; use Throwable; use ViewThemes\Theme; @@ -31,7 +30,7 @@ use ViewThemes\Theme; class InstallController extends Controller { /** - * @var string[] + * @var list */ protected $helpers = ['form', 'components', 'svg', 'misc', 'setting']; @@ -160,7 +159,7 @@ class InstallController extends Controller if (! $this->validate($rules)) { return redirect() - ->to((host_url() ?? config(App::class) ->baseURL) . config(Install::class)->gateway) + ->to((host_url() ?? config('App') ->baseURL) . config('Install')->gateway) ->withInput() ->with('errors', $this->validator->getErrors()); } @@ -180,7 +179,7 @@ class InstallController extends Controller helper('text'); // redirect to full install url with new baseUrl input - return redirect()->to(reduce_double_slashes($baseUrl . '/' . config(Install::class)->gateway)); + return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('Install')->gateway)); } public function databaseConfig(): string @@ -308,7 +307,7 @@ class InstallController extends Controller $userModel = new UserModel(); try { $userModel->save($user); - } catch (ValidationException) { + } catch (ShieldValidationException) { return redirect()->back() ->withInput() ->with('errors', $userModel->errors()); diff --git a/modules/Media/Config/Services.php b/modules/Media/Config/Services.php index 9291c80b..8b5fd814 100644 --- a/modules/Media/Config/Services.php +++ b/modules/Media/Config/Services.php @@ -6,7 +6,6 @@ namespace Modules\Media\Config; use CodeIgniter\Config\BaseService; use Exception; -use Modules\Media\Config\Media as MediaConfig; use Modules\Media\FileManagers\FileManagerInterface; /** @@ -27,7 +26,7 @@ class Services extends BaseService return self::getSharedInstance('file_manager'); } - $config = config(MediaConfig::class); + $config = config('Media'); $fileManagerClass = $config->fileManagers[$config->fileManager]; $fileManager = new $fileManagerClass($config); diff --git a/modules/Media/Entities/BaseMedia.php b/modules/Media/Entities/BaseMedia.php index 5509296c..f7566ab7 100644 --- a/modules/Media/Entities/BaseMedia.php +++ b/modules/Media/Entities/BaseMedia.php @@ -36,7 +36,7 @@ class BaseMedia extends Entity protected File $file; /** - * @var string[] + * @var list */ protected $dates = ['uploaded_at', 'updated_at']; diff --git a/modules/Media/Entities/Chapters.php b/modules/Media/Entities/Chapters.php index 0d20ab67..e3f2ef2e 100644 --- a/modules/Media/Entities/Chapters.php +++ b/modules/Media/Entities/Chapters.php @@ -32,7 +32,11 @@ class Chapters extends BaseMedia { parent::setFile($file); - $metadata = lstat((string) $file) ?? []; + $metadata = lstat((string) $file); + + if (! $metadata) { + $metadata = []; + } helper('filesystem'); diff --git a/modules/Media/Entities/Image.php b/modules/Media/Entities/Image.php index af381455..a5c265d9 100644 --- a/modules/Media/Entities/Image.php +++ b/modules/Media/Entities/Image.php @@ -12,6 +12,7 @@ namespace Modules\Media\Entities; use CodeIgniter\Files\File; use Config\Services; +use GdImage; /** * @property array $sizes @@ -137,6 +138,7 @@ class Image extends BaseMedia ->withFile($this->attributes['file']->getRealPath()) ->resize($size['width'], $size['height']); + /** @var GdImage $resizedImageResource */ $resizedImageResource = $resizedImage->getResource(); // set resolution to 72 by 72 for all sizes diff --git a/modules/Media/Entities/Transcript.php b/modules/Media/Entities/Transcript.php index 68d77048..56302e21 100644 --- a/modules/Media/Entities/Transcript.php +++ b/modules/Media/Entities/Transcript.php @@ -39,7 +39,11 @@ class Transcript extends BaseMedia { parent::setFile($file); - $metadata = lstat((string) $file) ?? []; + $metadata = lstat((string) $file); + + if (! $metadata) { + $metadata = []; + } helper('filesystem'); diff --git a/modules/Media/FileManagers/FS.php b/modules/Media/FileManagers/FS.php index 081598ba..dfca7ed0 100644 --- a/modules/Media/FileManagers/FS.php +++ b/modules/Media/FileManagers/FS.php @@ -144,6 +144,6 @@ class FS implements FileManagerInterface $uri = trim($uri, '/'); - return config(MediaConfig::class)->storage . '/' . config(MediaConfig::class)->root . '/' . $uri; + return config('Media')->storage . '/' . config('Media')->root . '/' . $uri; } } diff --git a/modules/Media/Helpers/url_helper.php b/modules/Media/Helpers/url_helper.php index 1e96cc96..aba33540 100644 --- a/modules/Media/Helpers/url_helper.php +++ b/modules/Media/Helpers/url_helper.php @@ -3,22 +3,21 @@ declare(strict_types=1); use CodeIgniter\HTTP\URI; -use Modules\Media\Config\Media; if (! function_exists('media_url')) { /** * Returns a media URL as defined by the Media config. * - * @param array|string $relativePath URI string or array of URI segments + * @param array|string $relativePath URI string or array of URI segments */ - function media_url($relativePath = '', ?string $scheme = null): string + function media_url(array|string $relativePath = '', ?string $scheme = null): string { // Convert array of segments to a string if (is_array($relativePath)) { $relativePath = implode('/', $relativePath); } - $uri = new URI(rtrim(config(Media::class)->baseURL, '/') . '/' . ltrim($relativePath)); + $uri = new URI(rtrim(config('Media')->baseURL, '/') . '/' . ltrim($relativePath)); return URI::createURIString( $scheme ?? $uri->getScheme(), diff --git a/modules/Media/Models/MediaModel.php b/modules/Media/Models/MediaModel.php index 4b042fd0..dda84e4b 100644 --- a/modules/Media/Models/MediaModel.php +++ b/modules/Media/Models/MediaModel.php @@ -48,7 +48,7 @@ class MediaModel extends Model protected $createdField = 'uploaded_at'; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', @@ -66,12 +66,12 @@ class MediaModel extends Model /** * clear cache before update if by any chance, the podcast name changes, so will the podcast link * - * @var string[] + * @var list */ protected $beforeUpdate = ['clearCache']; /** - * @var string[] + * @var list */ protected $beforeDelete = ['clearCache']; diff --git a/modules/Media/TranscriptParser.php b/modules/Media/TranscriptParser.php index 06b11465..c1828c3b 100644 --- a/modules/Media/TranscriptParser.php +++ b/modules/Media/TranscriptParser.php @@ -156,7 +156,7 @@ class TranscriptParser case VTT_STATE_TEXT: if (trim($line) === '') { $state = VTT_STATE_TIME; - //$subs[] = $sub; + // @phpstan-ignore-next-line } elseif ($subText !== '') { $subText .= PHP_EOL . $line; } else { diff --git a/modules/MediaClipper/Commands/Generate.php b/modules/MediaClipper/Commands/Generate.php index 3d625e28..9ceb0825 100644 --- a/modules/MediaClipper/Commands/Generate.php +++ b/modules/MediaClipper/Commands/Generate.php @@ -9,7 +9,6 @@ use CodeIgniter\CLI\BaseCommand; use CodeIgniter\Files\File; use CodeIgniter\I18n\Time; use Exception; -use Modules\Admin\Config\Admin; use Modules\MediaClipper\VideoClipper; class Generate extends BaseCommand @@ -25,7 +24,7 @@ class Generate extends BaseCommand // get number of running clips to prevent from having too much running in parallel // TODO: get the number of running ffmpeg processes directly from the machine? $runningVideoClips = (new ClipModel())->getRunningVideoClipsCount(); - if ($runningVideoClips >= config(Admin::class)->videoClipWorkers) { + if ($runningVideoClips >= config('Admin')->videoClipWorkers) { return; } diff --git a/modules/MediaClipper/VideoClipper.php b/modules/MediaClipper/VideoClipper.php index 86248a65..5f5a1292 100644 --- a/modules/MediaClipper/VideoClipper.php +++ b/modules/MediaClipper/VideoClipper.php @@ -15,7 +15,6 @@ use Exception; use GdImage; use Modules\Media\Entities\Transcript; use Modules\Media\FileManagers\FileManagerInterface; -use Modules\MediaClipper\Config\MediaClipper; /** * TODO: refactor this by splitting process modules into different classes (image generation, subtitles clip, video @@ -81,9 +80,9 @@ class VideoClipper ) { $this->duration = $end - $start; $this->episodeNumbering = $this->episodeNumbering($this->episode->number, $this->episode->season_number); - $this->dimensions = config(MediaClipper::class) + $this->dimensions = config('MediaClipper') ->formats[$format]; - $this->colors = config(MediaClipper::class) + $this->colors = config('MediaClipper') ->themes[$theme]; /** @var FileManagerInterface $fileManager */ @@ -239,7 +238,7 @@ class VideoClipper ) . ":text='%{pts\:gmtime\:{$this->start}\:%H\\\\\\\\\\:%M\\\\\\\\\\:%S\}':x={$this->dimensions['timestamp']['x']}:y={$this->dimensions['timestamp']['y']}:fontsize={$this->dimensions['timestamp']['fontsize']}:fontcolor=0x{$this->colors['timestampText']}:box=1:boxcolor=0x{$this->colors['timestampBg']}:boxborderw={$this->dimensions['timestamp']['padding']}[v3]", "color=c=0x{$this->colors['progressbar']}:s={$this->dimensions['width']}x{$this->dimensions['progressbar']['height']}[progressbar]", "[v3][progressbar]overlay=-w+(w/{$this->duration})*t:0:shortest=1:format=rgb,subtitles={$this->subtitlesClipOutput}:fontsdir=" . config( - MediaClipper::class + 'MediaClipper' )->fontsFolder . ":force_style='Fontname=" . self::FONTS['subtitles'] . ",Alignment=5,Fontsize={$this->dimensions['subtitles']['fontsize']},PrimaryColour=&H{$this->colors['subtitles']}&,BorderStyle=1,Outline=0,Shadow=0,MarginL={$this->dimensions['subtitles']['marginL']},MarginR={$this->dimensions['subtitles']['marginR']},MarginV={$this->dimensions['subtitles']['marginV']}'[outv]", "[6:v]scale={$this->dimensions['watermark']['width']}:{$this->dimensions['watermark']['height']}[watermark]", "color=0x{$this->colors['watermarkBg']}:{$this->dimensions['watermark']['width']}x{$this->dimensions['watermark']['height']}[over]", @@ -248,7 +247,7 @@ class VideoClipper '[watermarked]scale=w=-1:h=-1:out_color_matrix=bt709[outfinal]', ]; - $watermark = config(MediaClipper::class) + $watermark = config('MediaClipper') ->watermark; $videoClipCmd = [ @@ -403,7 +402,7 @@ class VideoClipper ); // Add quotes for subtitles - $quotes = imagecreatefrompng(config(MediaClipper::class)->quotesImage); + $quotes = imagecreatefrompng(config('MediaClipper')->quotesImage); if (! $quotes) { return false; @@ -481,7 +480,7 @@ class VideoClipper private function getFont(string $name): string { - return config(MediaClipper::class)->fontsFolder . self::FONTS[$name]; + return config('MediaClipper')->fontsFolder . self::FONTS[$name]; } private function generateBackground(int $width, int $height): ?GdImage diff --git a/modules/Platforms/Config/Routes.php b/modules/Platforms/Config/Routes.php index d4074cf1..3dfd6c6e 100644 --- a/modules/Platforms/Config/Routes.php +++ b/modules/Platforms/Config/Routes.php @@ -5,15 +5,14 @@ declare(strict_types=1); namespace Modules\PremiumPodcasts\Config; use CodeIgniter\Router\RouteCollection; -use Modules\Admin\Config\Admin; - -$routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding'); /** @var RouteCollection $routes */ +$routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding'); + // Admin routes for subscriptions $routes->group( - config(Admin::class) + config('Admin') ->gateway, [ 'namespace' => 'Modules\Platforms\Controllers', diff --git a/modules/Platforms/Controllers/PlatformController.php b/modules/Platforms/Controllers/PlatformController.php index a8118a4b..40a5ccaa 100644 --- a/modules/Platforms/Controllers/PlatformController.php +++ b/modules/Platforms/Controllers/PlatformController.php @@ -73,7 +73,7 @@ class PlatformController extends BaseController as $platformSlug => $podcastPlatform ) { $podcastPlatformUrl = trim((string) $podcastPlatform['url']); - if ($podcastPlatformUrl === null) { + if ($podcastPlatformUrl === '') { continue; } diff --git a/modules/Platforms/Models/PlatformModel.php b/modules/Platforms/Models/PlatformModel.php index 75ce5ef1..290a90f8 100644 --- a/modules/Platforms/Models/PlatformModel.php +++ b/modules/Platforms/Models/PlatformModel.php @@ -28,7 +28,7 @@ class PlatformModel extends Model protected $primaryKey = 'id'; /** - * @var string[] + * @var list */ protected $allowedFields = ['podcast_id', 'type', 'slug', 'link_url', 'account_id', 'is_visible']; @@ -127,6 +127,8 @@ class PlatformModel extends Model } /** + * @param array> $data + * * @return int|false Number of rows inserted or FALSE on failure */ public function savePlatforms(int $podcastId, string $platformType, array $data): int | false diff --git a/modules/PodcastImport/Commands/PodcastImport.php b/modules/PodcastImport/Commands/PodcastImport.php index ffac62d3..3a07724c 100644 --- a/modules/PodcastImport/Commands/PodcastImport.php +++ b/modules/PodcastImport/Commands/PodcastImport.php @@ -19,7 +19,6 @@ use CodeIgniter\Shield\Entities\User; use Config\Services; use Exception; use League\HTMLToMarkdown\HtmlConverter; -use Modules\Auth\Config\AuthGroups; use Modules\Auth\Models\UserModel; use Modules\Platforms\Models\PlatformModel; use Modules\PodcastImport\Entities\PodcastImportTask; @@ -266,7 +265,7 @@ class PodcastImport extends BaseCommand // set current user as podcast admin // 1. create new group - config(AuthGroups::class) + config('AuthGroups') ->generatePodcastAuthorizations($podcast->id); add_podcast_group($this->user, $podcast->id, 'admin'); @@ -332,23 +331,19 @@ class PodcastImport extends BaseCommand $personGroup = $person->getAttribute('group'); $personRole = $person->getAttribute('role'); - $isTaxonomyFound = false; + // set default group and role if taxonomy is not found + $personGroupSlug = 'cast'; + $personRoleSlug = 'host'; + if (array_key_exists(strtolower((string) $personGroup), ReversedTaxonomy::$taxonomy)) { $personGroup = ReversedTaxonomy::$taxonomy[strtolower((string) $personGroup)]; $personGroupSlug = $personGroup['slug']; if (array_key_exists(strtolower((string) $personRole), $personGroup['roles'])) { $personRoleSlug = $personGroup['roles'][strtolower((string) $personRole)]['slug']; - $isTaxonomyFound = true; } } - if (! $isTaxonomyFound) { - // taxonomy was not found, set default group and role - $personGroupSlug = 'cast'; - $personRoleSlug = 'host'; - } - $podcastPersonModel = new PersonModel(); if (! $podcastPersonModel->addPodcastPerson( $this->podcast->id, @@ -410,7 +405,7 @@ class PodcastImport extends BaseCommand 'slug' => $platformSlug, 'link_url' => $platform->getAttribute($platformType['account_url_key']), 'account_id' => $platform->getAttribute($platformType['account_id_key']), - 'is_visible' => false, + 'is_visible' => 0, ]; } @@ -556,23 +551,19 @@ class PodcastImport extends BaseCommand $personGroup = $person->getAttribute('group'); $personRole = $person->getAttribute('role'); - $isTaxonomyFound = false; + // set default group and role if taxonomy is not found + $personGroupSlug = 'cast'; + $personRoleSlug = 'host'; + if (array_key_exists(strtolower((string) $personGroup), ReversedTaxonomy::$taxonomy)) { $personGroup = ReversedTaxonomy::$taxonomy[strtolower((string) $personGroup)]; $personGroupSlug = $personGroup['slug']; if (array_key_exists(strtolower((string) $personRole), $personGroup['roles'])) { $personRoleSlug = $personGroup['roles'][strtolower((string) $personRole)]['slug']; - $isTaxonomyFound = true; } } - if (! $isTaxonomyFound) { - // taxonomy was not found, set default group and role - $personGroupSlug = 'cast'; - $personRoleSlug = 'host'; - } - $episodePersonModel = new PersonModel(); if (! $episodePersonModel->addEpisodePerson( $this->podcast->id, diff --git a/modules/PodcastImport/Config/Routes.php b/modules/PodcastImport/Config/Routes.php index b99c885f..7ba1da89 100644 --- a/modules/PodcastImport/Config/Routes.php +++ b/modules/PodcastImport/Config/Routes.php @@ -5,13 +5,12 @@ declare(strict_types=1); namespace Modules\PodcastImport\Config; use CodeIgniter\Router\RouteCollection; -use Modules\Admin\Config\Admin; /** @var RouteCollection $routes */ // Admin routes for imports $routes->group( - config(Admin::class) + config('Admin') ->gateway, [ 'namespace' => 'Modules\PodcastImport\Controllers', diff --git a/modules/PremiumPodcasts/Config/Registrar.php b/modules/PremiumPodcasts/Config/Registrar.php index 103af97b..17d66880 100644 --- a/modules/PremiumPodcasts/Config/Registrar.php +++ b/modules/PremiumPodcasts/Config/Registrar.php @@ -8,6 +8,9 @@ use Modules\PremiumPodcasts\Filters\PodcastUnlockFilter; class Registrar { + /** + * @return array + */ public static function Filters(): array { return [ diff --git a/modules/PremiumPodcasts/Config/Routes.php b/modules/PremiumPodcasts/Config/Routes.php index 3b98b09b..e7906067 100644 --- a/modules/PremiumPodcasts/Config/Routes.php +++ b/modules/PremiumPodcasts/Config/Routes.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Modules\PremiumPodcasts\Config; use CodeIgniter\Router\RouteCollection; -use Modules\Admin\Config\Admin; /** @var RouteCollection $routes */ @@ -13,7 +12,7 @@ $routes->addPlaceholder('podcastHandle', '[a-zA-Z0-9\_]{1,32}'); // Admin routes for subscriptions $routes->group( - config(Admin::class) + config('Admin') ->gateway, [ 'namespace' => 'Modules\PremiumPodcasts\Controllers', diff --git a/modules/PremiumPodcasts/Config/Services.php b/modules/PremiumPodcasts/Config/Services.php index 54250431..fb9ec7c0 100644 --- a/modules/PremiumPodcasts/Config/Services.php +++ b/modules/PremiumPodcasts/Config/Services.php @@ -20,7 +20,7 @@ class Services extends BaseService $premiumPodcasts = new PremiumPodcasts(); - $subscriptionModel ??= model(SubscriptionModel::class); + $subscriptionModel ??= model('SubscriptionModel'); return $premiumPodcasts ->setSubscriptionModel($subscriptionModel); diff --git a/modules/PremiumPodcasts/Entities/Subscription.php b/modules/PremiumPodcasts/Entities/Subscription.php index efaa9de3..edca9bd4 100644 --- a/modules/PremiumPodcasts/Entities/Subscription.php +++ b/modules/PremiumPodcasts/Entities/Subscription.php @@ -38,7 +38,7 @@ class Subscription extends Entity protected ?Podcast $podcast = null; /** - * @var string[] + * @var list */ protected $dates = ['expires_at', 'created_at', 'updated_at']; diff --git a/modules/PremiumPodcasts/Models/SubscriptionModel.php b/modules/PremiumPodcasts/Models/SubscriptionModel.php index c0953013..84a37138 100644 --- a/modules/PremiumPodcasts/Models/SubscriptionModel.php +++ b/modules/PremiumPodcasts/Models/SubscriptionModel.php @@ -28,7 +28,7 @@ class SubscriptionModel extends Model protected $primaryKey = 'id'; /** - * @var string[] + * @var list */ protected $allowedFields = [ 'id', @@ -55,17 +55,17 @@ class SubscriptionModel extends Model protected $useTimestamps = true; /** - * @var string[] + * @var list */ protected $afterInsert = ['clearCache']; /** - * @var string[] + * @var list */ protected $afterUpdate = ['clearCache']; /** - * @var string[] + * @var list */ protected $beforeDelete = ['clearCache']; @@ -131,8 +131,13 @@ class SubscriptionModel extends Model */ protected function clearCache(array $data): array { + /** @var ?Subscription */ $subscription = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']); + if (! $subscription instanceof Subscription) { + return $data; + } + cache() ->delete("subscription#{$subscription->id}"); cache() diff --git a/modules/WebSub/Commands/Publish.php b/modules/WebSub/Commands/Publish.php index 58f40fbb..1b167865 100644 --- a/modules/WebSub/Commands/Publish.php +++ b/modules/WebSub/Commands/Publish.php @@ -9,7 +9,6 @@ use App\Models\PodcastModel; use CodeIgniter\CLI\BaseCommand; use CodeIgniter\HTTP\CURLRequest; use Exception; -use Modules\WebSub\Config\WebSub; class Publish extends BaseCommand { @@ -56,7 +55,7 @@ class Publish extends BaseCommand ], ]; - $hubUrls = config(WebSub::class) + $hubUrls = config('WebSub') ->hubs; foreach ($podcasts as $podcast) { @@ -78,7 +77,7 @@ class Publish extends BaseCommand // set podcast feed as having been pushed onto hubs (new PodcastModel())->update($podcast->id, [ - 'is_published_on_hubs' => true, + 'is_published_on_hubs' => 1, ]); // set newly published episodes as pushed onto hubs diff --git a/phpstan.neon b/phpstan.neon index c1e8feec..9982f691 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,7 @@ parameters: checkGenericClassInNonGenericObjectType: false paths: - app + - modules - tests bootstrapFiles: - vendor/codeigniter4/framework/system/Test/bootstrap.php @@ -37,12 +38,13 @@ parameters: - Modules\Fediverse\Models\ - Modules\Media\Models\ - Modules\PremiumPodcasts\Models\ + - CodeIgniter\Shield\Models\ additionalServices: - CodeIgniter\Settings\Config\Services - CodeIgniter\Shield\Config\Services - Michalsn\Uuid\Config\Services - - Modules\PremiumPodcasts\Config\Services - Modules\Media\Config\Services - Modules\Platforms\Config\Services + - Modules\PremiumPodcasts\Config\Services ignoreErrors: - '#^Call to an undefined method CodeIgniter\\Cache\\CacheInterface\:\:deleteMatching\(\)#' diff --git a/tests/modules/Api/Rest/V1/EpisodeTest.php b/tests/modules/Api/Rest/V1/EpisodeTest.php index e999bd5e..ff366a4d 100644 --- a/tests/modules/Api/Rest/V1/EpisodeTest.php +++ b/tests/modules/Api/Rest/V1/EpisodeTest.php @@ -9,7 +9,6 @@ use CodeIgniter\Database\Seeder; use CodeIgniter\Test\CIUnitTestCase; use CodeIgniter\Test\DatabaseTestTrait; use CodeIgniter\Test\FeatureTestTrait; -use Modules\Api\Rest\V1\Config\RestApi; class EpisodeTest extends CIUnitTestCase { @@ -56,7 +55,7 @@ class EpisodeTest extends CIUnitTestCase $this->episode['created_at'] = []; $this->episode['updated_at'] = []; - $this->apiUrl = config(RestApi::class) + $this->apiUrl = config('RestApi') ->gateway; } diff --git a/tests/modules/Api/Rest/V1/PodcastTest.php b/tests/modules/Api/Rest/V1/PodcastTest.php index 908fba3c..a70e5544 100644 --- a/tests/modules/Api/Rest/V1/PodcastTest.php +++ b/tests/modules/Api/Rest/V1/PodcastTest.php @@ -9,7 +9,6 @@ use CodeIgniter\Database\Seeder; use CodeIgniter\Test\CIUnitTestCase; use CodeIgniter\Test\DatabaseTestTrait; use CodeIgniter\Test\FeatureTestTrait; -use Modules\Api\Rest\V1\Config\RestApi; class PodcastTest extends CIUnitTestCase { @@ -54,7 +53,7 @@ class PodcastTest extends CIUnitTestCase $this->podcast = FakeSinglePodcastApiSeeder::podcast(); $this->podcast['created_at'] = []; $this->podcast['updated_at'] = []; - $this->podcastApiUrl = config(RestApi::class) + $this->podcastApiUrl = config('RestApi') ->gateway; } diff --git a/themes/cp_admin/episode/embed.php b/themes/cp_admin/episode/embed.php index 354de34c..58af05b8 100644 --- a/themes/cp_admin/episode/embed.php +++ b/themes/cp_admin/episode/embed.php @@ -1,8 +1,6 @@ height; +$embedHeight = config('Embed')->height; ?> diff --git a/themes/cp_admin/episode/video_clips_new.php b/themes/cp_admin/episode/video_clips_new.php index 21612991..fdcd72b0 100644 --- a/themes/cp_admin/episode/video_clips_new.php +++ b/themes/cp_admin/episode/video_clips_new.php @@ -1,7 +1,5 @@ extend('_layout') ?> @@ -61,7 +59,7 @@ use Modules\MediaClipper\Config\MediaClipper;
- themes as $themeName => $colors): ?> + themes as $themeName => $colors): ?> lang('PodcastImport.queue.feed'), 'cell' => function (PodcastImportTask $importTask) { + $externalLink = icon('external-link-fill', [ + 'class' => 'ml-1', + ]); return << - {$importTask->feed_url} 'ml-1']) ?> + {$importTask->feed_url}{$externalLink} @{$importTask->handle}
HTML; diff --git a/themes/cp_admin/settings/general.php b/themes/cp_admin/settings/general.php index be6d6110..9253a0ed 100644 --- a/themes/cp_admin/settings/general.php +++ b/themes/cp_admin/settings/general.php @@ -1,7 +1,5 @@ extend('_layout') ?> @@ -49,7 +47,7 @@ use Config\App; accept=".png,.jpeg,.jpg" class="flex-1" /> - siteIcon['ico'] !== service('settings')->get('App.siteIcon')['ico']): ?> + siteIcon['ico'] !== service('settings')->get('App.siteIcon')['ico']): ?>
<?= esc(service('settings')->get('App.siteName')) ?> Favicon diff --git a/themes/cp_admin/settings/theme.php b/themes/cp_admin/settings/theme.php index 76f5bf41..1b0f9ea8 100644 --- a/themes/cp_admin/settings/theme.php +++ b/themes/cp_admin/settings/theme.php @@ -1,7 +1,5 @@ extend('_layout') ?> @@ -23,7 +21,7 @@ use Config\Colors; subtitle="">
- themes as $themeName => $color): ?> + themes as $themeName => $color): ?> - loggedIn() ? $episode->audio_url : $episode->audio_url . - (isset($_SERVER['HTTP_REFERER']) - ? '?_from=' . - parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) - : '') ?> + loggedIn() ? $episode->audio_url : $episode->audio_url . + ($superglobals->server('HTTP_REFERER') === null + ? '?_from=' . + parse_url($superglobals->server('HTTP_REFERER'), PHP_URL_HOST) + : '') ?> diff --git a/themes/cp_auth/email_2fa_show.php b/themes/cp_auth/email_2fa_show.php index 5bbd581c..df363d4f 100644 --- a/themes/cp_auth/email_2fa_show.php +++ b/themes/cp_auth/email_2fa_show.php @@ -1,11 +1,9 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?> endSection() ?> diff --git a/themes/cp_auth/email_2fa_verify.php b/themes/cp_auth/email_2fa_verify.php index 2e9b0a26..02b3b248 100644 --- a/themes/cp_auth/email_2fa_verify.php +++ b/themes/cp_auth/email_2fa_verify.php @@ -1,10 +1,8 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?> endSection() ?> diff --git a/themes/cp_auth/email_activate_show.php b/themes/cp_auth/email_activate_show.php index 562b1e5c..cc19a4a5 100644 --- a/themes/cp_auth/email_activate_show.php +++ b/themes/cp_auth/email_activate_show.php @@ -1,10 +1,8 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?>endSection() ?> diff --git a/themes/cp_auth/login.php b/themes/cp_auth/login.php index f2b9881b..11008c97 100644 --- a/themes/cp_auth/login.php +++ b/themes/cp_auth/login.php @@ -1,10 +1,8 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?>endSection() ?> diff --git a/themes/cp_auth/magic_link_form.php b/themes/cp_auth/magic_link_form.php index 5c36288c..941b4571 100644 --- a/themes/cp_auth/magic_link_form.php +++ b/themes/cp_auth/magic_link_form.php @@ -1,10 +1,8 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?> endSection() ?> diff --git a/themes/cp_auth/magic_link_message.php b/themes/cp_auth/magic_link_message.php index af85d821..2e406133 100644 --- a/themes/cp_auth/magic_link_message.php +++ b/themes/cp_auth/magic_link_message.php @@ -1,9 +1,7 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?> endSection() ?> diff --git a/themes/cp_auth/magic_link_set_password.php b/themes/cp_auth/magic_link_set_password.php index 9d376f8a..2a382526 100644 --- a/themes/cp_auth/magic_link_set_password.php +++ b/themes/cp_auth/magic_link_set_password.php @@ -1,10 +1,8 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?> diff --git a/themes/cp_auth/register.php b/themes/cp_auth/register.php index e82ac651..3e1efa65 100644 --- a/themes/cp_auth/register.php +++ b/themes/cp_auth/register.php @@ -1,10 +1,8 @@ -extend(config(Auth::class)->views['layout']) ?> +extend(config('Auth')->views['layout']) ?> section('title') ?> diff --git a/themes/cp_install/database_config.php b/themes/cp_install/database_config.php index dbee492a..154122c9 100644 --- a/themes/cp_install/database_config.php +++ b/themes/cp_install/database_config.php @@ -1,7 +1,5 @@ extend('_layout') ?> @@ -26,27 +24,27 @@ use Config\Database; @@ -55,7 +53,7 @@ use Config\Database; name="db_prefix" label="" hint="" - value="default['DBPrefix'] ?>" /> + value="default['DBPrefix'] ?>" /> diff --git a/themes/cp_install/instance_config.php b/themes/cp_install/instance_config.php index 042ca9b5..f2acedfc 100644 --- a/themes/cp_install/instance_config.php +++ b/themes/cp_install/instance_config.php @@ -1,16 +1,11 @@ extend('_layout') ?> section('content') ?> -
+
@@ -21,7 +16,7 @@ use Modules\Install\Config\Install;