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
|
||||
$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
|
||||
*/
|
||||
|
|
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