aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2014-05-31 17:50:39 +0200
committerGeorg Ehrke <developer@georgehrke.com>2014-05-31 17:50:39 +0200
commit020255b4e545413fd724fbd397662f6c4265caa3 (patch)
treeb2b552307d14c571f2e800760c892e1ea3d17c53
parentc8636ca4d9528faf42b1cd877bb73e56d26244cf (diff)
downloadnextcloud-server-020255b4e545413fd724fbd397662f6c4265caa3.tar.gz
nextcloud-server-020255b4e545413fd724fbd397662f6c4265caa3.zip
add button for properly uninstalling apps
-rw-r--r--lib/private/app.php10
-rw-r--r--lib/private/installer.php18
-rw-r--r--settings/js/apps.js28
-rw-r--r--settings/routes.php2
-rw-r--r--settings/templates/apps.php1
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>