summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Schießle <bjoern@schiessle.org>2013-02-25 03:57:29 -0800
committerBjörn Schießle <bjoern@schiessle.org>2013-02-25 03:57:29 -0800
commitda82f7f5f357c531756a58441ffa2c22ba13a368 (patch)
treef424dbee521136759d6c716881df6b787e362770
parent9ee5069f2a1d76c899eeef6cec0f06387764fabd (diff)
parent8068051ca42395db7386db3f8993276ad1b1007b (diff)
downloadnextcloud-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.php34
-rw-r--r--tests/lib/app.php66
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