Browse Source

HUE-3388 [home] Hue admin should have the delete button enabled

Johan Ahlen 9 years ago
parent
commit
23c01eb

+ 20 - 27
desktop/core/src/desktop/static/desktop/js/fileBrowser/hueFileEntry.js

@@ -47,6 +47,7 @@
     self.assistHelper = options.assistHelper;
     self.app = options.app;
     self.user = options.user;
+    self.superuser = options.superuser;
 
     self.document = ko.observable();
 
@@ -196,6 +197,18 @@
     moveNext();
   };
 
+  HueFileEntry.prototype.createNewEntry = function (options) {
+    var self = this;
+    return new HueFileEntry($.extend({
+      activeEntry: self.activeEntry,
+      trashEntry: self.trashEntry,
+      assistHelper: self.assistHelper,
+      app: self.app,
+      user: self.user,
+      superuser: self.superuser
+    }, options));
+  };
+
   HueFileEntry.prototype.search = function (query) {
     var self = this;
 
@@ -208,16 +221,11 @@
       return;
     }
 
-    var resultEntry = new HueFileEntry({
-      activeEntry: self.activeEntry,
-      trashEntry: self.trashEntry,
-      assistHelper: self.assistHelper,
+    var resultEntry = self.createNewEntry({
       definition: {
         isSearchResult: true,
         name: '"' + query + '"'
       },
-      app: self.app,
-      user: self.user,
       parent: owner
     });
 
@@ -233,13 +241,8 @@
         var newEntries = [];
 
         $.each(data.documents, function (idx, definition) {
-          var entry = new HueFileEntry({
-            activeEntry: self.activeEntry,
-            trashEntry: self.trashEntry,
-            assistHelper: self.assistHelper,
+          var entry = self.createNewEntry({
             definition: definition,
-            app: self.app,
-            user: self.user,
             parent: self
           });
           if (!entry.isTrash()) {
@@ -300,13 +303,8 @@
           var newEntries = [];
 
           $.each(data.children, function (idx, definition) {
-            var entry = new HueFileEntry({
-              activeEntry: self.activeEntry,
-              trashEntry: self.trashEntry,
-              assistHelper: self.assistHelper,
+            var entry = self.createNewEntry({
               definition: definition,
-              app: self.app,
-              user: self.user,
               parent: self
             });
             if (entry.isTrash()) {
@@ -327,13 +325,8 @@
           });
           self.entries(newEntries);
           if (! self.parent && data.parent) {
-            self.parent = new HueFileEntry({
-              activeEntry: self.activeEntry,
-              trashEntry: self.trashEntry,
-              assistHelper: self.assistHelper,
+            self.parent = self.createNewEntry({
               definition: data.parent,
-              app: self.app,
-              user: self.user,
               parent: null
             });
           }
@@ -365,15 +358,15 @@
 
   HueFileEntry.prototype.moveToTrash = function () {
     var self = this;
-    if (self.selectedEntries().length > 0 && ! self.sharedWithMeSelected()) {
+    if (self.selectedEntries().length > 0 && (self.superuser || !self.sharedWithMeSelected())) {
       self.entriesToDelete(self.selectedEntries());
       self.removeDocuments(false);
     }
-  }
+  };
 
   HueFileEntry.prototype.showDeleteConfirmation = function () {
     var self = this;
-    if (self.selectedEntries().length > 0 && ! self.sharedWithMeSelected()) {
+    if (self.selectedEntries().length > 0 && (self.superuser || !self.sharedWithMeSelected())) {
       self.entriesToDelete(self.selectedEntries());
       $('#deleteEntriesModal').modal('show');
     }

+ 10 - 16
desktop/core/src/desktop/static/desktop/js/home2.vm.js

@@ -39,6 +39,7 @@
     var self = this;
 
     self.user = options.user;
+    self.superuser = options.superuser;
     self.assistHelper = AssistHelper.getInstance(options);
     self.isLeftPanelVisible = ko.observable();
     self.assistHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);
@@ -51,6 +52,7 @@
       assistHelper: self.assistHelper,
       app: 'documents',
       user: self.user,
+      superuser: self.superuser,
       definition: {
         name: '/'
       }
@@ -67,20 +69,16 @@
 
   HomeViewModel.prototype.openUuid = function (uuid) {
     var self = this;
-    self.activeEntry(undefined);
-    var entry = new HueFileEntry({
-      activeEntry: self.activeEntry,
-      trashEntry: self.trashEntry,
-      assistHelper: self.assistHelper,
-      app: 'documents',
-      user: self.user,
+    var entry = self.activeEntry().createNewEntry({
       definition: {
         uuid: location.getParameter('uuid'),
         name: 'unknown',
         type: 'directory',
         path: '/unknown'
-      }
+      },
+      parent: null
     });
+    self.activeEntry(undefined);
 
     var lastParent = entry;
 
@@ -100,19 +98,15 @@
     var self = this;
     var parts = path.split('/');
     parts.shift(); // Remove root
-    self.activeEntry(undefined);
-    var lastChild = new HueFileEntry({
-      activeEntry: self.activeEntry,
-      trashEntry: self.trashEntry,
-      assistHelper: self.assistHelper,
-      app: 'documents',
-      user: self.user,
+    var lastChild = self.activeEntry().createNewEntry({
       definition: {
         name: '',
         type: 'directory',
         path: '/'
-      }
+      },
+      parent: null
     });
+    self.activeEntry(undefined);
 
     var loadDeep = function () {
       if (parts.length > 0) {

+ 3 - 3
desktop/core/src/desktop/templates/file_browser.mako

@@ -497,7 +497,7 @@ from desktop.views import _ko
             </span>
           <!-- /ko -->
           <a class="inactive-action fb-action" href="javascript:void(0);" data-bind="click: function () { showNewDirectoryModal() }, css: { 'disabled': isTrash() || isTrashed() }"><span class="fa-stack fa-fw" style="width: 1.28571429em;"><i class="fa fa-folder-o fa-stack-1x" ></i><i class="fa fa-plus-circle fa-stack-1x" style="font-size: 14px; margin-left: 7px; margin-top: 3px;"></i></span></a>
-          <a class="inactive-action fb-action" href="javascript:void(0);" data-bind="click: function () { if (isTrash() || isTrashed()) { showDeleteConfirmation() } else { moveToTrash() } }, css: { 'disabled': selectedEntries().length === 0 || sharedWithMeSelected() }"><i class="fa fa-fw fa-times"></i></a>
+          <a class="inactive-action fb-action" href="javascript:void(0);" data-bind="click: function () { if (isTrash() || isTrashed() || (sharedWithMeSelected() && superuser)) { showDeleteConfirmation() } else { moveToTrash() } }, css: { 'disabled': selectedEntries().length === 0 || (sharedWithMeSelected() && ! superuser) }"><i class="fa fa-fw fa-times"></i></a>
           <!-- ko if: app === 'documents' -->
           <a class="inactive-action fb-action" href="javascript:void(0);" data-bind="click: function() { showSharingModal(null) }, css: { 'disabled': selectedEntries().length !== 1 || (selectedEntries().length === 1 && selectedEntries()[0].isTrashed) }"><i class="fa fa-fw fa-users"></i></a>
           <!-- /ko -->
@@ -553,8 +553,8 @@ from desktop.views import _ko
                 <!-- ko ifnot: isTrashed -->
                 <li data-bind="css: { 'disabled': $parent.selectedEntries().length !== 1 }"><a href="javascript:void(0);" data-bind="click: open, css: { 'disabled': $parent.selectedEntries().length !== 1 }"><i class="fa fa-file-o"></i> ${ _('Open') }</a></li>
                 <li><a href="javascript:void(0);" data-bind="click: contextMenuDownload"><i class="fa fa-download"></i> ${ _('Download') } <span data-bind="visible: $parent.selectedEntries().length > 1, text: '(' + $parent.selectedEntries().length + ')'"></span></a></li>
-                <li data-bind="visible: ! $altDown(), css: { 'disabled' : $parent.sharedWithMeSelected() }"><a href="javascript:void(0);" data-bind="click: function () { $parent.moveToTrash(); }, css: { 'disabled' : $parent.sharedWithMeSelected() }"><i class="fa fa-fw fa-trash-o"></i> ${ _('Remove') } <span data-bind="visible: $parent.selectedEntries().length > 1, text: '(' + $parent.selectedEntries().length + ')'"></span></a></li>
-                <li data-bind="visible: $altDown(), css: { 'disabled' : $parent.sharedWithMeSelected() }"><a href="javascript:void(0);" data-bind="click: function() { $parent.showDeleteConfirmation(); }, css: { 'disabled' : $parent.sharedWithMeSelected() }"><i class="fa fa-fw fa-times"></i> ${ _('Delete') } <span data-bind="visible: $parent.selectedEntries().length > 1, text: '(' + $parent.selectedEntries().length + ')'"></span></a></li>
+                <li data-bind="visible: ! $altDown() && !($parent.sharedWithMeSelected() && $parent.superuser), css: { 'disabled' : $parent.sharedWithMeSelected()  && ! $parent.superuser }"><a href="javascript:void(0);" data-bind="click: function () { $parent.moveToTrash(); }, css: { 'disabled' : $parent.sharedWithMeSelected() && ! $parent.superuser }"><i class="fa fa-fw fa-trash-o"></i> ${ _('Remove') } <span data-bind="visible: $parent.selectedEntries().length > 1, text: '(' + $parent.selectedEntries().length + ')'"></span></a></li>
+                <li data-bind="visible: $altDown() || ($parent.sharedWithMeSelected() && $parent.superuser), css: { 'disabled' : $parent.sharedWithMeSelected() && ! $parent.superuser }"><a href="javascript:void(0);" data-bind="click: function() { $parent.showDeleteConfirmation(); }, css: { 'disabled' : $parent.sharedWithMeSelected() && ! $parent.superuser}"><i class="fa fa-fw fa-times"></i> ${ _('Delete') } <span data-bind="visible: $parent.selectedEntries().length > 1, text: '(' + $parent.selectedEntries().length + ')'"></span></a></li>
                 <li data-bind="css: { 'disabled': $parent.selectedEntries().length !== 1 }"><a href="javascript:void(0);" data-bind="click: function() { $parent.showSharingModal(); }, css: { 'disabled': $parent.selectedEntries().length !== 1 }"><i class="fa fa-fw fa-users"></i> ${ _('Share') }</a> </li>
                 <!-- /ko -->
               </ul>

+ 1 - 0
desktop/core/src/desktop/templates/home2.mako

@@ -229,6 +229,7 @@ ${ fileBrowser.fileBrowser() }
     $(document).ready(function () {
       var options = {
         user: '${ user.username }',
+        superuser: '${ user.is_superuser }' === 'True',
         i18n: {
           errorFetchingTableDetails: '${_('An error occurred fetching the table details. Please try again.')}',
           errorFetchingTableFields: '${_('An error occurred fetching the table fields. Please try again.')}',