You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nextcloud/lib/private/app/dependencyanalyzer.php

88 lines
2.2 KiB
PHP

<?php
/**
* @author Thomas Müller
* @copyright 2014 Thomas Müller deepdiver@owncloud.com
*
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OC\App;
class DependencyAnalyzer {
/** @var Platform */
private $system;
/** @var \OCP\IL10N */
private $l;
/** @var array */
private $missing;
/** @var array */
private $dependencies;
/**
* @param array $app
* @param Platform $platform
* @param \OCP\IL10N $l
*/
function __construct(array $app, $platform, $l) {
$this->system = $platform;
$this->l = $l;
$this->missing = array();
$this->dependencies = array();
if (array_key_exists('dependencies', $app)) {
$this->dependencies = $app['dependencies'];
}
}
/**
* @param array $app
* @returns array of missing dependencies
*/
public function analyze() {
$this->analysePhpVersion();
$this->analyseSupportedDatabases();
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 (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);
}
}
}
private function analyseSupportedDatabases() {
if (!isset($this->dependencies['database'])) {
return;
}
$supportedDatabases = $this->dependencies['database'];
if (empty($supportedDatabases)) {
return;
}
$supportedDatabases = array_map(function($db) {
if (isset($db['@value'])) {
return $db['@value'];
}
return $db;
}, $supportedDatabases);
$currentDatabase = $this->system->getDatabase();
if (!in_array($currentDatabase, $supportedDatabases)) {
$this->missing[] = (string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases));
}
}
}