Merge pull request #17434 from owncloud/update-showappnameonappupdate
Display app names in update page for app updates
This commit is contained in:
commit
06d8edd963
|
@ -680,6 +680,13 @@ label.infield {
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#body-login .update .appList {
|
||||||
|
list-style: disc;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 25px;
|
||||||
|
margin-right: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
#body-login .v-align {
|
#body-login .v-align {
|
||||||
width: inherit;
|
width: inherit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,26 @@
|
||||||
<div class="update" data-productname="<?php p($_['productName']) ?>" data-version="<?php p($_['version']) ?>">
|
<div class="update" data-productname="<?php p($_['productName']) ?>" data-version="<?php p($_['version']) ?>">
|
||||||
<div class="updateOverview">
|
<div class="updateOverview">
|
||||||
|
<?php if ($_['isAppsOnlyUpgrade']) { ?>
|
||||||
|
<h2 class="title bold"><?php p($l->t('Apps update required.')); ?></h2>
|
||||||
|
<?php } else { ?>
|
||||||
<h2 class="title bold"><?php p($l->t('%s will be updated to version %s.',
|
<h2 class="title bold"><?php p($l->t('%s will be updated to version %s.',
|
||||||
array($_['productName'], $_['version']))); ?></h2>
|
array($_['productName'], $_['version']))); ?></h2>
|
||||||
<?php if (!empty($_['appList'])) { ?>
|
<?php } ?>
|
||||||
|
<?php if (!empty($_['appsToUpgrade'])) { ?>
|
||||||
<div class="infogroup">
|
<div class="infogroup">
|
||||||
<span class="bold"><?php p($l->t('The following apps will be disabled:')) ?></span>
|
<span class="bold"><?php p($l->t('These apps will be updated:')); ?></span>
|
||||||
<ul class="content appList">
|
<ul class="content appList">
|
||||||
<?php foreach ($_['appList'] as $appInfo) { ?>
|
<?php foreach ($_['appsToUpgrade'] as $appInfo) { ?>
|
||||||
|
<li><?php p($appInfo['name']) ?> (<?php p($appInfo['id']) ?>)</li>
|
||||||
|
<?php } ?>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<?php } ?>
|
||||||
|
<?php if (!empty($_['incompatibleAppsList'])) { ?>
|
||||||
|
<div class="infogroup">
|
||||||
|
<span class="bold"><?php p($l->t('These incompatible apps will be disabled:')) ?></span>
|
||||||
|
<ul class="content appList">
|
||||||
|
<?php foreach ($_['incompatibleAppsList'] as $appInfo) { ?>
|
||||||
<li><?php p($appInfo['name']) ?> (<?php p($appInfo['id']) ?>)</li>
|
<li><?php p($appInfo['name']) ?> (<?php p($appInfo['id']) ?>)</li>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
57
lib/base.php
57
lib/base.php
|
@ -346,27 +346,7 @@ class OC {
|
||||||
if (\OCP\Util::needUpgrade()) {
|
if (\OCP\Util::needUpgrade()) {
|
||||||
$systemConfig = \OC::$server->getSystemConfig();
|
$systemConfig = \OC::$server->getSystemConfig();
|
||||||
if ($showTemplate && !$systemConfig->getValue('maintenance', false)) {
|
if ($showTemplate && !$systemConfig->getValue('maintenance', false)) {
|
||||||
$version = OC_Util::getVersion();
|
self::printUpgradePage();
|
||||||
$oldTheme = $systemConfig->getValue('theme');
|
|
||||||
$systemConfig->setValue('theme', '');
|
|
||||||
OC_Util::addScript('config'); // needed for web root
|
|
||||||
OC_Util::addScript('update');
|
|
||||||
$tmpl = new OC_Template('', 'update.admin', 'guest');
|
|
||||||
$tmpl->assign('version', OC_Util::getVersionString());
|
|
||||||
|
|
||||||
// get third party apps
|
|
||||||
$apps = OC_App::getEnabledApps();
|
|
||||||
$incompatibleApps = array();
|
|
||||||
foreach ($apps as $appId) {
|
|
||||||
$info = OC_App::getAppInfo($appId);
|
|
||||||
if(!OC_App::isAppCompatible($version, $info)) {
|
|
||||||
$incompatibleApps[] = $info;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$tmpl->assign('appList', $incompatibleApps);
|
|
||||||
$tmpl->assign('productName', 'ownCloud'); // for now
|
|
||||||
$tmpl->assign('oldTheme', $oldTheme);
|
|
||||||
$tmpl->printPage();
|
|
||||||
exit();
|
exit();
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
@ -375,6 +355,41 @@ class OC {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints the upgrade page
|
||||||
|
*/
|
||||||
|
private static function printUpgradePage() {
|
||||||
|
$systemConfig = \OC::$server->getSystemConfig();
|
||||||
|
$oldTheme = $systemConfig->getValue('theme');
|
||||||
|
$systemConfig->setValue('theme', '');
|
||||||
|
\OCP\Util::addScript('config'); // needed for web root
|
||||||
|
\OCP\Util::addScript('update');
|
||||||
|
|
||||||
|
// check whether this is a core update or apps update
|
||||||
|
$installedVersion = $systemConfig->getValue('version', '0.0.0');
|
||||||
|
$currentVersion = implode('.', OC_Util::getVersion());
|
||||||
|
|
||||||
|
$appManager = \OC::$server->getAppManager();
|
||||||
|
|
||||||
|
$tmpl = new OC_Template('', 'update.admin', 'guest');
|
||||||
|
$tmpl->assign('version', OC_Util::getVersionString());
|
||||||
|
|
||||||
|
// if not a core upgrade, then it's apps upgrade
|
||||||
|
if (version_compare($currentVersion, $installedVersion, '=')) {
|
||||||
|
$tmpl->assign('isAppsOnlyUpgrade', true);
|
||||||
|
} else {
|
||||||
|
$tmpl->assign('isAppsOnlyUpgrade', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// get third party apps
|
||||||
|
$ocVersion = OC_Util::getVersion();
|
||||||
|
$tmpl->assign('appsToUpgrade', $appManager->getAppsNeedingUpgrade($ocVersion));
|
||||||
|
$tmpl->assign('incompatibleAppsList', $appManager->getIncompatibleApps($ocVersion));
|
||||||
|
$tmpl->assign('productName', 'ownCloud'); // for now
|
||||||
|
$tmpl->assign('oldTheme', $oldTheme);
|
||||||
|
$tmpl->printPage();
|
||||||
|
}
|
||||||
|
|
||||||
public static function initTemplateEngine() {
|
public static function initTemplateEngine() {
|
||||||
// Add the stuff we need always
|
// Add the stuff we need always
|
||||||
// following logic will import all vendor libraries that are
|
// following logic will import all vendor libraries that are
|
||||||
|
|
|
@ -209,4 +209,73 @@ class AppManager implements IAppManager {
|
||||||
$settingsMemCache = $this->memCacheFactory->create('settings');
|
$settingsMemCache = $this->memCacheFactory->create('settings');
|
||||||
$settingsMemCache->clear('listApps');
|
$settingsMemCache->clear('listApps');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of apps that need upgrade
|
||||||
|
*
|
||||||
|
* @param array $version ownCloud version as array of version components
|
||||||
|
* @return array list of app info from apps that need an upgrade
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public function getAppsNeedingUpgrade($ocVersion) {
|
||||||
|
$appsToUpgrade = [];
|
||||||
|
$apps = $this->getInstalledApps();
|
||||||
|
foreach ($apps as $appId) {
|
||||||
|
$appInfo = $this->getAppInfo($appId);
|
||||||
|
$appDbVersion = $this->appConfig->getValue($appId, 'installed_version');
|
||||||
|
if ($appDbVersion
|
||||||
|
&& isset($appInfo['version'])
|
||||||
|
&& version_compare($appInfo['version'], $appDbVersion, '>')
|
||||||
|
&& \OC_App::isAppCompatible($ocVersion, $appInfo)
|
||||||
|
) {
|
||||||
|
$appsToUpgrade[] = $appInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $appsToUpgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the app information from "appinfo/info.xml".
|
||||||
|
*
|
||||||
|
* If no version was present in "appinfo/info.xml", reads it
|
||||||
|
* from the external "appinfo/version" file instead.
|
||||||
|
*
|
||||||
|
* @param string $appId app id
|
||||||
|
*
|
||||||
|
* @return array app iinfo
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public function getAppInfo($appId) {
|
||||||
|
$appInfo = \OC_App::getAppInfo($appId);
|
||||||
|
if (!isset($appInfo['version'])) {
|
||||||
|
// read version from separate file
|
||||||
|
$appInfo['version'] = \OC_App::getAppVersion($appId);
|
||||||
|
}
|
||||||
|
return $appInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of apps incompatible with the given version
|
||||||
|
*
|
||||||
|
* @param array $version ownCloud version as array of version components
|
||||||
|
*
|
||||||
|
* @return array list of app info from incompatible apps
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public function getIncompatibleApps($version) {
|
||||||
|
$apps = $this->getInstalledApps();
|
||||||
|
$incompatibleApps = array();
|
||||||
|
foreach ($apps as $appId) {
|
||||||
|
$info = $this->getAppInfo($appId);
|
||||||
|
if (!\OC_App::isAppCompatible($version, $info)) {
|
||||||
|
$incompatibleApps[] = $info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $incompatibleApps;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,4 +204,74 @@ class Manager extends \PHPUnit_Framework_TestCase {
|
||||||
$this->appConfig->setValue('test4', 'enabled', '["asd"]');
|
$this->appConfig->setValue('test4', 'enabled', '["asd"]');
|
||||||
$this->assertEquals(['test1', 'test3'], $this->manager->getEnabledAppsForUser($user));
|
$this->assertEquals(['test1', 'test3'], $this->manager->getEnabledAppsForUser($user));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetAppsNeedingUpgrade() {
|
||||||
|
$this->manager = $this->getMockBuilder('\OC\App\AppManager')
|
||||||
|
->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory])
|
||||||
|
->setMethods(['getAppInfo'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$appInfos = [
|
||||||
|
'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '9.0.0'],
|
||||||
|
'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'],
|
||||||
|
'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'],
|
||||||
|
'test4' => ['id' => 'test4', 'version' => '3.0.0', 'requiremin' => '8.1.0'],
|
||||||
|
'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->manager->expects($this->any())
|
||||||
|
->method('getAppInfo')
|
||||||
|
->will($this->returnCallback(
|
||||||
|
function($appId) use ($appInfos) {
|
||||||
|
return $appInfos[$appId];
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->appConfig->setValue('test1', 'enabled', 'yes');
|
||||||
|
$this->appConfig->setValue('test1', 'installed_version', '1.0.0');
|
||||||
|
$this->appConfig->setValue('test2', 'enabled', 'yes');
|
||||||
|
$this->appConfig->setValue('test2', 'installed_version', '1.0.0');
|
||||||
|
$this->appConfig->setValue('test3', 'enabled', 'yes');
|
||||||
|
$this->appConfig->setValue('test3', 'installed_version', '1.0.0');
|
||||||
|
$this->appConfig->setValue('test4', 'enabled', 'yes');
|
||||||
|
$this->appConfig->setValue('test4', 'installed_version', '2.4.0');
|
||||||
|
|
||||||
|
$apps = $this->manager->getAppsNeedingUpgrade('8.2.0');
|
||||||
|
|
||||||
|
$this->assertCount(2, $apps);
|
||||||
|
$this->assertEquals('test1', $apps[0]['id']);
|
||||||
|
$this->assertEquals('test4', $apps[1]['id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetIncompatibleApps() {
|
||||||
|
$this->manager = $this->getMockBuilder('\OC\App\AppManager')
|
||||||
|
->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory])
|
||||||
|
->setMethods(['getAppInfo'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$appInfos = [
|
||||||
|
'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '8.0.0'],
|
||||||
|
'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'],
|
||||||
|
'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'],
|
||||||
|
'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->manager->expects($this->any())
|
||||||
|
->method('getAppInfo')
|
||||||
|
->will($this->returnCallback(
|
||||||
|
function($appId) use ($appInfos) {
|
||||||
|
return $appInfos[$appId];
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->appConfig->setValue('test1', 'enabled', 'yes');
|
||||||
|
$this->appConfig->setValue('test2', 'enabled', 'yes');
|
||||||
|
$this->appConfig->setValue('test3', 'enabled', 'yes');
|
||||||
|
|
||||||
|
$apps = $this->manager->getIncompatibleApps('8.2.0');
|
||||||
|
|
||||||
|
$this->assertCount(2, $apps);
|
||||||
|
$this->assertEquals('test1', $apps[0]['id']);
|
||||||
|
$this->assertEquals('test3', $apps[1]['id']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue