refactor: add strict types declaration before each file and fix activitypub issues
fix some style issues
This commit is contained in:
parent
76afc0cfa2
commit
c72f4be6d8
17
INSTALL.md
17
INSTALL.md
|
@ -7,10 +7,10 @@ or shared hosting, you can install it on most PHP-MySQL compatible web servers.
|
||||||
|
|
||||||
- [Install instructions](#install-instructions)
|
- [Install instructions](#install-instructions)
|
||||||
- [0. Pre-requisites](#0-pre-requisites)
|
- [0. Pre-requisites](#0-pre-requisites)
|
||||||
- [1. Install Wizard](#1-install-wizard)
|
- [(recommended) Install Wizard](#recommended-install-wizard)
|
||||||
- [1-alt Manual configuration](#1-alt-manual-configuration)
|
- [(alternative) Manual configuration](#alternative-manual-configuration)
|
||||||
- [Web Server Requirements](#web-server-requirements)
|
- [Web Server Requirements](#web-server-requirements)
|
||||||
- [PHP v8.0 or higher](#php-v73-or-higher)
|
- [PHP v8.0 or higher](#php-v80-or-higher)
|
||||||
- [MySQL compatible database](#mysql-compatible-database)
|
- [MySQL compatible database](#mysql-compatible-database)
|
||||||
- [Privileges](#privileges)
|
- [Privileges](#privileges)
|
||||||
- [(Optional) Other recommendations](#optional-other-recommendations)
|
- [(Optional) Other recommendations](#optional-other-recommendations)
|
||||||
|
@ -39,17 +39,20 @@ or shared hosting, you can install it on most PHP-MySQL compatible web servers.
|
||||||
> ⚠️ Social features will not work properly if you do not set the task. It is
|
> ⚠️ Social features will not work properly if you do not set the task. It is
|
||||||
> used to broadcast social activities to the fediverse.
|
> used to broadcast social activities to the fediverse.
|
||||||
|
|
||||||
### 1. Install Wizard
|
### (recommended) Install Wizard
|
||||||
|
|
||||||
1. Run the Castopod Host install script by going to the install wizard page
|
1. Run the Castopod Host install script by going to the install wizard page
|
||||||
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
|
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
|
||||||
2. Follow the instructions on your screen.
|
2. Follow the instructions on your screen.
|
||||||
3. Start podcasting!
|
3. Start podcasting!
|
||||||
|
|
||||||
### 1-alt Manual configuration
|
> **Note:**
|
||||||
|
>
|
||||||
|
> The install script writes a `.env` file in the package root. If you cannot go
|
||||||
|
> through the install wizard, you can
|
||||||
|
> [create and update the `.env` file manually](#alternative-manual-configuration).
|
||||||
|
|
||||||
The install script writes a `.env` file in the package root. If you cannot go
|
### (alternative) Manual configuration
|
||||||
through the install wizard, you can create and update the `.env` file yourself:
|
|
||||||
|
|
||||||
1. Rename the `.env.example` file to `.env` and update the default values with
|
1. Rename the `.env.example` file to `.env` and update the default values with
|
||||||
your own.
|
your own.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Authorization;
|
namespace App\Authorization;
|
||||||
|
|
||||||
use Myth\Auth\Authorization\FlatAuthorization as MythAuthFlatAuthorization;
|
use Myth\Auth\Authorization\FlatAuthorization as MythAuthFlatAuthorization;
|
||||||
|
@ -26,7 +28,7 @@ class FlatAuthorization extends MythAuthFlatAuthorization
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->permissionModel->doesGroupHavePermission($groupId, $permissionId,);
|
return $this->permissionModel->doesGroupHavePermission($groupId, $permissionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Authorization;
|
namespace App\Authorization;
|
||||||
|
|
||||||
use Myth\Auth\Authorization\GroupModel as MythAuthGroupModel;
|
use Myth\Auth\Authorization\GroupModel as MythAuthGroupModel;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Authorization;
|
namespace App\Authorization;
|
||||||
|
|
||||||
use Myth\Auth\Authorization\PermissionModel as MythAuthPermissionModel;
|
use Myth\Auth\Authorization\PermissionModel as MythAuthPermissionModel;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The goal of this file is to allow developers a location where they can overwrite core procedural functions and
|
* The goal of this file is to allow developers a location where they can overwrite core procedural functions and
|
||||||
* replace them with their own. This file is loaded during the bootstrap process and is called during the frameworks
|
* replace them with their own. This file is loaded during the bootstrap process and is called during the frameworks
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use ActivityPub\Config\ActivityPub as ActivityPubBase;
|
use ActivityPub\Config\ActivityPub as ActivityPubBase;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use Analytics\Config\Analytics as AnalyticsBase;
|
use Analytics\Config\Analytics as AnalyticsBase;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use Myth\Auth\Config\Auth as MythAuthConfig;
|
use Myth\Auth\Config\Auth as MythAuthConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\AutoloadConfig;
|
use CodeIgniter\Config\AutoloadConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* ERROR DISPLAY
|
* ERROR DISPLAY
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* ERROR DISPLAY
|
* ERROR DISPLAY
|
||||||
|
@ -8,7 +10,7 @@
|
||||||
* it and display a generic error message.
|
* it and display a generic error message.
|
||||||
*/
|
*/
|
||||||
ini_set('display_errors', '0');
|
ini_set('display_errors', '0');
|
||||||
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED,);
|
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* ERROR DISPLAY
|
* ERROR DISPLAY
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Cache\Handlers\DummyHandler;
|
use CodeIgniter\Cache\Handlers\DummyHandler;
|
||||||
|
@ -74,6 +76,19 @@ class Cache extends BaseConfig
|
||||||
*/
|
*/
|
||||||
public string $prefix = '';
|
public string $prefix = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Default TTL
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* The default number of seconds to save items when none is specified.
|
||||||
|
*
|
||||||
|
* WARNING: This is not used by framework handlers where 60 seconds is
|
||||||
|
* hard-coded, but may be useful to projects and modules. This will replace
|
||||||
|
* the hard-coded value in a future release.
|
||||||
|
*/
|
||||||
|
public int $ttl = 60;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --------------------------------------------------------------------------
|
* --------------------------------------------------------------------------
|
||||||
* File settings
|
* File settings
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
| --------------------------------------------------------------------
|
| --------------------------------------------------------------------
|
||||||
| Castopod Version
|
| Castopod Version
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Database\Config;
|
use CodeIgniter\Database\Config;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
class DocTypes
|
class DocTypes
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use App\Entities\Actor;
|
use App\Entities\Actor;
|
||||||
|
@ -50,7 +52,7 @@ Events::on('pre_system', function () {
|
||||||
* @phpstan-ignore-next-line
|
* @phpstan-ignore-next-line
|
||||||
*/
|
*/
|
||||||
if (CI_DEBUG && ! is_cli()) {
|
if (CI_DEBUG && ! is_cli()) {
|
||||||
Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect',);
|
Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect');
|
||||||
Services::toolbar()->respond();
|
Services::toolbar()->respond();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -76,47 +78,109 @@ Events::on('logout', function (User $user): void {
|
||||||
* --------------------------------------------------------------------
|
* --------------------------------------------------------------------
|
||||||
* ActivityPub events
|
* ActivityPub events
|
||||||
* --------------------------------------------------------------------
|
* --------------------------------------------------------------------
|
||||||
* Update episode metadata counts
|
|
||||||
*/
|
*/
|
||||||
Events::on('on_note_add', function (Note $note): void {
|
/**
|
||||||
|
* @param Actor $actor
|
||||||
|
* @param Actor $targetActor
|
||||||
|
*/
|
||||||
|
Events::on('on_follow', function ($actor, $targetActor): void {
|
||||||
|
if ($actor->is_podcast) {
|
||||||
|
cache()
|
||||||
|
->deleteMatching("podcast#{$actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($targetActor->is_podcast) {
|
||||||
|
cache()
|
||||||
|
->deleteMatching("podcast#{$targetActor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$targetActor->podcast->id}*");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Actor $actor
|
||||||
|
* @param Actor $targetActor
|
||||||
|
*/
|
||||||
|
Events::on('on_undo_follow', function ($actor, $targetActor): void {
|
||||||
|
if ($actor->is_podcast) {
|
||||||
|
cache()
|
||||||
|
->deleteMatching("podcast#{$actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($targetActor->is_podcast) {
|
||||||
|
cache()
|
||||||
|
->deleteMatching("podcast#{$targetActor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$targetActor->podcast->id}*");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Note $note
|
||||||
|
*/
|
||||||
|
Events::on('on_note_add', function ($note): void {
|
||||||
|
if ($note->is_reply) {
|
||||||
|
$note = $note->reply_to_note;
|
||||||
|
}
|
||||||
|
|
||||||
if ($note->episode_id) {
|
if ($note->episode_id) {
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $note->episode_id)
|
->where('id', $note->episode_id)
|
||||||
->increment('notes_total');
|
->increment('notes_total');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Removing all of the podcast pages is a bit overkill, but works perfectly
|
if ($note->actor->is_podcast) {
|
||||||
// same for other events below
|
// Removing all of the podcast pages is a bit overkill, but works to avoid caching bugs
|
||||||
cache()
|
// same for other events below
|
||||||
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_note_remove', function (Note $note): void {
|
/**
|
||||||
if ($note->episode_id) {
|
* @param Note $note
|
||||||
|
*/
|
||||||
|
Events::on('on_note_remove', function ($note): void {
|
||||||
|
if ($note->is_reply) {
|
||||||
|
Events::trigger('on_note_remove', $note->reply_to_note);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($episodeId = $note->episode_id) {
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $note->episode_id)
|
->where('id', $episodeId)
|
||||||
->decrement('notes_total', 1 + $note->reblogs_count);
|
->decrement('notes_total', 1 + $note->reblogs_count);
|
||||||
|
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $note->episode_id)
|
->where('id', $episodeId)
|
||||||
->decrement('reblogs_total', $note->reblogs_count);
|
->decrement('reblogs_total', $note->reblogs_count);
|
||||||
|
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $note->episode_id)
|
->where('id', $episodeId)
|
||||||
->decrement('favourites_total', $note->favourites_count);
|
->decrement('favourites_total', $note->favourites_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_note_reblog', function (Actor $actor, Note $note): void {
|
/**
|
||||||
|
* @param Actor $actor
|
||||||
|
* @param Note $note
|
||||||
|
*/
|
||||||
|
Events::on('on_note_reblog', function ($actor, $note): void {
|
||||||
if ($episodeId = $note->episode_id) {
|
if ($episodeId = $note->episode_id) {
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $episodeId)
|
->where('id', $episodeId)
|
||||||
|
@ -127,19 +191,31 @@ Events::on('on_note_reblog', function (Actor $actor, Note $note): void {
|
||||||
->increment('notes_total');
|
->increment('notes_total');
|
||||||
}
|
}
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($actor->is_podcast) {
|
||||||
|
cache()->deleteMatching("podcast#{$actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
|
|
||||||
if ($actor->is_podcast) {
|
if ($note->is_reply) {
|
||||||
cache()->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
cache()->deleteMatching("page_note#{$note->in_reply_to_id}");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_note_undo_reblog', function (Note $reblogNote): void {
|
/**
|
||||||
|
* @param Note $reblogNote
|
||||||
|
*/
|
||||||
|
Events::on('on_note_undo_reblog', function ($reblogNote): void {
|
||||||
$note = $reblogNote->reblog_of_note;
|
$note = $reblogNote->reblog_of_note;
|
||||||
if ($episodeId = $note->episode_id) {
|
if ($episodeId = $note->episode_id) {
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
|
@ -151,74 +227,128 @@ Events::on('on_note_undo_reblog', function (Note $reblogNote): void {
|
||||||
->decrement('notes_total');
|
->decrement('notes_total');
|
||||||
}
|
}
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_note#{$reblogNote->id}*");
|
||||||
|
|
||||||
|
if ($note->is_reply) {
|
||||||
|
cache()->deleteMatching("page_note#{$note->in_reply_to_id}");
|
||||||
|
}
|
||||||
|
|
||||||
if ($reblogNote->actor->is_podcast) {
|
if ($reblogNote->actor->is_podcast) {
|
||||||
cache()->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*",);
|
cache()
|
||||||
|
->deleteMatching("podcast#{$reblogNote->actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_note_reply', function (Note $reply): void {
|
/**
|
||||||
|
* @param Note $reply
|
||||||
|
*/
|
||||||
|
Events::on('on_note_reply', function ($reply): void {
|
||||||
$note = $reply->reply_to_note;
|
$note = $reply->reply_to_note;
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_reply_remove', function (Note $reply): void {
|
/**
|
||||||
|
* @param Note $reply
|
||||||
|
*/
|
||||||
|
Events::on('on_reply_remove', function ($reply): void {
|
||||||
$note = $reply->reply_to_note;
|
$note = $reply->reply_to_note;
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_note#{$reply->id}*");
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_note_favourite', function (Actor $actor, Note $note): void {
|
/**
|
||||||
|
* @param Actor $actor
|
||||||
|
* @param Note $note
|
||||||
|
*/
|
||||||
|
Events::on('on_note_favourite', function ($actor, $note): void {
|
||||||
if ($note->episode_id) {
|
if ($note->episode_id) {
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $note->episode_id)
|
->where('id', $note->episode_id)
|
||||||
->increment('favourites_total');
|
->increment('favourites_total');
|
||||||
}
|
}
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
|
|
||||||
if ($note->in_reply_to_id) {
|
if ($note->is_reply) {
|
||||||
cache()->deleteMatching("page_note#{$note->in_reply_to_id}*");
|
cache()->deleteMatching("page_note#{$note->in_reply_to_id}*");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($actor->is_podcast) {
|
||||||
|
cache()->deleteMatching("podcast#{$actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_note_undo_favourite', function (Actor $actor, Note $note): void {
|
/**
|
||||||
|
* @param Actor $actor
|
||||||
|
* @param Note $note
|
||||||
|
*/
|
||||||
|
Events::on('on_note_undo_favourite', function ($actor, $note): void {
|
||||||
if ($note->episode_id) {
|
if ($note->episode_id) {
|
||||||
model('EpisodeModel')
|
model('EpisodeModel')
|
||||||
->where('id', $note->episode_id)
|
->where('id', $note->episode_id)
|
||||||
->decrement('favourites_total');
|
->decrement('favourites_total');
|
||||||
}
|
}
|
||||||
|
|
||||||
cache()
|
if ($note->actor->is_podcast) {
|
||||||
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
cache()
|
||||||
cache()
|
->deleteMatching("podcast#{$note->actor->podcast->id}*");
|
||||||
->deleteMatching("podcast#{$actor->podcast->id}*");
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$note->actor->podcast->id}*");
|
||||||
|
}
|
||||||
|
|
||||||
cache()
|
cache()
|
||||||
->deleteMatching("page_note#{$note->id}*");
|
->deleteMatching("page_note#{$note->id}*");
|
||||||
|
|
||||||
if ($note->in_reply_to_id) {
|
if ($note->is_reply) {
|
||||||
cache()->deleteMatching("page_note#{$note->in_reply_to_id}*");
|
cache()->deleteMatching("page_note#{$note->in_reply_to_id}*");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($actor->is_podcast) {
|
||||||
|
cache()->deleteMatching("podcast#{$actor->podcast->id}*");
|
||||||
|
cache()
|
||||||
|
->deleteMatching("page_podcast#{$actor->podcast->id}*");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events::on('on_block_actor', function (int $actorId): void {
|
Events::on('on_block_actor', function (int $actorId): void {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use ActivityPub\Filters\ActivityPubFilter;
|
use ActivityPub\Filters\ActivityPubFilter;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\ForeignCharacters as BaseForeignCharacters;
|
use CodeIgniter\Config\ForeignCharacters as BaseForeignCharacters;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Modules\Modules as BaseModules;
|
use CodeIgniter\Modules\Modules as BaseModules;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
// Create a new instance of our RouteCollection class.
|
// Create a new instance of our RouteCollection class.
|
||||||
|
@ -34,7 +36,7 @@ $routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,191}');
|
||||||
$routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}');
|
$routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}');
|
||||||
$routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding');
|
$routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding');
|
||||||
$routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply');
|
$routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply');
|
||||||
$routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent',);
|
$routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent');
|
||||||
$routes->addPlaceholder(
|
$routes->addPlaceholder(
|
||||||
'uuid',
|
'uuid',
|
||||||
'[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}',
|
'[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}',
|
||||||
|
@ -59,10 +61,10 @@ $routes->group(config('App')->installGateway, function ($routes): void {
|
||||||
]);
|
]);
|
||||||
$routes->post('instance-config', 'InstallController::attemptInstanceConfig', [
|
$routes->post('instance-config', 'InstallController::attemptInstanceConfig', [
|
||||||
'as' => 'instance-config',
|
'as' => 'instance-config',
|
||||||
],);
|
]);
|
||||||
$routes->post('database-config', 'InstallController::attemptDatabaseConfig', [
|
$routes->post('database-config', 'InstallController::attemptDatabaseConfig', [
|
||||||
'as' => 'database-config',
|
'as' => 'database-config',
|
||||||
],);
|
]);
|
||||||
$routes->post('cache-config', 'InstallController::attemptCacheConfig', [
|
$routes->post('cache-config', 'InstallController::attemptCacheConfig', [
|
||||||
'as' => 'cache-config',
|
'as' => 'cache-config',
|
||||||
]);
|
]);
|
||||||
|
@ -626,7 +628,7 @@ $routes->group(
|
||||||
'as' => 'change-password',
|
'as' => 'change-password',
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
$routes->post('change-password', 'MyAccountController::attemptChange/$1',);
|
$routes->post('change-password', 'MyAccountController::attemptChange/$1');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use App\Authorization\FlatAuthorization;
|
use App\Authorization\FlatAuthorization;
|
||||||
|
@ -76,7 +78,7 @@ class Services extends BaseService
|
||||||
bool $getShared = true
|
bool $getShared = true
|
||||||
) {
|
) {
|
||||||
if ($getShared) {
|
if ($getShared) {
|
||||||
return self::getSharedInstance('authentication', $lib, $userModel, $loginModel,);
|
return self::getSharedInstance('authentication', $lib, $userModel, $loginModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
// config() checks first in app/Config
|
// config() checks first in app/Config
|
||||||
|
@ -108,7 +110,7 @@ class Services extends BaseService
|
||||||
bool $getShared = true
|
bool $getShared = true
|
||||||
) {
|
) {
|
||||||
if ($getShared) {
|
if ($getShared) {
|
||||||
return self::getSharedInstance('authorization', $groupModel, $permissionModel, $userModel,);
|
return self::getSharedInstance('authorization', $groupModel, $permissionModel, $userModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($groupModel === null) {
|
if ($groupModel === null) {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\BaseConfig;
|
use CodeIgniter\Config\BaseConfig;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use App\Validation\FileRules as AppFileRules;
|
use App\Validation\FileRules as AppFileRules;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Config;
|
namespace Config;
|
||||||
|
|
||||||
use CodeIgniter\Config\View as BaseView;
|
use CodeIgniter\Config\View as BaseView;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -24,6 +26,7 @@ class ActorController extends ActivityPubActorController
|
||||||
{
|
{
|
||||||
// Prevent analytics hit when authenticated
|
// Prevent analytics hit when authenticated
|
||||||
if (! can_user_interact()) {
|
if (! can_user_interact()) {
|
||||||
|
// @phpstan-ignore-next-line
|
||||||
$this->registerPodcastWebpageHit($this->actor->podcast->id);
|
$this->registerPodcastWebpageHit($this->actor->podcast->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Controllers\Admin;
|
namespace App\Controllers\Admin;
|
||||||
|
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -161,7 +163,7 @@ class EpisodeController extends BaseController
|
||||||
) {
|
) {
|
||||||
$newEpisode->transcript_file = $transcriptFile;
|
$newEpisode->transcript_file = $transcriptFile;
|
||||||
} elseif ($transcriptChoice === 'remote-url') {
|
} elseif ($transcriptChoice === 'remote-url') {
|
||||||
$newEpisode->transcript_file_remote_url = $this->request->getPost('transcript_file_remote_url',);
|
$newEpisode->transcript_file_remote_url = $this->request->getPost('transcript_file_remote_url');
|
||||||
}
|
}
|
||||||
|
|
||||||
$chaptersChoice = $this->request->getPost('chapters-choice');
|
$chaptersChoice = $this->request->getPost('chapters-choice');
|
||||||
|
@ -171,7 +173,7 @@ class EpisodeController extends BaseController
|
||||||
) {
|
) {
|
||||||
$newEpisode->chapters_file = $chaptersFile;
|
$newEpisode->chapters_file = $chaptersFile;
|
||||||
} elseif ($chaptersChoice === 'remote-url') {
|
} elseif ($chaptersChoice === 'remote-url') {
|
||||||
$newEpisode->chapters_file_remote_url = $this->request->getPost('chapters_file_remote_url',);
|
$newEpisode->chapters_file_remote_url = $this->request->getPost('chapters_file_remote_url');
|
||||||
}
|
}
|
||||||
|
|
||||||
$episodeModel = new EpisodeModel();
|
$episodeModel = new EpisodeModel();
|
||||||
|
@ -187,7 +189,7 @@ class EpisodeController extends BaseController
|
||||||
$podcastModel = new PodcastModel();
|
$podcastModel = new PodcastModel();
|
||||||
|
|
||||||
if ($this->podcast->hasChanged('episode_description_footer_markdown')) {
|
if ($this->podcast->hasChanged('episode_description_footer_markdown')) {
|
||||||
$this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer',);
|
$this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer');
|
||||||
|
|
||||||
if (! $podcastModel->update($this->podcast->id, $this->podcast)) {
|
if (! $podcastModel->update($this->podcast->id, $this->podcast)) {
|
||||||
return redirect()
|
return redirect()
|
||||||
|
@ -237,8 +239,8 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
$this->episode->title = $this->request->getPost('title');
|
$this->episode->title = $this->request->getPost('title');
|
||||||
$this->episode->slug = $this->request->getPost('slug');
|
$this->episode->slug = $this->request->getPost('slug');
|
||||||
$this->episode->description_markdown = $this->request->getPost('description',);
|
$this->episode->description_markdown = $this->request->getPost('description');
|
||||||
$this->episode->location = new Location($this->request->getPost('location_name'),);
|
$this->episode->location = new Location($this->request->getPost('location_name'));
|
||||||
$this->episode->parental_advisory =
|
$this->episode->parental_advisory =
|
||||||
$this->request->getPost('parental_advisory') !== 'undefined'
|
$this->request->getPost('parental_advisory') !== 'undefined'
|
||||||
? $this->request->getPost('parental_advisory')
|
? $this->request->getPost('parental_advisory')
|
||||||
|
@ -251,7 +253,7 @@ class EpisodeController extends BaseController
|
||||||
: null;
|
: null;
|
||||||
$this->episode->type = $this->request->getPost('type');
|
$this->episode->type = $this->request->getPost('type');
|
||||||
$this->episode->is_blocked = $this->request->getPost('block') === 'yes';
|
$this->episode->is_blocked = $this->request->getPost('block') === 'yes';
|
||||||
$this->episode->custom_rss_string = $this->request->getPost('custom_rss',);
|
$this->episode->custom_rss_string = $this->request->getPost('custom_rss');
|
||||||
|
|
||||||
$this->episode->updated_by = (int) user_id();
|
$this->episode->updated_by = (int) user_id();
|
||||||
|
|
||||||
|
@ -278,7 +280,7 @@ class EpisodeController extends BaseController
|
||||||
(($transcriptFile = $this->episode->transcript_file) &&
|
(($transcriptFile = $this->episode->transcript_file) &&
|
||||||
$transcriptFile !== null)
|
$transcriptFile !== null)
|
||||||
) {
|
) {
|
||||||
unlink($transcriptFile);
|
unlink((string) $transcriptFile);
|
||||||
$this->episode->transcript_file_path = null;
|
$this->episode->transcript_file_path = null;
|
||||||
}
|
}
|
||||||
$this->episode->transcript_file_remote_url = $transcriptFileRemoteUrl;
|
$this->episode->transcript_file_remote_url = $transcriptFileRemoteUrl;
|
||||||
|
@ -297,7 +299,7 @@ class EpisodeController extends BaseController
|
||||||
(($chaptersFile = $this->episode->chapters_file) &&
|
(($chaptersFile = $this->episode->chapters_file) &&
|
||||||
$chaptersFile !== null)
|
$chaptersFile !== null)
|
||||||
) {
|
) {
|
||||||
unlink($chaptersFile);
|
unlink((string) $chaptersFile);
|
||||||
$this->episode->chapters_file_path = null;
|
$this->episode->chapters_file_path = null;
|
||||||
}
|
}
|
||||||
$this->episode->chapters_file_remote_url = $chaptersFileRemoteUrl;
|
$this->episode->chapters_file_remote_url = $chaptersFileRemoteUrl;
|
||||||
|
@ -313,7 +315,7 @@ class EpisodeController extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
// update podcast's episode_description_footer_markdown if changed
|
// update podcast's episode_description_footer_markdown if changed
|
||||||
$this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer',);
|
$this->podcast->episode_description_footer_markdown = $this->request->getPost('description_footer');
|
||||||
|
|
||||||
if ($this->podcast->hasChanged('episode_description_footer_markdown')) {
|
if ($this->podcast->hasChanged('episode_description_footer_markdown')) {
|
||||||
$podcastModel = new PodcastModel();
|
$podcastModel = new PodcastModel();
|
||||||
|
@ -330,7 +332,7 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
public function transcriptDelete(): RedirectResponse
|
public function transcriptDelete(): RedirectResponse
|
||||||
{
|
{
|
||||||
unlink($this->episode->transcript_file);
|
unlink((string) $this->episode->transcript_file);
|
||||||
$this->episode->transcript_file_path = null;
|
$this->episode->transcript_file_path = null;
|
||||||
|
|
||||||
$episodeModel = new EpisodeModel();
|
$episodeModel = new EpisodeModel();
|
||||||
|
@ -347,7 +349,7 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
public function chaptersDelete(): RedirectResponse
|
public function chaptersDelete(): RedirectResponse
|
||||||
{
|
{
|
||||||
unlink($this->episode->chapters_file);
|
unlink((string) $this->episode->chapters_file);
|
||||||
$this->episode->chapters_file_path = null;
|
$this->episode->chapters_file_path = null;
|
||||||
|
|
||||||
$episodeModel = new EpisodeModel();
|
$episodeModel = new EpisodeModel();
|
||||||
|
@ -409,7 +411,7 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
$publishMethod = $this->request->getPost('publication_method');
|
$publishMethod = $this->request->getPost('publication_method');
|
||||||
if ($publishMethod === 'schedule') {
|
if ($publishMethod === 'schedule') {
|
||||||
$scheduledPublicationDate = $this->request->getPost('scheduled_publication_date',);
|
$scheduledPublicationDate = $this->request->getPost('scheduled_publication_date');
|
||||||
if ($scheduledPublicationDate) {
|
if ($scheduledPublicationDate) {
|
||||||
$this->episode->published_at = Time::createFromFormat(
|
$this->episode->published_at = Time::createFromFormat(
|
||||||
'Y-m-d H:i',
|
'Y-m-d H:i',
|
||||||
|
@ -498,7 +500,7 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
$publishMethod = $this->request->getPost('publication_method');
|
$publishMethod = $this->request->getPost('publication_method');
|
||||||
if ($publishMethod === 'schedule') {
|
if ($publishMethod === 'schedule') {
|
||||||
$scheduledPublicationDate = $this->request->getPost('scheduled_publication_date',);
|
$scheduledPublicationDate = $this->request->getPost('scheduled_publication_date');
|
||||||
if ($scheduledPublicationDate) {
|
if ($scheduledPublicationDate) {
|
||||||
$this->episode->published_at = Time::createFromFormat(
|
$this->episode->published_at = Time::createFromFormat(
|
||||||
'Y-m-d H:i',
|
'Y-m-d H:i',
|
||||||
|
@ -516,7 +518,7 @@ class EpisodeController extends BaseController
|
||||||
$this->episode->published_at = Time::now();
|
$this->episode->published_at = Time::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
$note = (new NoteModel())->getNoteById($this->request->getPost('note_id'),);
|
$note = (new NoteModel())->getNoteById($this->request->getPost('note_id'));
|
||||||
|
|
||||||
if ($note !== null) {
|
if ($note !== null) {
|
||||||
$note->message = $this->request->getPost('message');
|
$note->message = $this->request->getPost('message');
|
||||||
|
@ -688,7 +690,7 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
public function soundbiteDelete(int $soundbiteId): RedirectResponse
|
public function soundbiteDelete(int $soundbiteId): RedirectResponse
|
||||||
{
|
{
|
||||||
(new SoundbiteModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbiteId,);
|
(new SoundbiteModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbiteId);
|
||||||
|
|
||||||
return redirect()->route('soundbites-edit', [$this->podcast->id, $this->episode->id]);
|
return redirect()->route('soundbites-edit', [$this->podcast->id, $this->episode->id]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -88,7 +90,7 @@ class EpisodePersonController extends BaseController
|
||||||
|
|
||||||
public function remove(int $personId): RedirectResponse
|
public function remove(int $personId): RedirectResponse
|
||||||
{
|
{
|
||||||
(new PersonModel())->removePersonFromEpisode($this->podcast->id, $this->episode->id, $personId,);
|
(new PersonModel())->removePersonFromEpisode($this->podcast->id, $this->episode->id, $personId);
|
||||||
|
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -74,7 +76,7 @@ class PageController extends BaseController
|
||||||
->route('page-list')
|
->route('page-list')
|
||||||
->with('message', lang('Page.messages.createSuccess', [
|
->with('message', lang('Page.messages.createSuccess', [
|
||||||
'pageTitle' => $page->title,
|
'pageTitle' => $page->title,
|
||||||
]),);
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edit(): string
|
public function edit(): string
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2021 Podlibre
|
* @copyright 2021 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -126,7 +128,7 @@ class PersonController extends BaseController
|
||||||
|
|
||||||
$this->person->full_name = $this->request->getPost('full_name');
|
$this->person->full_name = $this->request->getPost('full_name');
|
||||||
$this->person->unique_name = $this->request->getPost('unique_name');
|
$this->person->unique_name = $this->request->getPost('unique_name');
|
||||||
$this->person->information_url = $this->request->getPost('information_url',);
|
$this->person->information_url = $this->request->getPost('information_url');
|
||||||
$imageFile = $this->request->getFile('image');
|
$imageFile = $this->request->getFile('image');
|
||||||
if ($imageFile !== null && $imageFile->isValid()) {
|
if ($imageFile !== null && $imageFile->isValid()) {
|
||||||
$this->person->image = new Image($imageFile);
|
$this->person->image = new Image($imageFile);
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -225,7 +227,7 @@ class PodcastController extends BaseController
|
||||||
$authorize = Services::authorization();
|
$authorize = Services::authorization();
|
||||||
$podcastAdminGroup = $authorize->group('podcast_admin');
|
$podcastAdminGroup = $authorize->group('podcast_admin');
|
||||||
|
|
||||||
$podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id,);
|
$podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id);
|
||||||
|
|
||||||
// set Podcast categories
|
// set Podcast categories
|
||||||
(new CategoryModel())->setPodcastCategories(
|
(new CategoryModel())->setPodcastCategories(
|
||||||
|
@ -276,7 +278,7 @@ class PodcastController extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->podcast->title = $this->request->getPost('title');
|
$this->podcast->title = $this->request->getPost('title');
|
||||||
$this->podcast->description_markdown = $this->request->getPost('description',);
|
$this->podcast->description_markdown = $this->request->getPost('description');
|
||||||
|
|
||||||
$image = $this->request->getFile('image');
|
$image = $this->request->getFile('image');
|
||||||
if ($image !== null && $image->isValid()) {
|
if ($image !== null && $image->isValid()) {
|
||||||
|
@ -293,12 +295,12 @@ class PodcastController extends BaseController
|
||||||
$this->podcast->owner_email = $this->request->getPost('owner_email');
|
$this->podcast->owner_email = $this->request->getPost('owner_email');
|
||||||
$this->podcast->type = $this->request->getPost('type');
|
$this->podcast->type = $this->request->getPost('type');
|
||||||
$this->podcast->copyright = $this->request->getPost('copyright');
|
$this->podcast->copyright = $this->request->getPost('copyright');
|
||||||
$this->podcast->location = new Location($this->request->getPost('location_name'),);
|
$this->podcast->location = new Location($this->request->getPost('location_name'));
|
||||||
$this->podcast->payment_pointer = $this->request->getPost('payment_pointer',);
|
$this->podcast->payment_pointer = $this->request->getPost('payment_pointer');
|
||||||
$this->podcast->custom_rss_string = $this->request->getPost('custom_rss',);
|
$this->podcast->custom_rss_string = $this->request->getPost('custom_rss');
|
||||||
$this->podcast->partner_id = $this->request->getPost('partner_id');
|
$this->podcast->partner_id = $this->request->getPost('partner_id');
|
||||||
$this->podcast->partner_link_url = $this->request->getPost('partner_link_url',);
|
$this->podcast->partner_link_url = $this->request->getPost('partner_link_url');
|
||||||
$this->podcast->partner_image_url = $this->request->getPost('partner_image_url',);
|
$this->podcast->partner_image_url = $this->request->getPost('partner_image_url');
|
||||||
$this->podcast->is_blocked = $this->request->getPost('block') === 'yes';
|
$this->podcast->is_blocked = $this->request->getPost('block') === 'yes';
|
||||||
$this->podcast->is_completed =
|
$this->podcast->is_completed =
|
||||||
$this->request->getPost('complete') === 'yes';
|
$this->request->getPost('complete') === 'yes';
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -78,7 +80,7 @@ class PodcastImportController extends BaseController
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ini_set('user_agent', 'Castopod/' . CP_VERSION);
|
ini_set('user_agent', 'Castopod/' . CP_VERSION);
|
||||||
$feed = simplexml_load_file($this->request->getPost('imported_feed_url'),);
|
$feed = simplexml_load_file($this->request->getPost('imported_feed_url'));
|
||||||
} catch (ErrorException $errorException) {
|
} catch (ErrorException $errorException) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
|
@ -92,11 +94,11 @@ class PodcastImportController extends BaseController
|
||||||
' ⎋</a>',
|
' ⎋</a>',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
$nsItunes = $feed->channel[0]->children('http://www.itunes.com/dtds/podcast-1.0.dtd',);
|
$nsItunes = $feed->channel[0]->children('http://www.itunes.com/dtds/podcast-1.0.dtd');
|
||||||
$nsPodcast = $feed->channel[0]->children(
|
$nsPodcast = $feed->channel[0]->children(
|
||||||
'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
|
'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
|
||||||
);
|
);
|
||||||
$nsContent = $feed->channel[0]->children('http://purl.org/rss/1.0/modules/content/',);
|
$nsContent = $feed->channel[0]->children('http://purl.org/rss/1.0/modules/content/');
|
||||||
|
|
||||||
if ((string) $nsPodcast->locked === 'yes') {
|
if ((string) $nsPodcast->locked === 'yes') {
|
||||||
return redirect()
|
return redirect()
|
||||||
|
@ -114,9 +116,9 @@ class PodcastImportController extends BaseController
|
||||||
property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
|
property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
|
||||||
$nsItunes->image->attributes()['href'] !== null
|
$nsItunes->image->attributes()['href'] !== null
|
||||||
) {
|
) {
|
||||||
$imageFile = download_file((string) $nsItunes->image->attributes()['href'],);
|
$imageFile = download_file((string) $nsItunes->image->attributes()['href']);
|
||||||
} else {
|
} else {
|
||||||
$imageFile = download_file((string) $feed->channel[0]->image->url,);
|
$imageFile = download_file((string) $feed->channel[0]->image->url);
|
||||||
}
|
}
|
||||||
|
|
||||||
$location = null;
|
$location = null;
|
||||||
|
@ -195,7 +197,7 @@ class PodcastImportController extends BaseController
|
||||||
$authorize = Services::authorization();
|
$authorize = Services::authorization();
|
||||||
$podcastAdminGroup = $authorize->group('podcast_admin');
|
$podcastAdminGroup = $authorize->group('podcast_admin');
|
||||||
|
|
||||||
$podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id,);
|
$podcastModel->addPodcastContributor(user_id(), $newPodcastId, $podcastAdminGroup->id);
|
||||||
|
|
||||||
$podcastsPlatformsData = [];
|
$podcastsPlatformsData = [];
|
||||||
$platformTypes = [
|
$platformTypes = [
|
||||||
|
@ -230,7 +232,7 @@ class PodcastImportController extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($podcastsPlatformsData) > 1) {
|
if (count($podcastsPlatformsData) > 1) {
|
||||||
$platformModel->createPodcastPlatforms($newPodcastId, $podcastsPlatformsData,);
|
$platformModel->createPodcastPlatforms($newPodcastId, $podcastsPlatformsData);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($nsPodcast->person as $podcastPerson) {
|
foreach ($nsPodcast->person as $podcastPerson) {
|
||||||
|
@ -291,11 +293,11 @@ class PodcastImportController extends BaseController
|
||||||
for ($itemNumber = 1; $itemNumber <= $lastItem; ++$itemNumber) {
|
for ($itemNumber = 1; $itemNumber <= $lastItem; ++$itemNumber) {
|
||||||
$item = $feed->channel[0]->item[$numberItems - $itemNumber];
|
$item = $feed->channel[0]->item[$numberItems - $itemNumber];
|
||||||
|
|
||||||
$nsItunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd',);
|
$nsItunes = $item->children('http://www.itunes.com/dtds/podcast-1.0.dtd');
|
||||||
$nsPodcast = $item->children(
|
$nsPodcast = $item->children(
|
||||||
'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
|
'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md',
|
||||||
);
|
);
|
||||||
$nsContent = $item->children('http://purl.org/rss/1.0/modules/content/',);
|
$nsContent = $item->children('http://purl.org/rss/1.0/modules/content/');
|
||||||
|
|
||||||
$slug = slugify(
|
$slug = slugify(
|
||||||
$this->request->getPost('slug_field') === 'title'
|
$this->request->getPost('slug_field') === 'title'
|
||||||
|
@ -321,7 +323,7 @@ class PodcastImportController extends BaseController
|
||||||
property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
|
property_exists($nsItunes, 'image') && $nsItunes->image !== null &&
|
||||||
$nsItunes->image->attributes()['href'] !== null
|
$nsItunes->image->attributes()['href'] !== null
|
||||||
) {
|
) {
|
||||||
$episodeImage = new Image(download_file((string) $nsItunes->image->attributes()['href'],),);
|
$episodeImage = new Image(download_file((string) $nsItunes->image->attributes()['href'],));
|
||||||
} else {
|
} else {
|
||||||
$episodeImage = null;
|
$episodeImage = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -74,7 +76,7 @@ class PodcastPersonController extends BaseController
|
||||||
|
|
||||||
public function remove(int $personId): RedirectResponse
|
public function remove(int $personId): RedirectResponse
|
||||||
{
|
{
|
||||||
(new PersonModel())->removePersonFromPodcast($this->podcast->id, $personId,);
|
(new PersonModel())->removePersonFromPodcast($this->podcast->id, $personId);
|
||||||
|
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -93,7 +95,7 @@ class PodcastPlatformController extends BaseController
|
||||||
->with('message', lang('Platforms.messages.updateSuccess'));
|
->with('message', lang('Platforms.messages.updateSuccess'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$platformModel->savePodcastPlatforms($this->podcast->id, $platformType, $podcastsPlatformsData,);
|
$platformModel->savePodcastPlatforms($this->podcast->id, $platformType, $podcastsPlatformsData);
|
||||||
|
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
|
@ -102,7 +104,7 @@ class PodcastPlatformController extends BaseController
|
||||||
|
|
||||||
public function removePodcastPlatform(string $platformSlug): RedirectResponse
|
public function removePodcastPlatform(string $platformSlug): RedirectResponse
|
||||||
{
|
{
|
||||||
(new PlatformModel())->removePodcastPlatform($this->podcast->id, $platformSlug,);
|
(new PlatformModel())->removePodcastPlatform($this->podcast->id, $platformSlug);
|
||||||
|
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -108,7 +110,7 @@ class UserController extends BaseController
|
||||||
->route('user-list')
|
->route('user-list')
|
||||||
->with('message', lang('User.messages.createSuccess', [
|
->with('message', lang('User.messages.createSuccess', [
|
||||||
'username' => $user->username,
|
'username' => $user->username,
|
||||||
]),);
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edit(): string
|
public function edit(): string
|
||||||
|
@ -148,7 +150,7 @@ class UserController extends BaseController
|
||||||
->route('user-list')
|
->route('user-list')
|
||||||
->with('message', lang('User.messages.rolesEditSuccess', [
|
->with('message', lang('User.messages.rolesEditSuccess', [
|
||||||
'username' => $this->user->username,
|
'username' => $this->user->username,
|
||||||
]),);
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function forcePassReset(): RedirectResponse
|
public function forcePassReset(): RedirectResponse
|
||||||
|
@ -200,7 +202,7 @@ class UserController extends BaseController
|
||||||
->route('user-list')
|
->route('user-list')
|
||||||
->with('message', lang('User.messages.banSuccess', [
|
->with('message', lang('User.messages.banSuccess', [
|
||||||
'username' => $this->user->username,
|
'username' => $this->user->username,
|
||||||
]),);
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function unBan(): RedirectResponse
|
public function unBan(): RedirectResponse
|
||||||
|
@ -218,7 +220,7 @@ class UserController extends BaseController
|
||||||
->route('user-list')
|
->route('user-list')
|
||||||
->with('message', lang('User.messages.unbanSuccess', [
|
->with('message', lang('User.messages.unbanSuccess', [
|
||||||
'username' => $this->user->username,
|
'username' => $this->user->username,
|
||||||
]),);
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete(): RedirectResponse
|
public function delete(): RedirectResponse
|
||||||
|
@ -240,6 +242,6 @@ class UserController extends BaseController
|
||||||
->back()
|
->back()
|
||||||
->with('message', lang('User.messages.deleteSuccess', [
|
->with('message', lang('User.messages.deleteSuccess', [
|
||||||
'username' => $this->user->username,
|
'username' => $this->user->username,
|
||||||
]),);
|
]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -53,7 +55,7 @@ class AuthController extends MythAuthController
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the user
|
// Save the user
|
||||||
$allowedPostFields = array_merge(['password'], $this->config->validFields, $this->config->personalFields,);
|
$allowedPostFields = array_merge(['password'], $this->config->validFields, $this->config->personalFields);
|
||||||
$user = new User($this->request->getPost($allowedPostFields));
|
$user = new User($this->request->getPost($allowedPostFields));
|
||||||
|
|
||||||
$this->config->requireActivation === null
|
$this->config->requireActivation === null
|
||||||
|
@ -80,7 +82,7 @@ class AuthController extends MythAuthController
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
->withInput()
|
->withInput()
|
||||||
->with('error', $activator->error() ?? lang('Auth.unknownError'),);
|
->with('error', $activator->error() ?? lang('Auth.unknownError'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Success!
|
// Success!
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Controllers;
|
namespace App\Controllers;
|
||||||
|
|
||||||
use CodeIgniter\Controller;
|
use CodeIgniter\Controller;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -100,7 +102,7 @@ class EpisodeController extends BaseController
|
||||||
$session = Services::session();
|
$session = Services::session();
|
||||||
$session->start();
|
$session->start();
|
||||||
if (isset($_SERVER['HTTP_REFERER'])) {
|
if (isset($_SERVER['HTTP_REFERER'])) {
|
||||||
$session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST),);
|
$session->set('embeddable_player_domain', parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST));
|
||||||
}
|
}
|
||||||
|
|
||||||
$locale = service('request')
|
$locale = service('request')
|
||||||
|
@ -159,7 +161,7 @@ class EpisodeController extends BaseController
|
||||||
|
|
||||||
public function oembedXML(): ResponseInterface
|
public function oembedXML(): ResponseInterface
|
||||||
{
|
{
|
||||||
$oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>",);
|
$oembed = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8' standalone='yes'?><oembed></oembed>");
|
||||||
|
|
||||||
$oembed->addChild('type', 'rich');
|
$oembed->addChild('type', 'rich');
|
||||||
$oembed->addChild('version', '1.0');
|
$oembed->addChild('version', '1.0');
|
||||||
|
@ -182,6 +184,6 @@ class EpisodeController extends BaseController
|
||||||
$oembed->addChild('width', '600');
|
$oembed->addChild('width', '600');
|
||||||
$oembed->addChild('height', '200');
|
$oembed->addChild('height', '200');
|
||||||
|
|
||||||
return $this->response->setXML($oembed);
|
return $this->response->setXML((string) $oembed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -33,10 +35,10 @@ class FeedController extends Controller
|
||||||
$service = UserAgentsRSS::find($_SERVER['HTTP_USER_AGENT']);
|
$service = UserAgentsRSS::find($_SERVER['HTTP_USER_AGENT']);
|
||||||
} catch (Exception $exception) {
|
} catch (Exception $exception) {
|
||||||
// If things go wrong the show must go on and the user must be able to download the file
|
// If things go wrong the show must go on and the user must be able to download the file
|
||||||
log_message('critical', $exception);
|
log_message('critical', $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
$serviceSlug = null;
|
$serviceSlug = '';
|
||||||
if ($service) {
|
if ($service) {
|
||||||
$serviceSlug = $service['slug'];
|
$serviceSlug = $service['slug'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -123,7 +125,7 @@ class InstallController extends Controller
|
||||||
// Could not connect to the database
|
// Could not connect to the database
|
||||||
// show database config view to fix value
|
// show database config view to fix value
|
||||||
session()
|
session()
|
||||||
->setFlashdata('error', lang('Install.messages.databaseConnectError'),);
|
->setFlashdata('error', lang('Install.messages.databaseConnectError'));
|
||||||
|
|
||||||
return view('install/database_config');
|
return view('install/database_config');
|
||||||
}
|
}
|
||||||
|
@ -171,7 +173,7 @@ class InstallController extends Controller
|
||||||
helper('text');
|
helper('text');
|
||||||
|
|
||||||
// redirect to full install url with new baseUrl input
|
// redirect to full install url with new baseUrl input
|
||||||
return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('App')->installGateway,),);
|
return redirect()->to(reduce_double_slashes($baseUrl . '/' . config('App')->installGateway,));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function databaseConfig(): string
|
public function databaseConfig(): string
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -15,6 +17,7 @@ use App\Entities\Actor;
|
||||||
use App\Entities\Note as CastopodNote;
|
use App\Entities\Note as CastopodNote;
|
||||||
use App\Entities\Podcast;
|
use App\Entities\Podcast;
|
||||||
use App\Models\EpisodeModel;
|
use App\Models\EpisodeModel;
|
||||||
|
use App\Models\NoteModel;
|
||||||
use App\Models\PodcastModel;
|
use App\Models\PodcastModel;
|
||||||
use CodeIgniter\Exceptions\PageNotFoundException;
|
use CodeIgniter\Exceptions\PageNotFoundException;
|
||||||
use CodeIgniter\HTTP\RedirectResponse;
|
use CodeIgniter\HTTP\RedirectResponse;
|
||||||
|
@ -46,7 +49,7 @@ class NoteController extends ActivityPubNoteController
|
||||||
|
|
||||||
if (
|
if (
|
||||||
count($params) > 1 &&
|
count($params) > 1 &&
|
||||||
! ($this->note = model('NoteModel')->getNoteById($params[1]))
|
! ($this->note = (new NoteModel())->getNoteById($params[1]))
|
||||||
) {
|
) {
|
||||||
throw PageNotFoundException::forPageNotFound();
|
throw PageNotFoundException::forPageNotFound();
|
||||||
}
|
}
|
||||||
|
@ -129,14 +132,15 @@ class NoteController extends ActivityPubNoteController
|
||||||
|
|
||||||
$newNote->message = $message;
|
$newNote->message = $message;
|
||||||
|
|
||||||
|
$noteModel = new NoteModel();
|
||||||
if (
|
if (
|
||||||
! model('NoteModel')
|
! $noteModel
|
||||||
->addNote($newNote, ! (bool) $newNote->episode_id, true,)
|
->addNote($newNote, ! (bool) $newNote->episode_id, true,)
|
||||||
) {
|
) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
->withInput()
|
->withInput()
|
||||||
->with('errors', model('NoteModel')->errors());
|
->with('errors', $noteModel->errors());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note has been successfully created
|
// Note has been successfully created
|
||||||
|
@ -164,11 +168,12 @@ class NoteController extends ActivityPubNoteController
|
||||||
'created_by' => user_id(),
|
'created_by' => user_id(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (! model('NoteModel')->addReply($newNote)) {
|
$noteModel = new NoteModel();
|
||||||
|
if (! $noteModel->addReply($newNote)) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
->withInput()
|
->withInput()
|
||||||
->with('errors', model('NoteModel')->errors());
|
->with('errors', $noteModel->errors());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reply note without preview card has been successfully created
|
// Reply note without preview card has been successfully created
|
||||||
|
@ -177,14 +182,14 @@ class NoteController extends ActivityPubNoteController
|
||||||
|
|
||||||
public function attemptFavourite(): RedirectResponse
|
public function attemptFavourite(): RedirectResponse
|
||||||
{
|
{
|
||||||
model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note,);
|
model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note);
|
||||||
|
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function attemptReblog(): RedirectResponse
|
public function attemptReblog(): RedirectResponse
|
||||||
{
|
{
|
||||||
model('NoteModel')->toggleReblog(interact_as_actor(), $this->note);
|
(new NoteModel())->toggleReblog(interact_as_actor(), $this->note);
|
||||||
|
|
||||||
return redirect()->back();
|
return redirect()->back();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -94,7 +96,7 @@ class PodcastController extends BaseController
|
||||||
$seasonQuery = $this->request->getGet('season');
|
$seasonQuery = $this->request->getGet('season');
|
||||||
|
|
||||||
if (! $yearQuery && ! $seasonQuery) {
|
if (! $yearQuery && ! $seasonQuery) {
|
||||||
$defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id,);
|
$defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id);
|
||||||
if ($defaultQuery) {
|
if ($defaultQuery) {
|
||||||
if ($defaultQuery['type'] === 'season') {
|
if ($defaultQuery['type'] === 'season') {
|
||||||
$seasonQuery = $defaultQuery['data']['season_number'];
|
$seasonQuery = $defaultQuery['data']['season_number'];
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddAddPodcastsPlatforms Creates podcasts_platforms table in database
|
* Class AddAddPodcastsPlatforms Creates podcasts_platforms table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddCategories Creates categories table in database
|
* Class AddCategories Creates categories table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddLanguages Creates languages table in database
|
* Class AddLanguages Creates languages table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddPodcasts Creates podcasts table in database
|
* Class AddPodcasts Creates podcasts table in database
|
||||||
*
|
*
|
||||||
|
@ -189,7 +191,7 @@ class AddPodcasts extends Migration
|
||||||
// TODO: remove name in favor of username from actor
|
// TODO: remove name in favor of username from actor
|
||||||
$this->forge->addUniqueKey('name');
|
$this->forge->addUniqueKey('name');
|
||||||
$this->forge->addUniqueKey('actor_id');
|
$this->forge->addUniqueKey('actor_id');
|
||||||
$this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('category_id', 'categories', 'id');
|
$this->forge->addForeignKey('category_id', 'categories', 'id');
|
||||||
$this->forge->addForeignKey('language_code', 'languages', 'code');
|
$this->forge->addForeignKey('language_code', 'languages', 'code');
|
||||||
$this->forge->addForeignKey('created_by', 'users', 'id');
|
$this->forge->addForeignKey('created_by', 'users', 'id');
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddEpisodes Creates episodes table in database
|
* Class AddEpisodes Creates episodes table in database
|
||||||
*
|
*
|
||||||
|
@ -185,7 +187,7 @@ class AddEpisodes extends Migration
|
||||||
]);
|
]);
|
||||||
$this->forge->addPrimaryKey('id');
|
$this->forge->addPrimaryKey('id');
|
||||||
$this->forge->addUniqueKey(['podcast_id', 'slug']);
|
$this->forge->addUniqueKey(['podcast_id', 'slug']);
|
||||||
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('created_by', 'users', 'id');
|
$this->forge->addForeignKey('created_by', 'users', 'id');
|
||||||
$this->forge->addForeignKey('updated_by', 'users', 'id');
|
$this->forge->addForeignKey('updated_by', 'users', 'id');
|
||||||
$this->forge->createTable('episodes');
|
$this->forge->createTable('episodes');
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddSoundbites Creates soundbites table in database
|
* Class AddSoundbites Creates soundbites table in database
|
||||||
*
|
*
|
||||||
|
@ -63,8 +65,8 @@ class AddSoundbites extends Migration
|
||||||
]);
|
]);
|
||||||
$this->forge->addKey('id', true);
|
$this->forge->addKey('id', true);
|
||||||
$this->forge->addUniqueKey(['episode_id', 'start_time', 'duration']);
|
$this->forge->addUniqueKey(['episode_id', 'start_time', 'duration']);
|
||||||
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('created_by', 'users', 'id');
|
$this->forge->addForeignKey('created_by', 'users', 'id');
|
||||||
$this->forge->addForeignKey('updated_by', 'users', 'id');
|
$this->forge->addForeignKey('updated_by', 'users', 'id');
|
||||||
$this->forge->createTable('soundbites');
|
$this->forge->createTable('soundbites');
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddPlatforms Creates platforms table in database
|
* Class AddPlatforms Creates platforms table in database
|
||||||
*
|
*
|
||||||
|
@ -41,7 +43,7 @@ class AddPlatforms extends Migration
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$this->forge->addField('`created_at` timestamp NOT NULL DEFAULT NOW()');
|
$this->forge->addField('`created_at` timestamp NOT NULL DEFAULT NOW()');
|
||||||
$this->forge->addField('`updated_at` timestamp NOT NULL DEFAULT NOW() ON UPDATE NOW()',);
|
$this->forge->addField('`updated_at` timestamp NOT NULL DEFAULT NOW() ON UPDATE NOW()');
|
||||||
$this->forge->addPrimaryKey('slug');
|
$this->forge->addPrimaryKey('slug');
|
||||||
$this->forge->createTable('platforms');
|
$this->forge->createTable('platforms');
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddPodcastUsers Creates podcast_users table in database
|
* Class AddPodcastUsers Creates podcast_users table in database
|
||||||
*
|
*
|
||||||
|
@ -32,8 +34,8 @@ class AddPodcastsUsers extends Migration
|
||||||
]);
|
]);
|
||||||
$this->forge->addPrimaryKey(['user_id', 'podcast_id']);
|
$this->forge->addPrimaryKey(['user_id', 'podcast_id']);
|
||||||
$this->forge->addForeignKey('user_id', 'users', 'id', '', 'CASCADE');
|
$this->forge->addForeignKey('user_id', 'users', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('group_id', 'auth_groups', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('group_id', 'auth_groups', 'id', '', 'CASCADE');
|
||||||
$this->forge->createTable('podcasts_users');
|
$this->forge->createTable('podcasts_users');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddPages Creates pages table in database
|
* Class AddPages Creates pages table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddPodcastsCategories Creates podcasts_categories table in database
|
* Class AddPodcastsCategories Creates podcasts_categories table in database
|
||||||
*
|
*
|
||||||
|
@ -27,8 +29,8 @@ class AddPodcastsCategories extends Migration
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
$this->forge->addPrimaryKey(['podcast_id', 'category_id']);
|
$this->forge->addPrimaryKey(['podcast_id', 'category_id']);
|
||||||
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('category_id', 'categories', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('category_id', 'categories', 'id', '', 'CASCADE');
|
||||||
$this->forge->createTable('podcasts_categories');
|
$this->forge->createTable('podcasts_categories');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Persons Creates persons table in database
|
* Class Persons Creates persons table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddPodcastsPersons Creates podcasts_persons table in database
|
* Class AddPodcastsPersons Creates podcasts_persons table in database
|
||||||
*
|
*
|
||||||
|
@ -41,8 +43,8 @@ class AddPodcastsPersons extends Migration
|
||||||
]);
|
]);
|
||||||
$this->forge->addKey('id', true);
|
$this->forge->addKey('id', true);
|
||||||
$this->forge->addUniqueKey(['podcast_id', 'person_id', 'person_group', 'person_role']);
|
$this->forge->addUniqueKey(['podcast_id', 'person_id', 'person_group', 'person_role']);
|
||||||
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE');
|
||||||
$this->forge->createTable('podcasts_persons');
|
$this->forge->createTable('podcasts_persons');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddEpisodesPersons Creates episodes_persons table in database
|
* Class AddEpisodesPersons Creates episodes_persons table in database
|
||||||
*
|
*
|
||||||
|
@ -45,9 +47,9 @@ class AddEpisodesPersons extends Migration
|
||||||
]);
|
]);
|
||||||
$this->forge->addPrimaryKey('id');
|
$this->forge->addPrimaryKey('id');
|
||||||
$this->forge->addUniqueKey(['podcast_id', 'episode_id', 'person_id', 'person_group', 'person_role']);
|
$this->forge->addUniqueKey(['podcast_id', 'episode_id', 'person_id', 'person_group', 'person_role']);
|
||||||
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('episode_id', 'episodes', 'id', '', 'CASCADE');
|
||||||
$this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE',);
|
$this->forge->addForeignKey('person_id', 'persons', 'id', '', 'CASCADE');
|
||||||
$this->forge->createTable('episodes_persons');
|
$this->forge->createTable('episodes_persons');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddCreditView Creates Credit View in database
|
* Class AddCreditView Creates Credit View in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddEpisodeIdToNotes Adds episode_id field to activitypub_notes table in database
|
* Class AddEpisodeIdToNotes Adds episode_id field to activitypub_notes table in database
|
||||||
*
|
*
|
||||||
|
@ -28,7 +30,7 @@ class AddEpisodeIdToNotes extends Migration
|
||||||
|
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
$this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign',);
|
$this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign');
|
||||||
$this->forge->dropColumn('activitypub_notes', 'episode_id');
|
$this->forge->dropColumn('activitypub_notes', 'episode_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AddCreatedByToNotes Adds created_by field to activitypub_notes table in database
|
* Class AddCreatedByToNotes Adds created_by field to activitypub_notes table in database
|
||||||
*
|
*
|
||||||
|
@ -28,7 +30,7 @@ class AddCreatedByToNotes extends Migration
|
||||||
|
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
$this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign',);
|
$this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign');
|
||||||
$this->forge->dropColumn('activitypub_notes', 'created_by');
|
$this->forge->dropColumn('activitypub_notes', 'created_by');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AppSeeder Calls all required seeders for castopod to work properly
|
* Class AppSeeder Calls all required seeders for castopod to work properly
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class PermissionSeeder Inserts permissions
|
* Class PermissionSeeder Inserts permissions
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CategorySeeder Inserts values in categories table in database
|
* Class CategorySeeder Inserts values in categories table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class FakePodcastsAnalyticsSeeder Inserts Fake Analytics in the database
|
* Class FakePodcastsAnalyticsSeeder Inserts Fake Analytics in the database
|
||||||
*
|
*
|
||||||
|
@ -61,7 +63,7 @@ class FakePodcastsAnalyticsSeeder extends Seeder
|
||||||
->where('`published_at` <= NOW()', null, false)
|
->where('`published_at` <= NOW()', null, false)
|
||||||
->findAll();
|
->findAll();
|
||||||
foreach ($episodes as $episode) {
|
foreach ($episodes as $episode) {
|
||||||
$age = floor(($date - strtotime($episode->published_at)) / 86400,);
|
$age = floor(($date - strtotime($episode->published_at)) / 86400);
|
||||||
$probability1 = (int) floor(exp(3 - $age / 40)) + 1;
|
$probability1 = (int) floor(exp(3 - $age / 40)) + 1;
|
||||||
|
|
||||||
for (
|
for (
|
||||||
|
@ -95,7 +97,7 @@ class FakePodcastsAnalyticsSeeder extends Seeder
|
||||||
'.' .
|
'.' .
|
||||||
rand(0, 255);
|
rand(0, 255);
|
||||||
|
|
||||||
$cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb',);
|
$cityReader = new Reader(WRITEPATH . 'uploads/GeoLite2-City/GeoLite2-City.mmdb');
|
||||||
|
|
||||||
$countryCode = 'N/A';
|
$countryCode = 'N/A';
|
||||||
$regionCode = 'N/A';
|
$regionCode = 'N/A';
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class FakeWebsiteAnalyticsSeeder Inserts Fake Analytics in the database
|
* Class FakeWebsiteAnalyticsSeeder Inserts Fake Analytics in the database
|
||||||
*
|
*
|
||||||
|
@ -200,7 +202,7 @@ class FakeWebsiteAnalyticsSeeder extends Seeder
|
||||||
->where('`published_at` <= NOW()', null, false)
|
->where('`published_at` <= NOW()', null, false)
|
||||||
->findAll();
|
->findAll();
|
||||||
foreach ($episodes as $episode) {
|
foreach ($episodes as $episode) {
|
||||||
$age = floor(($date - strtotime($episode->published_at)) / 86400,);
|
$age = floor(($date - strtotime($episode->published_at)) / 86400);
|
||||||
$probability1 = (int) floor(exp(3 - $age / 40)) + 1;
|
$probability1 = (int) floor(exp(3 - $age / 40)) + 1;
|
||||||
|
|
||||||
for (
|
for (
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class LanguageSeeder Inserts values in languages table in database
|
* Class LanguageSeeder Inserts values in languages table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class PlatformsSeeder Inserts values in platforms table in database
|
* Class PlatformsSeeder Inserts values in platforms table in database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TestSeeder Inserts a superadmin user in the database
|
* Class TestSeeder Inserts a superadmin user in the database
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -20,21 +22,21 @@ class Actor extends ActivityPubActor
|
||||||
{
|
{
|
||||||
protected ?Podcast $podcast = null;
|
protected ?Podcast $podcast = null;
|
||||||
|
|
||||||
protected bool $is_podcast;
|
protected bool $is_podcast = false;
|
||||||
|
|
||||||
public function getIsPodcast(): bool
|
public function getIsPodcast(): bool
|
||||||
{
|
{
|
||||||
return $this->podcast !== null;
|
return $this->getPodcast() !== null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPodcast(): ?Podcast
|
public function getPodcast(): ?Podcast
|
||||||
{
|
{
|
||||||
if ($this->id === null) {
|
if ($this->id === null) {
|
||||||
throw new RuntimeException('Podcast id must be set before getting associated podcast.',);
|
throw new RuntimeException('Podcast id must be set before getting associated podcast.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->podcast === null) {
|
if ($this->podcast === null) {
|
||||||
$this->podcast = (new PodcastModel())->getPodcastByActorId($this->id,);
|
$this->podcast = (new PodcastModel())->getPodcastByActorId($this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->podcast;
|
return $this->podcast;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -54,11 +56,11 @@ class Credit extends Entity
|
||||||
public function getPerson(): ?Person
|
public function getPerson(): ?Person
|
||||||
{
|
{
|
||||||
if ($this->person_id === null) {
|
if ($this->person_id === null) {
|
||||||
throw new RuntimeException('Credit must have person_id before getting person.',);
|
throw new RuntimeException('Credit must have person_id before getting person.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->person === null) {
|
if ($this->person === null) {
|
||||||
$this->person = (new PersonModel())->getPersonById($this->person_id,);
|
$this->person = (new PersonModel())->getPersonById($this->person_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->person;
|
return $this->person;
|
||||||
|
@ -67,11 +69,11 @@ class Credit extends Entity
|
||||||
public function getPodcast(): ?Podcast
|
public function getPodcast(): ?Podcast
|
||||||
{
|
{
|
||||||
if ($this->podcast_id === null) {
|
if ($this->podcast_id === null) {
|
||||||
throw new RuntimeException('Credit must have podcast_id before getting podcast.',);
|
throw new RuntimeException('Credit must have podcast_id before getting podcast.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->podcast === null) {
|
if ($this->podcast === null) {
|
||||||
$this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id,);
|
$this->podcast = (new PodcastModel())->getPodcastById($this->podcast_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->podcast;
|
return $this->podcast;
|
||||||
|
@ -80,11 +82,11 @@ class Credit extends Entity
|
||||||
public function getEpisode(): ?Episode
|
public function getEpisode(): ?Episode
|
||||||
{
|
{
|
||||||
if ($this->episode_id === null) {
|
if ($this->episode_id === null) {
|
||||||
throw new RuntimeException('Credit must have episode_id before getting episode.',);
|
throw new RuntimeException('Credit must have episode_id before getting episode.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->episode === null) {
|
if ($this->episode === null) {
|
||||||
$this->episode = (new EpisodeModel())->getPublishedEpisodeById($this->podcast_id, $this->episode_id,);
|
$this->episode = (new EpisodeModel())->getPublishedEpisodeById($this->podcast_id, $this->episode_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->episode;
|
return $this->episode;
|
||||||
|
@ -109,6 +111,6 @@ class Credit extends Entity
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label",);
|
return lang("PersonsTaxonomy.persons.{$this->person_group}.roles.{$this->person_role}.label");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -178,7 +180,7 @@ class Episode extends Entity
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save image
|
// Save image
|
||||||
$image->saveImage('podcasts/' . $this->getPodcast()->name, $this->attributes['slug'],);
|
$image->saveImage('podcasts/' . $this->getPodcast()->name, $this->attributes['slug']);
|
||||||
|
|
||||||
$this->attributes['image_mimetype'] = $image->mimetype;
|
$this->attributes['image_mimetype'] = $image->mimetype;
|
||||||
$this->attributes['image_path'] = $image->path;
|
$this->attributes['image_path'] = $image->path;
|
||||||
|
@ -189,7 +191,7 @@ class Episode extends Entity
|
||||||
public function getImage(): Image
|
public function getImage(): Image
|
||||||
{
|
{
|
||||||
if ($imagePath = $this->attributes['image_path']) {
|
if ($imagePath = $this->attributes['image_path']) {
|
||||||
return new Image(null, $imagePath, $this->attributes['image_mimetype'],);
|
return new Image(null, $imagePath, $this->attributes['image_mimetype']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->getPodcast()
|
return $this->getPodcast()
|
||||||
|
@ -266,7 +268,7 @@ class Episode extends Entity
|
||||||
if ($this->attributes['transcript_file_path']) {
|
if ($this->attributes['transcript_file_path']) {
|
||||||
helper('media');
|
helper('media');
|
||||||
|
|
||||||
return new File(media_path($this->attributes['transcript_file_path']),);
|
return new File(media_path($this->attributes['transcript_file_path']));
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -277,7 +279,7 @@ class Episode extends Entity
|
||||||
if ($this->attributes['chapters_file_path']) {
|
if ($this->attributes['chapters_file_path']) {
|
||||||
helper('media');
|
helper('media');
|
||||||
|
|
||||||
return new File(media_path($this->attributes['chapters_file_path']),);
|
return new File(media_path($this->attributes['chapters_file_path']));
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -348,11 +350,11 @@ class Episode extends Entity
|
||||||
public function getPersons(): array
|
public function getPersons(): array
|
||||||
{
|
{
|
||||||
if ($this->id === null) {
|
if ($this->id === null) {
|
||||||
throw new RuntimeException('Episode must be created before getting persons.',);
|
throw new RuntimeException('Episode must be created before getting persons.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->persons === null) {
|
if ($this->persons === null) {
|
||||||
$this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id,);
|
$this->persons = (new PersonModel())->getEpisodePersons($this->podcast_id, $this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->persons;
|
return $this->persons;
|
||||||
|
@ -366,11 +368,11 @@ class Episode extends Entity
|
||||||
public function getSoundbites(): array
|
public function getSoundbites(): array
|
||||||
{
|
{
|
||||||
if ($this->id === null) {
|
if ($this->id === null) {
|
||||||
throw new RuntimeException('Episode must be created before getting soundbites.',);
|
throw new RuntimeException('Episode must be created before getting soundbites.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->soundbites === null) {
|
if ($this->soundbites === null) {
|
||||||
$this->soundbites = (new SoundbiteModel())->getEpisodeSoundbites($this->getPodcast() ->id, $this->id,);
|
$this->soundbites = (new SoundbiteModel())->getEpisodeSoundbites($this->getPodcast() ->id, $this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->soundbites;
|
return $this->soundbites;
|
||||||
|
@ -382,7 +384,7 @@ class Episode extends Entity
|
||||||
public function getNotes(): array
|
public function getNotes(): array
|
||||||
{
|
{
|
||||||
if ($this->id === null) {
|
if ($this->id === null) {
|
||||||
throw new RuntimeException('Episode must be created before getting soundbites.',);
|
throw new RuntimeException('Episode must be created before getting soundbites.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->notes === null) {
|
if ($this->notes === null) {
|
||||||
|
@ -394,7 +396,7 @@ class Episode extends Entity
|
||||||
|
|
||||||
public function getLink(): string
|
public function getLink(): string
|
||||||
{
|
{
|
||||||
return base_url(route_to('episode', $this->getPodcast() ->name, $this->attributes['slug'],),);
|
return base_url(route_to('episode', $this->getPodcast() ->name, $this->attributes['slug'],));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getEmbeddablePlayerUrl(string $theme = null): string
|
public function getEmbeddablePlayerUrl(string $theme = null): string
|
||||||
|
@ -421,7 +423,7 @@ class Episode extends Entity
|
||||||
|
|
||||||
public function getPodcast(): ?Podcast
|
public function getPodcast(): ?Podcast
|
||||||
{
|
{
|
||||||
return (new PodcastModel())->getPodcastById($this->attributes['podcast_id'],);
|
return (new PodcastModel())->getPodcastById($this->podcast_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setDescriptionMarkdown(string $descriptionMarkdown): static
|
public function setDescriptionMarkdown(string $descriptionMarkdown): static
|
||||||
|
@ -432,7 +434,7 @@ class Episode extends Entity
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->attributes['description_markdown'] = $descriptionMarkdown;
|
$this->attributes['description_markdown'] = $descriptionMarkdown;
|
||||||
$this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown,);
|
$this->attributes['description_html'] = $converter->convertToHtml($descriptionMarkdown);
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -525,7 +527,7 @@ class Episode extends Entity
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->location === null) {
|
if ($this->location === null) {
|
||||||
$this->location = new Location($this->location_name, $this->location_geo, $this->location_osm,);
|
$this->location = new Location($this->location_name, $this->location_geo, $this->location_osm);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->location;
|
return $this->location;
|
||||||
|
@ -549,7 +551,7 @@ class Episode extends Entity
|
||||||
->addChild('item');
|
->addChild('item');
|
||||||
array_to_rss([
|
array_to_rss([
|
||||||
'elements' => $this->custom_rss,
|
'elements' => $this->custom_rss,
|
||||||
], $xmlNode,);
|
], $xmlNode);
|
||||||
|
|
||||||
return str_replace(['<item>', '</item>'], '', $xmlNode->asXML());
|
return str_replace(['<item>', '</item>'], '', $xmlNode->asXML());
|
||||||
}
|
}
|
||||||
|
@ -573,7 +575,7 @@ class Episode extends Entity
|
||||||
)['elements'][0]['elements'][0];
|
)['elements'][0]['elements'][0];
|
||||||
|
|
||||||
if (array_key_exists('elements', $customRssArray)) {
|
if (array_key_exists('elements', $customRssArray)) {
|
||||||
$this->attributes['custom_rss'] = json_encode($customRssArray['elements'],);
|
$this->attributes['custom_rss'] = json_encode($customRssArray['elements']);
|
||||||
} else {
|
} else {
|
||||||
$this->attributes['custom_rss'] = null;
|
$this->attributes['custom_rss'] = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2021 Podlibre
|
* @copyright 2021 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -48,7 +50,7 @@ class Image extends Entity
|
||||||
public function __construct(?File $file, string $path = '', string $mimetype = '')
|
public function __construct(?File $file, string $path = '', string $mimetype = '')
|
||||||
{
|
{
|
||||||
if ($file === null && $path === '') {
|
if ($file === null && $path === '') {
|
||||||
throw new RuntimeException('File or path must be set to create an Image.',);
|
throw new RuntimeException('File or path must be set to create an Image.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->config = config('Images');
|
$this->config = config('Images');
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2020 Podlibre
|
* @copyright 2020 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copyright 2021 Podlibre
|
* @copyright 2021 Podlibre
|
||||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||||
|
@ -84,7 +86,7 @@ class Location extends Entity
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
$places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR,);
|
$places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
if ($places === []) {
|
if ($places === []) {
|
||||||
return $this;
|
return $this;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue