3 namespace Drupal\Console\Core\Utils;
5 use Symfony\Component\Yaml\Parser;
8 * Class RequirementChecker
10 * @package Drupal\Console\Core\Utils
12 class RequirementChecker
22 protected $requirements = [];
27 protected $checkResult = [];
32 protected $valid = true;
37 protected $overwritten = false;
40 * RequirementChecker constructor.
42 public function __construct()
44 $this->parser = new Parser();
50 private function checkPHPVersion()
52 $requiredPHP = $this->requirements['requirements']['php']['required'];
53 $currentPHP = phpversion();
54 $this->checkResult['php']['required'] = $requiredPHP;
55 $this->checkResult['php']['current'] = $currentPHP;
56 $this->valid = (version_compare($currentPHP, $requiredPHP) >= 0);
57 $this->checkResult['php']['valid'] = $this->valid;
61 * checkRequiredExtensions
63 private function checkRequiredExtensions()
65 $this->checkResult['extensions']['required']['missing'] = [];
66 foreach ($this->requirements['requirements']['extensions']['required'] as $extension) {
67 if (!extension_loaded($extension)) {
68 $this->checkResult['extensions']['required']['missing'][] = $extension;
75 * checkRecommendedExtensions
77 private function checkRecommendedExtensions()
79 $this->checkResult['extensions']['recommended']['missing'] = [];
80 foreach ($this->requirements['requirements']['extensions']['recommended'] as $extension) {
81 if (!extension_loaded($extension)) {
82 $this->checkResult['extensions']['recommended']['missing'][] = $extension;
88 * checkRequiredConfigurations
90 private function checkRequiredConfigurations()
92 $this->checkResult['configurations']['required']['overwritten'] = [];
93 $this->checkResult['configurations']['required']['missing'] = [];
94 foreach ($this->requirements['requirements']['configurations']['required'] as $configuration) {
96 if (is_array($configuration)) {
97 $defaultValue = current($configuration);
98 $configuration = key($configuration);
101 if (!ini_get($configuration)) {
103 ini_set($configuration, $defaultValue);
104 $this->checkResult['configurations']['required']['overwritten'] = [
105 $configuration => $defaultValue
107 $this->overwritten = true;
110 $this->valid = false;
111 $this->checkResult['configurations']['required']['missing'][] = $configuration;
120 public function validate($file)
122 if (file_exists($file)) {
123 $this->requirements = $this->parser->parse(file_get_contents($file));
126 if (!$this->checkResult) {
127 $this->checkPHPVersion();
128 $this->checkRequiredExtensions();
129 $this->checkRecommendedExtensions();
130 $this->checkRequiredConfigurations();
133 return $this->checkResult;
139 public function getCheckResult()
141 return $this->checkResult;
147 public function isOverwritten()
149 return $this->overwritten;
155 public function isValid()