From 5d5b1f3fe25eea489897be8a318bc086bcc5d35c Mon Sep 17 00:00:00 2001 From: Awilum Date: Mon, 4 May 2020 19:49:55 +0300 Subject: [PATCH] feat(core): improve dependencies validation for Plugins API #411 --- src/flextype/core/Plugins/Plugins.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/flextype/core/Plugins/Plugins.php b/src/flextype/core/Plugins/Plugins.php index 16cf78e9..a6bb3495 100755 --- a/src/flextype/core/Plugins/Plugins.php +++ b/src/flextype/core/Plugins/Plugins.php @@ -266,8 +266,11 @@ class Plugins // Set verified plugins array $verified_plugins = []; + // Set non verfied plugins + $non_verified_plugins = $plugins; + // Go through plugins list and verify them. - foreach ($plugins as $plugin_name => $plugin_data) { + foreach ($plugins as $plugin_name => &$plugin_data) { // Set verified true by default $verified = true; @@ -286,6 +289,7 @@ class Plugins // Remove plugin where it is require this dependency foreach ($plugins as $_plugin_name => $_plugin_data) { if ($_plugin_data['manifest']['dependencies'][$plugin_name]) { + unset($plugins[$_plugin_name]); unset($verified_plugins[$_plugin_name]); } } @@ -299,6 +303,7 @@ class Plugins // Remove plugin where it is require this dependency foreach ($plugins as $_plugin_name => $_plugin_data) { if ($_plugin_data['manifest']['dependencies'][$plugin_name]) { + unset($plugins[$_plugin_name]); unset($verified_plugins[$_plugin_name]); } } @@ -312,6 +317,7 @@ class Plugins // Remove plugin where it is require this dependency foreach ($plugins as $_plugin_name => $_plugin_data) { if ($_plugin_data['manifest']['dependencies'][$plugin_name]) { + unset($plugins[$_plugin_name]); unset($verified_plugins[$_plugin_name]); } } @@ -327,6 +333,18 @@ class Plugins } } + // Show alert if dependencies are not installed properly + $diff = array_diff_key($non_verified_plugins, $verified_plugins); + if (count($diff) > 0) { + echo 'The following dependencies need to be installed properly:'; + echo ''; + die(); + } + // Return verified plugins list return $verified_plugins; }