diff --git a/lib/base.php b/lib/base.php index 28fc57161c..909a62040e 100644 --- a/lib/base.php +++ b/lib/base.php @@ -377,6 +377,7 @@ class OC { \OCP\Util::addScript('update'); \OCP\Util::addStyle('update'); + /** @var \OCP\App\IAppManager $appManager */ $appManager = \OC::$server->getAppManager(); $tmpl = new OC_Template('', 'update.admin', 'guest'); @@ -385,8 +386,17 @@ class OC { // get third party apps $ocVersion = \OCP\Util::getVersion(); + $incompatibleApps = $appManager->getIncompatibleApps($ocVersion); + foreach ($incompatibleApps as $appInfo) { + if ($appManager->isShipped($appInfo['id'])) { + $l = \OC::$server->getL10N('core'); + $hint = $l->t('The files of the app "%$1s" (%$2s) were not replaced correctly.', [$appInfo['name'], $appInfo['id']]); + throw new \OC\HintException('The files of the app "' . $appInfo['name'] . '" (' . $appInfo['id'] . ') were not replaced correctly.', $hint); + } + } + $tmpl->assign('appsToUpgrade', $appManager->getAppsNeedingUpgrade($ocVersion)); - $tmpl->assign('incompatibleAppsList', $appManager->getIncompatibleApps($ocVersion)); + $tmpl->assign('incompatibleAppsList', $incompatibleApps); $tmpl->assign('productName', 'Nextcloud'); // for now $tmpl->assign('oldTheme', $oldTheme); $tmpl->printPage(); diff --git a/lib/private/Updater.php b/lib/private/Updater.php index cd2934f719..e7f7a94490 100644 --- a/lib/private/Updater.php +++ b/lib/private/Updater.php @@ -382,6 +382,9 @@ class Updater extends BasicEmitter { // check if the app is compatible with this version of ownCloud $info = OC_App::getAppInfo($app); if(!OC_App::isAppCompatible($version, $info)) { + if (OC_App::isShipped($app)) { + throw new \UnexpectedValueException('The files of the app "' . $app . '" were not correctly replaced before running the update'); + } OC_App::disable($app); $this->emit('\OC\Updater', 'incompatibleAppDisabled', array($app)); }