diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index fba12dd8..243bbc94 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace App\Controllers; use CodeIgniter\Controller; +use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; @@ -20,6 +21,13 @@ use ViewThemes\Theme; */ abstract class BaseController extends Controller { + /** + * Instance of the main Request object. + * + * @var IncomingRequest + */ + protected $request; + /** * Constructor. */ diff --git a/app/Controllers/EpisodeAudioController.php b/app/Controllers/EpisodeAudioController.php index 8efc0811..a069bb83 100644 --- a/app/Controllers/EpisodeAudioController.php +++ b/app/Controllers/EpisodeAudioController.php @@ -16,6 +16,7 @@ use App\Models\EpisodeModel; use App\Models\PodcastModel; use CodeIgniter\Controller; use CodeIgniter\Exceptions\PageNotFoundException; +use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; @@ -27,6 +28,13 @@ use Psr\Log\LoggerInterface; class EpisodeAudioController extends Controller { + /** + * Instance of the main Request object. + * + * @var IncomingRequest + */ + protected $request; + /** * An array of helpers to be loaded automatically upon class instantiation. These helpers will be available to all * other controllers that extend Analytics. diff --git a/app/Controllers/EpisodeCommentController.php b/app/Controllers/EpisodeCommentController.php index 79d6a324..44486b0a 100644 --- a/app/Controllers/EpisodeCommentController.php +++ b/app/Controllers/EpisodeCommentController.php @@ -166,16 +166,24 @@ class EpisodeCommentController extends BaseController public function attemptLike(): RedirectResponse { + if (! ($interactAsActor = interact_as_actor()) instanceof Actor) { + return redirect()->back(); + } + model(LikeModel::class) - ->toggleLike(interact_as_actor(), $this->comment); + ->toggleLike($interactAsActor, $this->comment); return redirect()->back(); } public function attemptReply(): RedirectResponse { + if (! ($interactAsActor = interact_as_actor()) instanceof Actor) { + return redirect()->back(); + } + model(LikeModel::class) - ->toggleLike(interact_as_actor(), $this->comment); + ->toggleLike($interactAsActor, $this->comment); return redirect()->back(); } diff --git a/app/Controllers/FeedController.php b/app/Controllers/FeedController.php index 335bd89f..fbf742f9 100644 --- a/app/Controllers/FeedController.php +++ b/app/Controllers/FeedController.php @@ -10,10 +10,12 @@ declare(strict_types=1); namespace App\Controllers; +use App\Entities\Podcast; use App\Models\EpisodeModel; use App\Models\PodcastModel; use CodeIgniter\Controller; use CodeIgniter\Exceptions\PageNotFoundException; +use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\ResponseInterface; use Exception; use Modules\PremiumPodcasts\Entities\Subscription; @@ -22,13 +24,20 @@ use Opawg\UserAgentsPhp\UserAgentsRSS; class FeedController extends Controller { + /** + * Instance of the main Request object. + * + * @var IncomingRequest + */ + protected $request; + public function index(string $podcastHandle): ResponseInterface { helper(['rss', 'premium_podcasts', 'misc']); $podcast = (new PodcastModel())->where('handle', $podcastHandle) ->first(); - if (! $podcast) { + if (! $podcast instanceof Podcast) { throw PageNotFoundException::forPageNotFound(); } diff --git a/app/Controllers/PageController.php b/app/Controllers/PageController.php index b33bd864..83c03566 100644 --- a/app/Controllers/PageController.php +++ b/app/Controllers/PageController.php @@ -24,9 +24,8 @@ class PageController extends BaseController throw PageNotFoundException::forPageNotFound(); } - if ( - ($page = (new PageModel())->where('slug', $params[0])->first()) === null - ) { + $page = (new PageModel())->where('slug', $params[0])->first(); + if (! $page instanceof Page) { throw PageNotFoundException::forPageNotFound(); } diff --git a/app/Database/Migrations/2021-05-29-152000_add_categories.php b/app/Database/Migrations/2021-05-29-152000_add_categories.php index 0895520c..ba547987 100644 --- a/app/Database/Migrations/2021-05-29-152000_add_categories.php +++ b/app/Database/Migrations/2021-05-29-152000_add_categories.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddCategories extends Migration +class AddCategories extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-05-30-101000_add_languages.php b/app/Database/Migrations/2021-05-30-101000_add_languages.php index 0c931b55..c5293f8f 100644 --- a/app/Database/Migrations/2021-05-30-101000_add_languages.php +++ b/app/Database/Migrations/2021-05-30-101000_add_languages.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddLanguages extends Migration +class AddLanguages extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-05-30-101500_add_podcasts.php b/app/Database/Migrations/2021-05-30-101500_add_podcasts.php index 2e3cdc9b..006d7224 100644 --- a/app/Database/Migrations/2021-05-30-101500_add_podcasts.php +++ b/app/Database/Migrations/2021-05-30-101500_add_podcasts.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPodcasts extends Migration +class AddPodcasts extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-06-05-170000_add_episodes.php b/app/Database/Migrations/2021-06-05-170000_add_episodes.php index 280d1cd5..22641eab 100644 --- a/app/Database/Migrations/2021-06-05-170000_add_episodes.php +++ b/app/Database/Migrations/2021-06-05-170000_add_episodes.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddEpisodes extends Migration +class AddEpisodes extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-06-05-190000_add_platforms.php b/app/Database/Migrations/2021-06-05-190000_add_platforms.php index 6f129136..eaba263b 100644 --- a/app/Database/Migrations/2021-06-05-190000_add_platforms.php +++ b/app/Database/Migrations/2021-06-05-190000_add_platforms.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPlatforms extends Migration +class AddPlatforms extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-06-05-200000_add_podcasts_platforms.php b/app/Database/Migrations/2021-06-05-200000_add_podcasts_platforms.php index d6e3680e..5f30084e 100644 --- a/app/Database/Migrations/2021-06-05-200000_add_podcasts_platforms.php +++ b/app/Database/Migrations/2021-06-05-200000_add_podcasts_platforms.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPodcastsPlatforms extends Migration +class AddPodcastsPlatforms extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-08-12-150000_add_episode_comments.php b/app/Database/Migrations/2021-08-12-150000_add_episode_comments.php index c1978c98..4c1869ce 100644 --- a/app/Database/Migrations/2021-08-12-150000_add_episode_comments.php +++ b/app/Database/Migrations/2021-08-12-150000_add_episode_comments.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddEpisodeComments extends Migration +class AddEpisodeComments extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-08-12-160000_add_likes.php b/app/Database/Migrations/2021-08-12-160000_add_likes.php index 264d5e1b..830de1f1 100644 --- a/app/Database/Migrations/2021-08-12-160000_add_likes.php +++ b/app/Database/Migrations/2021-08-12-160000_add_likes.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddLikes extends Migration +class AddLikes extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-08-17-150000_add_pages.php b/app/Database/Migrations/2021-08-17-150000_add_pages.php index f6b5c954..c5881287 100644 --- a/app/Database/Migrations/2021-08-17-150000_add_pages.php +++ b/app/Database/Migrations/2021-08-17-150000_add_pages.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPages extends Migration +class AddPages extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-09-29-150000_add_podcasts_categories.php b/app/Database/Migrations/2021-09-29-150000_add_podcasts_categories.php index bdfdf06d..c9754fd0 100644 --- a/app/Database/Migrations/2021-09-29-150000_add_podcasts_categories.php +++ b/app/Database/Migrations/2021-09-29-150000_add_podcasts_categories.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPodcastsCategories extends Migration +class AddPodcastsCategories extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-12-09-130000_add_clips.php b/app/Database/Migrations/2021-12-09-130000_add_clips.php index 1049507f..eb47d1cc 100644 --- a/app/Database/Migrations/2021-12-09-130000_add_clips.php +++ b/app/Database/Migrations/2021-12-09-130000_add_clips.php @@ -10,9 +10,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddClips extends Migration +class AddClips extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-12-25-120000_add_persons.php b/app/Database/Migrations/2021-12-25-120000_add_persons.php index 06ca6bae..fe72ee1c 100644 --- a/app/Database/Migrations/2021-12-25-120000_add_persons.php +++ b/app/Database/Migrations/2021-12-25-120000_add_persons.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPersons extends Migration +class AddPersons extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-12-25-130000_add_podcasts_persons.php b/app/Database/Migrations/2021-12-25-130000_add_podcasts_persons.php index 00b567f5..72740a28 100644 --- a/app/Database/Migrations/2021-12-25-130000_add_podcasts_persons.php +++ b/app/Database/Migrations/2021-12-25-130000_add_podcasts_persons.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddPodcastsPersons extends Migration +class AddPodcastsPersons extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-12-25-140000_add_episodes_persons.php b/app/Database/Migrations/2021-12-25-140000_add_episodes_persons.php index 8bf72fd4..6debdb38 100644 --- a/app/Database/Migrations/2021-12-25-140000_add_episodes_persons.php +++ b/app/Database/Migrations/2021-12-25-140000_add_episodes_persons.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddEpisodesPersons extends Migration +class AddEpisodesPersons extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2021-12-25-150000_add_credits_view.php b/app/Database/Migrations/2021-12-25-150000_add_credits_view.php index 62b8415b..bef51fa5 100644 --- a/app/Database/Migrations/2021-12-25-150000_add_credits_view.php +++ b/app/Database/Migrations/2021-12-25-150000_add_credits_view.php @@ -10,9 +10,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddCreditsView extends Migration +class AddCreditsView extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2022-02-23-100000_add_episode_id_to_posts.php b/app/Database/Migrations/2022-02-23-100000_add_episode_id_to_posts.php index c179780a..c22cb5f8 100644 --- a/app/Database/Migrations/2022-02-23-100000_add_episode_id_to_posts.php +++ b/app/Database/Migrations/2022-02-23-100000_add_episode_id_to_posts.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddEpisodeIdToPosts extends Migration +class AddEpisodeIdToPosts extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/2022-03-09-113000_add_created_by_to_posts.php b/app/Database/Migrations/2022-03-09-113000_add_created_by_to_posts.php index 656df7a9..ccd6de67 100644 --- a/app/Database/Migrations/2022-03-09-113000_add_created_by_to_posts.php +++ b/app/Database/Migrations/2022-03-09-113000_add_created_by_to_posts.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddCreatedByToPosts extends Migration +class AddCreatedByToPosts extends BaseMigration { public function up(): void { diff --git a/app/Database/Migrations/BaseMigration.php b/app/Database/Migrations/BaseMigration.php new file mode 100644 index 00000000..e3861389 --- /dev/null +++ b/app/Database/Migrations/BaseMigration.php @@ -0,0 +1,34 @@ +first(); - if ($podcast !== null) { - $firstEpisode = (new EpisodeModel()) - ->selectMin('published_at') - ->first(); + if (! $podcast instanceof Podcast) { + throw new Exception("COULD NOT POPULATE DATABASE:\n\tCreate a podcast with episodes first.\n"); + } - for ( - $date = strtotime((string) $firstEpisode->published_at); - $date < strtotime('now'); - $date = strtotime(date('Y-m-d', $date) . ' +1 day') - ) { - $analyticsPodcasts = []; - $analyticsPodcastsByHour = []; - $analyticsPodcastsByCountry = []; - $analyticsPodcastsByEpisode = []; - $analyticsPodcastsByPlayer = []; - $analyticsPodcastsByRegion = []; + $firstEpisode = (new EpisodeModel()) + ->selectMin('published_at') + ->first(); - $episodes = (new EpisodeModel()) - ->where('podcast_id', $podcast->id) - ->where('`published_at` <= UTC_TIMESTAMP()', null, false) - ->findAll(); - foreach ($episodes as $episode) { - $age = floor(($date - strtotime((string) $episode->published_at)) / 86400); - $probability1 = floor(exp(3 - $age / 40)) + 1; + if (! $firstEpisode instanceof Episode) { + throw new Exception("COULD NOT POPULATE DATABASE:\n\tCreate an episode first."); + } - for ( - $lineNumber = 0; - $lineNumber < rand(1, (int) $probability1); - ++$lineNumber - ) { - $probability2 = floor(exp(6 - $age / 20)) + 10; + for ( + $date = strtotime((string) $firstEpisode->published_at); + $date < strtotime('now'); + $date = strtotime(date('Y-m-d', $date) . ' +1 day') + ) { + $analyticsPodcasts = []; + $analyticsPodcastsByHour = []; + $analyticsPodcastsByCountry = []; + $analyticsPodcastsByEpisode = []; + $analyticsPodcastsByPlayer = []; + $analyticsPodcastsByRegion = []; - $player = - $jsonUserAgents[ - rand(1, count($jsonUserAgents) - 1) - ]; - $service = - $jsonRSSUserAgents[ - rand(1, count($jsonRSSUserAgents) - 1) - ]['slug']; - $app = isset($player['app']) ? $player['app'] : ''; - $device = isset($player['device']) - ? $player['device'] - : ''; - $os = isset($player['os']) ? $player['os'] : ''; - $isBot = isset($player['bot']) ? $player['bot'] : 0; + $episodes = (new EpisodeModel()) + ->where('podcast_id', $podcast->id) + ->where('`published_at` <= UTC_TIMESTAMP()', null, false) + ->findAll(); + foreach ($episodes as $episode) { + $age = floor(($date - strtotime((string) $episode->published_at)) / 86400); + $probability1 = floor(exp(3 - $age / 40)) + 1; - $fakeIp = - rand(0, 255) . - '.' . - rand(0, 255) . - '.' . - rand(0, 255) . - '.' . - rand(0, 255); + for ( + $lineNumber = 0; + $lineNumber < rand(1, (int) $probability1); + ++$lineNumber + ) { + $probability2 = floor(exp(6 - $age / 20)) + 10; - $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb'); - - $countryCode = 'N/A'; - $regionCode = 'N/A'; - $latitude = null; - $longitude = null; - try { - $city = $cityReader->city($fakeIp); - - $countryCode = $city->country->isoCode === null - ? 'N/A' - : $city->country->isoCode; - - $regionCode = $city->subdivisions === [] - ? 'N/A' - : $city->subdivisions[0]->isoCode; - $latitude = round((float) $city->location->latitude, 3); - $longitude = round((float) $city->location->longitude, 3); - } catch (AddressNotFoundException) { - //Bad luck, bad IP, nothing to do. - } - - $hits = rand(0, (int) $probability2); - - $analyticsPodcasts[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'duration' => rand(60, 3600), - 'bandwidth' => rand(1000000, 10000000), - 'hits' => $hits, - 'unique_listeners' => $hits, - ]; - $analyticsPodcastsByHour[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'hour' => rand(0, 23), - 'hits' => $hits, - ]; - $analyticsPodcastsByCountry[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'country_code' => $countryCode, - 'hits' => $hits, - ]; - $analyticsPodcastsByEpisode[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'episode_id' => $episode->id, - 'age' => $age, - 'hits' => $hits, - ]; - $analyticsPodcastsByPlayer[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'service' => $service, - 'app' => $app, - 'device' => $device, - 'os' => $os, - 'is_bot' => $isBot, - 'hits' => $hits, - ]; - $analyticsPodcastsByRegion[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'country_code' => $countryCode, - 'region_code' => $regionCode, - 'latitude' => $latitude, - 'longitude' => $longitude, - 'hits' => $hits, + $player = + $jsonUserAgents[ + rand(1, count($jsonUserAgents) - 1) ]; + $service = + $jsonRSSUserAgents[ + rand(1, count($jsonRSSUserAgents) - 1) + ]['slug']; + $app = isset($player['app']) ? $player['app'] : ''; + $device = isset($player['device']) + ? $player['device'] + : ''; + $os = isset($player['os']) ? $player['os'] : ''; + $isBot = isset($player['bot']) ? $player['bot'] : 0; + + $fakeIp = + rand(0, 255) . + '.' . + rand(0, 255) . + '.' . + rand(0, 255) . + '.' . + rand(0, 255); + + $cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb'); + + $countryCode = 'N/A'; + $regionCode = 'N/A'; + $latitude = null; + $longitude = null; + try { + $city = $cityReader->city($fakeIp); + + $countryCode = $city->country->isoCode === null + ? 'N/A' + : $city->country->isoCode; + + $regionCode = $city->subdivisions === [] + ? 'N/A' + : $city->subdivisions[0]->isoCode; + $latitude = round((float) $city->location->latitude, 3); + $longitude = round((float) $city->location->longitude, 3); + } catch (AddressNotFoundException) { + //Bad luck, bad IP, nothing to do. } - } - $this->db - ->table('analytics_podcasts') - ->ignore(true) - ->insertBatch($analyticsPodcasts); - $this->db - ->table('analytics_podcasts_by_hour') - ->ignore(true) - ->insertBatch($analyticsPodcastsByHour); - $this->db - ->table('analytics_podcasts_by_country') - ->ignore(true) - ->insertBatch($analyticsPodcastsByCountry); - $this->db - ->table('analytics_podcasts_by_episode') - ->ignore(true) - ->insertBatch($analyticsPodcastsByEpisode); - $this->db - ->table('analytics_podcasts_by_player') - ->ignore(true) - ->insertBatch($analyticsPodcastsByPlayer); - $this->db - ->table('analytics_podcasts_by_region') - ->ignore(true) - ->insertBatch($analyticsPodcastsByRegion); + $hits = rand(0, (int) $probability2); + + $analyticsPodcasts[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'duration' => rand(60, 3600), + 'bandwidth' => rand(1000000, 10000000), + 'hits' => $hits, + 'unique_listeners' => $hits, + ]; + $analyticsPodcastsByHour[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'hour' => rand(0, 23), + 'hits' => $hits, + ]; + $analyticsPodcastsByCountry[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'country_code' => $countryCode, + 'hits' => $hits, + ]; + $analyticsPodcastsByEpisode[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'episode_id' => $episode->id, + 'age' => $age, + 'hits' => $hits, + ]; + $analyticsPodcastsByPlayer[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'service' => $service, + 'app' => $app, + 'device' => $device, + 'os' => $os, + 'is_bot' => $isBot, + 'hits' => $hits, + ]; + $analyticsPodcastsByRegion[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'country_code' => $countryCode, + 'region_code' => $regionCode, + 'latitude' => $latitude, + 'longitude' => $longitude, + 'hits' => $hits, + ]; + } } - } else { - echo "COULD NOT POPULATE DATABASE:\n\tCreate a podcast with episodes first.\n"; + + $this->db + ->table('analytics_podcasts') + ->ignore(true) + ->insertBatch($analyticsPodcasts); + $this->db + ->table('analytics_podcasts_by_hour') + ->ignore(true) + ->insertBatch($analyticsPodcastsByHour); + $this->db + ->table('analytics_podcasts_by_country') + ->ignore(true) + ->insertBatch($analyticsPodcastsByCountry); + $this->db + ->table('analytics_podcasts_by_episode') + ->ignore(true) + ->insertBatch($analyticsPodcastsByEpisode); + $this->db + ->table('analytics_podcasts_by_player') + ->ignore(true) + ->insertBatch($analyticsPodcastsByPlayer); + $this->db + ->table('analytics_podcasts_by_region') + ->ignore(true) + ->insertBatch($analyticsPodcastsByRegion); } } } diff --git a/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php b/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php index 7198fea3..0b1bb931 100644 --- a/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php +++ b/app/Database/Seeds/FakeWebsiteAnalyticsSeeder.php @@ -12,10 +12,13 @@ declare(strict_types=1); namespace App\Database\Seeds; +use App\Entities\Episode; +use App\Entities\Podcast; use App\Models\EpisodeModel; use App\Models\PodcastModel; use CodeIgniter\Database\Seeder; +use Exception; class FakeWebsiteAnalyticsSeeder extends Seeder { @@ -183,86 +186,90 @@ class FakeWebsiteAnalyticsSeeder extends Seeder { $podcast = (new PodcastModel())->first(); - if ($podcast) { - $firstEpisode = (new EpisodeModel()) - ->selectMin('published_at') - ->first(); + if (! $podcast instanceof Podcast) { + throw new Exception("COULD NOT POPULATE DATABASE:\n\tCreate a podcast with episodes first.\n"); + } - for ( - $date = strtotime((string) $firstEpisode->published_at); - $date < strtotime('now'); - $date = strtotime(date('Y-m-d', $date) . ' +1 day') - ) { - $websiteByBrowser = []; - $websiteByEntryPage = []; - $websiteByReferer = []; + $firstEpisode = (new EpisodeModel()) + ->selectMin('published_at') + ->first(); - $episodes = (new EpisodeModel()) - ->where('podcast_id', $podcast->id) - ->where('`published_at` <= UTC_TIMESTAMP()', null, false) - ->findAll(); - foreach ($episodes as $episode) { - $age = floor(($date - strtotime((string) $episode->published_at)) / 86400); - $probability1 = (int) floor(exp(3 - $age / 40)) + 1; + if (! $firstEpisode instanceof Episode) { + throw new Exception("COULD NOT POPULATE DATABASE:\n\tCreate an episode first."); + } - for ( - $lineNumber = 0; - $lineNumber < rand(1, $probability1); - ++$lineNumber - ) { - $probability2 = (int) floor(exp(6 - $age / 20)) + 10; + for ( + $date = strtotime((string) $firstEpisode->published_at); + $date < strtotime('now'); + $date = strtotime(date('Y-m-d', $date) . ' +1 day') + ) { + $websiteByBrowser = []; + $websiteByEntryPage = []; + $websiteByReferer = []; - $domain = - $this->domains[rand(0, count($this->domains) - 1)]; - $keyword = - $this->keywords[ - rand(0, count($this->keywords) - 1) - ]; - $browser = - $this->browsers[ - rand(0, count($this->browsers) - 1) - ]; + $episodes = (new EpisodeModel()) + ->where('podcast_id', $podcast->id) + ->where('`published_at` <= UTC_TIMESTAMP()', null, false) + ->findAll(); + foreach ($episodes as $episode) { + $age = floor(($date - strtotime((string) $episode->published_at)) / 86400); + $probability1 = (int) floor(exp(3 - $age / 40)) + 1; - $hits = rand(0, $probability2); + for ( + $lineNumber = 0; + $lineNumber < rand(1, $probability1); + ++$lineNumber + ) { + $probability2 = (int) floor(exp(6 - $age / 20)) + 10; - $websiteByBrowser[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'browser' => $browser, - 'hits' => $hits, + $domain = + $this->domains[rand(0, count($this->domains) - 1)]; + $keyword = + $this->keywords[ + rand(0, count($this->keywords) - 1) ]; - $websiteByEntryPage[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'entry_page_url' => $episode->link, - 'hits' => $hits, + $browser = + $this->browsers[ + rand(0, count($this->browsers) - 1) ]; - $websiteByReferer[] = [ - 'podcast_id' => $podcast->id, - 'date' => date('Y-m-d', $date), - 'referer_url' => 'http://' . $domain . '/?q=' . $keyword, - 'domain' => $domain, - 'keywords' => $keyword, - 'hits' => $hits, - ]; - } + + $hits = rand(0, $probability2); + + $websiteByBrowser[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'browser' => $browser, + 'hits' => $hits, + ]; + $websiteByEntryPage[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'entry_page_url' => $episode->link, + 'hits' => $hits, + ]; + $websiteByReferer[] = [ + 'podcast_id' => $podcast->id, + 'date' => date('Y-m-d', $date), + 'referer_url' => 'http://' . $domain . '/?q=' . $keyword, + 'domain' => $domain, + 'keywords' => $keyword, + 'hits' => $hits, + ]; } - - $this->db - ->table('analytics_website_by_browser') - ->ignore(true) - ->insertBatch($websiteByBrowser); - $this->db - ->table('analytics_website_by_entry_page') - ->ignore(true) - ->insertBatch($websiteByEntryPage); - $this->db - ->table('analytics_website_by_referer') - ->ignore(true) - ->insertBatch($websiteByReferer); } - } else { - echo "COULD NOT POPULATE DATABASE:\n\tCreate a podcast with episodes first.\n"; + + $this->db + ->table('analytics_website_by_browser') + ->ignore(true) + ->insertBatch($websiteByBrowser); + $this->db + ->table('analytics_website_by_entry_page') + ->ignore(true) + ->insertBatch($websiteByEntryPage); + $this->db + ->table('analytics_website_by_referer') + ->ignore(true) + ->insertBatch($websiteByReferer); } } } diff --git a/app/Entities/Clip/BaseClip.php b/app/Entities/Clip/BaseClip.php index 39a546b5..4a2186a3 100644 --- a/app/Entities/Clip/BaseClip.php +++ b/app/Entities/Clip/BaseClip.php @@ -119,6 +119,7 @@ class BaseClip extends Entity public function getUser(): ?User { + /** @var ?User */ return (new UserModel())->find($this->created_by); } diff --git a/app/Entities/Credit.php b/app/Entities/Credit.php index d9c9e955..6c283e8c 100644 --- a/app/Entities/Credit.php +++ b/app/Entities/Credit.php @@ -98,6 +98,7 @@ class Credit extends Entity return ''; } + /** @var string */ return lang("PersonsTaxonomy.persons.{$this->person_group}.label"); } @@ -111,6 +112,7 @@ class Credit extends Entity return ''; } + /** @var string */ return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label"); } } diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php index 29e2b9aa..3108afcc 100644 --- a/app/Entities/Episode.php +++ b/app/Entities/Episode.php @@ -33,6 +33,7 @@ use Modules\Media\Entities\Image; use Modules\Media\Entities\Transcript; use Modules\Media\Models\MediaModel; use RuntimeException; +use SimpleXMLElement; /** * @property int $id @@ -619,13 +620,19 @@ class Episode extends Entity } helper('rss'); - $customRssArray = rss_to_array( - simplexml_load_string( - '' . - $customRssString . - '', - ), - )['elements'][0]['elements'][0]; + + $customXML = simplexml_load_string( + '' . + $customRssString . + '', + ); + + if (! $customXML instanceof SimpleXMLElement) { + // TODO: Failed to parse custom xml, should return error? + return $this; + } + + $customRssArray = rss_to_array($customXML)['elements'][0]['elements'][0]; if (array_key_exists('elements', $customRssArray)) { $this->attributes['custom_rss'] = json_encode($customRssArray['elements']); diff --git a/app/Entities/Podcast.php b/app/Entities/Podcast.php index 7eb98eb3..174e50a7 100644 --- a/app/Entities/Podcast.php +++ b/app/Entities/Podcast.php @@ -21,6 +21,7 @@ use CodeIgniter\Files\File; use CodeIgniter\HTTP\Files\UploadedFile; use CodeIgniter\I18n\Time; use CodeIgniter\Shield\Entities\User; +use Exception; use League\CommonMark\Environment\Environment; use League\CommonMark\Extension\Autolink\AutolinkExtension; use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension; @@ -260,7 +261,13 @@ class Podcast extends Entity public function getCover(): Image { if (! $this->cover instanceof Image) { - $this->cover = (new MediaModel('image'))->getMediaById($this->cover_id); + $cover = (new MediaModel('image'))->getMediaById($this->cover_id); + + if (! $cover instanceof Image) { + throw new Exception('Could not retrieve podcast cover.'); + } + + $this->cover = $cover; } return $this->cover; diff --git a/app/Helpers/url_helper.php b/app/Helpers/url_helper.php index feb98031..b5e53c17 100644 --- a/app/Helpers/url_helper.php +++ b/app/Helpers/url_helper.php @@ -40,7 +40,9 @@ if (! function_exists('current_domain')) { */ function current_domain(): string { + /** @var URI $uri */ $uri = current_url(true); + return $uri->getHost() . ($uri->getPort() ? ':' . $uri->getPort() : ''); } } diff --git a/app/Models/EpisodeCommentModel.php b/app/Models/EpisodeCommentModel.php index a2be2dfd..862177c5 100644 --- a/app/Models/EpisodeCommentModel.php +++ b/app/Models/EpisodeCommentModel.php @@ -10,6 +10,8 @@ declare(strict_types=1); namespace App\Models; +use App\Entities\Actor; +use App\Entities\Episode; use App\Entities\EpisodeComment; use App\Libraries\CommentObject; use CodeIgniter\Database\BaseBuilder; @@ -297,7 +299,15 @@ class EpisodeCommentModel extends UuidModel $episode = model(EpisodeModel::class, false) ->find((int) $data['data']['episode_id']); - $data['data']['uri'] = url_to('episode-comment', esc($actor->username), $episode->slug, $uuid4->toString()); + if (! $episode instanceof Episode) { + return $data; + } + + if (! $actor instanceof Actor) { + return $data; + } + + $data['data']['uri'] = url_to('episode-comment', $actor->username, $episode->slug, $uuid4->toString()); } return $data; diff --git a/app/Models/LikeModel.php b/app/Models/LikeModel.php index 6aa666be..a2b100aa 100644 --- a/app/Models/LikeModel.php +++ b/app/Models/LikeModel.php @@ -15,6 +15,7 @@ use App\Entities\Like; use Michalsn\Uuid\UuidModel; use Modules\Fediverse\Activities\LikeActivity; use Modules\Fediverse\Activities\UndoActivity; +use Modules\Fediverse\Entities\Activity; use Modules\Fediverse\Entities\Actor; use Modules\Fediverse\Models\ActivityModel; @@ -113,6 +114,11 @@ class LikeModel extends UuidModel ]) ->first(); + if (! $activity instanceof Activity) { + // no like activity found, do nothing + return; + } + $likeActivity = new LikeActivity(); $likeActivity ->set('id', url_to('activity', esc($actor->username), $activity->id)) diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php index ee2c0b19..5701d631 100644 --- a/app/Models/PodcastModel.php +++ b/app/Models/PodcastModel.php @@ -439,12 +439,14 @@ class PodcastModel extends Model if ($podcast instanceof Podcast) { $podcastActor = (new ActorModel())->find($podcast->actor_id); - if ($podcastActor) { - $podcastActor->avatar_image_url = $podcast->cover->federation_url; - $podcastActor->avatar_image_mimetype = $podcast->cover->federation_mimetype; - - (new ActorModel())->update($podcast->actor_id, $podcastActor); + if (! $podcastActor instanceof Actor) { + return $data; } + + $podcastActor->avatar_image_url = $podcast->cover->federation_url; + $podcastActor->avatar_image_mimetype = $podcast->cover->federation_mimetype; + + (new ActorModel())->update($podcast->actor_id, $podcastActor); } return $data; diff --git a/modules/Analytics/Database/Migrations/2017-12-01-000000_add_analytics_podcasts.php b/modules/Analytics/Database/Migrations/2017-12-01-000000_add_analytics_podcasts.php index 5a139714..ab757aa0 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-000000_add_analytics_podcasts.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-000000_add_analytics_podcasts.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcasts extends Migration +class AddAnalyticsPodcasts extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-010000_add_analytics_podcasts_by_episode.php b/modules/Analytics/Database/Migrations/2017-12-01-010000_add_analytics_podcasts_by_episode.php index e01d3d12..490b296f 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-010000_add_analytics_podcasts_by_episode.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-010000_add_analytics_podcasts_by_episode.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsByEpisode extends Migration +class AddAnalyticsPodcastsByEpisode extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-020000_add_analytics_podcasts_by_hour.php b/modules/Analytics/Database/Migrations/2017-12-01-020000_add_analytics_podcasts_by_hour.php index 01908740..73fb643d 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-020000_add_analytics_podcasts_by_hour.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-020000_add_analytics_podcasts_by_hour.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsByHour extends Migration +class AddAnalyticsPodcastsByHour extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-030000_add_analytics_podcasts_by_player.php b/modules/Analytics/Database/Migrations/2017-12-01-030000_add_analytics_podcasts_by_player.php index 2e77ad5e..6187b755 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-030000_add_analytics_podcasts_by_player.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-030000_add_analytics_podcasts_by_player.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsByPlayer extends Migration +class AddAnalyticsPodcastsByPlayer extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-040000_add_analytics_podcasts_by_country.php b/modules/Analytics/Database/Migrations/2017-12-01-040000_add_analytics_podcasts_by_country.php index 1bc111d0..33db986e 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-040000_add_analytics_podcasts_by_country.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-040000_add_analytics_podcasts_by_country.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsByCountry extends Migration +class AddAnalyticsPodcastsByCountry extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-050000_add_analytics_podcasts_by_region.php b/modules/Analytics/Database/Migrations/2017-12-01-050000_add_analytics_podcasts_by_region.php index 4fbcff97..51a12a05 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-050000_add_analytics_podcasts_by_region.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-050000_add_analytics_podcasts_by_region.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsByRegion extends Migration +class AddAnalyticsPodcastsByRegion extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-060000_add_analytics_website_by_browser.php b/modules/Analytics/Database/Migrations/2017-12-01-060000_add_analytics_website_by_browser.php index 737e9f81..3b47f828 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-060000_add_analytics_website_by_browser.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-060000_add_analytics_website_by_browser.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsWebsiteByBrowser extends Migration +class AddAnalyticsWebsiteByBrowser extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-070000_add_analytics_website_by_referer.php b/modules/Analytics/Database/Migrations/2017-12-01-070000_add_analytics_website_by_referer.php index 497fce80..c7d6d40c 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-070000_add_analytics_website_by_referer.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-070000_add_analytics_website_by_referer.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsWebsiteByReferer extends Migration +class AddAnalyticsWebsiteByReferer extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-080000_add_analytics_website_by_entry_page.php b/modules/Analytics/Database/Migrations/2017-12-01-080000_add_analytics_website_by_entry_page.php index a38b94fb..9d21b9ce 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-080000_add_analytics_website_by_entry_page.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-080000_add_analytics_website_by_entry_page.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsWebsiteByEntryPage extends Migration +class AddAnalyticsWebsiteByEntryPage extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-090000_add_analytics_unknown_useragents.php b/modules/Analytics/Database/Migrations/2017-12-01-090000_add_analytics_unknown_useragents.php index f97aa484..bdff40a7 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-090000_add_analytics_unknown_useragents.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-090000_add_analytics_unknown_useragents.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsUnknownUseragents extends Migration +class AddAnalyticsUnknownUseragents extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-100000_add_analytics_podcasts_by_subscription.php b/modules/Analytics/Database/Migrations/2017-12-01-100000_add_analytics_podcasts_by_subscription.php index 50f51b50..9d6e2c7e 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-100000_add_analytics_podcasts_by_subscription.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-100000_add_analytics_podcasts_by_subscription.php @@ -10,9 +10,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsBySubscription extends Migration +class AddAnalyticsPodcastsBySubscription extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php b/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php index c87a0193..fafe2d5c 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_podcasts_procedure.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsPodcastsProcedure extends Migration +class AddAnalyticsPodcastsProcedure extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php b/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php index 13a3003d..d236318e 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_unknown_useragents_procedure.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsUnknownUseragentsProcedure extends Migration +class AddAnalyticsUnknownUseragentsProcedure extends BaseMigration { public function up(): void { diff --git a/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php b/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php index c0668ad4..452b6b0a 100644 --- a/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php +++ b/modules/Analytics/Database/Migrations/2017-12-01-210000_add_analytics_website_procedure.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Analytics\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddAnalyticsWebsiteProcedure extends Migration +class AddAnalyticsWebsiteProcedure extends BaseMigration { public function up(): void { diff --git a/modules/Auth/Database/Migrations/2020-12-29-100000_add_is_owner_to_users.php b/modules/Auth/Database/Migrations/2020-12-29-100000_add_is_owner_to_users.php index 2257990e..0e12311f 100644 --- a/modules/Auth/Database/Migrations/2020-12-29-100000_add_is_owner_to_users.php +++ b/modules/Auth/Database/Migrations/2020-12-29-100000_add_is_owner_to_users.php @@ -4,9 +4,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddIsOwnerToUsers extends Migration +class AddIsOwnerToUsers extends BaseMigration { public function up(): void { diff --git a/modules/Auth/Helpers/auth_helper.php b/modules/Auth/Helpers/auth_helper.php index 67cd2df2..f664f687 100644 --- a/modules/Auth/Helpers/auth_helper.php +++ b/modules/Auth/Helpers/auth_helper.php @@ -68,15 +68,15 @@ if (! function_exists('interact_as_actor')) { /** * Get the actor the user is currently interacting as */ - function interact_as_actor(): Actor | false + function interact_as_actor(): ?Actor { if (! auth()->loggedIn()) { - return false; + return null; } $session = session(); if (! $session->has('interact_as_actor_id')) { - return false; + return null; } return model(ActorModel::class, false)->getActorById($session->get('interact_as_actor_id')); diff --git a/modules/Fediverse/Controllers/PostController.php b/modules/Fediverse/Controllers/PostController.php index 9fcd74ac..6141f402 100644 --- a/modules/Fediverse/Controllers/PostController.php +++ b/modules/Fediverse/Controllers/PostController.php @@ -12,6 +12,7 @@ namespace Modules\Fediverse\Controllers; use CodeIgniter\Controller; use CodeIgniter\Exceptions\PageNotFoundException; +use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\ResponseInterface; @@ -23,6 +24,13 @@ use Modules\Fediverse\Objects\OrderedCollectionPage; class PostController extends Controller { + /** + * Instance of the main Request object. + * + * @var IncomingRequest + */ + protected $request; + /** * @var string[] */ diff --git a/modules/Fediverse/Core/AbstractObject.php b/modules/Fediverse/Core/AbstractObject.php index 85a837c5..122b1186 100644 --- a/modules/Fediverse/Core/AbstractObject.php +++ b/modules/Fediverse/Core/AbstractObject.php @@ -47,8 +47,8 @@ abstract class AbstractObject }); } - public function toJSON(): string | bool + public function toJSON(): string { - return json_encode($this->toArray(), JSON_UNESCAPED_UNICODE); + return (string) json_encode($this->toArray(), JSON_UNESCAPED_UNICODE); } } diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-010000_add_actors.php b/modules/Fediverse/Database/Migrations/2018-01-01-010000_add_actors.php index 1fb33d89..c2fa15d1 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-010000_add_actors.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-010000_add_actors.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddActors extends Migration +class AddActors extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-020000_add_posts.php b/modules/Fediverse/Database/Migrations/2018-01-01-020000_add_posts.php index f741d0e2..1f04ef2a 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-020000_add_posts.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-020000_add_posts.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddPosts extends Migration +class AddPosts extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_activities.php b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_activities.php index 84fe7595..2baa67c9 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_activities.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_activities.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddActivities extends Migration +class AddActivities extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_favourites.php b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_favourites.php index bead0fbf..33aaa898 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_favourites.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_favourites.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddFavourites extends Migration +class AddFavourites extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_follows.php b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_follows.php index ee60a55a..9704a7a8 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_follows.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_follows.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddFollowers extends Migration +class AddFollowers extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_preview_cards.php b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_preview_cards.php index 91c1b952..9f143184 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_preview_cards.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-100000_add_preview_cards.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddPreviewCards extends Migration +class AddPreviewCards extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-110000_add_posts_preview_cards.php b/modules/Fediverse/Database/Migrations/2018-01-01-110000_add_posts_preview_cards.php index 51c3b2e1..d6719bcc 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-110000_add_posts_preview_cards.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-110000_add_posts_preview_cards.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddPostsPreviewCards extends Migration +class AddPostsPreviewCards extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-120000_add_blocked_domains.php b/modules/Fediverse/Database/Migrations/2018-01-01-120000_add_blocked_domains.php index 9b438815..df4d15b2 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-120000_add_blocked_domains.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-120000_add_blocked_domains.php @@ -12,9 +12,9 @@ declare(strict_types=1); namespace Modules\Fediverse\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddBlockedDomains extends Migration +class AddBlockedDomains extends BaseMigration { public function up(): void { diff --git a/modules/Fediverse/Database/Migrations/2018-01-01-130000_add_notifications.php b/modules/Fediverse/Database/Migrations/2018-01-01-130000_add_notifications.php index bbc355a9..78b0ab24 100644 --- a/modules/Fediverse/Database/Migrations/2018-01-01-130000_add_notifications.php +++ b/modules/Fediverse/Database/Migrations/2018-01-01-130000_add_notifications.php @@ -12,9 +12,7 @@ declare(strict_types=1); namespace App\Database\Migrations; -use CodeIgniter\Database\Migration; - -class AddNotifications extends Migration +class AddNotifications extends BaseMigration { public function up(): void { diff --git a/modules/Media/Database/Migrations/2021-05-29-120000_add_media.php b/modules/Media/Database/Migrations/2021-05-29-120000_add_media.php index c5b24c70..9a0bb26e 100644 --- a/modules/Media/Database/Migrations/2021-05-29-120000_add_media.php +++ b/modules/Media/Database/Migrations/2021-05-29-120000_add_media.php @@ -10,9 +10,9 @@ declare(strict_types=1); namespace Media\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddMedia extends Migration +class AddMedia extends BaseMigration { public function up(): void { diff --git a/modules/Media/Database/Migrations/2022-30-12-180000_rename_media_file_path.php b/modules/Media/Database/Migrations/2022-30-12-180000_rename_media_file_path.php index 7a8cc61c..1cd9c196 100644 --- a/modules/Media/Database/Migrations/2022-30-12-180000_rename_media_file_path.php +++ b/modules/Media/Database/Migrations/2022-30-12-180000_rename_media_file_path.php @@ -10,9 +10,9 @@ declare(strict_types=1); namespace Media\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class RenameMediafileKey extends Migration +class RenameMediafileKey extends BaseMigration { public function up(): void { diff --git a/modules/PremiumPodcasts/Database/Migrations/2022-07-07-120000_add_subscriptions.php b/modules/PremiumPodcasts/Database/Migrations/2022-07-07-120000_add_subscriptions.php index b3b8716a..5f7abaaa 100644 --- a/modules/PremiumPodcasts/Database/Migrations/2022-07-07-120000_add_subscriptions.php +++ b/modules/PremiumPodcasts/Database/Migrations/2022-07-07-120000_add_subscriptions.php @@ -10,9 +10,9 @@ declare(strict_types=1); namespace Modules\PremiumPodcasts\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddSubscriptions extends Migration +class AddSubscriptions extends BaseMigration { public function up(): void { diff --git a/modules/WebSub/Database/Migrations/2022-03-07-180000_add_is_published_on_hubs_to_podcasts.php b/modules/WebSub/Database/Migrations/2022-03-07-180000_add_is_published_on_hubs_to_podcasts.php index fb3d68ca..b58a75a0 100644 --- a/modules/WebSub/Database/Migrations/2022-03-07-180000_add_is_published_on_hubs_to_podcasts.php +++ b/modules/WebSub/Database/Migrations/2022-03-07-180000_add_is_published_on_hubs_to_podcasts.php @@ -10,9 +10,9 @@ declare(strict_types=1); namespace Modules\WebSub\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddIsPublishedOnHubsToPodcasts extends Migration +class AddIsPublishedOnHubsToPodcasts extends BaseMigration { public function up(): void { diff --git a/modules/WebSub/Database/Migrations/2022-03-07-181500_add_is_published_on_hubs_to_episodes.php b/modules/WebSub/Database/Migrations/2022-03-07-181500_add_is_published_on_hubs_to_episodes.php index dfe92a08..67a18ab4 100644 --- a/modules/WebSub/Database/Migrations/2022-03-07-181500_add_is_published_on_hubs_to_episodes.php +++ b/modules/WebSub/Database/Migrations/2022-03-07-181500_add_is_published_on_hubs_to_episodes.php @@ -10,9 +10,9 @@ declare(strict_types=1); namespace Modules\WebSub\Database\Migrations; -use CodeIgniter\Database\Migration; +use App\Database\Migrations\BaseMigration; -class AddIsPublishedOnHubsToEpisodes extends Migration +class AddIsPublishedOnHubsToEpisodes extends BaseMigration { public function up(): void { diff --git a/phpstan.neon b/phpstan.neon index 8b88ce7b..b6877ff9 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -27,7 +27,4 @@ parameters: - ENVIRONMENT - SODIUM_LIBRARY_VERSION ignoreErrors: - - '#Cannot access property [\$a-z_]+ on ((array\|)?object)#' - - '#^Call to an undefined method CodeIgniter\\Database\\ConnectionInterface#' - '#^Access to an undefined property Modules\\Media\\Entities\\Image#' - - '#^Call to an undefined method CodeIgniter\\HTTP\\RequestInterface#' diff --git a/tests/database/ExampleDatabaseTest.php b/tests/database/ExampleDatabaseTest.php index 0108160d..134c4ffd 100644 --- a/tests/database/ExampleDatabaseTest.php +++ b/tests/database/ExampleDatabaseTest.php @@ -36,6 +36,11 @@ class ExampleDatabaseTest extends CIUnitTestCase $this->setPrivateProperty($model, 'tempUseSoftDeletes', true); $object = $model->first(); + + if (! is_object($object)) { + return; + } + $model->delete($object->id); // The model should no longer find it