diff options
author | Björn Schießle <bjoern@schiessle.org> | 2013-02-25 03:57:29 -0800 |
---|---|---|
committer | Björn Schießle <bjoern@schiessle.org> | 2013-02-25 03:57:29 -0800 |
commit | da82f7f5f357c531756a58441ffa2c22ba13a368 (patch) | |
tree | f424dbee521136759d6c716881df6b787e362770 | |
parent | 9ee5069f2a1d76c899eeef6cec0f06387764fabd (diff) | |
parent | 8068051ca42395db7386db3f8993276ad1b1007b (diff) | |
download | nextcloud-server-da82f7f5f357c531756a58441ffa2c22ba13a368.tar.gz nextcloud-server-da82f7f5f357c531756a58441ffa2c22ba13a368.zip |
Merge pull request #1888 from Raydiation/master
Fixes apps require version checking
-rw-r--r-- | lib/app.php | 34 | ||||
-rw-r--r-- | tests/lib/app.php | 66 |
2 files changed, 98 insertions, 2 deletions
diff --git a/lib/app.php b/lib/app.php index e653c30b2d9..2eb43a582e2 100644 --- a/lib/app.php +++ b/lib/app.php @@ -223,7 +223,7 @@ class OC_App{ // check if the app is compatible with this version of ownCloud $info=OC_App::getAppInfo($app); $version=OC_Util::getVersion(); - if(!isset($info['require']) or ($version[0]>$info['require'])) { + if(!isset($info['require']) or !self::isAppVersionCompatible($version, $info['require'])) { OC_Log::write('core', 'App "'.$info['name'].'" can\'t be installed because it is' .' not compatible with this version of ownCloud', @@ -851,7 +851,7 @@ class OC_App{ foreach($apps as $app) { // check if the app is compatible with this version of ownCloud $info = OC_App::getAppInfo($app); - if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) { + if(!isset($info['require']) or !self::isAppVersionCompatible($version, $info['require'])) { OC_Log::write('core', 'App "'.$info['name'].'" ('.$app.') can\'t be used because it is' .' not compatible with this version of ownCloud', @@ -862,6 +862,36 @@ class OC_App{ } } + + /** + * Compares the app version with the owncloud version to see if the app + * requires a newer version than the currently active one + * @param array $owncloudVersions array with 3 entries: major minor bugfix + * @param string $appRequired the required version from the xml + * major.minor.bugfix + * @return boolean true if compatible, otherwise false + */ + public static function isAppVersionCompatible($owncloudVersions, $appRequired){ + $appVersions = explode('.', $appRequired); + + for($i=0; $i<count($appVersions); $i++){ + $appVersion = (int) $appVersions[$i]; + + if(isset($owncloudVersions[$i])){ + $owncloudVersion = $owncloudVersions[$i]; + } else { + $owncloudVersion = 0; + } + + if($owncloudVersion < $appVersion){ + return false; + } + } + + return true; + } + + /** * get the installed version of all apps */ diff --git a/tests/lib/app.php b/tests/lib/app.php new file mode 100644 index 00000000000..9cab36903a2 --- /dev/null +++ b/tests/lib/app.php @@ -0,0 +1,66 @@ +<?php +/** + * Copyright (c) 2012 Bernhard Posselt <nukeawhale@gmail.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_App extends PHPUnit_Framework_TestCase { + + + public function testIsAppVersionCompatibleSingleOCNumber(){ + $oc = array(4); + $app = '4.0'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleMultipleOCNumber(){ + $oc = array(4, 3, 1); + $app = '4.3'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleSingleNumber(){ + $oc = array(4); + $app = '4'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleSingleAppNumber(){ + $oc = array(4, 3); + $app = '4'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleShouldFail(){ + $oc = array(4, 3, 1); + $app = '4.3.2'; + + $this->assertFalse(OC_App::isAppVersionCompatible($oc, $app)); + } + + public function testIsAppVersionCompatibleShouldFailTwoVersionNumbers(){ + $oc = array(4, 3, 1); + $app = '4.4'; + + $this->assertFalse(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleShouldFailOneVersionNumbers(){ + $oc = array(4, 3, 1); + $app = '5'; + + $this->assertFalse(OC_App::isAppVersionCompatible($oc, $app)); + } + +}
\ No newline at end of file |