Adding repair steps for install and uninstall - fixes #24306
This commit is contained in:
parent
a323111bd1
commit
54f45f95f5
|
@ -74,6 +74,9 @@ class InfoParser {
|
||||||
if (!array_key_exists('repair-steps', $array)) {
|
if (!array_key_exists('repair-steps', $array)) {
|
||||||
$array['repair-steps'] = [];
|
$array['repair-steps'] = [];
|
||||||
}
|
}
|
||||||
|
if (!array_key_exists('install', $array['repair-steps'])) {
|
||||||
|
$array['repair-steps']['install'] = [];
|
||||||
|
}
|
||||||
if (!array_key_exists('pre-migration', $array['repair-steps'])) {
|
if (!array_key_exists('pre-migration', $array['repair-steps'])) {
|
||||||
$array['repair-steps']['pre-migration'] = [];
|
$array['repair-steps']['pre-migration'] = [];
|
||||||
}
|
}
|
||||||
|
@ -83,6 +86,9 @@ class InfoParser {
|
||||||
if (!array_key_exists('live-migration', $array['repair-steps'])) {
|
if (!array_key_exists('live-migration', $array['repair-steps'])) {
|
||||||
$array['repair-steps']['live-migration'] = [];
|
$array['repair-steps']['live-migration'] = [];
|
||||||
}
|
}
|
||||||
|
if (!array_key_exists('uninstall', $array['repair-steps'])) {
|
||||||
|
$array['repair-steps']['uninstall'] = [];
|
||||||
|
}
|
||||||
|
|
||||||
if (array_key_exists('documentation', $array) && is_array($array['documentation'])) {
|
if (array_key_exists('documentation', $array) && is_array($array['documentation'])) {
|
||||||
foreach ($array['documentation'] as $key => $url) {
|
foreach ($array['documentation'] as $key => $url) {
|
||||||
|
@ -107,6 +113,9 @@ class InfoParser {
|
||||||
$array['types'] = [];
|
$array['types'] = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isset($array['repair-steps']['install']['step']) && is_array($array['repair-steps']['install']['step'])) {
|
||||||
|
$array['repair-steps']['install'] = $array['repair-steps']['install']['step'];
|
||||||
|
}
|
||||||
if (isset($array['repair-steps']['pre-migration']['step']) && is_array($array['repair-steps']['pre-migration']['step'])) {
|
if (isset($array['repair-steps']['pre-migration']['step']) && is_array($array['repair-steps']['pre-migration']['step'])) {
|
||||||
$array['repair-steps']['pre-migration'] = $array['repair-steps']['pre-migration']['step'];
|
$array['repair-steps']['pre-migration'] = $array['repair-steps']['pre-migration']['step'];
|
||||||
}
|
}
|
||||||
|
@ -116,6 +125,9 @@ class InfoParser {
|
||||||
if (isset($array['repair-steps']['live-migration']['step']) && is_array($array['repair-steps']['live-migration']['step'])) {
|
if (isset($array['repair-steps']['live-migration']['step']) && is_array($array['repair-steps']['live-migration']['step'])) {
|
||||||
$array['repair-steps']['live-migration'] = $array['repair-steps']['live-migration']['step'];
|
$array['repair-steps']['live-migration'] = $array['repair-steps']['live-migration']['step'];
|
||||||
}
|
}
|
||||||
|
if (isset($array['repair-steps']['uninstall']['step']) && is_array($array['repair-steps']['uninstall']['step'])) {
|
||||||
|
$array['repair-steps']['uninstall'] = $array['repair-steps']['uninstall']['step'];
|
||||||
|
}
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1187,7 +1187,7 @@ class OC_App {
|
||||||
* @param string[] $steps
|
* @param string[] $steps
|
||||||
* @throws \OC\NeedsUpdateException
|
* @throws \OC\NeedsUpdateException
|
||||||
*/
|
*/
|
||||||
private static function executeRepairSteps($appId, array $steps) {
|
public static function executeRepairSteps($appId, array $steps) {
|
||||||
if (empty($steps)) {
|
if (empty($steps)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ use OC\OCSClient;
|
||||||
/**
|
/**
|
||||||
* This class provides the functionality needed to install, update and remove plugins/apps
|
* This class provides the functionality needed to install, update and remove plugins/apps
|
||||||
*/
|
*/
|
||||||
class OC_Installer{
|
class OC_Installer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -134,16 +134,19 @@ class OC_Installer{
|
||||||
self::includeAppScript($basedir . '/appinfo/install.php');
|
self::includeAppScript($basedir . '/appinfo/install.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$appData = OC_App::getAppInfo($appId);
|
||||||
|
OC_App::executeRepairSteps($appId, $appData['repair-steps']['install']);
|
||||||
|
|
||||||
//set the installed version
|
//set the installed version
|
||||||
\OC::$server->getAppConfig()->setValue($info['id'], 'installed_version', OC_App::getAppVersion($info['id']));
|
\OC::$server->getAppConfig()->setValue($info['id'], 'installed_version', OC_App::getAppVersion($info['id']));
|
||||||
\OC::$server->getAppConfig()->setValue($info['id'], 'enabled', 'no');
|
\OC::$server->getAppConfig()->setValue($info['id'], 'enabled', 'no');
|
||||||
|
|
||||||
//set remote/public handelers
|
//set remote/public handelers
|
||||||
foreach($info['remote'] as $name=>$path) {
|
foreach($info['remote'] as $name=>$path) {
|
||||||
OCP\CONFIG::setAppValue('core', 'remote_'.$name, $info['id'].'/'.$path);
|
OCP\Config::setAppValue('core', 'remote_'.$name, $info['id'].'/'.$path);
|
||||||
}
|
}
|
||||||
foreach($info['public'] as $name=>$path) {
|
foreach($info['public'] as $name=>$path) {
|
||||||
OCP\CONFIG::setAppValue('core', 'public_'.$name, $info['id'].'/'.$path);
|
OCP\Config::setAppValue('core', 'public_'.$name, $info['id'].'/'.$path);
|
||||||
}
|
}
|
||||||
|
|
||||||
OC_App::setAppTypes($info['id']);
|
OC_App::setAppTypes($info['id']);
|
||||||
|
@ -474,52 +477,30 @@ class OC_Installer{
|
||||||
/**
|
/**
|
||||||
* Removes an app
|
* Removes an app
|
||||||
* @param string $name name of the application to remove
|
* @param string $name name of the application to remove
|
||||||
* @param array $options options
|
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*
|
*
|
||||||
* This function removes an app. $options is an associative array. The
|
|
||||||
* following keys are optional:ja
|
|
||||||
* - keeppreferences: boolean, if true the user preferences won't be deleted
|
|
||||||
* - keepappconfig: boolean, if true the config will be kept
|
|
||||||
* - keeptables: boolean, if true the database will be kept
|
|
||||||
* - keepfiles: boolean, if true the user files will be kept
|
|
||||||
*
|
*
|
||||||
* This function works as follows
|
* This function works as follows
|
||||||
* -# including appinfo/remove.php
|
* -# call uninstall repair steps
|
||||||
* -# removing the files
|
* -# removing the files
|
||||||
*
|
*
|
||||||
* The function will not delete preferences, tables and the configuration,
|
* The function will not delete preferences, tables and the configuration,
|
||||||
* this has to be done by the function oc_app_uninstall().
|
* this has to be done by the function oc_app_uninstall().
|
||||||
*/
|
*/
|
||||||
public static function removeApp( $name, $options = array()) {
|
public static function removeApp($appId) {
|
||||||
|
|
||||||
if(isset($options['keeppreferences']) and $options['keeppreferences']==false ) {
|
$appData = OC_App::getAppInfo($appId);
|
||||||
// todo
|
if (!is_null($appData)) {
|
||||||
// remove preferences
|
OC_App::executeRepairSteps($appId, $appData['repair-steps']['uninstall']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($options['keepappconfig']) and $options['keepappconfig']==false ) {
|
if(OC_Installer::isDownloaded( $appId )) {
|
||||||
// todo
|
$appDir=OC_App::getInstallPath() . '/' . $appId;
|
||||||
// remove app config
|
OC_Helper::rmdirr($appDir);
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($options['keeptables']) and $options['keeptables']==false ) {
|
|
||||||
// todo
|
|
||||||
// remove app database tables
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($options['keepfiles']) and $options['keepfiles']==false ) {
|
|
||||||
// todo
|
|
||||||
// remove user files
|
|
||||||
}
|
|
||||||
|
|
||||||
if(OC_Installer::isDownloaded( $name )) {
|
|
||||||
$appdir=OC_App::getInstallPath().'/'.$name;
|
|
||||||
OC_Helper::rmdirr($appdir);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}else{
|
}else{
|
||||||
\OCP\Util::writeLog('core', 'can\'t remove app '.$name.'. It is not installed.', \OCP\Util::ERROR);
|
\OCP\Util::writeLog('core', 'can\'t remove app '.$appId.'. It is not installed.', \OCP\Util::ERROR);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -590,6 +571,8 @@ class OC_Installer{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OC_App::executeRepairSteps($app, $info['repair-steps']['install']);
|
||||||
|
|
||||||
$config = \OC::$server->getConfig();
|
$config = \OC::$server->getConfig();
|
||||||
|
|
||||||
$config->setAppValue($app, 'installed_version', OC_App::getAppVersion($app));
|
$config->setAppValue($app, 'installed_version', OC_App::getAppVersion($app));
|
||||||
|
|
|
@ -69,8 +69,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"repair-steps": {
|
"repair-steps": {
|
||||||
|
"install": [],
|
||||||
"pre-migration": [],
|
"pre-migration": [],
|
||||||
"post-migration": [],
|
"post-migration": [],
|
||||||
"live-migration": []
|
"live-migration": [],
|
||||||
|
"uninstall": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue