diff options
author | Georg Ehrke <developer@georgehrke.com> | 2014-05-31 17:50:39 +0200 |
---|---|---|
committer | Georg Ehrke <developer@georgehrke.com> | 2014-05-31 17:50:39 +0200 |
commit | 020255b4e545413fd724fbd397662f6c4265caa3 (patch) | |
tree | b2b552307d14c571f2e800760c892e1ea3d17c53 | |
parent | c8636ca4d9528faf42b1cd877bb73e56d26244cf (diff) | |
download | nextcloud-server-020255b4e545413fd724fbd397662f6c4265caa3.tar.gz nextcloud-server-020255b4e545413fd724fbd397662f6c4265caa3.zip |
add button for properly uninstalling apps
-rw-r--r-- | lib/private/app.php | 10 | ||||
-rw-r--r-- | lib/private/installer.php | 18 | ||||
-rw-r--r-- | settings/js/apps.js | 28 | ||||
-rw-r--r-- | settings/routes.php | 2 | ||||
-rw-r--r-- | settings/templates/apps.php | 1 |
5 files changed, 48 insertions, 11 deletions
diff --git a/lib/private/app.php b/lib/private/app.php index fe1fa6a0d1a..0e2c023a9de 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -248,11 +248,6 @@ class OC_App{ return false; } - $disable = self::disable($app); - if (!$disable) { - return false; - } - return OC_Installer::removeApp($app); } @@ -784,10 +779,12 @@ class OC_App{ $info['internal']=true; $info['internallabel']='Internal App'; $info['internalclass']=''; + $info['removable'] = false; } else { $info['internal']=false; $info['internallabel']='3rd Party'; $info['internalclass']='externalapp'; + $info['removable'] = true; } $info['update'] = OC_Installer::isUpdateAvailable($app); @@ -797,7 +794,7 @@ class OC_App{ $appList[] = $info; } } - $remoteApps = OC_App::getAppstoreApps(); + $remoteApps = self::getAppstoreApps(); if ( $remoteApps ) { // Remove duplicates foreach ( $appList as $app ) { @@ -876,6 +873,7 @@ class OC_App{ $app1[$i]['ocs_id'] = $app['id']; $app1[$i]['internal'] = $app1[$i]['active'] = 0; $app1[$i]['update'] = false; + $app1[$i]['removable'] = false; if($app['label']=='recommended') { $app1[$i]['internallabel'] = 'Recommended'; $app1[$i]['internalclass'] = 'recommendedapp'; diff --git a/lib/private/installer.php b/lib/private/installer.php index 6940a1dc78d..c82e19b7351 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -366,19 +366,25 @@ class OC_Installer{ * The function will check if the app is already downloaded in the apps repository */ public static function isDownloaded( $name ) { - - $downloaded=false; foreach(OC::$APPSROOTS as $dir) { - if(is_dir($dir['path'].'/'.$name)) $downloaded=true; + $dirToTest = $dir['path']; + $dirToTest .= '/'; + $dirToTest .= $name; + $dirToTest .= '/'; + + if (is_dir($dirToTest)) { + return true; + } } - return($downloaded); + + return false; } /** * Removes an app * @param string $name name of the application to remove * @param array $options options - * @return boolean|null + * @return boolean * * This function removes an app. $options is an associative array. The * following keys are optional:ja @@ -420,9 +426,11 @@ class OC_Installer{ $appdir=OC_App::getInstallPath().'/'.$name; OC_Helper::rmdirr($appdir); + return true; }else{ OC_Log::write('core', 'can\'t remove app '.$name.'. It is not installed.', OC_Log::ERROR); + return false; } } diff --git a/settings/js/apps.js b/settings/js/apps.js index 05db4c9a048..5045992184c 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -69,6 +69,14 @@ OC.Settings.Apps = OC.Settings.Apps || { page.find('input.update').hide(); } + if (app.removable !== false) { + page.find('input.uninstall').show(); + page.find('input.uninstall').data('appid', app.id); + page.find('input.uninstall').attr('value', t('settings', 'Uninstall App')); + } else { + page.find('input.uninstall').hide(); + } + page.find('input.enable').show(); page.find('input.enable').val((app.active) ? t('settings', 'Disable') : t('settings', 'Enable')); page.find('input.enable').data('appid', app.id); @@ -158,6 +166,19 @@ OC.Settings.Apps = OC.Settings.Apps || { } },'json'); }, + uninstallApp:function(appid, element) { + console.log('uninstall app:', appid, element); + element.val(t('settings','Uninstalling ....')); + $.post(OC.filePath('settings','ajax','uninstallapp.php'),{appid:appid},function(result) { + if(!result || result.status !== 'success') { + OC.Settings.Apps.showErrorMessage(t('settings','Error while uninstalling app'),t('settings','Error')); + element.val(t('settings','Uninstall')); + } else { + OC.Settings.Apps.removeNavigation(appid); + appitem.removeClass('active'); + } + },'json'); + }, insertApp:function(appdata) { var applist = $('#app-navigation ul li'); @@ -280,6 +301,13 @@ $(document).ready(function(){ OC.Settings.Apps.updateApp(appid, element); } }); + $('#app-content input.uninstall').click(function(){ + var element = $(this); + var appid=$(this).data('appid'); + if(appid) { + OC.Settings.Apps.uninstallApp(appid, element); + } + }); if(appid) { var item = $('#app-navigation ul li[data-id="'+appid+'"]'); diff --git a/settings/routes.php b/settings/routes.php index 0e0f293b9be..433c5d5706e 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -67,6 +67,8 @@ $this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php') ->actionInclude('settings/ajax/disableapp.php'); $this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php') ->actionInclude('settings/ajax/updateapp.php'); +$this->create('settings_ajax_uninstallapp', '/settings/ajax/uninstallapp.php') + ->actionInclude('settings/ajax/uninstallapp.php'); $this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php') ->actionInclude('settings/ajax/navigationdetect.php'); $this->create('apps_custom', '/settings/js/apps-custom.js') diff --git a/settings/templates/apps.php b/settings/templates/apps.php index b7f3b6121ad..e2bc78b07fa 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -53,6 +53,7 @@ print_unescaped($l->t('<span class="licence"></span>-licensed by <span class="author"></span>'));?></p> <input class="enable hidden" type="submit" /> <input class="update hidden" type="submit" value="<?php p($l->t('Update')); ?>" /> + <input class="uninstall hidden" type="submit" value="<?php p($l->t('Uninstall')); ?>"/> <div class="warning hidden"></div> </div> </div> |