From 842c4e4b792865e61083bc40ab9c206cec70b5b4 Mon Sep 17 00:00:00 2001
From: Yassine Doghri
Date: Mon, 25 Aug 2025 16:44:27 +0000
Subject: [PATCH] chore: update CI to v4.6.3 + all php and js dependencies
---
.gitignore | 20 +-
CONTRIBUTING-DEV.md | 3 -
app/Config/Autoload.php | 2 -
app/Config/Cache.php | 18 +-
app/Config/Constants.php | 15 -
app/Config/Cookie.php | 2 +-
app/Config/Database.php | 1 +
app/Config/DocTypes.php | 3 -
app/Config/Feature.php | 12 +-
app/Config/Filters.php | 5 +-
app/Config/Format.php | 13 -
app/Config/Kint.php | 3 -
app/Config/Logger.php | 3 +-
app/Config/Mimes.php | 10 +-
app/Config/Modules.php | 2 -
app/Config/Optimize.php | 2 -
app/Config/Routes.php | 9 +-
app/Config/Routing.php | 4 +-
app/Config/Security.php | 19 -
app/Config/Services.php | 10 +-
app/Filters/AllowCorsFilter.php | 6 +-
.../ViewComponents/Config/Services.php | 1 +
app/Libraries/Vite/Config/Services.php | 1 +
app/Models/ClipModel.php | 14 +-
app/Resources/js/modules/MultiSelect.ts | 43 +-
app/Resources/js/modules/Select.ts | 43 +-
app/Resources/styles/choices.css | 41 +-
app/Resources/styles/custom.css | 19 +-
app/Resources/styles/readMore.css | 3 +-
app/Resources/styles/seeMore.css | 3 +-
app/Views/errors/html/debug.css | 11 +-
app/Views/errors/html/error_400.php | 29 +
app/Views/errors/html/error_exception.php | 2 +-
composer.json | 30 +-
composer.lock | 2351 ++++++---
.../docs/ar/getting-started/install.mdx | 1 -
.../docs/ar/getting-started/update.mdx | 4 -
.../docs/br/getting-started/install.mdx | 1 -
.../docs/br/getting-started/update.mdx | 4 -
.../docs/ca/getting-started/install.mdx | 1 -
.../docs/ca/getting-started/update.mdx | 4 -
.../docs/da/getting-started/install.mdx | 1 -
.../docs/da/getting-started/update.mdx | 4 -
.../docs/de/getting-started/install.mdx | 1 -
.../docs/de/getting-started/update.mdx | 4 -
.../docs/el/getting-started/install.mdx | 1 -
.../docs/el/getting-started/update.mdx | 4 -
.../docs/en/getting-started/install.mdx | 1 -
.../docs/en/getting-started/update.mdx | 4 -
.../docs/es/getting-started/install.mdx | 1 -
.../docs/es/getting-started/update.mdx | 4 -
.../docs/eu/getting-started/install.mdx | 1 -
.../docs/eu/getting-started/update.mdx | 4 -
.../docs/fa/getting-started/install.mdx | 1 -
.../docs/fa/getting-started/update.mdx | 4 -
.../docs/fr-ca/getting-started/install.mdx | 1 -
.../docs/fr-ca/getting-started/update.mdx | 4 -
.../docs/fr/getting-started/install.mdx | 1 -
.../docs/fr/getting-started/update.mdx | 4 -
.../docs/fr2/getting-started/install.mdx | 1 -
.../docs/fr2/getting-started/update.mdx | 4 -
.../docs/gd/getting-started/install.mdx | 1 -
.../docs/gd/getting-started/update.mdx | 4 -
.../docs/gl/getting-started/install.mdx | 1 -
.../docs/gl/getting-started/update.mdx | 4 -
.../docs/id/getting-started/install.mdx | 1 -
.../docs/id/getting-started/update.mdx | 4 -
.../docs/it/getting-started/install.mdx | 1 -
.../docs/it/getting-started/update.mdx | 4 -
.../docs/ja/getting-started/install.mdx | 1 -
.../docs/ja/getting-started/update.mdx | 4 -
.../docs/kk/getting-started/install.mdx | 1 -
.../docs/kk/getting-started/update.mdx | 4 -
.../docs/ko/getting-started/install.mdx | 1 -
.../docs/ko/getting-started/update.mdx | 4 -
.../docs/nl/getting-started/install.mdx | 1 -
.../docs/nl/getting-started/update.mdx | 4 -
.../docs/nn-no/getting-started/install.mdx | 1 -
.../docs/nn-no/getting-started/update.mdx | 4 -
.../docs/oc/getting-started/install.mdx | 1 -
.../docs/oc/getting-started/update.mdx | 4 -
.../docs/pl/getting-started/install.mdx | 1 -
.../docs/pl/getting-started/update.mdx | 4 -
.../docs/pt-br/getting-started/install.mdx | 1 -
.../docs/pt-br/getting-started/update.mdx | 4 -
.../docs/pt/getting-started/install.mdx | 1 -
.../docs/pt/getting-started/update.mdx | 4 -
.../docs/ro/getting-started/install.mdx | 1 -
.../docs/ro/getting-started/update.mdx | 4 -
.../docs/ru/getting-started/install.mdx | 1 -
.../docs/ru/getting-started/update.mdx | 4 -
.../docs/sk/getting-started/install.mdx | 1 -
.../docs/sk/getting-started/update.mdx | 4 -
.../docs/sr-latn/getting-started/install.mdx | 1 -
.../docs/sr-latn/getting-started/update.mdx | 4 -
.../docs/sv/getting-started/install.mdx | 1 -
.../docs/sv/getting-started/update.mdx | 4 -
.../docs/uk/getting-started/install.mdx | 1 -
.../docs/uk/getting-started/update.mdx | 4 -
.../docs/zh-hans/getting-started/install.mdx | 1 -
.../docs/zh-hans/getting-started/update.mdx | 4 -
.../docs/zh-hant/getting-started/install.mdx | 1 -
.../docs/zh-hant/getting-started/update.mdx | 4 -
ecs.php | 11 -
.../Controllers/VideoClipsController.php | 2 +-
.../Rest/V1/Controllers/BaseApiController.php | 22 +
.../Rest/V1/Controllers/EpisodeController.php | 15 +-
.../V1/Controllers/ExceptionController.php | 6 +-
.../Rest/V1/Controllers/PodcastController.php | 9 +-
modules/Api/Rest/V1/Filters/ApiFilter.php | 7 +-
modules/Auth/Config/Routes.php | 5 +-
modules/Auth/Filters/PermissionFilter.php | 3 +-
modules/Fediverse/Filters/FediverseFilter.php | 3 +-
modules/Fediverse/Models/PostModel.php | 1 +
.../PodcastImport/Commands/PodcastImport.php | 10 +-
.../Helpers/podcast_import_helper.php | 2 +-
.../Filters/PodcastUnlockFilter.php | 4 +-
package.json | 74 +-
phpstan.neon | 2 +-
pnpm-lock.yaml | 4607 ++++++++---------
preload.php | 8 +-
public/index.php | 2 +-
spark | 9 +-
tests/unit/HealthTest.php | 5 +-
themes/cp_admin/_partials/_nav_header.php | 6 +-
themes/cp_admin/_partials/_nav_menu.php | 2 +-
themes/cp_admin/episode/list.php | 3 +-
themes/cp_admin/episode/publish.php | 12 +-
themes/cp_admin/episode/view.php | 2 +-
.../podcast/analytics/listening_time.php | 2 +-
.../podcast/analytics/time_periods.php | 2 +-
.../podcast/analytics/unique_listeners.php | 2 +-
themes/cp_admin/podcast/latest_episodes.php | 8 +-
themes/cp_admin/subscription/list.php | 10 +-
themes/cp_app/episode/_layout-preview.php | 4 +-
themes/cp_app/episode/_layout.php | 4 +-
themes/cp_app/home.php | 4 +-
themes/cp_app/pages/_layout.php | 4 +-
themes/cp_app/pages/map.php | 8 +-
themes/cp_app/podcast/_partials/sidebar.php | 8 +-
themes/cp_app/podcast/links.php | 2 +-
themes/cp_app/post/_partials/reblog.php | 10 +-
themes/cp_app/post/post.php | 12 +-
themes/cp_install/cache_config.php | 8 +-
writable/debugbar/index.html | 9 +
145 files changed, 3966 insertions(+), 3886 deletions(-)
create mode 100644 app/Views/errors/html/error_400.php
create mode 100644 modules/Api/Rest/V1/Controllers/BaseApiController.php
create mode 100644 writable/debugbar/index.html
diff --git a/.gitignore b/.gitignore
index 2b258bab..90005402 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,7 +67,7 @@ writable/uploads/*
!writable/uploads/index.html
writable/debugbar/*
-!writable/debugbar/.gitkeep
+!writable/debugbar/index.html
php_errors.log
@@ -107,15 +107,15 @@ _modules/*
.idea/
*.iml
-# Netbeans
-nbproject/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-.nb-gradle/
+# NetBeans
+/nbproject/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/nbactions.xml
+/nb-configuration.xml
+/.nb-gradle/
# Sublime Text
*.tmlanguage.cache
diff --git a/CONTRIBUTING-DEV.md b/CONTRIBUTING-DEV.md
index df75bf50..66bfae37 100644
--- a/CONTRIBUTING-DEV.md
+++ b/CONTRIBUTING-DEV.md
@@ -146,12 +146,10 @@ To see your changes, go to:
- `http://localhost:8080/` for the Castopod website
- `http://localhost:8080/cp-admin` for the Castopod admin:
-
- email: **admin@castopod.local**
- password: **castopod**
- `http://localhost:8888/` for the phpmyadmin interface:
-
- username: **castopod**
- password: **castopod**
@@ -294,7 +292,6 @@ You do not wish to use the VSCode devcontainer? No problem!
```
3. (optionnal) Populate the database with test data:
-
- Populate with fake podcast analytics:
```bash
diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php
index 29878b13..6d5bb530 100644
--- a/app/Config/Autoload.php
+++ b/app/Config/Autoload.php
@@ -16,8 +16,6 @@ use CodeIgniter\Config\AutoloadConfig;
*
* NOTE: If you use an identical key in $psr4 or $classmap, then
* the values in this file will overwrite the framework's values.
- *
- * @immutable
*/
class Autoload extends AutoloadConfig
{
diff --git a/app/Config/Cache.php b/app/Config/Cache.php
index 20bd2f27..c37f7c00 100644
--- a/app/Config/Cache.php
+++ b/app/Config/Cache.php
@@ -36,18 +36,6 @@ class Cache extends BaseConfig
*/
public string $backupHandler = 'dummy';
- /**
- * --------------------------------------------------------------------------
- * Cache Directory Path
- * --------------------------------------------------------------------------
- *
- * The path to where cache files should be stored, if using a file-based
- * system.
- *
- * @deprecated Use the driver-specific variant under $file
- */
- public string $storePath = WRITEPATH . 'cache/';
-
/**
* --------------------------------------------------------------------------
* Key Prefix
@@ -91,7 +79,7 @@ class Cache extends BaseConfig
* Your file storage preferences can be specified below, if you are using
* the File driver.
*
- * @var array
+ * @var array{storePath?: string, mode?: int}
*/
public array $file = [
'storePath' => WRITEPATH . 'cache/',
@@ -107,7 +95,7 @@ class Cache extends BaseConfig
*
* @see https://codeigniter.com/user_guide/libraries/caching.html#memcached
*
- * @var array
+ * @var array{host?: string, port?: int, weight?: int, raw?: bool}
*/
public array $memcached = [
'host' => '127.0.0.1',
@@ -123,7 +111,7 @@ class Cache extends BaseConfig
* Your Redis server can be specified below, if you are using
* the Redis or Predis drivers.
*
- * @var array
+ * @var array{host?: string, password?: string|null, port?: int, timeout?: int, database?: int}
*/
public array $redis = [
'host' => '127.0.0.1',
diff --git a/app/Config/Constants.php b/app/Config/Constants.php
index 019bd735..9970d6cf 100644
--- a/app/Config/Constants.php
+++ b/app/Config/Constants.php
@@ -91,18 +91,3 @@ defined('EXIT_USER_INPUT') || define('EXIT_USER_INPUT', 7); // invalid user inpu
defined('EXIT_DATABASE') || define('EXIT_DATABASE', 8); // database error
defined('EXIT__AUTO_MIN') || define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
defined('EXIT__AUTO_MAX') || define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code
-
-/**
- * @deprecated Use \CodeIgniter\Events\Events::PRIORITY_LOW instead.
- */
-define('EVENT_PRIORITY_LOW', 200);
-
-/**
- * @deprecated Use \CodeIgniter\Events\Events::PRIORITY_NORMAL instead.
- */
-define('EVENT_PRIORITY_NORMAL', 100);
-
-/**
- * @deprecated Use \CodeIgniter\Events\Events::PRIORITY_HIGH instead.
- */
-define('EVENT_PRIORITY_HIGH', 10);
diff --git a/app/Config/Cookie.php b/app/Config/Cookie.php
index 26e5da56..bcbe5d7e 100644
--- a/app/Config/Cookie.php
+++ b/app/Config/Cookie.php
@@ -85,7 +85,7 @@ class Cookie extends BaseConfig
* (empty string) means default SameSite attribute set by browsers (`Lax`)
* will be set on cookies. If set to `None`, `$secure` must also be set.
*
- * @phpstan-var 'None'|'Lax'|'Strict'|''
+ * @var ''|'Lax'|'None'|'Strict'
*/
public string $samesite = 'Lax';
diff --git a/app/Config/Database.php b/app/Config/Database.php
index fce9d053..645d5ce3 100644
--- a/app/Config/Database.php
+++ b/app/Config/Database.php
@@ -45,6 +45,7 @@ class Database extends Config
'failover' => [],
'port' => 3306,
'numberNative' => false,
+ 'foundRows' => false,
'dateFormat' => [
'date' => 'Y-m-d',
'datetime' => 'Y-m-d H:i:s',
diff --git a/app/Config/DocTypes.php b/app/Config/DocTypes.php
index 3d04aaa5..62ad9e07 100644
--- a/app/Config/DocTypes.php
+++ b/app/Config/DocTypes.php
@@ -4,9 +4,6 @@ declare(strict_types=1);
namespace Config;
-/**
- * @immutable
- */
class DocTypes
{
/**
diff --git a/app/Config/Feature.php b/app/Config/Feature.php
index 1e257ac4..76787f2d 100644
--- a/app/Config/Feature.php
+++ b/app/Config/Feature.php
@@ -12,9 +12,9 @@ use CodeIgniter\Config\BaseConfig;
class Feature extends BaseConfig
{
/**
- * Use improved new auto routing instead of the default legacy version.
+ * Use improved new auto routing instead of the legacy version.
*/
- public bool $autoRoutesImproved = false;
+ public bool $autoRoutesImproved = true;
/**
* Use filter execution order in 4.4 or before.
@@ -28,4 +28,12 @@ class Feature extends BaseConfig
* If false, `limit(0)` returns no records. (the behavior of 3.1.9 or later in version 3.x.)
*/
public bool $limitZeroAsAll = true;
+
+ /**
+ * Use strict location negotiation.
+ *
+ * By default, the locale is selected based on a loose comparison of the language code (ISO 639-1)
+ * Enabling strict comparison will also consider the region code (ISO 3166-1 alpha-2).
+ */
+ public bool $strictLocaleNegotiation = false;
}
diff --git a/app/Config/Filters.php b/app/Config/Filters.php
index 1cf07e27..2d64bc02 100644
--- a/app/Config/Filters.php
+++ b/app/Config/Filters.php
@@ -67,7 +67,10 @@ class Filters extends BaseConfig
/**
* List of filter aliases that are always applied before and after every request.
*
- * @var array>>>|array>
+ * @var array{
+ * before: array|string}>|list,
+ * after: array|string}>|list
+ * }
*/
public array $globals = [
'before' => [
diff --git a/app/Config/Format.php b/app/Config/Format.php
index 86b7e2dd..355d341f 100644
--- a/app/Config/Format.php
+++ b/app/Config/Format.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Config;
use CodeIgniter\Config\BaseConfig;
-use CodeIgniter\Format\FormatterInterface;
use CodeIgniter\Format\JSONFormatter;
use CodeIgniter\Format\XMLFormatter;
@@ -64,16 +63,4 @@ class Format extends BaseConfig
'application/xml' => 0,
'text/xml' => 0,
];
-
- //--------------------------------------------------------------------
-
- /**
- * A Factory method to return the appropriate formatter for the given mime type.
- *
- * @deprecated This is an alias of `\CodeIgniter\Format\Format::getFormatter`. Use that instead.
- */
- public function getFormatter(string $mime): FormatterInterface
- {
- return service('format')->getFormatter($mime);
- }
}
diff --git a/app/Config/Kint.php b/app/Config/Kint.php
index 3cc2f70f..813a68a0 100644
--- a/app/Config/Kint.php
+++ b/app/Config/Kint.php
@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Config;
use Kint\Parser\ConstructablePluginInterface;
-use Kint\Renderer\AbstractRenderer;
use Kint\Renderer\Rich\TabPluginInterface;
use Kint\Renderer\Rich\ValuePluginInterface;
@@ -47,8 +46,6 @@ class Kint
public bool $richFolder = false;
- public int $richSort = AbstractRenderer::SORT_FULL;
-
/**
* @var array>|null
*/
diff --git a/app/Config/Logger.php b/app/Config/Logger.php
index 2770468f..ab949f98 100644
--- a/app/Config/Logger.php
+++ b/app/Config/Logger.php
@@ -6,6 +6,7 @@ namespace Config;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\Log\Handlers\FileHandler;
+use CodeIgniter\Log\Handlers\HandlerInterface;
class Logger extends BaseConfig
{
@@ -75,7 +76,7 @@ class Logger extends BaseConfig
* Handlers are executed in the order defined in this array, starting with
* the handler on top and continuing down.
*
- * @var array|string>>
+ * @var array, array|string>>
*/
public array $handlers = [
/*
diff --git a/app/Config/Mimes.php b/app/Config/Mimes.php
index 962d4cc1..fedb0532 100644
--- a/app/Config/Mimes.php
+++ b/app/Config/Mimes.php
@@ -12,8 +12,6 @@ namespace Config;
*
* When working with mime types, please make sure you have the ´fileinfo´ extension enabled to reliably detect the
* media types.
- *
- * @immutable
*/
class Mimes
{
@@ -281,7 +279,13 @@ class Mimes
'srt' => ['application/x-subrip', 'text/srt', 'text/plain', 'application/octet-stream'],
'vtt' => ['text/vtt', 'text/plain'],
'ico' => ['image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'],
- 'stl' => ['application/sla', 'application/vnd.ms-pki.stl', 'application/x-navistyle'],
+ 'stl' => [
+ 'application/sla',
+ 'application/vnd.ms-pki.stl',
+ 'application/x-navistyle',
+ 'model/stl',
+ 'application/octet-stream',
+ ],
];
/**
diff --git a/app/Config/Modules.php b/app/Config/Modules.php
index bfceb1f3..0c5bfb04 100644
--- a/app/Config/Modules.php
+++ b/app/Config/Modules.php
@@ -11,8 +11,6 @@ use CodeIgniter\Modules\Modules as BaseModules;
*
* NOTE: This class is required prior to Autoloader instantiation,
* and does not extend BaseConfig.
- *
- * @immutable
*/
class Modules extends BaseModules
{
diff --git a/app/Config/Optimize.php b/app/Config/Optimize.php
index 3aa3411c..93bbaf39 100644
--- a/app/Config/Optimize.php
+++ b/app/Config/Optimize.php
@@ -9,8 +9,6 @@ namespace Config;
*
* NOTE: This class does not extend BaseConfig for performance reasons.
* So you cannot replace the property values with Environment Variables.
- *
- * @immutable
*/
class Optimize
{
diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index f3871562..316156cf 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -4,14 +4,7 @@ declare(strict_types=1);
use CodeIgniter\Router\RouteCollection;
-/**
- * @var RouteCollection $routes
- *
- * --------------------------------------------------------------------
- * Placeholder definitions
- * --------------------------------------------------------------------
- */
-
+/** @var RouteCollection $routes */
$routes->addPlaceholder('podcastHandle', '[a-zA-Z0-9\_]{1,32}');
$routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,128}');
$routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}');
diff --git a/app/Config/Routing.php b/app/Config/Routing.php
index b7210e8f..acb39371 100644
--- a/app/Config/Routing.php
+++ b/app/Config/Routing.php
@@ -136,7 +136,7 @@ class Routing extends BaseRouting
*
* If you enable this, $translateURIDashes is ignored.
*
- * Default: false
+ * Default: true
*/
- public bool $translateUriToCamelCase = false;
+ public bool $translateUriToCamelCase = true;
}
diff --git a/app/Config/Security.php b/app/Config/Security.php
index 39d915c3..704c6efb 100644
--- a/app/Config/Security.php
+++ b/app/Config/Security.php
@@ -83,23 +83,4 @@ class Security extends BaseConfig
* @see https://codeigniter4.github.io/userguide/libraries/security.html#redirection-on-failure
*/
public bool $redirect = (ENVIRONMENT === 'production');
-
- /**
- * --------------------------------------------------------------------------
- * CSRF SameSite
- * --------------------------------------------------------------------------
- *
- * Setting for CSRF SameSite cookie token.
- *
- * Allowed values are: None - Lax - Strict - ''.
- *
- * Defaults to `Lax` as recommended in this link:
- *
- * @see https://portswigger.net/web-security/csrf/samesite-cookies
- *
- * @var string
- *
- * @deprecated `Config\Cookie` $samesite property is used.
- */
- public $samesite = 'Lax';
}
diff --git a/app/Config/Services.php b/app/Config/Services.php
index b12e40a8..c8d4755d 100644
--- a/app/Config/Services.php
+++ b/app/Config/Services.php
@@ -8,9 +8,11 @@ use App\Libraries\Breadcrumb;
use App\Libraries\Negotiate;
use App\Libraries\Router;
use CodeIgniter\Config\BaseService;
+use CodeIgniter\HTTP\Negotiate as CodeIgniterHTTPNegotiate;
use CodeIgniter\HTTP\Request;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\Router\RouteCollectionInterface;
+use CodeIgniter\Router\Router as CodeIgniterRouter;
/**
* Services Configuration file.
@@ -32,7 +34,7 @@ class Services extends BaseService
?RouteCollectionInterface $routes = null,
?Request $request = null,
bool $getShared = true
- ): Router {
+ ): CodeIgniterRouter {
if ($getShared) {
return static::getSharedInstance('router', $routes, $request);
}
@@ -47,8 +49,10 @@ class Services extends BaseService
* The Negotiate class provides the content negotiation features for working the request to determine correct
* language, encoding, charset, and more.
*/
- public static function negotiator(?RequestInterface $request = null, bool $getShared = true): Negotiate
- {
+ public static function negotiator(
+ ?RequestInterface $request = null,
+ bool $getShared = true
+ ): CodeIgniterHTTPNegotiate {
if ($getShared) {
return static::getSharedInstance('negotiator', $request);
}
diff --git a/app/Filters/AllowCorsFilter.php b/app/Filters/AllowCorsFilter.php
index 96d6409b..91e6ed5d 100644
--- a/app/Filters/AllowCorsFilter.php
+++ b/app/Filters/AllowCorsFilter.php
@@ -12,16 +12,18 @@ class AllowCorsFilter implements FilterInterface
{
/**
* @param string[]|null $arguments
+ * @return RequestInterface|ResponseInterface|string|void
*/
- public function before(RequestInterface $request, $arguments = null): void
+ public function before(RequestInterface $request, $arguments = null)
{
// Do something here
}
/**
* @param string[]|null $arguments
+ * @return ResponseInterface|void
*/
- public function after(RequestInterface $request, ResponseInterface $response, $arguments = null): void
+ public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
if (! $response->hasHeader('Cache-Control')) {
$response->setHeader('Cache-Control', 'public, max-age=86400');
diff --git a/app/Libraries/ViewComponents/Config/Services.php b/app/Libraries/ViewComponents/Config/Services.php
index bb9c1d21..b7a1c74d 100644
--- a/app/Libraries/ViewComponents/Config/Services.php
+++ b/app/Libraries/ViewComponents/Config/Services.php
@@ -22,6 +22,7 @@ class Services extends BaseService
public static function components(bool $getShared = true): ComponentRenderer
{
if ($getShared) {
+ /** @phpstan-ignore return.type */
return self::getSharedInstance('components');
}
diff --git a/app/Libraries/Vite/Config/Services.php b/app/Libraries/Vite/Config/Services.php
index cd5adfde..97364dc0 100644
--- a/app/Libraries/Vite/Config/Services.php
+++ b/app/Libraries/Vite/Config/Services.php
@@ -22,6 +22,7 @@ class Services extends BaseService
public static function vite(bool $getShared = true): Vite
{
if ($getShared) {
+ /** @phpstan-ignore return.type */
return self::getSharedInstance('vite');
}
diff --git a/app/Models/ClipModel.php b/app/Models/ClipModel.php
index 16acbcfc..55b2796a 100644
--- a/app/Models/ClipModel.php
+++ b/app/Models/ClipModel.php
@@ -162,15 +162,11 @@ class ClipModel extends Model
return (int) $result[0]['id'];
}
- public function deleteVideoClip(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
+ public function deleteVideoClip(int $clipId): BaseResult | bool
{
$this->clearVideoClipCache($clipId);
- return $this->delete([
- 'podcast_id' => $podcastId,
- 'episode_id' => $episodeId,
- 'id' => $clipId,
- ]);
+ return $this->delete($clipId);
}
public function getClipCount(int $podcastId, int $episodeId): int
@@ -240,11 +236,7 @@ class ClipModel extends Model
{
$this->clearSoundbiteCache($podcastId, $episodeId, $clipId);
- return $this->delete([
- 'podcast_id' => $podcastId,
- 'episode_id' => $episodeId,
- 'id' => $clipId,
- ]);
+ return $this->delete($clipId);
}
public function clearSoundbiteCache(int $podcastId, int $episodeId, int $clipId): void
diff --git a/app/Resources/js/modules/MultiSelect.ts b/app/Resources/js/modules/MultiSelect.ts
index 94a87f16..1f25fd77 100644
--- a/app/Resources/js/modules/MultiSelect.ts
+++ b/app/Resources/js/modules/MultiSelect.ts
@@ -18,32 +18,35 @@ const MultiSelect = (): void => {
noResultsText: multiSelect.dataset.noResultsText,
removeItemButton: true,
classNames: {
- containerOuter: "choices",
+ activeState: "is-active",
+ addChoice: ["choices__item--selectable", "add-choice"],
+ button: "choices__button",
containerInner: "choices__inner",
- input: "choices__input",
- inputCloned: "choices__input--cloned",
- list: "choices__list",
- listItems: "choices__list--multiple",
- listSingle: "choices__list--single",
- listDropdown: "choices__list--dropdown",
- item: "choices__item",
- itemSelectable: "choices__item--selectable",
- itemDisabled: "choices__item--disabled",
- itemChoice: "choices__item--choice",
- placeholder: "choices__placeholder",
+ containerOuter: "choices",
+ description: "choices__description",
+ disabledState: "is-disabled",
+ flippedState: "is-flipped",
+ focusState: "is-focused",
group: "choices__group",
groupHeading: "choices__heading",
- button: "choices__button",
- activeState: "is-active",
- focusState: "is-focused",
- openState: "is-open",
- disabledState: "is-disabled",
highlightedState: "is-highlighted",
- selectedState: "is-selected",
- flippedState: "is-flipped",
+ input: "choices__input",
+ inputCloned: "choices__input--cloned",
+ item: "choices__item",
+ itemChoice: "choices__item--choice",
+ itemDisabled: "choices__item--disabled",
+ itemSelectable: "choices__item--selectable",
+ list: "choices__list",
+ listDropdown: "choices__list--dropdown",
+ listItems: "choices__list--multiple",
+ listSingle: "choices__list--single",
loadingState: "is-loading",
- noResults: "has-no-results",
noChoices: "has-no-choices",
+ noResults: "has-no-results",
+ notice: "choices__notice",
+ openState: "is-open",
+ placeholder: "choices__placeholder",
+ selectedState: "is-selected",
},
});
}
diff --git a/app/Resources/js/modules/Select.ts b/app/Resources/js/modules/Select.ts
index 72f94148..840dfed8 100644
--- a/app/Resources/js/modules/Select.ts
+++ b/app/Resources/js/modules/Select.ts
@@ -17,32 +17,35 @@ const Select = (): void => {
noChoicesText: select.dataset.noChoicesText,
noResultsText: select.dataset.noResultsText,
classNames: {
- containerOuter: "choices",
+ activeState: "is-active",
+ addChoice: ["choices__item--selectable", "add-choice"],
+ button: "choices__button",
containerInner: "choices__inner",
- input: "choices__input",
- inputCloned: "choices__input--cloned",
- list: "choices__list",
- listItems: "choices__list--multiple",
- listSingle: "choices__list--single",
- listDropdown: "choices__list--dropdown",
- item: "choices__item",
- itemSelectable: "choices__item--selectable",
- itemDisabled: "choices__item--disabled",
- itemChoice: "choices__item--choice",
- placeholder: "choices__placeholder",
+ containerOuter: "choices",
+ description: "choices__description",
+ disabledState: "is-disabled",
+ flippedState: "is-flipped",
+ focusState: "is-focused",
group: "choices__group",
groupHeading: "choices__heading",
- button: "choices__button",
- activeState: "is-active",
- focusState: "is-focused",
- openState: "is-open",
- disabledState: "is-disabled",
highlightedState: "is-highlighted",
- selectedState: "is-selected",
- flippedState: "is-flipped",
+ input: "choices__input",
+ inputCloned: "choices__input--cloned",
+ item: "choices__item",
+ itemChoice: "choices__item--choice",
+ itemDisabled: "choices__item--disabled",
+ itemSelectable: "choices__item--selectable",
+ list: "choices__list",
+ listDropdown: "choices__list--dropdown",
+ listItems: "choices__list--multiple",
+ listSingle: "choices__list--single",
loadingState: "is-loading",
- noResults: "has-no-results",
noChoices: "has-no-choices",
+ noResults: "has-no-results",
+ notice: "choices__notice",
+ openState: "is-open",
+ placeholder: "choices__placeholder",
+ selectedState: "is-selected",
},
});
}
diff --git a/app/Resources/styles/choices.css b/app/Resources/styles/choices.css
index 84423cb8..aaa9d547 100644
--- a/app/Resources/styles/choices.css
+++ b/app/Resources/styles/choices.css
@@ -9,10 +9,6 @@
font-size: 16px;
}
- .choices:focus {
- outline: none;
- }
-
.choices:last-child {
margin-bottom: 0;
}
@@ -29,17 +25,16 @@
}
.choices [hidden] {
- display: none !important;
+ position: absolute;
+ opacity: 0;
+ z-index: -9999;
+ pointer-events: none;
}
.choices[data-type*="select-one"] {
cursor: pointer;
}
- .choices[data-type*="select-one"] .choices__inner {
- padding-bottom: 7.5px;
- }
-
.choices[data-type*="select-one"] .choices__input {
display: block;
width: 100%;
@@ -120,7 +115,7 @@
display: inline-block;
margin-left: 8px;
padding-left: 16px;
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ffffff'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z'/%3E%3C/svg%3E");
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%2300574B'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z'/%3E%3C/svg%3E");
background-size: 16px;
width: 8px;
line-height: 1;
@@ -136,7 +131,7 @@
}
.choices__inner {
- @apply p-2 rounded-lg border-contrast bg-elevated border-3;
+ @apply px-3 py-2 rounded-lg border-contrast bg-elevated border-3 transition;
box-shadow: 2px 2px 0 hsl(var(--color-border-contrast));
display: inline-block;
@@ -147,13 +142,9 @@
overflow: hidden;
}
- .choices[data-type*="select-multiple"] .choices__inner {
- @apply pb-1;
- }
-
.is-focused .choices__inner,
.is-open .choices__inner {
- @apply ring-accent ring-inset;
+ @apply ring-accent;
}
.is-open .choices__inner {
@@ -184,11 +175,11 @@
}
.choices__list--multiple {
- display: inline;
+ @apply inline-flex gap-2 mr-2 items-center;
}
.choices__list--multiple .choices__item {
- @apply inline-block px-2 py-1 mb-1 mr-1 text-sm align-middle rounded text-accent-contrast bg-accent-base;
+ @apply inline-block font-semibold px-1 py-0.5 text-sm align-middle rounded text-accent-hover bg-base border-accent-base ring-2 ring-accent;
word-break: break-all;
box-sizing: border-box;
@@ -204,7 +195,7 @@
}
.choices__list--multiple .choices__item.is-highlighted {
- @apply bg-accent-base;
+ @apply bg-subtle;
}
.is-disabled .choices__list--multiple .choices__item {
@@ -251,6 +242,8 @@
}
.choices__list--dropdown .choices__item {
+ @apply break-normal;
+
position: relative;
padding: 10px;
font-size: 14px;
@@ -327,12 +320,8 @@
cursor: pointer;
}
- .choices__button:focus {
- outline: none;
- }
-
.choices__input {
- @apply mb-1 align-middle bg-elevated;
+ @apply align-middle bg-elevated;
display: inline-block;
font-size: 14px;
@@ -357,6 +346,10 @@
.choices__placeholder {
opacity: 0.5;
}
+
+ .choices__description {
+ @apply text-xs block text-skin-muted break-normal;
+ }
}
/* ===== End of Choices ====== */
diff --git a/app/Resources/styles/custom.css b/app/Resources/styles/custom.css
index 6dfa93b1..3831ee67 100644
--- a/app/Resources/styles/custom.css
+++ b/app/Resources/styles/custom.css
@@ -36,19 +36,20 @@
.backdrop-gradient {
background-image: linear-gradient(
180deg,
- hsla(0deg 0% 35.29% / 0%) 0%,
- hsla(0deg 0% 34.53% / 3.44%) 16.36%,
- hsla(0deg 0% 32.42% / 12.5%) 33.34%,
- hsla(0deg 0% 29.18% / 25.3%) 50.1%,
- hsla(0deg 0% 24.96% / 40%) 65.75%,
- hsla(0deg 0% 19.85% / 54.7%) 79.43%,
- hsla(0deg 0% 13.95% / 67.5%) 90.28%,
- hsla(0deg 0% 7.32% / 76.6%) 97.43%,
- hsla(0deg 0% 0% / 80%) 100%
+ hsl(0deg 0% 35.29% / 0%) 0%,
+ hsl(0deg 0% 34.53% / 3.44%) 16.36%,
+ hsl(0deg 0% 32.42% / 12.5%) 33.34%,
+ hsl(0deg 0% 29.18% / 25.3%) 50.1%,
+ hsl(0deg 0% 24.96% / 40%) 65.75%,
+ hsl(0deg 0% 19.85% / 54.7%) 79.43%,
+ hsl(0deg 0% 13.95% / 67.5%) 90.28%,
+ hsl(0deg 0% 7.32% / 76.6%) 97.43%,
+ hsl(0deg 0% 0% / 80%) 100%
);
}
.backdrop-gradient-accent {
+ /* stylelint-disable-next-line declaration-property-value-no-unknown */
background-image: linear-gradient(
180deg,
theme(colors.background.base / 0.4) 0%,
diff --git a/app/Resources/styles/readMore.css b/app/Resources/styles/readMore.css
index a084575a..520aa123 100644
--- a/app/Resources/styles/readMore.css
+++ b/app/Resources/styles/readMore.css
@@ -22,8 +22,7 @@ Read more component (basic unstyled component)
.read-more__checkbox {
@apply absolute overflow-hidden whitespace-nowrap;
- clip: rect(0 0 0 0);
- clip-path: inset(100%);
+ clip-path: inset(50%);
height: 1px;
width: 1px;
}
diff --git a/app/Resources/styles/seeMore.css b/app/Resources/styles/seeMore.css
index 7cecde17..6a191f57 100644
--- a/app/Resources/styles/seeMore.css
+++ b/app/Resources/styles/seeMore.css
@@ -22,8 +22,7 @@
.see-more__checkbox {
@apply absolute overflow-hidden whitespace-nowrap;
- clip: rect(0 0 0 0);
- clip-path: inset(100%);
+ clip-path: inset(50%);
height: 1px;
width: 1px;
}
diff --git a/app/Views/errors/html/debug.css b/app/Views/errors/html/debug.css
index b9c63b51..79f365db 100644
--- a/app/Views/errors/html/debug.css
+++ b/app/Views/errors/html/debug.css
@@ -3,7 +3,7 @@
--main-text-color: #555;
--dark-text-color: #222;
--light-text-color: #c7c7c7;
- --brand-primary-color: #e06e3f;
+ --brand-primary-color: #dc4814;
--light-bg-color: #ededee;
--dark-bg-color: #404040;
}
@@ -78,10 +78,13 @@ p.lead {
}
.environment {
- background: var(--dark-bg-color);
- color: var(--light-text-color);
+ background: var(--brand-primary-color);
+ color: var(--main-bg-color);
text-align: center;
- padding: 0.2rem;
+ padding: calc(4px + 0.2083vw);
+ width: 100%;
+ top: 0;
+ position: fixed;
}
.source {
diff --git a/app/Views/errors/html/error_400.php b/app/Views/errors/html/error_400.php
new file mode 100644
index 00000000..7c4d37a8
--- /dev/null
+++ b/app/Views/errors/html/error_400.php
@@ -0,0 +1,29 @@
+= helper(['components', 'svg']) ?>
+
+
+
+
+
+
+
+ = lang('Errors.pageNotFound') ?>
+ ' />
+ = service('vite')->asset('styles/index.css', 'css') ?>
+
+
+
+ = svg('castopod-mascot_confused', 'h-64') ?>
+ 400
+
+
+
+ = nl2br(esc($message)) ?>
+
+ = lang('Errors.sorryBadRequest') ?>
+
+
+ = lang('Common.go_back') ?>
+
+
+
diff --git a/app/Views/errors/html/error_exception.php b/app/Views/errors/html/error_exception.php
index 9898ed5d..1931636f 100644
--- a/app/Views/errors/html/error_exception.php
+++ b/app/Views/errors/html/error_exception.php
@@ -27,7 +27,7 @@ $errorId = uniqid('error', true);
-
+
= icon('add-fill') ?>
diff --git a/themes/cp_admin/episode/list.php b/themes/cp_admin/episode/list.php
index 1f293278..4fa16935 100644
--- a/themes/cp_admin/episode/list.php
+++ b/themes/cp_admin/episode/list.php
@@ -41,8 +41,7 @@
-=
-data_table(
+= data_table(
[
[
'header' => lang('Episode.list.episode'),
diff --git a/themes/cp_admin/episode/publish.php b/themes/cp_admin/episode/publish.php
index 1564462e..88a88022 100644
--- a/themes/cp_admin/episode/publish.php
+++ b/themes/cp_admin/episode/publish.php
@@ -66,14 +66,14 @@
diff --git a/themes/cp_admin/episode/view.php b/themes/cp_admin/episode/view.php
index 09b508d8..8579b20e 100644
--- a/themes/cp_admin/episode/view.php
+++ b/themes/cp_admin/episode/view.php
@@ -60,5 +60,5 @@
= service('vite')
- ->asset('js/charts.ts', 'js') ?>
+ ->asset('js/charts.ts', 'js') ?>
= $this->endSection() ?>
diff --git a/themes/cp_admin/podcast/analytics/listening_time.php b/themes/cp_admin/podcast/analytics/listening_time.php
index 30430b04..488ad464 100644
--- a/themes/cp_admin/podcast/analytics/listening_time.php
+++ b/themes/cp_admin/podcast/analytics/listening_time.php
@@ -27,5 +27,5 @@
= service('vite')
- ->asset('js/charts.ts', 'js') ?>
+ ->asset('js/charts.ts', 'js') ?>
= $this->endSection() ?>
diff --git a/themes/cp_admin/podcast/analytics/time_periods.php b/themes/cp_admin/podcast/analytics/time_periods.php
index 0857aae5..bd656741 100644
--- a/themes/cp_admin/podcast/analytics/time_periods.php
+++ b/themes/cp_admin/podcast/analytics/time_periods.php
@@ -25,5 +25,5 @@
= service('vite')
- ->asset('js/charts.ts', 'js') ?>
+ ->asset('js/charts.ts', 'js') ?>
= $this->endSection() ?>
diff --git a/themes/cp_admin/podcast/analytics/unique_listeners.php b/themes/cp_admin/podcast/analytics/unique_listeners.php
index 89522300..29b40cab 100644
--- a/themes/cp_admin/podcast/analytics/unique_listeners.php
+++ b/themes/cp_admin/podcast/analytics/unique_listeners.php
@@ -27,5 +27,5 @@
= service('vite')
- ->asset('js/charts.ts', 'js') ?>
+ ->asset('js/charts.ts', 'js') ?>
= $this->endSection() ?>
diff --git a/themes/cp_admin/podcast/latest_episodes.php b/themes/cp_admin/podcast/latest_episodes.php
index 47bdd5c7..c54bc889 100644
--- a/themes/cp_admin/podcast/latest_episodes.php
+++ b/themes/cp_admin/podcast/latest_episodes.php
@@ -7,16 +7,16 @@
) ?>" class="inline-flex items-center text-sm underline hover:no-underline focus:ring-accent">
= lang('Podcast.see_all_episodes') ?>
= icon('arrow-right-s-fill', [
- 'class' => 'ml-2',
- ]) ?>
+ 'class' => 'ml-2',
+ ]) ?>
= view('episode/_card', [
- 'episode' => $episode,
- ]) ?>
+ 'episode' => $episode,
+ ]) ?>
diff --git a/themes/cp_admin/subscription/list.php b/themes/cp_admin/subscription/list.php
index be45db5b..455fc841 100644
--- a/themes/cp_admin/subscription/list.php
+++ b/themes/cp_admin/subscription/list.php
@@ -45,19 +45,19 @@
'cell' => function ($subscription) {
return esc($subscription->email);
},
- ],
+ ],
[
'header' => lang('Subscription.list.expiration_date'),
'cell' => function ($subscription) {
return $subscription->expires_at ? local_date($subscription->expires_at) : lang('Subscription.list.unlimited');
},
- ],
+ ],
[
'header' => lang('Subscription.list.downloads'),
'cell' => function ($subscription) {
return $subscription->downloads_last_3_months;
},
- ],
+ ],
[
'header' => lang('Subscription.list.status'),
'cell' => function ($subscription) {
@@ -69,7 +69,7 @@
return '' . lang('Subscription.status.' . $subscription->status) . '';
},
- ],
+ ],
[
'header' => lang('Common.actions'),
'cell' => function ($subscription, $podcast) {
@@ -121,7 +121,7 @@
'' .
'';
},
- ],
+ ],
],
$podcast->subscriptions,
'',
diff --git a/themes/cp_app/episode/_layout-preview.php b/themes/cp_app/episode/_layout-preview.php
index 882689b1..48676f24 100644
--- a/themes/cp_app/episode/_layout-preview.php
+++ b/themes/cp_app/episode/_layout-preview.php
@@ -90,8 +90,8 @@
= explicit_badge($episode->parental_advisory === 'explicit', 'rounded absolute left-0 bottom-0 ml-2 mb-2 bg-black/75 text-accent-contrast') ?>
is_premium): ?>
= icon('exchange-dollar-fill', [
- 'class' => 'absolute left-0 w-8 pl-2 text-2xl rounded-r-full rounded-tl-lg top-2 text-accent-contrast bg-accent-base',
- ]) ?>
+ 'class' => 'absolute left-0 w-8 pl-2 text-2xl rounded-r-full rounded-tl-lg top-2 text-accent-contrast bg-accent-base',
+ ]) ?>
diff --git a/themes/cp_app/episode/_layout.php b/themes/cp_app/episode/_layout.php
index 19bf7ffa..03915598 100644
--- a/themes/cp_app/episode/_layout.php
+++ b/themes/cp_app/episode/_layout.php
@@ -87,8 +87,8 @@
= explicit_badge($episode->parental_advisory === 'explicit', 'rounded absolute left-0 bottom-0 ml-2 mb-2 bg-black/75 text-accent-contrast') ?>
is_premium): ?>
= icon('exchange-dollar-fill', [
- 'class' => 'absolute left-0 w-8 pl-2 text-2xl rounded-r-full rounded-tl-lg top-2 text-accent-contrast bg-accent-base',
- ]) ?>
+ 'class' => 'absolute left-0 w-8 pl-2 text-2xl rounded-r-full rounded-tl-lg top-2 text-accent-contrast bg-accent-base',
+ ]) ?>
diff --git a/themes/cp_app/home.php b/themes/cp_app/home.php
index 20f230b6..7e0a8779 100644
--- a/themes/cp_app/home.php
+++ b/themes/cp_app/home.php
@@ -41,9 +41,9 @@
= service('settings')
- ->get('App.siteName') === 'Castopod' ? 'castopod' .
+ ->get('App.siteName') === 'Castopod' ? 'castopod' .
svg('castopod-logo-base', 'h-6 ml-2') : esc(service('settings')
- ->get('App.siteName')) ?>
+ ->get('App.siteName')) ?>
diff --git a/themes/cp_app/pages/_layout.php b/themes/cp_app/pages/_layout.php
index 032e3de9..ed496c03 100644
--- a/themes/cp_app/pages/_layout.php
+++ b/themes/cp_app/pages/_layout.php
@@ -55,7 +55,7 @@
+ Directory access is forbidden.
+
diff --git a/themes/cp_app/pages/map.php b/themes/cp_app/pages/map.php
index c031efe8..f8f8c3bc 100644
--- a/themes/cp_app/pages/map.php
+++ b/themes/cp_app/pages/map.php
@@ -58,9 +58,9 @@
diff --git a/themes/cp_app/podcast/_partials/sidebar.php b/themes/cp_app/podcast/_partials/sidebar.php
index 364f7b74..80c1c581 100644
--- a/themes/cp_app/podcast/_partials/sidebar.php
+++ b/themes/cp_app/podcast/_partials/sidebar.php
@@ -58,10 +58,10 @@
diff --git a/themes/cp_app/podcast/links.php b/themes/cp_app/podcast/links.php
index c0a0e91a..bf69e6d4 100644
--- a/themes/cp_app/podcast/links.php
+++ b/themes/cp_app/podcast/links.php
@@ -84,7 +84,7 @@
href="= $podcastingPlatform->link_url ?>"
target="_blank"
rel="noopener noreferrer">= icon($podcastingPlatform->type . ':' . $podcastingPlatform->slug, [
- 'class' => 'text-xl mr-auto',
+ 'class' => 'text-xl mr-auto',
]) ?>= $podcastingPlatform->label ?>
diff --git a/themes/cp_app/post/_partials/reblog.php b/themes/cp_app/post/_partials/reblog.php
index 0f424fcb..95eaf4da 100644
--- a/themes/cp_app/post/_partials/reblog.php
+++ b/themes/cp_app/post/_partials/reblog.php
@@ -22,13 +22,13 @@
episode_id) : ?>
= view('episode/_partials/preview_card', [
- 'index' => $index,
- 'episode' => $post->episode,
- ]) ?>
+ 'index' => $index,
+ 'episode' => $post->episode,
+ ]) ?>
preview_card_id) : ?>
= view('post/_partials/preview_card', [
- 'preview_card' => $post->preview_card,
- ]) ?>
+ 'preview_card' => $post->preview_card,
+ ]) ?>
= $this->include('post/_partials/actions') ?>
diff --git a/themes/cp_app/post/post.php b/themes/cp_app/post/post.php
index bd9f3dfe..cfe4217d 100644
--- a/themes/cp_app/post/post.php
+++ b/themes/cp_app/post/post.php
@@ -10,14 +10,14 @@
],
) .
lang('Post.back_to_actor_posts', [
- 'actor' => esc($post->actor->display_name),
- ]) ?>
+ 'actor' => esc($post->actor->display_name),
+ ]) ?>
= view('post/_partials/post_with_replies', [
- 'index' => 1,
- 'post' => $post,
- 'podcast' => $podcast,
- ]) ?>
+ 'index' => 1,
+ 'post' => $post,
+ 'podcast' => $podcast,
+ ]) ?>
= $this->endSection() ?>
diff --git a/themes/cp_install/cache_config.php b/themes/cp_install/cache_config.php
index d622c48e..5db1b292 100644
--- a/themes/cp_install/cache_config.php
+++ b/themes/cp_install/cache_config.php
@@ -21,10 +21,10 @@
name="cache_handler"
label="= esc(lang('Install.form.cache_handler')) ?>"
options="= esc(json_encode([
- 'file' => lang('Install.form.cacheHandlerOptions.file'),
- 'redis' => lang('Install.form.cacheHandlerOptions.redis'),
- 'predis' => lang('Install.form.cacheHandlerOptions.predis'),
- ])) ?>"
+ 'file' => lang('Install.form.cacheHandlerOptions.file'),
+ 'redis' => lang('Install.form.cacheHandlerOptions.redis'),
+ 'predis' => lang('Install.form.cacheHandlerOptions.predis'),
+ ])) ?>"
selected="file"
required="true" />
diff --git a/writable/debugbar/index.html b/writable/debugbar/index.html
new file mode 100644
index 00000000..cf672743
--- /dev/null
+++ b/writable/debugbar/index.html
@@ -0,0 +1,9 @@
+
+
+