فهرست منبع

HUE-2913 [fb] Make showing and hiding upload/download button configurable

Yixiao Lin 10 سال پیش
والد
کامیت
a290e90

+ 13 - 1
apps/filebrowser/src/filebrowser/conf.py

@@ -17,7 +17,7 @@
 
 from django.utils.translation import ugettext_lazy as _
 
-from desktop.lib.conf import Config
+from desktop.lib.conf import Config, coerce_bool
 
 
 MAX_SNAPPY_DECOMPRESSION_SIZE = Config(
@@ -32,3 +32,15 @@ ARCHIVE_UPLOAD_TEMPDIR = Config(
   help=_("Location on local filesystem where the uploaded archives are temporary stored."),
   default=None,
   type=str)
+
+SHOW_DOWNLOAD_BUTTON = Config(
+  key="show_download_button",
+  help=_("whether to show the download button in hdfs file browser."),
+  type=coerce_bool,
+  default=True)
+
+SHOW_UPLOAD_BUTTON = Config(
+  key="show_upload_button",
+  help=_("whether to show the upload button in hdfs file browser."),
+  type=coerce_bool,
+  default=True)

+ 1 - 1
apps/filebrowser/src/filebrowser/templates/display.mako

@@ -35,7 +35,7 @@ ${ fb_components.menubar() }
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      ${ fb_components.file_sidebar(path_enc, dirname_enc, stats, view) }
+      ${ fb_components.file_sidebar(path_enc, dirname_enc, stats, show_download_button, view) }
     </div>
     <div class="span10">
       <div class="card card-small" style="margin-bottom: 5px">

+ 1 - 1
apps/filebrowser/src/filebrowser/templates/edit.mako

@@ -36,7 +36,7 @@ ${ fb_components.menubar() }
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      ${ fb_components.file_sidebar(path_enc, dirname_enc, stats) }
+      ${ fb_components.file_sidebar(path_enc, dirname_enc, stats, show_download_button) }
     </div>
     <div class="span10">
       <div class="card card-small">

+ 3 - 1
apps/filebrowser/src/filebrowser/templates/fb_components.mako

@@ -82,7 +82,7 @@ from django.utils.translation import ugettext as _
   </div>
 </%def>
 
-<%def name="file_sidebar(path_enc, dirname_enc, stats, view=None)">
+<%def name="file_sidebar(path_enc, dirname_enc, stats, show_download_button, view=None)">
   <div class="sidebar-nav" style="padding-top: 0">
     <ul class="nav nav-list">
       <li class="nav-header">${_('Actions')}</li>
@@ -117,7 +117,9 @@ from django.utils.translation import ugettext as _
         <li><a href="${url('filebrowser.views.view', path=path_enc)}"><i class="fa fa-eye"></i> ${_('View file')}</a></li>
       % endif
 
+      % if show_download_button:
        <li><a href="${url('filebrowser.views.download', path=path_enc)}"><i class="fa fa-download"></i> ${_('Download')}</a></li>
+      % endif
        <li><a href="${url('filebrowser.views.view', path=dirname_enc)}"><i class="fa fa-file-text"></i> ${_('View file location')}</a></li>
        <li><a id="refreshBtn" href="#"><i class="fa fa-refresh"></i> ${_('Refresh')}</a></li>
 

+ 6 - 1
apps/filebrowser/src/filebrowser/templates/listdir.mako

@@ -59,11 +59,13 @@ ${ fb_components.menubar() }
               isCurrentDirSelected().length == 0"><i class="fa fa-random"></i> ${_('Move')}</a></li>
               <li><a href="#" title="${_('Copy')}" data-bind="click: copy, enable: selectedFiles().length > 0 &&
               isCurrentDirSelected().length == 0"><i class="fa fa-files-o"></i> ${_('Copy')}</a></li>
+              % if show_download_button:
               <li>
                 <a href="#" title="${_('Download')}" data-bind="visible: !inTrash() && selectedFiles().length == 1 && selectedFile().type == 'file', click: downloadFile">
                   <i class="fa fa-arrow-circle-o-down"></i> ${_('Download')}
                 </a>
               </li>
+              % endif
               <li class="divider"></li>
               % if is_fs_superuser:
               <li data-bind="css: {'disabled': isCurrentDirSentryManaged() || selectedSentryFiles().length > 0 }">
@@ -79,6 +81,7 @@ ${ fb_components.menubar() }
               </li>
             </ul>
           </div>
+          
           <button class="btn fileToolbarBtn" title="${_('Restore from trash')}" data-bind="visible: inRestorableTrash(), click: restoreTrashSelected, enable: selectedFiles().length > 0 && isCurrentDirSelected().length == 0"><i class="fa fa-cloud-upload"></i> ${_('Restore')}</button>
           <!-- ko ifnot: inTrash -->
           <div id="delete-dropdown" class="btn-group" style="vertical-align: middle">
@@ -103,6 +106,7 @@ ${ fb_components.menubar() }
       <%def name="creation()">
         <button class="btn fileToolbarBtn" title="${_('Empty trash')}" data-bind="visible: inTrash(), click: purgeTrash"><i class="fa fa-fire"></i> ${_('Empty trash')}</button>
         <div class="btn-toolbar" style="display: inline; vertical-align: middle">
+          % if show_upload_button:
           <div id="upload-dropdown" class="btn-group" style="vertical-align: middle">
             <a href="#" class="btn upload-link dropdown-toggle" title="${_('Upload')}" data-toggle="dropdown" data-bind="visible: !inTrash()">
               <i class="fa fa-arrow-circle-o-up"></i> ${_('Upload')}
@@ -113,6 +117,7 @@ ${ fb_components.menubar() }
               <li><a href="#" class="upload-link" title="${_('Archive')}" data-bind="click: uploadArchive"><i class="fa fa-gift"></i> ${_('Zip/Tgz/Bz2 file')}</a></li>
             </ul>
           </div>
+          % endif
           <div class="btn-group" style="vertical-align: middle">
             <a href="#" data-toggle="dropdown" class="btn dropdown-toggle" data-bind="visible: !inTrash()">
               <i class="fa fa-plus-circle"></i> ${_('New')}
@@ -145,7 +150,7 @@ ${ fb_components.menubar() }
       %endif
 
       <div style="padding-left: 6px">
-        ${dir.list_table_browser(files, path_enc, current_request_path, cwd_set)}
+        ${dir.list_table_browser(files, path_enc, current_request_path, show_download_button, cwd_set)}
       </div>
     </div>
   </div>

+ 5 - 3
apps/filebrowser/src/filebrowser/templates/listdir_components.mako

@@ -28,11 +28,11 @@ from django.utils.translation import ugettext as _
   ${_table(files, path, current_request_path, 'chooser')}
 </%def>
 
-<%def name="list_table_browser(files, path, current_request_path, cwd_set=True)">
-  ${_table(files, path, current_request_path, 'view')}
+<%def name="list_table_browser(files, path, current_request_path, show_download_button, cwd_set=True)">
+  ${_table(files, path, current_request_path, 'view', show_download_button)}
 </%def>
 
-<%def name="_table(files, path, current_request_path, view)">
+<%def name="_table(files, path, current_request_path, view, show_download_button)">
 
   <link href="${ static('filebrowser/css/listdir_components.css') }" rel="stylesheet" type="text/css">
   <table class="table table-condensed datatables tablescroller-disable">
@@ -413,7 +413,9 @@ from django.utils.translation import ugettext as _
     isCurrentDirSelected().length == 0"><i class="fa fa-random"></i> ${_('Move')}</a></li>
     <li><a href="#" title="${_('Copy')}" data-bind="click: $root.copy, enable: $root.selectedFiles().length > 0 &&
     isCurrentDirSelected().length == 0"><i class="fa fa-files-o"></i> ${_('Copy')}</a></li>
+    % if show_download_button:
     <li><a href="#" title="${_('Download')}" data-bind="visible: !$root.inTrash() && $root.selectedFiles().length == 1 && selectedFile().type == 'file', click: $root.downloadFile"><i class="fa fa-arrow-circle-o-down"></i> ${_('Download')}</a></li>
+    % endif
     <li class="divider"></li>
     % if is_fs_superuser:
     <li data-bind="css: {'disabled': $root.isCurrentDirSentryManaged || selectedSentryFiles().length > 0 }">

+ 11 - 4
apps/filebrowser/src/filebrowser/views.py

@@ -58,6 +58,8 @@ from hadoop.fs.exceptions import WebHdfsException
 from hadoop.fs.fsutils import do_newfile_save, do_overwrite_save
 
 from filebrowser.conf import MAX_SNAPPY_DECOMPRESSION_SIZE
+from filebrowser.conf import SHOW_DOWNLOAD_BUTTON
+from filebrowser.conf import SHOW_UPLOAD_BUTTON
 from filebrowser.lib.archives import archive_factory
 from filebrowser.lib.rwx import filetype, rwx
 from filebrowser.lib import xxd
@@ -235,10 +237,10 @@ def edit(request, path, form=None):
         path=path,
         filename=os.path.basename(path),
         dirname=os.path.dirname(path),
-        breadcrumbs = parse_breadcrumbs(path))
+        breadcrumbs = parse_breadcrumbs(path),
+        show_download_button = SHOW_DOWNLOAD_BUTTON.get())
     return render("edit.mako", request, data)
 
-
 def save_file(request):
     """
     The POST endpoint to save a file in the file editor.
@@ -317,7 +319,9 @@ def listdir(request, path, chooser):
         'groups': request.user.username == request.fs.superuser and [str(x) for x in Group.objects.values_list('name', flat=True)] or [],
         'users': request.user.username == request.fs.superuser and [str(x) for x in User.objects.values_list('username', flat=True)] or [],
         'superuser': request.fs.superuser,
-        'show_upload': (request.REQUEST.get('show_upload') == 'false' and (False,) or (True,))[0]
+        'show_upload': (request.REQUEST.get('show_upload') == 'false' and (False,) or (True,))[0],
+        'show_download_button': SHOW_DOWNLOAD_BUTTON.get(),
+        'show_upload_button': SHOW_UPLOAD_BUTTON.get()
     }
 
     stats = request.fs.listdir_stats(path)
@@ -447,7 +451,9 @@ def listdir_paged(request, path):
         'superuser': request.fs.superuser,
         'supergroup': request.fs.supergroup,
         'is_sentry_managed': request.fs.is_sentry_managed(path),
-        'apps': appmanager.get_apps_dict(request.user).keys()
+        'apps': appmanager.get_apps_dict(request.user).keys(),
+        'show_download_button': SHOW_DOWNLOAD_BUTTON.get(),
+        'show_upload_button': SHOW_UPLOAD_BUTTON.get()
     }
     return render('listdir.mako', request, data)
 
@@ -618,6 +624,7 @@ def display(request, path):
         data['view']['masked_binary_data'] = is_binary
 
     data['breadcrumbs'] = parse_breadcrumbs(path)
+    data['show_download_button'] = SHOW_DOWNLOAD_BUTTON.get()
 
     return render("display.mako", request, data)
 

+ 6 - 0
desktop/conf.dist/hue.ini

@@ -816,6 +816,12 @@
   # Location on local filesystem where the uploaded archives are temporary stored.
   ## archive_upload_tempdir=/tmp
 
+  # Show Download Button for HDFS file browser.
+  ## show_download_button=false
+
+  # Show Upload Button for HDFS file browser.
+  ## show_upload_button=false
+
 ###########################################################################
 # Settings to configure liboozie
 ###########################################################################

+ 7 - 0
desktop/conf/pseudo-distributed.ini.tmpl

@@ -825,6 +825,13 @@
   # Location on local filesystem where the uploaded archives are temporary stored.
   ## archive_upload_tempdir=/tmp
 
+  # Show Download Button for HDFS file browser.
+  ## show_download_button=false
+
+  # Show Upload Button for HDFS file browser.
+  ## show_upload_button=false
+
+
 ###########################################################################
 # Settings to configure liboozie
 ###########################################################################