diff --git a/.gitlab/issue_templates/bug.md b/.gitlab/issue_templates/bug.md
index 7fec749a..c6041a61 100644
--- a/.gitlab/issue_templates/bug.md
+++ b/.gitlab/issue_templates/bug.md
@@ -6,7 +6,7 @@
1. [First step]
2. [Second step]
-3. [and so on...]
+3. [and so on…]
### Expected behavior
@@ -27,7 +27,7 @@ logs, and code as it's very hard to read otherwise.
- OS: [e.g. Ubuntu server]
- Browser: [e.g. chrome, safari]
- Web server: [eg. Apache]
-- [any other relevant context...]
+- [any other relevant context…]
### Possible fixes
diff --git a/.gitlab/issue_templates/feature-request.md b/.gitlab/issue_templates/feature-request.md
index 644a8fd4..0886d392 100644
--- a/.gitlab/issue_templates/feature-request.md
+++ b/.gitlab/issue_templates/feature-request.md
@@ -1,7 +1,7 @@
### Is your feature request related to a problem? Please describe
A clear and concise description of what the problem is. Ex. I'm always
-frustrated when [...]
+frustrated when […]
### Describe the solution you'd like
diff --git a/composer.json b/composer.json
index fed6a60d..22b5dcb1 100644
--- a/composer.json
+++ b/composer.json
@@ -10,7 +10,7 @@
"adaures/castopod-plugins-manager": "dev-main",
"adaures/ipcat-php": "^v1.0.0",
"adaures/podcast-persons-taxonomy": "^v1.0.1",
- "aws/aws-sdk-php": "^3.356.29",
+ "aws/aws-sdk-php": "^3.356.32",
"chrisjean/php-ico": "^1.0.4",
"cocur/slugify": "^v4.6.0",
"codeigniter4/framework": "4.6.3",
@@ -37,9 +37,9 @@
"codeigniter/phpstan-codeigniter": "1.5.4",
"mikey179/vfsstream": "^v1.6.12",
"phpstan/extension-installer": "^1.4.3",
- "phpstan/phpstan": "^2.1.29",
- "phpunit/phpunit": "^12.3.15",
- "rector/rector": "^2.1.7",
+ "phpstan/phpstan": "^2.1.30",
+ "phpunit/phpunit": "^12.4.0",
+ "rector/rector": "^2.2.0",
"symplify/coding-standard": "^12.4.3",
"symplify/easy-coding-standard": "^12.6.0"
},
diff --git a/composer.lock b/composer.lock
index 428c2562..e92bb4da 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b7b1a865360730d639a2fa78a061b98f",
+ "content-hash": "ac82be167b412b822f42f3a328a94344",
"packages": [
{
"name": "adaures/castopod-plugins-manager",
@@ -12,12 +12,12 @@
"source": {
"type": "git",
"url": "https://github.com/ad-aures/castopod-plugins-manager.git",
- "reference": "5c491a4fb1143ba19a72a66e6af3bd1161c90046"
+ "reference": "53430f9a57cd38eee3e3dfe5953764cc42c2a0c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ad-aures/castopod-plugins-manager/zipball/5c491a4fb1143ba19a72a66e6af3bd1161c90046",
- "reference": "5c491a4fb1143ba19a72a66e6af3bd1161c90046",
+ "url": "https://api.github.com/repos/ad-aures/castopod-plugins-manager/zipball/53430f9a57cd38eee3e3dfe5953764cc42c2a0c9",
+ "reference": "53430f9a57cd38eee3e3dfe5953764cc42c2a0c9",
"shasum": ""
},
"require": {
@@ -37,6 +37,7 @@
"type": "library",
"autoload": {
"files": [
+ "src/Constants.php",
"src/helpers.php"
],
"psr-4": {
@@ -58,7 +59,7 @@
"issues": "https://github.com/ad-aures/castopod-plugins-manager/issues",
"source": "https://github.com/ad-aures/castopod-plugins-manager/tree/main"
},
- "time": "2025-09-22T17:11:34+00:00"
+ "time": "2025-10-06T15:58:43+00:00"
},
{
"name": "adaures/ipcat-php",
@@ -260,16 +261,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.356.29",
+ "version": "3.356.32",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "3e413221956aa969f379ff6fa67a303ce76aad13"
+ "reference": "c564fb87e180da5ae45185a4526bb05a69998d05"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3e413221956aa969f379ff6fa67a303ce76aad13",
- "reference": "3e413221956aa969f379ff6fa67a303ce76aad13",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c564fb87e180da5ae45185a4526bb05a69998d05",
+ "reference": "c564fb87e180da5ae45185a4526bb05a69998d05",
"shasum": ""
},
"require": {
@@ -351,9 +352,9 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.356.29"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.356.32"
},
- "time": "2025-09-30T18:12:45+00:00"
+ "time": "2025-10-03T18:12:05+00:00"
},
{
"name": "brick/math",
@@ -2560,16 +2561,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.48",
+ "version": "2.0.49",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61"
+ "reference": "4de468f48f0ab9709fc875aca0762abdc81cfa9b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61",
- "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4de468f48f0ab9709fc875aca0762abdc81cfa9b",
+ "reference": "4de468f48f0ab9709fc875aca0762abdc81cfa9b",
"shasum": ""
},
"require": {
@@ -2650,7 +2651,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48"
+ "source": "https://github.com/phpseclib/phpseclib/tree/2.0.49"
},
"funding": [
{
@@ -2666,7 +2667,7 @@
"type": "tidelift"
}
],
- "time": "2024-12-14T21:03:54+00:00"
+ "time": "2025-10-06T01:05:33+00:00"
},
{
"name": "psr/cache",
@@ -4914,16 +4915,11 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.29",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan-phar-composer-source.git",
- "reference": "git"
- },
+ "version": "2.1.30",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d618573eed4a1b6b75e37b2e0b65ac65c885d88e",
- "reference": "d618573eed4a1b6b75e37b2e0b65ac65c885d88e",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a4a7f159927983dd4f7c8020ed227d80b7f39d7d",
+ "reference": "a4a7f159927983dd4f7c8020ed227d80b7f39d7d",
"shasum": ""
},
"require": {
@@ -4968,7 +4964,7 @@
"type": "github"
}
],
- "time": "2025-09-25T06:58:18+00:00"
+ "time": "2025-10-02T16:07:52+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -5306,16 +5302,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "12.3.15",
+ "version": "12.4.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "b035ee2cd8ecad4091885b61017ebb1d80eb0e57"
+ "reference": "f62aab5794e36ccd26860db2d1bbf89ac19028d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b035ee2cd8ecad4091885b61017ebb1d80eb0e57",
- "reference": "b035ee2cd8ecad4091885b61017ebb1d80eb0e57",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f62aab5794e36ccd26860db2d1bbf89ac19028d9",
+ "reference": "f62aab5794e36ccd26860db2d1bbf89ac19028d9",
"shasum": ""
},
"require": {
@@ -5351,7 +5347,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "12.3-dev"
+ "dev-main": "12.4-dev"
}
},
"autoload": {
@@ -5383,7 +5379,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/12.3.15"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/12.4.0"
},
"funding": [
{
@@ -5407,7 +5403,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-28T12:10:54+00:00"
+ "time": "2025-10-03T04:28:03+00:00"
},
{
"name": "psr/container",
@@ -5990,21 +5986,21 @@
},
{
"name": "rector/rector",
- "version": "2.1.7",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce"
+ "reference": "3c5a641c39f2def0c93d36df118fb2e75cfc2aae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/c34cc07c4698f007a20dc5c99ff820089ae413ce",
- "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/3c5a641c39f2def0c93d36df118fb2e75cfc2aae",
+ "reference": "3c5a641c39f2def0c93d36df118fb2e75cfc2aae",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.1.18"
+ "phpstan/phpstan": "^2.1.26"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -6038,7 +6034,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.1.7"
+ "source": "https://github.com/rectorphp/rector/tree/2.2.0"
},
"funding": [
{
@@ -6046,7 +6042,7 @@
"type": "github"
}
],
- "time": "2025-09-10T11:13:58+00:00"
+ "time": "2025-10-06T12:18:16+00:00"
},
{
"name": "sebastian/cli-parser",
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 33854c86..d641ec7f 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -228,9 +228,6 @@ export default defineConfig({
},
{
label: "Plugins",
- badge: {
- text: "Experimental",
- },
items: [
{
label: "Introduction",
diff --git a/docs/src/content/docs/en/plugins/create.mdx b/docs/src/content/docs/en/plugins/create.mdx
index 974c5d7a..787a44ad 100644
--- a/docs/src/content/docs/en/plugins/create.mdx
+++ b/docs/src/content/docs/en/plugins/create.mdx
@@ -8,12 +8,12 @@ Missing a feature in Castopod? Build it as a plugin and even
[share it with the community](./share)!
In order to get started, you first need to
-[setup your Castopod dev environment](https://code.castopod.org/adaures/castopod/-/blob/develop/CONTRIBUTING-DEV.md).
+[set up your Castopod dev environment](https://code.castopod.org/adaures/castopod/-/blob/develop/CONTRIBUTING-DEV.md).
## 1. Create the plugin folder
-You'll first need to create your [plugin folder](./#plugin-folder-structure) in
-the `plugins/` directory.
+You'll first need to create your
+[plugin folder](./#anatomy-of-a-castopod-plugin) in the `plugins/` directory.
### Using the create command
@@ -24,8 +24,8 @@ following CLI command:
php spark plugins:create
```
-👉 You will be prompted for metadata and hooks usage to have a skeleton plugin
-project generated for you!
+👉 You will be prompted for metadata and hooks usage in order to have a
+personalized skeleton plugin generated for you!
### Manual setup
@@ -49,7 +49,7 @@ project generated for you!
- See the [manifest reference](./manifest).
+ See the [manifest reference](./reference/manifest-json).
3. add the Plugin.php class
@@ -64,7 +64,7 @@ project generated for you!
## 2. Build your plugin
-Now that your plugin folder is set, you can start working on your Plugin's logic
+Now that your plugin folder is set, you can start working on your plugin's logic
by implementing [the hooks](./reference/hooks) needed.
### Settings forms
@@ -72,7 +72,7 @@ by implementing [the hooks](./reference/hooks) needed.
You can prompt users for data through settings forms.
These forms can be built declaratively using the
-[settings attribute](./manifest#settings) in your manifest.
+[`settings` attribute](./reference/manifest#settings) in your manifest.
```json
// manifest.json
@@ -100,14 +100,15 @@ These forms can be built declaratively using the
}
```
-This example will generate settings forms at 3 levels:
+This example will generate 3 different settings forms at 3 different levels in
+the Castopod admin area:
-- `general`: a general form to prompt data to be used by the plugin
-- `podcast`: a form for each podcast to prompt for podcast specific data
-- `episode`: a form for each episode to prompt for episode specific data
+- `general`: a general form
+- `podcast`: a form for each podcast
+- `episode`: a form for each episode
-The data can then be accessed in the Plugin class methods via helper methods
-taking in the field key:
+You can then access the data (input by the user) via helper methods by
+specifying the field key as a parameter:
```php
$this->getGeneralSetting('field-key');
diff --git a/docs/src/content/docs/en/plugins/index.mdx b/docs/src/content/docs/en/plugins/index.mdx
index 7af0ca6d..80ad7813 100644
--- a/docs/src/content/docs/en/plugins/index.mdx
+++ b/docs/src/content/docs/en/plugins/index.mdx
@@ -50,7 +50,7 @@ easily add new features and enhancements to your podcasting setup!
### Plugin manifest (required)
The plugin manifest is a JSON file containing the plugin's metadata and
-declarations.
+technical declarations.
This file will determine whether a plugin is valid or not. The minimal required
data being:
@@ -64,7 +64,7 @@ data being:
}
```
-Checkout the [manifest.json reference](./reference/manifest).
+Checkout the [manifest.json reference](./reference/manifest-json).
### Plugin class (required)
@@ -99,28 +99,30 @@ For example, a plugin living under the `acme/hello-world` folder must be named
`AcmeHelloWorldPlugin`:
- the first letter of every word is capitalized (ie. PascalCase)
-- any special caracter is removed
+- any special character is removed
- the `Plugin` suffix is added
### Plugin README
-The `README.md` file is loaded into the plugin's view page for the user to read
-through.
-It should be used for any additional information to help guide the user in using
-the plugin.
+The `README.md` file should contain with any additional information to help
+guide the user in using the plugin.
+
+It is loaded on Castopod's admin area when the plugin is installed.
### Plugin LICENSE
In addition to specifying [the license in the manifest](./manifest#license), you
-may add a `LICENSE.md` file. Just as the `README.md` file, its contents will be
-loaded into the plugin's view page for the user to read.
+may add a `LICENSE.md` file.
+
+Just like the `README.md` file, its contents will be loaded into Castopod's
+admin area, in the plugin's view page for the user to read.
### Plugin icon
-The plugin icon is displayed next to its title, it is an SVG file intended to
-give a graphical representation of the plugin.
+Generally, the plugin icon is displayed next to its title, it is an SVG file
+intended to give a graphical representation of the plugin.
The icon should be squared, and be legible in a 64px by 64px circle.
diff --git a/docs/src/content/docs/en/plugins/install.mdx b/docs/src/content/docs/en/plugins/install.mdx
index a93b2d08..9f179850 100644
--- a/docs/src/content/docs/en/plugins/install.mdx
+++ b/docs/src/content/docs/en/plugins/install.mdx
@@ -28,8 +28,8 @@ whenever you run the commands:
- [`plugins-lock.json`](./reference/plugins-lock-json): records the exact
versions that were actually installed, along with extra metadata. This ensures
- that even if a plugin updates later, Castopod can reproduce the same working
- setup you had before.
+ that even if a plugin is updated later, Castopod can reproduce the same
+ working setup you had before.
### Commands
@@ -39,7 +39,7 @@ whenever you run the commands:
php spark plugins:add acme/hello-world
```
-- Install a specific version to pin environments:
+- Install a specific version in order to pin environments:
```sh
php spark plugins:add acme/hello-world@1.0.0
diff --git a/docs/src/content/docs/en/plugins/reference/hooks.mdx b/docs/src/content/docs/en/plugins/reference/hooks.mdx
index 5c1c6202..54a65f1e 100644
--- a/docs/src/content/docs/en/plugins/reference/hooks.mdx
+++ b/docs/src/content/docs/en/plugins/reference/hooks.mdx
@@ -75,7 +75,7 @@ public function rssAfterItem(Epsiode $episode, RssFeed $item): void
This hook is executed in the public pages' `