Display app names in update page for app updates
Whenever the update page is displayed for apps, show app names instead of the core update text.
This commit is contained in:
parent
645600ae03
commit
b919ae96f0
4 changed files with 184 additions and 21 deletions
|
@ -1,7 +1,20 @@
|
|||
<div class="update" data-productname="<?php p($_['productName']) ?>" data-version="<?php p($_['version']) ?>">
|
||||
<div class="updateOverview">
|
||||
<?php if ($_['isAppsOnlyUpgrade']) { ?>
|
||||
<h2 class="title bold"><?php p($l->t('The following apps will be updated:')); ?></h2>
|
||||
<?php } else { ?>
|
||||
<h2 class="title bold"><?php p($l->t('%s will be updated to version %s.',
|
||||
array($_['productName'], $_['version']))); ?></h2>
|
||||
<?php } ?>
|
||||
<?php if (!empty($_['appsToUpgrade'])) { ?>
|
||||
<div class="infogroup">
|
||||
<ul class="content appList">
|
||||
<?php foreach ($_['appsToUpgrade'] as $appInfo) { ?>
|
||||
<li><?php p($appInfo['name']) ?> (<?php p($appInfo['id']) ?>)</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if (!empty($_['appList'])) { ?>
|
||||
<div class="infogroup">
|
||||
<span class="bold"><?php p($l->t('The following apps will be disabled:')) ?></span>
|
||||
|
@ -17,9 +30,11 @@
|
|||
<?php p($l->t('The theme %s has been disabled.', array($_['oldTheme']))) ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if (!$_['isAppsOnlyUpgrade']) { ?>
|
||||
<div class="infogroup bold">
|
||||
<?php p($l->t('Please make sure that the database, the config folder and the data folder have been backed up before proceeding.')) ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<input class="updateButton" type="button" value="<?php p($l->t('Start update')) ?>">
|
||||
<div class="infogroup">
|
||||
<?php p($l->t('To avoid timeouts with larger installations, you can instead run the following command from your installation directory:')) ?>
|
||||
|
|
56
lib/base.php
56
lib/base.php
|
@ -346,27 +346,7 @@ class OC {
|
|||
if (\OCP\Util::needUpgrade()) {
|
||||
$systemConfig = \OC::$server->getSystemConfig();
|
||||
if ($showTemplate && !$systemConfig->getValue('maintenance', false)) {
|
||||
$version = OC_Util::getVersion();
|
||||
$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();
|
||||
self::printUpgradePage();
|
||||
exit();
|
||||
} else {
|
||||
return true;
|
||||
|
@ -375,6 +355,40 @@ class OC {
|
|||
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('appsToUpgrade', $appManager->getAppsNeedingUpgrade());
|
||||
$tmpl->assign('isAppsOnlyUpgrade', true);
|
||||
} else {
|
||||
// get third party apps
|
||||
$version = OC_Util::getVersion();
|
||||
$tmpl->assign('appList', $appManager->getIncompatibleApps($version));
|
||||
$tmpl->assign('isAppsOnlyUpgrade', false);
|
||||
}
|
||||
$tmpl->assign('productName', 'ownCloud'); // for now
|
||||
$tmpl->assign('oldTheme', $oldTheme);
|
||||
$tmpl->printPage();
|
||||
}
|
||||
|
||||
public static function initTemplateEngine() {
|
||||
// Add the stuff we need always
|
||||
// following logic will import all vendor libraries that are
|
||||
|
|
|
@ -209,4 +209,71 @@ class AppManager implements IAppManager {
|
|||
$settingsMemCache = $this->memCacheFactory->create('settings');
|
||||
$settingsMemCache->clear('listApps');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of apps that need upgrade
|
||||
*
|
||||
* @return array list of app info from apps that need an upgrade
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
public function getAppsNeedingUpgrade() {
|
||||
$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, '>')
|
||||
) {
|
||||
$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 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,71 @@ class Manager extends \PHPUnit_Framework_TestCase {
|
|||
$this->appConfig->setValue('test4', 'enabled', '["asd"]');
|
||||
$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' => '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('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');
|
||||
|
||||
$apps = $this->manager->getAppsNeedingUpgrade();
|
||||
|
||||
$this->assertCount(2, $apps);
|
||||
$this->assertEquals('test1', $apps[0]['id']);
|
||||
$this->assertEquals('test3', $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 a new issue