Version 1
[yaffs-website] / vendor / drupal / console-core / src / Utils / RequirementChecker.php
diff --git a/vendor/drupal/console-core/src/Utils/RequirementChecker.php b/vendor/drupal/console-core/src/Utils/RequirementChecker.php
new file mode 100644 (file)
index 0000000..16838f2
--- /dev/null
@@ -0,0 +1,158 @@
+<?php
+
+namespace Drupal\Console\Core\Utils;
+
+use Symfony\Component\Yaml\Parser;
+
+/**
+ * Class RequirementChecker
+ * @package Drupal\Console\Core\Utils
+ */
+class RequirementChecker
+{
+    /**
+     * @var Parser
+     */
+    protected $parser;
+
+    /**
+     * @var array
+     */
+    protected $requirements = [];
+
+    /**
+     * @var array
+     */
+    protected $checkResult = [];
+
+    /**
+     * @var bool
+     */
+    protected $valid = true;
+
+    /**
+     * @var bool
+     */
+    protected $overwritten = false;
+
+    /**
+     * RequirementChecker constructor.
+     */
+    public function __construct()
+    {
+        $this->parser = new Parser();
+    }
+
+    /**
+     *
+     */
+    private function checkPHPVersion()
+    {
+        $requiredPHP = $this->requirements['requirements']['php']['required'];
+        $currentPHP = phpversion();
+        $this->checkResult['php']['required'] = $requiredPHP;
+        $this->checkResult['php']['current'] = $currentPHP;
+        $this->valid = (version_compare($currentPHP, $requiredPHP) >= 0);
+        $this->checkResult['php']['valid'] = $this->valid;
+    }
+
+    /**
+     * checkRequiredExtensions
+     */
+    private function checkRequiredExtensions()
+    {
+        $this->checkResult['extensions']['required']['missing'] = [];
+        foreach ($this->requirements['requirements']['extensions']['required'] as $extension) {
+            if (!extension_loaded($extension)) {
+                $this->checkResult['extensions']['required']['missing'][] = $extension;
+                $this->valid = false;
+            }
+        }
+    }
+
+    /**
+     * checkRecommendedExtensions
+     */
+    private function checkRecommendedExtensions()
+    {
+        $this->checkResult['extensions']['recommended']['missing'] = [];
+        foreach ($this->requirements['requirements']['extensions']['recommended'] as $extension) {
+            if (!extension_loaded($extension)) {
+                $this->checkResult['extensions']['recommended']['missing'][] = $extension;
+            }
+        }
+    }
+
+    /**
+     * checkRequiredConfigurations
+     */
+    private function checkRequiredConfigurations()
+    {
+        $this->checkResult['configurations']['required']['overwritten']  = [];
+        $this->checkResult['configurations']['required']['missing']  = [];
+        foreach ($this->requirements['requirements']['configurations']['required'] as $configuration) {
+            $defaultValue = null;
+            if (is_array($configuration)) {
+                $defaultValue = current($configuration);
+                $configuration = key($configuration);
+            }
+
+            if (!ini_get($configuration)) {
+                if ($defaultValue) {
+                    ini_set($configuration, $defaultValue);
+                    $this->checkResult['configurations']['required']['overwritten'] = [
+                        $configuration => $defaultValue
+                    ];
+                    $this->overwritten = true;
+                    continue;
+                }
+                $this->valid = false;
+                $this->checkResult['configurations']['required']['missing'][] = $configuration;
+            }
+        }
+    }
+
+    /**
+     * @param $file
+     * @return array
+     */
+    public function validate($file)
+    {
+        if (file_exists($file)) {
+            $this->requirements = $this->parser->parse(file_get_contents($file));
+        }
+
+        if (!$this->checkResult) {
+            $this->checkPHPVersion();
+            $this->checkRequiredExtensions();
+            $this->checkRecommendedExtensions();
+            $this->checkRequiredConfigurations();
+        }
+
+        return $this->checkResult;
+    }
+
+    /**
+     * @return array
+     */
+    public function getCheckResult()
+    {
+        return $this->checkResult;
+    }
+
+    /**
+     * @return boolean
+     */
+    public function isOverwritten()
+    {
+        return $this->overwritten;
+    }
+
+    /**
+     * @return bool
+     */
+    public function isValid()
+    {
+        return $this->valid;
+    }
+}