|
|
@@ -3,6 +3,8 @@ declare(strict_types=1);
|
|
|
|
|
|
/**
|
|
|
* The controller to manage extensions.
|
|
|
+ *
|
|
|
+ * @phpstan-type ExtensionFullMetadata array{name:string,entrypoint:string,author:string,description:string,version:string,type:'system'|'user',url:string,method:string,directory:string,compatibility:string}
|
|
|
*/
|
|
|
class FreshRSS_extension_Controller extends FreshRSS_ActionController {
|
|
|
/**
|
|
|
@@ -40,7 +42,7 @@ class FreshRSS_extension_Controller extends FreshRSS_ActionController {
|
|
|
|
|
|
/**
|
|
|
* Fetch extension list from GitHub
|
|
|
- * @return list<array{name:string,author:string,description:string,version:string,entrypoint:string,type:'system'|'user',url:string,method:string,directory:string}>
|
|
|
+ * @phpstan-return list<ExtensionFullMetadata>
|
|
|
*/
|
|
|
protected function getAvailableExtensionList(): array {
|
|
|
$extensionListUrl = 'https://raw.githubusercontent.com/FreshRSS/Extensions/master/extensions.json';
|
|
|
@@ -82,7 +84,10 @@ class FreshRSS_extension_Controller extends FreshRSS_ActionController {
|
|
|
if (isset($extension['version']) && is_numeric($extension['version'])) {
|
|
|
$extension['version'] = (string)$extension['version'];
|
|
|
}
|
|
|
- $keys = ['author', 'description', 'directory', 'entrypoint', 'method', 'name', 'type', 'url', 'version'];
|
|
|
+ if (!array_key_exists('compatibility', $extension)) {
|
|
|
+ $extension['compatibility'] = '✔';
|
|
|
+ }
|
|
|
+ $keys = ['author', 'description', 'directory', 'entrypoint', 'method', 'name', 'type', 'url', 'version', 'compatibility'];
|
|
|
$extension = array_intersect_key($extension, array_flip($keys)); // Keep only valid keys
|
|
|
$extension = array_filter($extension, 'is_string');
|
|
|
foreach ($keys as $key) {
|
|
|
@@ -93,10 +98,16 @@ class FreshRSS_extension_Controller extends FreshRSS_ActionController {
|
|
|
if (!in_array($extension['type'], ['system', 'user'], true) || trim($extension['name']) === '') {
|
|
|
continue;
|
|
|
}
|
|
|
- /** @var array{name:string,author:string,description:string,version:string,entrypoint:string,type:'system'|'user',url:string,method:string,directory:string} $extension */
|
|
|
+ /** @var ExtensionFullMetadata $extension */
|
|
|
$extensions[] = $extension;
|
|
|
}
|
|
|
- return $extensions;
|
|
|
+
|
|
|
+ return array_map(static function (array $extension) {
|
|
|
+ if ($extension['compatibility'] !== '✔') {
|
|
|
+ $extension['compatibility'] = version_compare($extension['compatibility'], FRESHRSS_VERSION, '>=') ? '✔' : '✘';
|
|
|
+ }
|
|
|
+ return $extension;
|
|
|
+ }, $extensions);
|
|
|
}
|
|
|
|
|
|
/**
|