Did some minor refactoring of "minimum version support" to ease implementation of this in other systems.
parent
96b75f7d73
commit
4955e9da59
|
@ -1864,49 +1864,72 @@ class H5PCore {
|
|||
return;
|
||||
}
|
||||
|
||||
// Read and parse library-support.json
|
||||
$jsonString = file_get_contents(realpath(dirname(__FILE__)).'/library-support.json');
|
||||
$minVersions = getMinimumVersionsSupported(realpath(dirname(__FILE__)) . '/library-support.json');
|
||||
if ($minVersions === NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if($jsonString !== FALSE) {
|
||||
// Get all libraries installed, check if any of them is not supported:
|
||||
$libraries = $this->h5pF->loadLibraries();
|
||||
$unsupportedLibraries = array();
|
||||
$minimumLibraryVersions = array();
|
||||
|
||||
$librariesSupported = json_decode($jsonString, true);
|
||||
foreach ($librariesSupported as $library) {
|
||||
$minimumLibraryVersions[$library['machineName']]['versions'] = $library['minimumVersions'];
|
||||
$minimumLibraryVersions[$library['machineName']]['downloadUrl'] = $library['downloadUrl'];
|
||||
}
|
||||
|
||||
// Iterate over all installed libraries
|
||||
foreach ($libraries as $machine_name => $libraryList) {
|
||||
// Check if there are any minimum version requirements for this library
|
||||
if (isset($minimumLibraryVersions[$machine_name])) {
|
||||
$minimumVersions = $minimumLibraryVersions[$machine_name]['versions'];
|
||||
foreach ($libraries as $library_name => $versions) {
|
||||
if (!isset($minVersions[$library_name])) {
|
||||
continue;
|
||||
}
|
||||
$min = $minVersions[$library_name];
|
||||
|
||||
// For each version of this library, check if it is supported
|
||||
foreach ($libraryList as $library) {
|
||||
if (!self::isLibraryVersionSupported($library, $minimumVersions)) {
|
||||
foreach ($versions as $library) {
|
||||
if (!$this->isLibraryVersionSupported($library, $min->versions)) {
|
||||
// Current version of this library is not supported
|
||||
$unsupportedLibraries[] = array (
|
||||
'name' => $machine_name,
|
||||
'downloadUrl' => $minimumLibraryVersions[$machine_name]['downloadUrl'],
|
||||
'name' => $library_name,
|
||||
'downloadUrl' => $min->downloadUrl,
|
||||
'currentVersion' => array (
|
||||
'major' => $library->major_version,
|
||||
'minor' => $library->minor_version,
|
||||
'patch' => $library->patch_version,
|
||||
),
|
||||
'minimumVersions' => $minimumVersions,
|
||||
'minimumVersions' => $min->versions,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->h5pF->setUnsupportedLibraries(empty($unsupportedLibraries) ? NULL : $unsupportedLibraries);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of the minimum version of libraries that are supported.
|
||||
* This is needed because some old libraries are no longer supported by core.
|
||||
*
|
||||
* TODO: Make it possible for the systems to cache this list between requests.
|
||||
*
|
||||
* @param string $path to json file
|
||||
* @return array indexed using library names
|
||||
*/
|
||||
public function getMinimumVersionsSupported($path) {
|
||||
$minSupported = array();
|
||||
|
||||
// Get list of minimum version for libraries. Some old libraries are no longer supported.
|
||||
$libraries = file_get_contents($path);
|
||||
if ($libraries !== FALSE) {
|
||||
$libraries = json_decode($libraries);
|
||||
if ($libraries !== NULL) {
|
||||
foreach ($libraries as $library) {
|
||||
$minSupported[$library->machineName] = (object) array(
|
||||
'versions' => $library->minimumVersions,
|
||||
'downloadUrl' => $library->downloadUrl
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return empty($minSupported) ? NULL : $minSupported;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a specific version of a library is supported
|
||||
*
|
||||
|
@ -1914,22 +1937,22 @@ class H5PCore {
|
|||
* @param array An array containing versions
|
||||
* @return boolean TRUE if supported, otherwise FALSE
|
||||
*/
|
||||
private static function isLibraryVersionSupported ($library, $minimumVersions) {
|
||||
public function isLibraryVersionSupported ($library, $minimumVersions) {
|
||||
$major_supported = $minor_supported = $patch_supported = false;
|
||||
foreach ($minimumVersions as $minimumVersion) {
|
||||
// A library is supported if:
|
||||
// --- major is higher than any minimumversion
|
||||
// --- minor is higher than any minimumversion for a given major
|
||||
// --- major and minor equals and patch is >= supported
|
||||
$major_supported |= ($library->major_version > $minimumVersion['major']);
|
||||
$major_supported |= ($library->major_version > $minimumVersion->major);
|
||||
|
||||
if ($library->major_version == $minimumVersion['major']) {
|
||||
$minor_supported |= ($library->minor_version > $minimumVersion['minor']);
|
||||
if ($library->major_version == $minimumVersion->major) {
|
||||
$minor_supported |= ($library->minor_version > $minimumVersion->minor);
|
||||
}
|
||||
|
||||
if ($library->major_version == $minimumVersion['major'] &&
|
||||
$library->minor_version == $minimumVersion['minor']) {
|
||||
$patch_supported |= ($library->patch_version >= $minimumVersion['patch']);
|
||||
if ($library->major_version == $minimumVersion->major &&
|
||||
$library->minor_version == $minimumVersion->minor) {
|
||||
$patch_supported |= ($library->patch_version >= $minimumVersion->patch);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue