Procházet zdrojové kódy

HUE-3364 [home] Limit actions for docs that are shared with the user

This disables the remove action for docs that are shared with the user and ignores the shared ones on DnD move.
Johan Ahlen před 9 roky
rodič
revize
2f87ad0

+ 8 - 2
desktop/core/src/desktop/static/desktop/js/fileBrowser/hueFileEntry.js

@@ -98,6 +98,12 @@
       });
     });
 
+    self.sharedWithMeSelected = ko.pureComputed(function () {
+      return self.selectedEntries().filter(function (entry) {
+        return entry.isSharedWithMe();
+      }).length > 0;
+    });
+
     self.selectedEntry = ko.pureComputed(function () {
       if (self.selectedEntries().length === 1) {
         return self.selectedEntries()[0];
@@ -359,7 +365,7 @@
 
   HueFileEntry.prototype.moveToTrash = function () {
     var self = this;
-    if (self.selectedEntries().length > 0) {
+    if (self.selectedEntries().length > 0 && ! self.sharedWithMeSelected()) {
       self.entriesToDelete(self.selectedEntries());
       self.removeDocuments(false);
     }
@@ -367,7 +373,7 @@
 
   HueFileEntry.prototype.showDeleteConfirmation = function () {
     var self = this;
-    if (self.selectedEntries().length > 0) {
+    if (self.selectedEntries().length > 0 && ! self.sharedWithMeSelected()) {
       self.entriesToDelete(self.selectedEntries());
       $('#deleteEntriesModal').modal('show');
     }

+ 26 - 9
desktop/core/src/desktop/templates/file_browser.mako

@@ -494,7 +494,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 }"><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()) { showDeleteConfirmation() } else { moveToTrash() } }, css: { 'disabled': selectedEntries().length === 0 || sharedWithMeSelected() }"><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 -->
@@ -550,9 +550,9 @@ 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()"><a href="javascript:void(0);" data-bind="click: function () { $parent.moveToTrash(); }"><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()"><a href="javascript:void(0);" data-bind="click: function() { $parent.showDeleteConfirmation(); }"><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>
+                <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="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> ${ _('Sharing') }</a> </li>
                 <!-- /ko -->
               </ul>
               <div class="fb-primary-col">
@@ -643,9 +643,13 @@ from desktop.views import _ko
           $element.droppable({
             drop: function (ev, ui) {
               if (! dragToSelect && boundEntry.isDirectory()) {
-                boundEntry.moveHere($.grep(allEntries(), function (entry) {
-                  return entry.selected();
-                }));
+                var entriesToMove = $.grep(allEntries(), function (entry) {
+                  return entry.selected() && ! entry.isSharedWithMe();
+                });
+                if (entriesToMove.length > 0) {
+                  boundEntry.moveHere(entriesToMove);
+                  boundEntry.load();
+                }
               }
               $element.removeClass('fb-drop-hover');
             },
@@ -653,7 +657,12 @@ from desktop.views import _ko
               if (dragToSelect && ! disableSelect) {
                 boundEntry.selected(true);
               } else if (! dragToSelect && boundEntry.isDirectory()) {
-                $element.addClass('fb-drop-hover');
+                var movableCount = allEntries().filter(function (entry) {
+                  return entry.selected() && ! entry.isSharedWithMe();
+                }).length;
+                if (movableCount > 0) {
+                  $element.addClass('fb-drop-hover');
+                }
               }
             },
             out: function (event, ui) {
@@ -715,7 +724,15 @@ from desktop.views import _ko
 
               if (! dragToSelect) {
                 var $helper = $('.fb-drag-helper').clone().show();
-                if (selectedEntries.length > 1) {
+                var sharedCount = selectedEntries.filter(function (entry) {
+                  return entry.isSharedWithMe();
+                }).length;
+                if (sharedCount === selectedEntries.length) {
+                  $helper.hide();
+                } else if (selectedEntries.length > 1 && sharedCount > 0) {
+                  $helper.find('.drag-text').text(selectedEntries.length + ' ${ _('selected') } (' + sharedCount + ' ${ _('shared ignored') })');
+                  $helper.find('i').removeClass().addClass('fa fa-fw fa-clone');
+                } else if (selectedEntries.length > 1) {
                   $helper.find('.drag-text').text(selectedEntries.length + ' ${ _('selected') }');
                   $helper.find('i').removeClass().addClass('fa fa-fw fa-clone');
                 } else {