3 namespace Drupal\Console\Core\Utils;
5 use Symfony\Component\Yaml\Parser;
8 * Class RequirementChecker
9 * @package Drupal\Console\Core\Utils
11 class RequirementChecker
21 protected $requirements = [];
26 protected $checkResult = [];
31 protected $valid = true;
36 protected $overwritten = false;
39 * RequirementChecker constructor.
41 public function __construct()
43 $this->parser = new Parser();
49 private function checkPHPVersion()
51 $requiredPHP = $this->requirements['requirements']['php']['required'];
52 $currentPHP = phpversion();
53 $this->checkResult['php']['required'] = $requiredPHP;
54 $this->checkResult['php']['current'] = $currentPHP;
55 $this->valid = (version_compare($currentPHP, $requiredPHP) >= 0);
56 $this->checkResult['php']['valid'] = $this->valid;
60 * checkRequiredExtensions
62 private function checkRequiredExtensions()
64 $this->checkResult['extensions']['required']['missing'] = [];
65 foreach ($this->requirements['requirements']['extensions']['required'] as $extension) {
66 if (!extension_loaded($extension)) {
67 $this->checkResult['extensions']['required']['missing'][] = $extension;
74 * checkRecommendedExtensions
76 private function checkRecommendedExtensions()
78 $this->checkResult['extensions']['recommended']['missing'] = [];
79 foreach ($this->requirements['requirements']['extensions']['recommended'] as $extension) {
80 if (!extension_loaded($extension)) {
81 $this->checkResult['extensions']['recommended']['missing'][] = $extension;
87 * checkRequiredConfigurations
89 private function checkRequiredConfigurations()
91 $this->checkResult['configurations']['required']['overwritten'] = [];
92 $this->checkResult['configurations']['required']['missing'] = [];
93 foreach ($this->requirements['requirements']['configurations']['required'] as $configuration) {
95 if (is_array($configuration)) {
96 $defaultValue = current($configuration);
97 $configuration = key($configuration);
100 if (!ini_get($configuration)) {
102 ini_set($configuration, $defaultValue);
103 $this->checkResult['configurations']['required']['overwritten'] = [
104 $configuration => $defaultValue
106 $this->overwritten = true;
109 $this->valid = false;
110 $this->checkResult['configurations']['required']['missing'][] = $configuration;
119 public function validate($file)
121 if (file_exists($file)) {
122 $this->requirements = $this->parser->parse(file_get_contents($file));
125 if (!$this->checkResult) {
126 $this->checkPHPVersion();
127 $this->checkRequiredExtensions();
128 $this->checkRecommendedExtensions();
129 $this->checkRequiredConfigurations();
132 return $this->checkResult;
138 public function getCheckResult()
140 return $this->checkResult;
146 public function isOverwritten()
148 return $this->overwritten;
154 public function isValid()