mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-19 04:51:17 +00:00
chore: update php and js dependencies to latest
This commit is contained in:
parent
87cc437e1e
commit
d0a94dd2cb
@ -3,10 +3,7 @@
|
|||||||
"projectOwner": "adaures",
|
"projectOwner": "adaures",
|
||||||
"repoType": "gitlab",
|
"repoType": "gitlab",
|
||||||
"repoHost": "https://code.castopod.org",
|
"repoHost": "https://code.castopod.org",
|
||||||
"files": [
|
"files": ["README.md", "docs/src/index.md"],
|
||||||
"README.md",
|
|
||||||
"docs/src/index.md"
|
|
||||||
],
|
|
||||||
"imageSize": 100,
|
"imageSize": 100,
|
||||||
"commit": false,
|
"commit": false,
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
@ -100,24 +97,14 @@
|
|||||||
"name": "Lyonel Bernard",
|
"name": "Lyonel Bernard",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://twitter.com/lyonelbernard",
|
"profile": "https://twitter.com/lyonelbernard",
|
||||||
"contributions": [
|
"contributions": ["bug", "question", "audio", "ideas"]
|
||||||
"bug",
|
|
||||||
"question",
|
|
||||||
"audio",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "ctlw83",
|
"login": "ctlw83",
|
||||||
"name": "Christopher Lagonick-Weitzel",
|
"name": "Christopher Lagonick-Weitzel",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon",
|
||||||
"profile": "https://www.crypticchameleon.com/",
|
"profile": "https://www.crypticchameleon.com/",
|
||||||
"contributions": [
|
"contributions": ["bug", "question", "audio", "ideas"]
|
||||||
"bug",
|
|
||||||
"question",
|
|
||||||
"audio",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "ernestoacostame",
|
"login": "ernestoacostame",
|
||||||
@ -154,19 +141,14 @@
|
|||||||
"name": "Bastien Luneteau",
|
"name": "Bastien Luneteau",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon",
|
||||||
"profile": "https://code.castopod.org/Behel",
|
"profile": "https://code.castopod.org/Behel",
|
||||||
"contributions": [
|
"contributions": ["code", "bug"]
|
||||||
"code",
|
|
||||||
"bug"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "cecillie",
|
"login": "cecillie",
|
||||||
"name": "Cécile Ricordeau",
|
"name": "Cécile Ricordeau",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://www.cecillie.fr/",
|
"profile": "https://www.cecillie.fr/",
|
||||||
"contributions": [
|
"contributions": ["design"]
|
||||||
"design"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "PatrykMis",
|
"login": "PatrykMis",
|
||||||
@ -185,48 +167,35 @@
|
|||||||
"name": "Marcin Lewandowski",
|
"name": "Marcin Lewandowski",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon",
|
||||||
"profile": "https://code.castopod.org/mspanc",
|
"profile": "https://code.castopod.org/mspanc",
|
||||||
"contributions": [
|
"contributions": ["bug", "ideas"]
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "SJanik",
|
"login": "SJanik",
|
||||||
"name": "Sebastian Janik",
|
"name": "Sebastian Janik",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/SJanik",
|
"profile": "https://code.castopod.org/SJanik",
|
||||||
"contributions": [
|
"contributions": ["code"]
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "patryk",
|
"login": "patryk",
|
||||||
"name": "Patryk Karczmarczyk",
|
"name": "Patryk Karczmarczyk",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/patryk",
|
"profile": "https://code.castopod.org/patryk",
|
||||||
"contributions": [
|
"contributions": ["code"]
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "ddenis",
|
"login": "ddenis",
|
||||||
"name": "denis d",
|
"name": "denis d",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/ddenis",
|
"profile": "https://code.castopod.org/ddenis",
|
||||||
"contributions": [
|
"contributions": ["bug", "ideas"]
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "douglaskastle",
|
"login": "douglaskastle",
|
||||||
"name": "Douglas Kastle",
|
"name": "Douglas Kastle",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon",
|
||||||
"profile": "https://code.castopod.org/douglaskastle",
|
"profile": "https://code.castopod.org/douglaskastle",
|
||||||
"contributions": [
|
"contributions": ["bug", "ideas"]
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "cExplorer",
|
"login": "cExplorer",
|
||||||
@ -246,66 +215,49 @@
|
|||||||
"name": "ImaCrea",
|
"name": "ImaCrea",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/imacrea",
|
"profile": "https://code.castopod.org/imacrea",
|
||||||
"contributions": [
|
"contributions": ["bug", "ideas"]
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "jonas",
|
"login": "jonas",
|
||||||
"name": "Jonas S",
|
"name": "Jonas S",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/jonas",
|
"profile": "https://code.castopod.org/jonas",
|
||||||
"contributions": [
|
"contributions": ["code"]
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "yannL",
|
"login": "yannL",
|
||||||
"name": "LEFEBVRE Yann",
|
"name": "LEFEBVRE Yann",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon",
|
||||||
"profile": "https://code.castopod.org/yannL",
|
"profile": "https://code.castopod.org/yannL",
|
||||||
"contributions": [
|
"contributions": ["bug"]
|
||||||
"bug"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "spaetz",
|
"login": "spaetz",
|
||||||
"name": "Sebastian Späth",
|
"name": "Sebastian Späth",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon",
|
||||||
"profile": "https://code.castopod.org/spaetz",
|
"profile": "https://code.castopod.org/spaetz",
|
||||||
"contributions": [
|
"contributions": ["bug", "ideas"]
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "rocky",
|
"login": "rocky",
|
||||||
"name": "rocky III",
|
"name": "rocky III",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/rocky",
|
"profile": "https://code.castopod.org/rocky",
|
||||||
"contributions": [
|
"contributions": ["bug"]
|
||||||
"bug"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "Regenpfeifer",
|
"login": "Regenpfeifer",
|
||||||
"name": "Hermann Josef Eckl",
|
"name": "Hermann Josef Eckl",
|
||||||
"avatar_url": "https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png",
|
"avatar_url": "https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png",
|
||||||
"profile": "https://code.castopod.org/Regenpfeifer",
|
"profile": "https://code.castopod.org/Regenpfeifer",
|
||||||
"contributions": [
|
"contributions": ["bug"]
|
||||||
"bug"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "cyrilledel",
|
"login": "cyrilledel",
|
||||||
"name": "Delhaye Cyrille",
|
"name": "Delhaye Cyrille",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://code.castopod.org/cyrilledel",
|
"profile": "https://code.castopod.org/cyrilledel",
|
||||||
"contributions": [
|
"contributions": ["bug", "ideas"]
|
||||||
"bug",
|
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "otetranome",
|
"login": "otetranome",
|
||||||
@ -493,9 +445,7 @@
|
|||||||
"name": "Dimitri Regnier",
|
"name": "Dimitri Regnier",
|
||||||
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
|
||||||
"profile": "https://dimitriregnier.net/",
|
"profile": "https://dimitriregnier.net/",
|
||||||
"contributions": [
|
"contributions": ["ideas"]
|
||||||
"ideas"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "irithys",
|
"login": "irithys",
|
||||||
@ -610,19 +560,14 @@
|
|||||||
"name": "KrzysztofDomanczyk",
|
"name": "KrzysztofDomanczyk",
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/75178474?v=4",
|
"avatar_url": "https://avatars.githubusercontent.com/u/75178474?v=4",
|
||||||
"profile": "https://github.com/KrzysztofDomanczyk",
|
"profile": "https://github.com/KrzysztofDomanczyk",
|
||||||
"contributions": [
|
"contributions": ["code"]
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"login": "NeoluxConsulting",
|
"login": "NeoluxConsulting",
|
||||||
"name": "Guy Martin",
|
"name": "Guy Martin",
|
||||||
"avatar_url": "https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon",
|
"avatar_url": "https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon",
|
||||||
"profile": "https://code.castopod.org/NeoluxConsulting",
|
"profile": "https://code.castopod.org/NeoluxConsulting",
|
||||||
"contributions": [
|
"contributions": ["bug", "code"]
|
||||||
"bug",
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"commitConvention": "none"
|
"commitConvention": "none"
|
||||||
|
@ -1,4 +1 @@
|
|||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
pnpm exec commitlint --verbose --edit "$1"
|
pnpm exec commitlint --verbose --edit "$1"
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
# CaptainHook 5.10.0
|
# CaptainHook 5.10.0
|
||||||
|
|
||||||
INTERACTIVE="--no-interaction"
|
INTERACTIVE="--no-interaction"
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
# CaptainHook 5.10.0
|
# CaptainHook 5.10.0
|
||||||
|
|
||||||
INTERACTIVE="--no-interaction"
|
INTERACTIVE="--no-interaction"
|
||||||
|
@ -19,7 +19,6 @@ use App\Models\PodcastModel;
|
|||||||
use CodeIgniter\Database\Seeder;
|
use CodeIgniter\Database\Seeder;
|
||||||
use Exception;
|
use Exception;
|
||||||
use GeoIp2\Database\Reader;
|
use GeoIp2\Database\Reader;
|
||||||
|
|
||||||
use GeoIp2\Exception\AddressNotFoundException;
|
use GeoIp2\Exception\AddressNotFoundException;
|
||||||
|
|
||||||
class FakePodcastsAnalyticsSeeder extends Seeder
|
class FakePodcastsAnalyticsSeeder extends Seeder
|
||||||
|
@ -16,7 +16,6 @@ use App\Entities\Episode;
|
|||||||
use App\Entities\Podcast;
|
use App\Entities\Podcast;
|
||||||
use App\Models\EpisodeModel;
|
use App\Models\EpisodeModel;
|
||||||
use App\Models\PodcastModel;
|
use App\Models\PodcastModel;
|
||||||
|
|
||||||
use CodeIgniter\Database\Seeder;
|
use CodeIgniter\Database\Seeder;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
|
@ -546,7 +546,7 @@ class Episode extends Entity
|
|||||||
{
|
{
|
||||||
if ($this->description === null) {
|
if ($this->description === null) {
|
||||||
$this->description = trim(
|
$this->description = trim(
|
||||||
preg_replace('~\s+~', ' ', strip_tags((string) $this->attributes['description_html'])),
|
(string) preg_replace('~\s+~', ' ', strip_tags((string) $this->attributes['description_html'])),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -670,7 +670,7 @@ class Episode extends Entity
|
|||||||
public function getPartnerLink(?string $serviceSlug = null): string
|
public function getPartnerLink(?string $serviceSlug = null): string
|
||||||
{
|
{
|
||||||
$partnerLink =
|
$partnerLink =
|
||||||
rtrim($this->getPodcast()->partner_link_url, '/') .
|
rtrim((string) $this->getPodcast()->partner_link_url, '/') .
|
||||||
'?pid=' .
|
'?pid=' .
|
||||||
$this->getPodcast()
|
$this->getPodcast()
|
||||||
->partner_id .
|
->partner_id .
|
||||||
@ -686,7 +686,7 @@ class Episode extends Entity
|
|||||||
|
|
||||||
public function getPartnerImageUrl(string $serviceSlug = null): string
|
public function getPartnerImageUrl(string $serviceSlug = null): string
|
||||||
{
|
{
|
||||||
return rtrim($this->getPodcast()->partner_image_url, '/') .
|
return rtrim((string) $this->getPodcast()->partner_image_url, '/') .
|
||||||
'?pid=' .
|
'?pid=' .
|
||||||
$this->getPodcast()
|
$this->getPodcast()
|
||||||
->partner_id .
|
->partner_id .
|
||||||
|
@ -101,7 +101,7 @@ class Location extends Entity
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
$places = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
$places = json_decode((string) $response->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
if ($places === []) {
|
if ($places === []) {
|
||||||
return $this;
|
return $this;
|
||||||
|
@ -467,7 +467,6 @@ if (! function_exists('local_date')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
if (! function_exists('explicit_badge')) {
|
if (! function_exists('explicit_badge')) {
|
||||||
@ -486,7 +485,6 @@ if (! function_exists('explicit_badge')) {
|
|||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('category_label')) {
|
if (! function_exists('category_label')) {
|
||||||
function category_label(Category $category): string
|
function category_label(Category $category): string
|
||||||
{
|
{
|
||||||
|
@ -22,14 +22,14 @@ if (! function_exists('form_textarea')) {
|
|||||||
|
|
||||||
// Unsets default rows and cols if defined in extra field as array or string.
|
// Unsets default rows and cols if defined in extra field as array or string.
|
||||||
if ((is_array($extra) && array_key_exists('rows', $extra)) || (is_string($extra) && stripos(
|
if ((is_array($extra) && array_key_exists('rows', $extra)) || (is_string($extra) && stripos(
|
||||||
preg_replace('~\s+~', '', $extra),
|
(string) preg_replace('~\s+~', '', $extra),
|
||||||
'rows='
|
'rows='
|
||||||
) !== false)) {
|
) !== false)) {
|
||||||
unset($defaults['rows']);
|
unset($defaults['rows']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((is_array($extra) && array_key_exists('cols', $extra)) || (is_string($extra) && stripos(
|
if ((is_array($extra) && array_key_exists('cols', $extra)) || (is_string($extra) && stripos(
|
||||||
preg_replace('~\s+~', '', $extra),
|
(string) preg_replace('~\s+~', '', $extra),
|
||||||
'cols='
|
'cols='
|
||||||
) !== false)) {
|
) !== false)) {
|
||||||
unset($defaults['cols']);
|
unset($defaults['cols']);
|
||||||
@ -41,7 +41,6 @@ if (! function_exists('form_textarea')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('parse_form_attributes')) {
|
if (! function_exists('parse_form_attributes')) {
|
||||||
/**
|
/**
|
||||||
* Parse the form attributes
|
* Parse the form attributes
|
||||||
|
@ -8,7 +8,6 @@ declare(strict_types=1);
|
|||||||
* @link https://castopod.org/
|
* @link https://castopod.org/
|
||||||
*/
|
*/
|
||||||
use App\Entities\Episode;
|
use App\Entities\Episode;
|
||||||
|
|
||||||
use CodeIgniter\I18n\Time;
|
use CodeIgniter\I18n\Time;
|
||||||
use JamesHeinrich\GetID3\WriteTags;
|
use JamesHeinrich\GetID3\WriteTags;
|
||||||
use Modules\Media\FileManagers\FileManagerInterface;
|
use Modules\Media\FileManagers\FileManagerInterface;
|
||||||
|
@ -15,7 +15,6 @@ use Modules\Media\Entities\Image;
|
|||||||
* @link https://castopod.org/
|
* @link https://castopod.org/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('get_browser_language')) {
|
if (! function_exists('get_browser_language')) {
|
||||||
/**
|
/**
|
||||||
* Gets the browser default language using the request header key `HTTP_ACCEPT_LANGUAGE`. Returns Castopod's default
|
* Gets the browser default language using the request header key `HTTP_ACCEPT_LANGUAGE`. Returns Castopod's default
|
||||||
@ -82,7 +81,6 @@ if (! function_exists('format_duration')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('format_duration_symbol')) {
|
if (! function_exists('format_duration_symbol')) {
|
||||||
/**
|
/**
|
||||||
* Formats duration in seconds to an hh(h) mm(min) ss(s) string. Doesn't show leading zeros if any.
|
* Formats duration in seconds to an hh(h) mm(min) ss(s) string. Doesn't show leading zeros if any.
|
||||||
@ -131,7 +129,6 @@ if (! function_exists('generate_random_salt')) {
|
|||||||
|
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('file_upload_max_size')) {
|
if (! function_exists('file_upload_max_size')) {
|
||||||
/**
|
/**
|
||||||
* Returns a file size limit in bytes based on the PHP upload_max_filesize and post_max_size Adapted from:
|
* Returns a file size limit in bytes based on the PHP upload_max_filesize and post_max_size Adapted from:
|
||||||
@ -192,7 +189,6 @@ if (! function_exists('format_bytes')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('get_site_icon_url')) {
|
if (! function_exists('get_site_icon_url')) {
|
||||||
function get_site_icon_url(string $size): string
|
function get_site_icon_url(string $size): string
|
||||||
{
|
{
|
||||||
@ -205,7 +201,6 @@ if (! function_exists('get_site_icon_url')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('get_podcast_banner')) {
|
if (! function_exists('get_podcast_banner')) {
|
||||||
function get_podcast_banner_url(Podcast $podcast, string $size): string
|
function get_podcast_banner_url(Podcast $podcast, string $size): string
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,6 @@ declare(strict_types=1);
|
|||||||
use App\Entities\Category;
|
use App\Entities\Category;
|
||||||
use App\Entities\Location;
|
use App\Entities\Location;
|
||||||
use App\Entities\Podcast;
|
use App\Entities\Podcast;
|
||||||
|
|
||||||
use App\Libraries\SimpleRSSElement;
|
use App\Libraries\SimpleRSSElement;
|
||||||
use CodeIgniter\I18n\Time;
|
use CodeIgniter\I18n\Time;
|
||||||
use Config\Mimes;
|
use Config\Mimes;
|
||||||
@ -164,15 +163,15 @@ if (! function_exists('get_rss_feed')) {
|
|||||||
$socialSignUpelement->addAttribute('priority', '1');
|
$socialSignUpelement->addAttribute('priority', '1');
|
||||||
$socialSignUpelement->addAttribute(
|
$socialSignUpelement->addAttribute(
|
||||||
'homeUrl',
|
'homeUrl',
|
||||||
parse_url($socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
parse_url((string) $socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
||||||
$socialPlatform->link_url,
|
(string) $socialPlatform->link_url,
|
||||||
PHP_URL_HOST
|
PHP_URL_HOST
|
||||||
) . '/public'
|
) . '/public'
|
||||||
);
|
);
|
||||||
$socialSignUpelement->addAttribute(
|
$socialSignUpelement->addAttribute(
|
||||||
'signUpUrl',
|
'signUpUrl',
|
||||||
parse_url($socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
parse_url((string) $socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
||||||
$socialPlatform->link_url,
|
(string) $socialPlatform->link_url,
|
||||||
PHP_URL_HOST
|
PHP_URL_HOST
|
||||||
) . '/auth/sign_up'
|
) . '/auth/sign_up'
|
||||||
);
|
);
|
||||||
@ -184,15 +183,15 @@ if (! function_exists('get_rss_feed')) {
|
|||||||
$castopodSocialSignUpelement->addAttribute('priority', '1');
|
$castopodSocialSignUpelement->addAttribute('priority', '1');
|
||||||
$castopodSocialSignUpelement->addAttribute(
|
$castopodSocialSignUpelement->addAttribute(
|
||||||
'homeUrl',
|
'homeUrl',
|
||||||
parse_url($socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
parse_url((string) $socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
||||||
$socialPlatform->link_url,
|
(string) $socialPlatform->link_url,
|
||||||
PHP_URL_HOST
|
PHP_URL_HOST
|
||||||
) . '/public'
|
) . '/public'
|
||||||
);
|
);
|
||||||
$castopodSocialSignUpelement->addAttribute(
|
$castopodSocialSignUpelement->addAttribute(
|
||||||
'signUpUrl',
|
'signUpUrl',
|
||||||
parse_url($socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
parse_url((string) $socialPlatform->link_url, PHP_URL_SCHEME) . '://' . parse_url(
|
||||||
$socialPlatform->link_url,
|
(string) $socialPlatform->link_url,
|
||||||
PHP_URL_HOST
|
PHP_URL_HOST
|
||||||
) . '/auth/sign_up'
|
) . '/auth/sign_up'
|
||||||
);
|
);
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
use App\Entities\Actor;
|
use App\Entities\Actor;
|
||||||
|
|
||||||
use App\Entities\Episode;
|
use App\Entities\Episode;
|
||||||
use App\Entities\EpisodeComment;
|
use App\Entities\EpisodeComment;
|
||||||
use App\Entities\Page;
|
use App\Entities\Page;
|
||||||
|
@ -66,7 +66,7 @@ class Router extends CodeIgniterRouter
|
|||||||
}, (string) (is_array($handler) ? key($handler) : $handler));
|
}, (string) (is_array($handler) ? key($handler) : $handler));
|
||||||
|
|
||||||
throw new RedirectException(
|
throw new RedirectException(
|
||||||
preg_replace('#^' . $routeKey . '$#u', $redirectTo, $uri),
|
preg_replace('#^' . $routeKey . '$#u', (string) $redirectTo, $uri),
|
||||||
$this->collection->getRedirectCode($routeKey)
|
$this->collection->getRedirectCode($routeKey)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -685,7 +685,9 @@ export class AudioClipper extends LitElement {
|
|||||||
padding: 0.5rem 0.5rem 0.25rem 0.5rem;
|
padding: 0.5rem 0.5rem 0.25rem 0.5rem;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
background-color: hsl(var(--color-background-elevated));
|
background-color: hsl(var(--color-background-elevated));
|
||||||
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
box-shadow:
|
||||||
|
0 1px 3px 0 rgb(0 0 0 / 0.1),
|
||||||
|
0 1px 2px -1px rgb(0 0 0 / 0.1);
|
||||||
border-radius: 0 0 0.75rem 0.75rem;
|
border-radius: 0 0 0.75rem 0.75rem;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
@ -718,7 +720,9 @@ export class AudioClipper extends LitElement {
|
|||||||
border-radius: 9999px;
|
border-radius: 9999px;
|
||||||
border: none;
|
border: none;
|
||||||
padding: 0.25rem 0.5rem;
|
padding: 0.25rem 0.5rem;
|
||||||
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
box-shadow:
|
||||||
|
0 1px 3px 0 rgb(0 0 0 / 0.1),
|
||||||
|
0 1px 2px -1px rgb(0 0 0 / 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.toolbar button:hover {
|
.toolbar button:hover {
|
||||||
@ -732,9 +736,13 @@ export class AudioClipper extends LitElement {
|
|||||||
var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
||||||
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0
|
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0
|
||||||
calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
||||||
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
|
box-shadow:
|
||||||
|
var(--tw-ring-offset-shadow),
|
||||||
|
var(--tw-ring-shadow),
|
||||||
0 0 rgba(0, 0, 0, 0);
|
0 0 rgba(0, 0, 0, 0);
|
||||||
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
|
box-shadow:
|
||||||
|
var(--tw-ring-offset-shadow),
|
||||||
|
var(--tw-ring-shadow),
|
||||||
0 0 rgba(0, 0, 0, 0);
|
0 0 rgba(0, 0, 0, 0);
|
||||||
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
|
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
|
||||||
var(--tw-shadow, 0 0 rgba(0, 0, 0, 0));
|
var(--tw-shadow, 0 0 rgba(0, 0, 0, 0));
|
||||||
@ -746,10 +754,27 @@ export class AudioClipper extends LitElement {
|
|||||||
|
|
||||||
.toolbar__trim-controls button {
|
.toolbar__trim-controls button {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI,
|
font-family:
|
||||||
Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont,
|
Inter,
|
||||||
"Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif,
|
ui-sans-serif,
|
||||||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
|
system-ui,
|
||||||
|
-apple-system,
|
||||||
|
Segoe UI,
|
||||||
|
Roboto,
|
||||||
|
Ubuntu,
|
||||||
|
Cantarell,
|
||||||
|
Noto Sans,
|
||||||
|
sans-serif,
|
||||||
|
BlinkMacSystemFont,
|
||||||
|
"Segoe UI",
|
||||||
|
Roboto,
|
||||||
|
"Helvetica Neue",
|
||||||
|
Arial,
|
||||||
|
"Noto Sans",
|
||||||
|
sans-serif,
|
||||||
|
"Apple Color Emoji",
|
||||||
|
"Segoe UI Emoji",
|
||||||
|
"Segoe UI Symbol",
|
||||||
"Noto Color Emoji";
|
"Noto Color Emoji";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -871,28 +896,28 @@ export class AudioClipper extends LitElement {
|
|||||||
></path>
|
></path>
|
||||||
</svg>`
|
</svg>`
|
||||||
: this._isPlaying
|
: this._isPlaying
|
||||||
? html`<svg
|
? html`<svg
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
width="1em"
|
width="1em"
|
||||||
height="1em"
|
height="1em"
|
||||||
>
|
>
|
||||||
<g>
|
<g>
|
||||||
|
<path fill="none" d="M0 0h24v24H0z" />
|
||||||
|
<path d="M6 5h2v14H6V5zm10 0h2v14h-2V5z" />
|
||||||
|
</g>
|
||||||
|
</svg>`
|
||||||
|
: html` <svg
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="currentColor"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
>
|
||||||
<path fill="none" d="M0 0h24v24H0z" />
|
<path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path d="M6 5h2v14H6V5zm10 0h2v14h-2V5z" />
|
<path
|
||||||
</g>
|
d="M7.752 5.439l10.508 6.13a.5.5 0 0 1 0 .863l-10.508 6.13A.5.5 0 0 1 7 18.128V5.871a.5.5 0 0 1 .752-.432z"
|
||||||
</svg>`
|
/>
|
||||||
: html` <svg
|
</svg>`}
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="currentColor"
|
|
||||||
width="1em"
|
|
||||||
height="1em"
|
|
||||||
>
|
|
||||||
<path fill="none" d="M0 0h24v24H0z" />
|
|
||||||
<path
|
|
||||||
d="M7.752 5.439l10.508 6.13a.5.5 0 0 1 0 .863l-10.508 6.13A.5.5 0 0 1 7 18.128V5.871a.5.5 0 0 1 .752-.432z"
|
|
||||||
/>
|
|
||||||
</svg>`}
|
|
||||||
</button>
|
</button>
|
||||||
<div class="volume">
|
<div class="volume">
|
||||||
<svg
|
<svg
|
||||||
|
@ -206,7 +206,8 @@ export class PlayEpisodeButton extends LitElement {
|
|||||||
|
|
||||||
button:focus {
|
button:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
box-shadow: 0 0 0 2px hsl(var(--color-background-base)),
|
box-shadow:
|
||||||
|
0 0 0 2px hsl(var(--color-background-base)),
|
||||||
0 0 0 4px hsl(var(--color-accent-base));
|
0 0 0 4px hsl(var(--color-accent-base));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +104,8 @@ export class PlaySoundbite extends LitElement {
|
|||||||
|
|
||||||
button:focus {
|
button:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
box-shadow: 0 0 0 2px hsl(var(--color-background-base)),
|
box-shadow:
|
||||||
|
0 0 0 2px hsl(var(--color-background-base)),
|
||||||
0 0 0 4px hsl(var(--color-accent-base));
|
0 0 0 4px hsl(var(--color-accent-base));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,31 +164,31 @@ export class PlaySoundbite extends LitElement {
|
|||||||
></path>
|
></path>
|
||||||
</svg>`
|
</svg>`
|
||||||
: this._isPlaying
|
: this._isPlaying
|
||||||
? html`<svg
|
? html`<svg
|
||||||
class="animate-spin"
|
class="animate-spin"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
width="1em"
|
width="1em"
|
||||||
height="1em"
|
height="1em"
|
||||||
>
|
>
|
||||||
<g>
|
<g>
|
||||||
|
<path fill="none" d="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
d="M13 9.17A3 3 0 1 0 15 12V2.458c4.057 1.274 7 5.064 7 9.542 0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2c.337 0 .671.017 1 .05v7.12z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</svg>`
|
||||||
|
: html`<svg
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="currentColor"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
>
|
||||||
<path fill="none" d="M0 0h24v24H0z" />
|
<path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
d="M13 9.17A3 3 0 1 0 15 12V2.458c4.057 1.274 7 5.064 7 9.542 0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2c.337 0 .671.017 1 .05v7.12z"
|
d="M7.752 5.439l10.508 6.13a.5.5 0 0 1 0 .863l-10.508 6.13A.5.5 0 0 1 7 18.128V5.871a.5.5 0 0 1 .752-.432z"
|
||||||
/>
|
/>
|
||||||
</g>
|
</svg>`}
|
||||||
</svg>`
|
|
||||||
: html`<svg
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="currentColor"
|
|
||||||
width="1em"
|
|
||||||
height="1em"
|
|
||||||
>
|
|
||||||
<path fill="none" d="M0 0h24v24H0z" />
|
|
||||||
<path
|
|
||||||
d="M7.752 5.439l10.508 6.13a.5.5 0 0 1 0 .863l-10.508 6.13A.5.5 0 0 1 7 18.128V5.871a.5.5 0 0 1 .752-.432z"
|
|
||||||
/>
|
|
||||||
</svg>`}
|
|
||||||
</button>`;
|
</button>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,8 @@ export class VideoClipPreviewer extends LitElement {
|
|||||||
|
|
||||||
::slotted(img) {
|
::slotted(img) {
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1),
|
box-shadow:
|
||||||
|
0 4px 6px -1px rgb(0 0 0 / 0.1),
|
||||||
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
0 2px 4px -2px rgb(0 0 0 / 0.1);
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
@ -97,7 +97,8 @@ export class XMLEditor extends LitElement {
|
|||||||
}
|
}
|
||||||
.cm-editor.cm-focused {
|
.cm-editor.cm-focused {
|
||||||
outline: 2px solid transparent;
|
outline: 2px solid transparent;
|
||||||
box-shadow: 0 0 0 2px hsl(var(--color-background-elevated)),
|
box-shadow:
|
||||||
|
0 0 0 2px hsl(var(--color-background-elevated)),
|
||||||
0 0 0 calc(4px) hsl(var(--color-accent-base));
|
0 0 0 calc(4px) hsl(var(--color-accent-base));
|
||||||
}
|
}
|
||||||
.cm-gutters {
|
.cm-gutters {
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
width: 12.5em;
|
width: 12.5em;
|
||||||
height: 5.25em;
|
height: 5.25em;
|
||||||
font: 1em/1 arial, sans-serif;
|
font:
|
||||||
|
1em/1 arial,
|
||||||
|
sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
[type="range"] {
|
[type="range"] {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -9,16 +9,16 @@
|
|||||||
"php": "^8.1",
|
"php": "^8.1",
|
||||||
"adaures/ipcat-php": "^v1.0.0",
|
"adaures/ipcat-php": "^v1.0.0",
|
||||||
"adaures/podcast-persons-taxonomy": "^v1.0.1",
|
"adaures/podcast-persons-taxonomy": "^v1.0.1",
|
||||||
"aws/aws-sdk-php": "^3.295.3",
|
"aws/aws-sdk-php": "^3.299.1",
|
||||||
"chrisjean/php-ico": "^1.0.4",
|
"chrisjean/php-ico": "^1.0.4",
|
||||||
"cocur/slugify": "^v4.5.1",
|
"cocur/slugify": "^v4.5.1",
|
||||||
"codeigniter4/framework": "v4.4.4",
|
"codeigniter4/framework": "v4.4.5",
|
||||||
"codeigniter4/settings": "v2.1.2",
|
"codeigniter4/settings": "v2.2.0",
|
||||||
"codeigniter4/shield": "v1.0.0",
|
"codeigniter4/shield": "v1.0.1",
|
||||||
"codeigniter4/tasks": "dev-develop",
|
"codeigniter4/tasks": "dev-develop",
|
||||||
"geoip2/geoip2": "v3.0.0",
|
"geoip2/geoip2": "v3.0.0",
|
||||||
"james-heinrich/getid3": "^2.0.0-beta5",
|
"james-heinrich/getid3": "^2.0.0-beta5",
|
||||||
"league/commonmark": "^2.4.1",
|
"league/commonmark": "^2.4.2",
|
||||||
"league/html-to-markdown": "5.1.1",
|
"league/html-to-markdown": "5.1.1",
|
||||||
"melbahja/seo": "^v2.1.1",
|
"melbahja/seo": "^v2.1.1",
|
||||||
"michalsn/codeigniter4-uuid": "v1.0.2",
|
"michalsn/codeigniter4-uuid": "v1.0.2",
|
||||||
@ -30,13 +30,13 @@
|
|||||||
"yassinedoghri/podcast-feed": "dev-main"
|
"yassinedoghri/podcast-feed": "dev-main"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"captainhook/captainhook": "^5.19.2",
|
"captainhook/captainhook": "^5.21.2",
|
||||||
"codeigniter/phpstan-codeigniter": "v1.4.3",
|
"codeigniter/phpstan-codeigniter": "v1.4.3",
|
||||||
"mikey179/vfsstream": "^v1.6.11",
|
"mikey179/vfsstream": "^v1.6.11",
|
||||||
"phpstan/extension-installer": "^1.3.1",
|
"phpstan/extension-installer": "^1.3.1",
|
||||||
"phpstan/phpstan": "^1.10.50",
|
"phpstan/phpstan": "^1.10.58",
|
||||||
"phpunit/phpunit": "^10.5.5",
|
"phpunit/phpunit": "^10.5.10",
|
||||||
"rector/rector": "^0.18.13",
|
"rector/rector": "^1.0.1",
|
||||||
"symplify/coding-standard": "^12.0.7",
|
"symplify/coding-standard": "^12.0.7",
|
||||||
"symplify/easy-coding-standard": "^12.0.13"
|
"symplify/easy-coding-standard": "^12.0.13"
|
||||||
},
|
},
|
||||||
|
360
composer.lock
generated
360
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -14,8 +14,8 @@ Castopod 在其自动构建期间会将 3 个 Docker 映像推送到 Docker Hub
|
|||||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):Castopod
|
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):Castopod
|
||||||
的 Nginx 配置
|
的 Nginx 配置
|
||||||
|
|
||||||
此外,Castopod 需要一个与 MySQL 兼容的数据库。 Redis 数据库 可以添加为缓存处理器
|
此外,Castopod 需要一个与 MySQL 兼容的数据库。 Redis 数据库 可以添加为缓存处理
|
||||||
。
|
器。
|
||||||
|
|
||||||
## 目前支持的标签
|
## 目前支持的标签
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@ Castopod 仅适用于受支持的 MySQL 5.7 或更高版本的兼容数据库。
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
你需要填写服务器主机名、数据库名称、用户名和密码才能完成安装过程。 如果没有这些
|
你需要填写服务器主机名、数据库名称、用户名和密码才能完成安装过程。 如果没有这
|
||||||
,请与你的服务器管理员联系。
|
些,请与你的服务器管理员联系。
|
||||||
|
|
||||||
#### 权限
|
#### 权限
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@ sidebarDepth: 2
|
|||||||
|
|
||||||
[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars]
|
[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars]
|
||||||
|
|
||||||
Castopod 是一个免费的开源播客托管平台,为那些想要和听众接触与互动的播客们制作的
|
Castopod 是一个免费的开源播客托管平台,为那些想要和听众接触与互动的播客们制作
|
||||||
。
|
的。
|
||||||
|
|
||||||
Castopod 易于安装,并使用 [CodeIgniter4](https://codeigniter.com/) 构建, 这是一
|
Castopod 易于安装,并使用 [CodeIgniter4](https://codeigniter.com/) 构建, 这是一
|
||||||
个强大的 PHP 框架,并且占用极小。
|
个强大的 PHP 框架,并且占用极小。
|
||||||
@ -59,8 +59,8 @@ Castopod 易于安装,并使用 [CodeIgniter4](https://codeigniter.com/) 构
|
|||||||
|
|
||||||
事实上,它是唯一长期保持这种状态的媒体之一。
|
事实上,它是唯一长期保持这种状态的媒体之一。
|
||||||
|
|
||||||
随着习惯的发展,越来越多的人开始接触播客:允许创作者寻找新的方式来分享他们的想法
|
随着习惯的发展,越来越多的人开始接触播客:允许创作者寻找新的方式来分享他们的想
|
||||||
,或是让听众获得更好的内容。
|
法,或是让听众获得更好的内容。
|
||||||
|
|
||||||
随着播客的使用越来越广泛,一些公司正试图控制播客与集中化。
|
随着播客的使用越来越广泛,一些公司正试图控制播客与集中化。
|
||||||
|
|
||||||
@ -93,13 +93,13 @@ CMS,可以帮助你在线访问任何类型的网站。
|
|||||||
|
|
||||||
还拥有对播客的独特优化:从播客的创建和新剧集的发布一直到广播,营销和分析。
|
还拥有对播客的独特优化:从播客的创建和新剧集的发布一直到广播,营销和分析。
|
||||||
|
|
||||||
最后,根据你的需要,Wordpress 和 Castopod 甚至可以共存,因为他们有相同的配置环境
|
最后,根据你的需要,Wordpress 和 Castopod 甚至可以共存,因为他们有相同的配置环
|
||||||
!
|
境!
|
||||||
|
|
||||||
### Castopod 对比 Funkwhale
|
### Castopod 对比 Funkwhale
|
||||||
|
|
||||||
Funkwhale 是一个自托管、现代界面、免费开源的音乐服务器。 就像 Castopod 一样
|
Funkwhale 是一个自托管、现代界面、免费开源的音乐服务器。 就像 Castopod 一
|
||||||
,Funkwhale 也位于联邦宇宙中,这是一个去中心化的社交网络,允许两者的互联。
|
样,Funkwhale 也位于联邦宇宙中,这是一个去中心化的社交网络,允许两者的互联。
|
||||||
|
|
||||||
Funkwhale 最初是围绕音乐制作的。 后来,随着项目的发展,引入了托管播客的能力。
|
Funkwhale 最初是围绕音乐制作的。 后来,随着项目的发展,引入了托管播客的能力。
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ class ActivityRequest
|
|||||||
$date = Time::now('GMT')->format('D, d M Y H:i:s T');
|
$date = Time::now('GMT')->format('D, d M Y H:i:s T');
|
||||||
$digest = 'SHA-256=' . base64_encode($this->getBodyDigest());
|
$digest = 'SHA-256=' . base64_encode($this->getBodyDigest());
|
||||||
$contentType = $this->options['headers']['Content-Type'];
|
$contentType = $this->options['headers']['Content-Type'];
|
||||||
$contentLength = (string) strlen($this->request->getBody());
|
$contentLength = (string) strlen((string) $this->request->getBody());
|
||||||
$userAgent = 'Castopod/' . CP_VERSION . '; +' . base_url('', 'https');
|
$userAgent = 'Castopod/' . CP_VERSION . '; +' . base_url('', 'https');
|
||||||
|
|
||||||
$plainText = "(request-target): post {$path}\nhost: {$host}\ndate: {$date}\ndigest: {$digest}\ncontent-type: {$contentType}\ncontent-length: {$contentLength}\nuser-agent: {$userAgent}";
|
$plainText = "(request-target): post {$path}\nhost: {$host}\ndate: {$date}\ndigest: {$digest}\ncontent-type: {$contentType}\ncontent-length: {$contentLength}\nuser-agent: {$userAgent}";
|
||||||
@ -112,6 +112,6 @@ class ActivityRequest
|
|||||||
|
|
||||||
protected function getBodyDigest(): string
|
protected function getBodyDigest(): string
|
||||||
{
|
{
|
||||||
return hash('sha256', $this->request->getBody(), true);
|
return hash('sha256', (string) $this->request->getBody(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ if (! function_exists('get_webfinger_data')) {
|
|||||||
$webfingerRequest = new ActivityRequest((string) $webfingerUri);
|
$webfingerRequest = new ActivityRequest((string) $webfingerUri);
|
||||||
$webfingerResponse = $webfingerRequest->get();
|
$webfingerResponse = $webfingerRequest->get();
|
||||||
|
|
||||||
return json_decode($webfingerResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
return json_decode((string) $webfingerResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +271,7 @@ if (! function_exists('create_actor_from_uri')) {
|
|||||||
{
|
{
|
||||||
$activityRequest = new ActivityRequest($actorUri);
|
$activityRequest = new ActivityRequest($actorUri);
|
||||||
$actorResponse = $activityRequest->get();
|
$actorResponse = $activityRequest->get();
|
||||||
$actorPayload = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
$actorPayload = json_decode((string) $actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
$newActor = new Actor();
|
$newActor = new Actor();
|
||||||
$newActor->uri = $actorUri;
|
$newActor->uri = $actorUri;
|
||||||
@ -404,7 +404,7 @@ if (! function_exists('linkify')) {
|
|||||||
) .
|
) .
|
||||||
'>';
|
'>';
|
||||||
},
|
},
|
||||||
$text,
|
(string) $text,
|
||||||
),
|
),
|
||||||
'handle' => preg_replace_callback(
|
'handle' => preg_replace_callback(
|
||||||
'~(?<!\w)@(?<username>\w++)(?:@(?<domain>(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]))?~',
|
'~(?<!\w)@(?<username>\w++)(?:@(?<domain>(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]))?~',
|
||||||
@ -460,7 +460,7 @@ if (! function_exists('linkify')) {
|
|||||||
'>';
|
'>';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
$text,
|
(string) $text,
|
||||||
),
|
),
|
||||||
default => preg_replace_callback(
|
default => preg_replace_callback(
|
||||||
'~' .
|
'~' .
|
||||||
@ -481,7 +481,7 @@ if (! function_exists('linkify')) {
|
|||||||
) .
|
) .
|
||||||
'>';
|
'>';
|
||||||
},
|
},
|
||||||
$text,
|
(string) $text,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -492,7 +492,7 @@ if (! function_exists('linkify')) {
|
|||||||
static function (array $match) use (&$links): string {
|
static function (array $match) use (&$links): string {
|
||||||
return $links[$match[1] - 1];
|
return $links[$match[1] - 1];
|
||||||
},
|
},
|
||||||
$text,
|
(string) $text,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ class HttpSignature
|
|||||||
}
|
}
|
||||||
|
|
||||||
// compute body digest and compare with header digest
|
// compute body digest and compare with header digest
|
||||||
$bodyDigest = hash('sha256', $this->request->getBody(), true);
|
$bodyDigest = hash('sha256', (string) $this->request->getBody(), true);
|
||||||
$digest = 'SHA-256=' . base64_encode($bodyDigest);
|
$digest = 'SHA-256=' . base64_encode($bodyDigest);
|
||||||
if ($digest !== $digestHeader->getValue()) {
|
if ($digest !== $digestHeader->getValue()) {
|
||||||
throw new Exception('Request digest is incorrect.');
|
throw new Exception('Request digest is incorrect.');
|
||||||
@ -99,7 +99,7 @@ class HttpSignature
|
|||||||
// Fetch the public key linked from keyId
|
// Fetch the public key linked from keyId
|
||||||
$actorRequest = new ActivityRequest($keyId);
|
$actorRequest = new ActivityRequest($keyId);
|
||||||
$actorResponse = $actorRequest->get();
|
$actorResponse = $actorRequest->get();
|
||||||
$actor = json_decode($actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
$actor = json_decode((string) $actorResponse->getBody(), false, 512, JSON_THROW_ON_ERROR);
|
||||||
|
|
||||||
$publicKeyPem = (string) $actor->publicKey->publicKeyPem;
|
$publicKeyPem = (string) $actor->publicKey->publicKeyPem;
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ use Modules\PodcastImport\Entities\TaskStatus;
|
|||||||
* @link https://castopod.org/
|
* @link https://castopod.org/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
if (! function_exists('get_import_tasks')) {
|
if (! function_exists('get_import_tasks')) {
|
||||||
/**
|
/**
|
||||||
* @return PodcastImportTask[]
|
* @return PodcastImportTask[]
|
||||||
|
64
package.json
64
package.json
@ -20,26 +20,26 @@
|
|||||||
"lint:fix": "eslint --ext js,ts app/Resources --fix",
|
"lint:fix": "eslint --ext js,ts app/Resources --fix",
|
||||||
"lint:css": "stylelint -f verbose \"app/Resources/**/*.css\"",
|
"lint:css": "stylelint -f verbose \"app/Resources/**/*.css\"",
|
||||||
"lint:css:fix": "stylelint -f verbose --fix \"app/Resources/**/*.css\"",
|
"lint:css:fix": "stylelint -f verbose --fix \"app/Resources/**/*.css\"",
|
||||||
"prettier": "prettier --check --ignore-path .gitignore .",
|
"prettier": "prettier --check .",
|
||||||
"prettier:fix": "prettier --write --ignore-path .gitignore .",
|
"prettier:fix": "prettier --write .",
|
||||||
"typecheck": "tsc",
|
"typecheck": "tsc",
|
||||||
"commit": "cz",
|
"commit": "cz",
|
||||||
"release": "semantic-release",
|
"release": "semantic-release",
|
||||||
"prepare": "is-ci || husky install"
|
"prepare": "is-ci || husky"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@amcharts/amcharts4": "^4.10.38",
|
"@amcharts/amcharts4": "^4.10.38",
|
||||||
"@amcharts/amcharts4-geodata": "^4.1.28",
|
"@amcharts/amcharts4-geodata": "^4.1.28",
|
||||||
"@codemirror/commands": "^6.3.3",
|
"@codemirror/commands": "^6.3.3",
|
||||||
"@codemirror/lang-xml": "^6.0.2",
|
"@codemirror/lang-xml": "^6.0.2",
|
||||||
"@codemirror/language": "^6.10.0",
|
"@codemirror/language": "^6.10.1",
|
||||||
"@codemirror/state": "^6.4.0",
|
"@codemirror/state": "^6.4.0",
|
||||||
"@codemirror/view": "^6.23.0",
|
"@codemirror/view": "^6.24.0",
|
||||||
"@floating-ui/dom": "^1.5.3",
|
"@floating-ui/dom": "^1.6.3",
|
||||||
"@github/clipboard-copy-element": "^1.3.0",
|
"@github/clipboard-copy-element": "^1.3.0",
|
||||||
"@github/hotkey": "^3.1.0",
|
"@github/hotkey": "^3.1.0",
|
||||||
"@github/markdown-toolbar-element": "^2.2.1",
|
"@github/markdown-toolbar-element": "^2.2.1",
|
||||||
"@github/relative-time-element": "^4.3.0",
|
"@github/relative-time-element": "^4.3.1",
|
||||||
"@tailwindcss/nesting": "0.0.0-insiders.565cd3e",
|
"@tailwindcss/nesting": "0.0.0-insiders.565cd3e",
|
||||||
"@vime/core": "^5.4.1",
|
"@vime/core": "^5.4.1",
|
||||||
"choices.js": "^10.2.0",
|
"choices.js": "^10.2.0",
|
||||||
@ -47,50 +47,50 @@
|
|||||||
"flatpickr": "^4.6.13",
|
"flatpickr": "^4.6.13",
|
||||||
"leaflet": "^1.9.4",
|
"leaflet": "^1.9.4",
|
||||||
"leaflet.markercluster": "^1.5.3",
|
"leaflet.markercluster": "^1.5.3",
|
||||||
"lit": "^3.1.0",
|
"lit": "^3.1.2",
|
||||||
"marked": "^11.1.0",
|
"marked": "^11.2.0",
|
||||||
"wavesurfer.js": "^7.6.0",
|
"wavesurfer.js": "^7.7.3",
|
||||||
"xml-formatter": "^3.6.0"
|
"xml-formatter": "^3.6.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^18.4.3",
|
"@commitlint/cli": "^18.6.1",
|
||||||
"@commitlint/config-conventional": "^18.4.3",
|
"@commitlint/config-conventional": "^18.6.2",
|
||||||
"@csstools/css-tokenizer": "^2.2.2",
|
"@csstools/css-tokenizer": "^2.2.3",
|
||||||
"@semantic-release/changelog": "^6.0.3",
|
"@semantic-release/changelog": "^6.0.3",
|
||||||
"@semantic-release/exec": "^6.0.3",
|
"@semantic-release/exec": "^6.0.3",
|
||||||
"@semantic-release/git": "^10.0.1",
|
"@semantic-release/git": "^10.0.1",
|
||||||
"@semantic-release/gitlab": "^13.0.0",
|
"@semantic-release/gitlab": "^13.0.2",
|
||||||
"@tailwindcss/forms": "^0.5.7",
|
"@tailwindcss/forms": "^0.5.7",
|
||||||
"@tailwindcss/typography": "^0.5.10",
|
"@tailwindcss/typography": "^0.5.10",
|
||||||
"@types/leaflet": "^1.9.8",
|
"@types/leaflet": "^1.9.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.16.0",
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
||||||
"@typescript-eslint/parser": "^6.16.0",
|
"@typescript-eslint/parser": "^6.21.0",
|
||||||
"all-contributors-cli": "^6.26.1",
|
"all-contributors-cli": "^6.26.1",
|
||||||
"commitizen": "^4.3.0",
|
"commitizen": "^4.3.0",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"cssnano": "^6.0.2",
|
"cssnano": "^6.0.3",
|
||||||
"cz-conventional-changelog": "^3.3.0",
|
"cz-conventional-changelog": "^3.3.0",
|
||||||
"eslint": "^8.56.0",
|
"eslint": "^8.56.0",
|
||||||
"eslint-config-prettier": "^8.10.0",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
"husky": "^8.0.3",
|
"husky": "^9.0.11",
|
||||||
"is-ci": "^3.0.1",
|
"is-ci": "^3.0.1",
|
||||||
"lint-staged": "^15.2.0",
|
"lint-staged": "^15.2.2",
|
||||||
"postcss": "^8.4.32",
|
"postcss": "^8.4.35",
|
||||||
"postcss-import": "^15.1.0",
|
"postcss-import": "^16.0.1",
|
||||||
"postcss-nesting": "^12.0.2",
|
"postcss-nesting": "^12.0.2",
|
||||||
"postcss-preset-env": "^9.3.0",
|
"postcss-preset-env": "^9.3.0",
|
||||||
"postcss-reporter": "^7.0.5",
|
"postcss-reporter": "^7.1.0",
|
||||||
"prettier": "2.8.8",
|
"prettier": "3.2.5",
|
||||||
"prettier-plugin-organize-imports": "^3.2.4",
|
"prettier-plugin-organize-imports": "^3.2.4",
|
||||||
"semantic-release": "^22.0.12",
|
"semantic-release": "^23.0.2",
|
||||||
"stylelint": "^16.1.0",
|
"stylelint": "^16.2.1",
|
||||||
"stylelint-config-standard": "^36.0.0",
|
"stylelint-config-standard": "^36.0.0",
|
||||||
"svgo": "^3.1.0",
|
"svgo": "^3.2.0",
|
||||||
"tailwindcss": "^3.4.0",
|
"tailwindcss": "^3.4.1",
|
||||||
"typescript": "^5.3.3",
|
"typescript": "^5.3.3",
|
||||||
"vite": "^5.0.10",
|
"vite": "^5.1.3",
|
||||||
"vite-plugin-pwa": "^0.17.4",
|
"vite-plugin-pwa": "^0.17.5",
|
||||||
"workbox-build": "^7.0.0",
|
"workbox-build": "^7.0.0",
|
||||||
"workbox-core": "^7.0.0",
|
"workbox-core": "^7.0.0",
|
||||||
"workbox-routing": "^7.0.0",
|
"workbox-routing": "^7.0.0",
|
||||||
|
1720
pnpm-lock.yaml
generated
1720
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -6,7 +6,6 @@ use Rector\CodingStyle\Rector\Encapsed\EncapsedStringsToSprintfRector;
|
|||||||
use Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector;
|
use Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector;
|
||||||
use Rector\CodingStyle\Rector\String_\SymplifyQuoteEscapeRector;
|
use Rector\CodingStyle\Rector\String_\SymplifyQuoteEscapeRector;
|
||||||
use Rector\Config\RectorConfig;
|
use Rector\Config\RectorConfig;
|
||||||
use Rector\Core\ValueObject\PhpVersion;
|
|
||||||
use Rector\DeadCode\Rector\If_\UnwrapFutureCompatibleIfPhpVersionRector;
|
use Rector\DeadCode\Rector\If_\UnwrapFutureCompatibleIfPhpVersionRector;
|
||||||
use Rector\DeadCode\Rector\Stmt\RemoveUnreachableStatementRector;
|
use Rector\DeadCode\Rector\Stmt\RemoveUnreachableStatementRector;
|
||||||
use Rector\EarlyReturn\Rector\If_\ChangeAndIfToEarlyReturnRector;
|
use Rector\EarlyReturn\Rector\If_\ChangeAndIfToEarlyReturnRector;
|
||||||
@ -14,6 +13,7 @@ use Rector\EarlyReturn\Rector\If_\ChangeOrIfContinueToMultiContinueRector;
|
|||||||
use Rector\Php55\Rector\String_\StringClassNameToClassConstantRector;
|
use Rector\Php55\Rector\String_\StringClassNameToClassConstantRector;
|
||||||
use Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector;
|
use Rector\Php71\Rector\FuncCall\RemoveExtraParametersRector;
|
||||||
use Rector\Set\ValueObject\SetList;
|
use Rector\Set\ValueObject\SetList;
|
||||||
|
use Rector\ValueObject\PhpVersion;
|
||||||
|
|
||||||
return static function (RectorConfig $rectorConfig): void {
|
return static function (RectorConfig $rectorConfig): void {
|
||||||
$rectorConfig->paths([__DIR__ . '/app', __DIR__ . '/modules', __DIR__ . '/tests', __DIR__ . '/public']);
|
$rectorConfig->paths([__DIR__ . '/app', __DIR__ . '/modules', __DIR__ . '/tests', __DIR__ . '/public']);
|
||||||
|
@ -38,7 +38,6 @@ if ($episode->publication_status === 'published') {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<nav class="sticky z-40 flex col-start-2 pt-4 shadow bg-elevated md:px-8 gap-x-2 md:gap-x-4 -top-4 rounded-conditional-b-xl">
|
<nav class="sticky z-40 flex col-start-2 pt-4 shadow bg-elevated md:px-8 gap-x-2 md:gap-x-4 -top-4 rounded-conditional-b-xl">
|
||||||
<?php foreach ($navigationItems as $item): ?>
|
<?php foreach ($navigationItems as $item): ?>
|
||||||
|
2
writable/cache/index.html
vendored
2
writable/cache/index.html
vendored
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>403 Forbidden</title>
|
<title>403 Forbidden</title>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user