Merge pull request #1888 from Raydiation/master
Fixes apps require version checking
This commit is contained in:
commit
da82f7f5f3
2 changed files with 98 additions and 2 deletions
34
lib/app.php
34
lib/app.php
|
@ -223,7 +223,7 @@ class OC_App{
|
||||||
// check if the app is compatible with this version of ownCloud
|
// check if the app is compatible with this version of ownCloud
|
||||||
$info=OC_App::getAppInfo($app);
|
$info=OC_App::getAppInfo($app);
|
||||||
$version=OC_Util::getVersion();
|
$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',
|
OC_Log::write('core',
|
||||||
'App "'.$info['name'].'" can\'t be installed because it is'
|
'App "'.$info['name'].'" can\'t be installed because it is'
|
||||||
.' not compatible with this version of ownCloud',
|
.' not compatible with this version of ownCloud',
|
||||||
|
@ -851,7 +851,7 @@ class OC_App{
|
||||||
foreach($apps as $app) {
|
foreach($apps as $app) {
|
||||||
// check if the app is compatible with this version of ownCloud
|
// check if the app is compatible with this version of ownCloud
|
||||||
$info = OC_App::getAppInfo($app);
|
$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',
|
OC_Log::write('core',
|
||||||
'App "'.$info['name'].'" ('.$app.') can\'t be used because it is'
|
'App "'.$info['name'].'" ('.$app.') can\'t be used because it is'
|
||||||
.' not compatible with this version of ownCloud',
|
.' 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
|
* get the installed version of all apps
|
||||||
*/
|
*/
|
||||||
|
|
66
tests/lib/app.php
Normal file
66
tests/lib/app.php
Normal file
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue