mirror of
https://github.com/flextype/flextype.git
synced 2025-08-07 13:46:42 +02:00
feat(core): add dependencies validation for Plugins API #411
This commit is contained in:
@@ -12,6 +12,7 @@ namespace Flextype;
|
||||
use Flextype\Component\Arr\Arr;
|
||||
use Flextype\Component\Filesystem\Filesystem;
|
||||
use Flextype\Component\I18n\I18n;
|
||||
use Composer\Semver\Comparator;
|
||||
use RuntimeException;
|
||||
use function array_replace_recursive;
|
||||
use function count;
|
||||
@@ -169,6 +170,9 @@ class Plugins
|
||||
Arr::delete($plugins, $plugin_name . '._priority');
|
||||
}
|
||||
|
||||
// Get Valid Plugins Dependencies
|
||||
$plugins = $this->getValidPluginsDependencies($plugins);
|
||||
|
||||
// Save plugins list
|
||||
$this->flextype['registry']->set('plugins', $plugins);
|
||||
$this->flextype['cache']->save($plugins_cache_id, $plugins);
|
||||
@@ -245,6 +249,52 @@ class Plugins
|
||||
return $plugins_cache_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get valid plugins dependencies
|
||||
*
|
||||
* @param array $plugins Plugins list
|
||||
*
|
||||
* @access protected
|
||||
*/
|
||||
public function getValidPluginsDependencies($plugins) : array
|
||||
{
|
||||
foreach ($plugins as $plugin_name => $plugin_data) {
|
||||
if (isset($plugin_data['manifest']['dependencies']['flextype']) &&
|
||||
Comparator::equalTo($plugin_data['manifest']['dependencies']['flextype'], '0.9.7')) {
|
||||
$plugins[$plugin_name] = $plugin_data;
|
||||
} else {
|
||||
unset($plugins[$plugin_name]);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($plugins as $plugin_name => $plugin_data) {
|
||||
|
||||
$allowed_plugin = true;
|
||||
|
||||
if (isset($plugin_data['manifest']['dependencies']['plugins'])) {
|
||||
|
||||
foreach ($plugin_data['manifest']['dependencies']['plugins'] as $dependencies_plugin_name => $plugin_value) {
|
||||
|
||||
if (isset($plugins[$dependencies_plugin_name]) && $plugin_value == $plugins[$dependencies_plugin_name]['manifest']['version'] ) {
|
||||
|
||||
} else {
|
||||
$allowed_plugin = false;
|
||||
unset($plugins[$plugin_name]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($allowed_plugin) {
|
||||
$plugins[$plugin_name] = $plugin_data;
|
||||
}
|
||||
|
||||
} else {
|
||||
$plugins[$plugin_name] = $plugin_data;
|
||||
}
|
||||
}
|
||||
|
||||
return $plugins;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugins list
|
||||
*
|
||||
|
Reference in New Issue
Block a user