diff --git a/seahub/templates/js/templates.html b/seahub/templates/js/templates.html index e3293114ed..d278b3af3f 100644 --- a/seahub/templates/js/templates.html +++ b/seahub/templates/js/templates.html @@ -898,7 +898,7 @@ <% if (user_perm == 'rw' && !repo_encrypted && can_generate_upload_link) { %>
  • {% trans "Upload Link" %}
  • <% } %> - <% if (!is_virtual && is_repo_owner) { %> {# dir private share #} + <% if (!is_virtual && (is_repo_owner || is_admin)) { %> {# dir private share #}
  • {% trans "Share to user" %}
  • {% trans "Share to group" %}
  • <% } %> @@ -1016,7 +1016,7 @@ <% } %> - <% if (!is_virtual && is_repo_owner) { %> + <% if (!is_virtual && (is_repo_owner || is_admin)) { %> <% if (!repo_encrypted) { %>
    <% } else { %> @@ -1039,7 +1039,9 @@ @@ -1086,16 +1088,12 @@ <%= icon_title %> <%- name %> - <% if (is_admin) { %> + <% if (app.pageOptions.is_pro && is_admin) { %> + <% } %> - <% } else { %> - - - - <% } %> <%= size_formatted %> <%= mtime_relative %> <%- owner_nickname %> @@ -1297,32 +1295,42 @@
    - <% if (is_admin) { %> - {% trans "Admin" %} - <% } else { %> - <% if (permission == 'rw') { %> - {% trans "Read-Write" %} + <% if (show_admin && is_admin) { %> + {% trans "Admin" %} <% } else { %> - {% trans "Read-Only" %} + <% if (permission == 'rw') { %> + {% trans "Read-Write" %} + <% } else { %> + {% trans "Read-Only" %} + <% } %> <% } %> - <% } %>
    diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py index 5ca7126431..32c964a3df 100644 --- a/seahub/views/ajax.py +++ b/seahub/views/ajax.py @@ -30,7 +30,7 @@ from seahub.forms import RepoRenameDirentForm from seahub.options.models import UserOptions, CryptoOptionNotSetError from seahub.notifications.models import UserNotification from seahub.notifications.views import add_notice_from_info -from seahub.share.models import UploadLinkShare +from seahub.share.models import UploadLinkShare, ExtraSharePermission from seahub.signals import upload_file_successful from seahub.views import get_unencry_rw_repos_by_user, \ get_diff, check_folder_permission @@ -50,6 +50,7 @@ from seahub.thumbnail.utils import get_thumbnail_src from seahub.utils.file_types import IMAGE, VIDEO from seahub.base.templatetags.seahub_tags import translate_seahub_time, \ email2nickname, tsstr_sec +from seahub.constants import PERMISSION_ADMIN # Get an instance of a logger logger = logging.getLogger(__name__) @@ -309,6 +310,9 @@ def list_lib_dir(request, repo_id): except Exception as e: logger.error(e) + # for shared repo + result["is_admin"] = ExtraSharePermission.objects.get_user_permission(repo_id, username) == PERMISSION_ADMIN + result["is_virtual"] = repo.is_virtual result["repo_name"] = repo.name result["user_perm"] = user_perm diff --git a/static/scripts/app/collections/dirents.js b/static/scripts/app/collections/dirents.js index 369db8b049..0b356b97b3 100644 --- a/static/scripts/app/collections/dirents.js +++ b/static/scripts/app/collections/dirents.js @@ -27,6 +27,7 @@ define([ this.has_been_shared_out = data.has_been_shared_out; this.dirent_more = data.dirent_more; this.more_start = data.more_start; + this.is_admin = data.is_admin; return data.dirent_list; // return the array }, diff --git a/static/scripts/app/models/repo.js b/static/scripts/app/models/repo.js index 51e06ef446..3922fc6715 100644 --- a/static/scripts/app/models/repo.js +++ b/static/scripts/app/models/repo.js @@ -16,8 +16,7 @@ define([ encrypted: false, owner: "-", owner_nickname: "-", - permission: "rw", - is_admin: false + permission: "rw" }, parse: function(response) { diff --git a/static/scripts/app/views/dir.js b/static/scripts/app/views/dir.js index 7425840b6e..02fe0af31c 100644 --- a/static/scripts/app/views/dir.js +++ b/static/scripts/app/views/dir.js @@ -824,6 +824,9 @@ define([ 'dirent_path': path, 'obj_name': path == '/' ? dir.repo_name : path.substr(path.lastIndexOf('/') + 1) }; + if (app.pageOptions.is_pro) { + options.is_admin = dir.is_admin; + } new ShareView(options); }, diff --git a/static/scripts/app/views/dirent-grid.js b/static/scripts/app/views/dirent-grid.js index 436b97960b..5e77dc069a 100644 --- a/static/scripts/app/views/dirent-grid.js +++ b/static/scripts/app/views/dirent-grid.js @@ -203,6 +203,10 @@ define([ 'dirent_path': dirent_path, 'obj_name': obj_name }; + if (app.pageOptions.is_pro) { + options.is_admin = dir.is_admin; + } + new ShareView(options); this.closeMenu(); return false; diff --git a/static/scripts/app/views/dirent.js b/static/scripts/app/views/dirent.js index 033f9dfde5..cca9eb6284 100644 --- a/static/scripts/app/views/dirent.js +++ b/static/scripts/app/views/dirent.js @@ -361,6 +361,10 @@ define([ 'dirent_path': dirent_path, 'obj_name': obj_name }; + if (app.pageOptions.is_pro) { + options.is_admin = dir.is_admin; + } + new ShareView(options); this._hideMenu(); diff --git a/static/scripts/app/views/folder-share-item.js b/static/scripts/app/views/folder-share-item.js index 2851fdaaad..10ce010f85 100644 --- a/static/scripts/app/views/folder-share-item.js +++ b/static/scripts/app/views/folder-share-item.js @@ -20,11 +20,17 @@ define([ this.repo_id = options.repo_id; this.path = options.path; + // show info about 'is_admin' + this.show_admin = false; + if (app.pageOptions.is_pro && this.path == '/' && this.item_data.for_user) { + this.show_admin = true; + } + this.render(); }, render: function () { - this.$el.html(this.template(this.item_data)); + this.$el.html(this.template($.extend({}, this.item_data, {'show_admin': this.show_admin}))); return this; }, diff --git a/static/scripts/app/views/myhome-shared-repos.js b/static/scripts/app/views/myhome-shared-repos.js index 45ac0551b7..00cde31e3f 100644 --- a/static/scripts/app/views/myhome-shared-repos.js +++ b/static/scripts/app/views/myhome-shared-repos.js @@ -4,7 +4,7 @@ define([ 'backbone', 'common', 'app/collections/repos', - 'app/views/shared-repo', + 'app/views/shared-repo' ], function($, _, Backbone, Common, RepoCollection, SharedRepoView) { 'use strict'; diff --git a/static/scripts/app/views/share.js b/static/scripts/app/views/share.js index b3a2ec9a21..0b8d00cd07 100644 --- a/static/scripts/app/views/share.js +++ b/static/scripts/app/views/share.js @@ -14,6 +14,8 @@ define([ initialize: function(options) { this.is_repo_owner = options.is_repo_owner; + // for shared repo + this.is_admin = options.is_admin; // true or undefined this.is_virtual = options.is_virtual; this.user_perm = options.user_perm; this.repo_id = options.repo_id; @@ -44,7 +46,7 @@ define([ if (this.user_perm == 'rw' && !this.repo_encrypted && app.pageOptions.can_generate_upload_link) { this.uploadLinkPanelInit(); } - if (!this.is_virtual && this.is_repo_owner) { + if (!this.is_virtual && (this.is_repo_owner || this.is_admin)) { this.dirUserSharePanelInit(); this.dirGroupSharePanelInit(); @@ -66,12 +68,14 @@ define([ .replace('{placeholder}', '' + Common.HTMLescape(this.obj_name) + ''), is_dir: this.is_dir, is_repo_owner: this.is_repo_owner, + is_admin: this.is_admin, is_virtual: this.is_virtual, user_perm: this.user_perm, repo_id: this.repo_id, can_generate_share_link: app.pageOptions.can_generate_share_link, can_generate_upload_link: app.pageOptions.can_generate_upload_link, - repo_encrypted: this.repo_encrypted + repo_encrypted: this.repo_encrypted, + dirent_path: this.dirent_path })); return this; @@ -576,8 +580,8 @@ define([ "user_email": item.user_info.name, "user_name": item.user_info.nickname, "permission": item.permission, - 'for_user': true, - 'is_admin': item.is_admin + 'is_admin': item.is_admin, + 'for_user': true } }); $add_item.after(new_item.el); @@ -757,15 +761,15 @@ define([ "user_email": item.user_info.name, "user_name": item.user_info.nickname, "permission": item.permission, - 'for_user': true, - 'is_admin': item.is_admin + 'is_admin': item.is_admin, + 'for_user': true } }); $add_item.after(new_item.el); }); emails_input.select2("val", ""); + $('option', $perm).removeAttr('selected'); $('[value="rw"]', $perm).attr('selected', 'selected'); - $('[value="rw"]', $perm).nextAll().removeAttr('selected'); $error.addClass('hide'); } if (data.failed.length > 0) { diff --git a/static/scripts/app/views/shared-repo.js b/static/scripts/app/views/shared-repo.js index 47097b1cfc..3eceaf0d69 100644 --- a/static/scripts/app/views/shared-repo.js +++ b/static/scripts/app/views/shared-repo.js @@ -4,7 +4,7 @@ define([ 'backbone', 'common', 'app/views/widgets/hl-item-view', - 'app/views/share', + 'app/views/share' ], function($, _, Backbone, Common, HLItemView, ShareView) { 'use strict'; @@ -16,7 +16,7 @@ define([ events: { 'click .unshare-btn': 'removeShare', - 'click .repo-share-btn': 'share', + 'click .repo-share-btn': 'share' }, initialize: function() { @@ -25,7 +25,9 @@ define([ share: function() { var options = { - 'is_repo_owner': true, + 'is_repo_owner': false, + 'is_admin': true, // only for shared repo + 'is_virtual': false, 'user_perm': 'rw', 'repo_id': this.model.get('id'), 'repo_encrypted': this.model.get('encrypted'), @@ -33,6 +35,7 @@ define([ 'dirent_path': '/', 'obj_name': this.model.get('name') }; + new ShareView(options); return false; },