diff options
Diffstat (limited to 'lib/private/app/dependencyanalyzer.php')
-rw-r--r-- | lib/private/app/dependencyanalyzer.php | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/lib/private/app/dependencyanalyzer.php b/lib/private/app/dependencyanalyzer.php index fb4b3761656..172b8e88c06 100644 --- a/lib/private/app/dependencyanalyzer.php +++ b/lib/private/app/dependencyanalyzer.php @@ -10,31 +10,31 @@ namespace OC\App; +use OCP\IL10N; + class DependencyAnalyzer { /** @var Platform */ - private $system; + private $platform; /** @var \OCP\IL10N */ private $l; /** @var array */ - private $missing; + private $missing = array(); /** @var array */ - private $dependencies; + private $dependencies = array(); /** * @param array $app * @param Platform $platform * @param \OCP\IL10N $l */ - function __construct(array $app, $platform, $l) { - $this->system = $platform; + function __construct(array $app, Platform $platform, IL10N $l) { + $this->platform = $platform; $this->l = $l; - $this->missing = array(); - $this->dependencies = array(); - if (array_key_exists('dependencies', $app)) { + if (isset($app['dependencies'])) { $this->dependencies = $app['dependencies']; } } @@ -46,20 +46,21 @@ class DependencyAnalyzer { public function analyze() { $this->analysePhpVersion(); $this->analyseSupportedDatabases(); + $this->analyseCommands(); return $this->missing; } private function analysePhpVersion() { if (isset($this->dependencies['php']['@attributes']['min-version'])) { $minVersion = $this->dependencies['php']['@attributes']['min-version']; - if (version_compare($this->system->getPhpVersion(), $minVersion, '<')) { - $this->missing[] = (string)$this->l->t('PHP %s or higher is required.', $minVersion); + if (version_compare($this->platform->getPhpVersion(), $minVersion, '<')) { + $this->addMissing((string)$this->l->t('PHP %s or higher is required.', $minVersion)); } } if (isset($this->dependencies['php']['@attributes']['max-version'])) { $maxVersion = $this->dependencies['php']['@attributes']['max-version']; - if (version_compare($this->system->getPhpVersion(), $maxVersion, '>')) { - $this->missing[] = (string)$this->l->t('PHP with a version less then %s is required.', $maxVersion); + if (version_compare($this->platform->getPhpVersion(), $maxVersion, '>')) { + $this->addMissing((string)$this->l->t('PHP with a version less then %s is required.', $maxVersion)); } } } @@ -74,14 +75,46 @@ class DependencyAnalyzer { return; } $supportedDatabases = array_map(function($db) { - if (isset($db['@value'])) { - return $db['@value']; - } - return $db; + return $this->getValue($db); }, $supportedDatabases); - $currentDatabase = $this->system->getDatabase(); + $currentDatabase = $this->platform->getDatabase(); if (!in_array($currentDatabase, $supportedDatabases)) { - $this->missing[] = (string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases)); + $this->addMissing((string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases))); + } + } + + private function analyseCommands() { + if (!isset($this->dependencies['command'])) { + return; + } + + $commands = $this->dependencies['command']; + $os = $this->platform->getOS(); + foreach($commands as $command) { + if (isset($command['@attributes']['os']) && $command['@attributes']['os'] !== $os) { + continue; + } + $commandName = $this->getValue($command); + if (!$this->platform->isCommandKnown($commandName)) { + $this->addMissing((string)$this->l->t('The command line tool %s could not be found', $commandName)); + } } } + + /** + * @param $element + * @return mixed + */ + private function getValue($element) { + if (isset($element['@value'])) + return $element['@value']; + return strval($element); + } + + /** + * @param $minVersion + */ + private function addMissing($message) { + $this->missing[] = $message; + } } |