From d30f7c4bbb12e9c68f77d01aa2d82b1f64aab995 Mon Sep 17 00:00:00 2001 From: killing Date: Wed, 26 Sep 2012 10:49:00 +0800 Subject: [PATCH] Clean up shared repo listing code and add permission for public repos. --- base/templatetags/seahub_tags.py | 9 ++ forms.py | 5 + group/templates/group/group_info.html | 2 + group/views.py | 17 +++- media/css/seahub.css | 11 ++- .../templates/organizations/org_info.html | 15 +-- organizations/views.py | 88 +++++++++++------- share/templates/repo/share_admin.html | 30 +++--- share/views.py | 69 +++++++++----- templates/public_home.html | 15 +-- templates/snippets/repo_create_form.html | 7 ++ templates/snippets/repo_create_js.html | 3 + templates/snippets/repo_share_form.html | 14 +-- templates/snippets/shared_in_repos.html | 16 ++-- thirdpart/seaserv/service.py | 92 ++++++++----------- views.py | 26 +++++- 16 files changed, 263 insertions(+), 156 deletions(-) diff --git a/base/templatetags/seahub_tags.py b/base/templatetags/seahub_tags.py index f19bbd3811..a7599eaf8f 100644 --- a/base/templatetags/seahub_tags.py +++ b/base/templatetags/seahub_tags.py @@ -170,3 +170,12 @@ cc.spliter = '' def char2pinyin(value): """Convert Chinese character to pinyin.""" return cc.convert(value) + +@register.filter(name='translate_permission') +def translate_permission(value): + if value == 'rw': + return u'可读写' + elif value == 'r': + return u'只可浏览' + else: + return '' diff --git a/forms.py b/forms.py index 84cf21c8b6..fbad0b1a2b 100644 --- a/forms.py +++ b/forms.py @@ -111,6 +111,11 @@ class RepoCreateForm(forms.Form): raise forms.ValidationError("两次输入的密码不一致") return self.cleaned_data +class SharedRepoCreateForm(RepoCreateForm): + """ + Used for creating group repo and public repo + """ + permission = forms.ChoiceField(choices=(('rw', 'read-write'), ('r', 'read-only'))) class RepoNewFileForm(forms.Form): """ diff --git a/group/templates/group/group_info.html b/group/templates/group/group_info.html index e3bf31e1f8..83aad9fe54 100644 --- a/group/templates/group/group_info.html +++ b/group/templates/group/group_info.html @@ -68,7 +68,9 @@ {{ repo.owner|email2nickname }} + {% if repo.user_perm == 'rw' %} 下载 + {% endif %} {% if is_staff or repo.share_from_me %} 取消共享 {% endif %} diff --git a/group/views.py b/group/views.py index 3c973b3a15..205c3aa45e 100644 --- a/group/views.py +++ b/group/views.py @@ -20,7 +20,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \ get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \ get_personal_groups_by_user, get_group, get_group_members, \ get_personal_groups, create_org_repo, get_org_group_repos, \ - get_org_groups_by_user + get_org_groups_by_user, check_permission from pysearpc import SearpcError from models import GroupMessage, MessageReply, MessageAttachment, BusinessGroup @@ -39,7 +39,7 @@ from seahub.utils import render_error, render_permission_error, \ validate_group_name, string2list, check_and_get_org_by_group, \ check_and_get_org_by_repo from seahub.views import is_registered_user -from seahub.forms import RepoCreateForm +from seahub.forms import RepoCreateForm, SharedRepoCreateForm class GroupMixin(object): def get_username(self): @@ -287,6 +287,9 @@ def render_group_info(request, group_id, form): else: repos = get_group_repos(group_id_int, request.user.username) + for repo in repos: + repo.user_perm = check_permission(repo.props.id, request.user.username) + """group messages""" # Make sure page request is an int. If not, deliver first page. try: @@ -349,6 +352,7 @@ def render_group_info(request, group_id, form): 'next_page': current_page+1, 'per_page': per_page, 'page_next': page_next, + 'create_shared_repo': True, }, context_instance=RequestContext(request)); @login_required @@ -732,12 +736,13 @@ def create_group_repo(request, group_id): if not is_group_user(group_id, request.user.username): return json_error(u"创建失败:未加入该群组") - form = RepoCreateForm(request.POST) + form = SharedRepoCreateForm(request.POST) if not form.is_valid(): return json_error(form.errors) else: repo_name = form.cleaned_data['repo_name'] repo_desc = form.cleaned_data['repo_desc'] + permission = form.cleaned_data['permission'] encrypted = form.cleaned_data['encryption'] passwd = form.cleaned_data['passwd'] user = request.user.username @@ -757,7 +762,8 @@ def create_group_repo(request, group_id): status = seafserv_threaded_rpc.add_org_group_repo(repo_id, org.org_id, group_id, - user, 'rw') + user, + permission) except SearpcError, e: status = -1 @@ -783,7 +789,8 @@ def create_group_repo(request, group_id): try: status = seafserv_threaded_rpc.group_share_repo(repo_id, group_id, - user, 'rw') + user, + permission) except SearpcError, e: status = -1 diff --git a/media/css/seahub.css b/media/css/seahub.css index 00c500848f..33d4f50d6e 100644 --- a/media/css/seahub.css +++ b/media/css/seahub.css @@ -605,6 +605,11 @@ ul.with-bg li { #repo-desc { height:70px; } +#repo-create-form select[name="permission"] { + display:block; + width:262px; + margin-bottom:10px; +} /* avatar */ .avatar-op .avatar, .home-profile .avatar, @@ -875,8 +880,10 @@ ul.with-bg li { width:260px; height:80px; } -#share-permission { - width:260px; +#repo-share-form select[name="permission"] { + display:block; + width:262px; + margin:5px 0; } #recommend-msg, #recommend-groups { diff --git a/organizations/templates/organizations/org_info.html b/organizations/templates/organizations/org_info.html index 17dd170b8a..e43a657ed4 100644 --- a/organizations/templates/organizations/org_info.html +++ b/organizations/templates/organizations/org_info.html @@ -33,17 +33,18 @@ {% for repo in repos %} 目录icon - {{ repo.props.name }} - {{ repo.props.desc }} - {% if repo.latest_modify %} - {{ repo.latest_modify|translate_commit_time }} + {{ repo.props.repo_name }} + {{ repo.props.repo_desc }} + {% if repo.last_modified %} + {{ repo.last_modified|translate_commit_time }} {% else %} -- {% endif %} - {{ repo.owner|email2nickname }} + {{ repo.props.user|email2nickname }} - 下载 - 取消共享 + {% if repo.user_perm == 'rw' %} + 下载 + {% endif %} {% endfor %} diff --git a/organizations/views.py b/organizations/views.py index d4155ae48e..100708f021 100644 --- a/organizations/views.py +++ b/organizations/views.py @@ -31,7 +31,7 @@ from share.forms import RepoShareForm from registration.models import RegistrationProfile from seahub.base.accounts import User from seahub.contacts import Contact -from seahub.forms import RepoCreateForm +from seahub.forms import RepoCreateForm, SharedRepoCreateForm import seahub.settings as seahub_settings from seahub.utils import render_error, render_permission_error, gen_token, \ validate_group_name, string2list, calculate_repo_last_modify, MAX_INT @@ -76,12 +76,13 @@ def org_info(request, url_prefix): return HttpResponseRedirect(reverse(myhome)) org_members = get_org_users_by_url_prefix(url_prefix, 0, MAX_INT) - repos = list_org_inner_pub_repos(org.org_id) + repos = list_org_inner_pub_repos(org.org_id, request.user.username) return render_to_response('organizations/org_info.html', { 'org': org, 'org_users': org_members, 'repos': repos, + 'create_shared_repo': True, }, context_instance=RequestContext(request)) @login_required @@ -102,7 +103,7 @@ def org_personal(request, url_prefix): owned_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) # Org repos others shared to me - in_repos = list_org_shared_repos(user,'to_email', -1, -1) + in_repos = list_org_shared_repos(org.org_id, user,'to_email', -1, -1) # Org groups user created groups = get_org_groups_by_user(org.org_id, user) @@ -122,6 +123,8 @@ def org_personal(request, url_prefix): 'org': org, 'groups': groups, 'contacts': contacts, + 'create_shared_repo': False, + 'allow_public_share': True, }, context_instance=RequestContext(request)) @login_required @@ -136,10 +139,11 @@ def org_inner_pub_repo_create(request, url_prefix): result = {} content_type = 'application/json; charset=utf-8' - form = RepoCreateForm(request.POST) + form = SharedRepoCreateForm(request.POST) if form.is_valid(): repo_name = form.cleaned_data['repo_name'] repo_desc = form.cleaned_data['repo_desc'] + permission = form.cleaned_data['permission'] passwd = form.cleaned_data['passwd'] user = request.user.username org = get_user_current_org(request.user.username, url_prefix) @@ -152,7 +156,7 @@ def org_inner_pub_repo_create(request, url_prefix): repo_id = create_org_repo(repo_name, repo_desc, user, passwd, org.org_id) # set org inner pub - seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id, repo_id) + seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id, repo_id, permission) except: repo_id = None if not repo_id: @@ -174,8 +178,10 @@ def unset_org_inner_pub_repo(request, url_prefix, repo_id): seafserv_threaded_rpc.unset_org_inner_pub_repo(org.org_id, repo_id) except SearpcError: pass + + messages.add_message(request, messages.INFO, '操作成功') - return HttpResponseRedirect(reverse(org_info, args=[url_prefix])) + return HttpResponseRedirect(reverse(org_shareadmin, args=[url_prefix])) @login_required def org_groups(request, url_prefix): @@ -505,6 +511,7 @@ def org_repo_share(request, url_prefix): email_or_group = form.cleaned_data['email_or_group'] repo_id = form.cleaned_data['repo_id'] + permission = form.cleaned_data['permission'] from_email = request.user.username # Test whether user is the repo owner @@ -519,7 +526,21 @@ def org_repo_share(request, url_prefix): for share_to in share_to_list: # if share_to is user name, the format is: 'example@mail.com'; # if share_to is group, the format is 'group_name ' - if (share_to.split(' ')[0].find('@') == -1): + if share_to == 'all': + ''' Share to public ''' + + try: + seafserv_threaded_rpc.set_org_inner_pub_repo(org.org_id, + repo_id, permission) + except: + msg = u'共享到公共资料失败' + message.add_message(request, message.ERROR, msg) + continue + + msg = u'共享公共资料成功,请前往共享管理查看。' % \ + (reverse('org_shareadmin', args=[org.url_prefix])) + messages.add_message(request, messages.INFO, msg) + elif (share_to.split(' ')[0].find('@') == -1): ''' Share repo to group ''' # TODO: if we know group id, then we can simplly call group_share_repo if len(share_to.split(' ')) < 2: @@ -541,7 +562,7 @@ def org_repo_share(request, url_prefix): org.org_id, group.id, from_email, - 'rw') + permission) find = True msg = u'共享到 %s 成功,请前往共享管理查看。' % \ (group_name, reverse('org_shareadmin', args=[org.url_prefix])) @@ -562,7 +583,7 @@ def org_repo_share(request, url_prefix): # Record share info to db. try: seafserv_threaded_rpc.add_share(repo_id, from_email, share_to, - 'rw') + permission) msg = u'共享给 %s 成功,请前往共享管理查看。' % \ (share_to, reverse('org_shareadmin', args=[org.url_prefix])) messages.add_message(request, messages.INFO, msg) @@ -585,37 +606,42 @@ def org_shareadmin(request, url_prefix): if not org: return HttpResponseRedirect(reverse(myhome)) - # Org repos that are shared to others. - out_repos = list_org_shared_repos(username, 'from_email', -1, -1) + shared_repos = [] - # Org repos that are shared to groups. + # personal repos shared by this user + shared_repos += seafserv_threaded_rpc.list_org_share_repos(org.org_id, + username, + 'from_email', + -1, -1) + + # repos shared to groups group_repos = seafserv_threaded_rpc.get_org_group_repos_by_owner(org.org_id, - username) - for group_repo in group_repos: - repo_id = group_repo.props.repo_id - if not repo_id: - continue - repo = get_repo(repo_id) - if not repo: - continue - group_id = group_repo.props.group_id - group = ccnet_threaded_rpc.get_group(int(group_id)) + username) + for repo in group_repos: + group = ccnet_threaded_rpc.get_group(int(repo.group_id)) if not group: + repo.props.user = '' continue - repo.props.shared_email = group.props.group_name - repo.props.share_permission = group_repo.props.permission - repo.gid = group_id - - out_repos.append(repo) + repo.props.user = group.props.group_name + shared_repos += group_repos - for repo in out_repos: - if repo.props.share_permission == 'rw': + # public repos shared by this user + pub_repos = seafserv_threaded_rpc.list_org_inner_pub_repos_by_owner(org.org_id, + username) + for repo in pub_repos: + repo.props.user = '所有团体成员' + shared_repos += pub_repos + + for repo in shared_repos: + if repo.props.permission == 'rw': repo.share_permission = '可读写' - elif repo.props.share_permission == 'r': + elif repo.props.permission == 'r': repo.share_permission = '只可浏览' else: repo.share_permission = '' + shared_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id)) + # File shared links fileshares = FileShare.objects.filter(username=request.user.username) o_fileshares = [] # shared files in org repos @@ -630,7 +656,7 @@ def org_shareadmin(request, url_prefix): return render_to_response('repo/share_admin.html', { "org": org, - "out_repos": out_repos, + "shared_repos": shared_repos, "fileshares": o_fileshares, "protocol": request.is_secure() and 'https' or 'http', "domain": RequestSite(request).domain, diff --git a/share/templates/repo/share_admin.html b/share/templates/repo/share_admin.html index 936b053f85..c39f47d4d3 100644 --- a/share/templates/repo/share_admin.html +++ b/share/templates/repo/share_admin.html @@ -5,28 +5,36 @@ {% block right_panel %}

我共享的同步目录

-{% if out_repos %} +{% if shared_repos %} - - + + - {% for repo in out_repos %} + {% for repo in shared_repos %} - - + + - + diff --git a/share/views.py b/share/views.py index 984481702f..0f06a3b56d 100644 --- a/share/views.py +++ b/share/views.py @@ -23,6 +23,11 @@ from seahub.share.models import FileShare from seahub.views import validate_owner, is_registered_user from seahub.utils import render_permission_error, string2list +try: + from seahub.settings import CLOUD_MODE +except ImportError: + CLOUD_MODE = False + @login_required def share_repo(request): """ @@ -53,7 +58,23 @@ def share_repo(request): to_email_list = string2list(email_or_group) for to_email in to_email_list: - if to_email.find('@') == -1: + if to_email == 'all': + ''' Share to public ''' + + # ignore 'all' if we're running in cloud mode + if not CLOUD_MODE: + try: + seafserv_threaded_rpc.set_inner_pub_repo(repo_id, permission) + except: + msg = u'共享到公共资料失败' + message.add_message(request, message.ERROR, msg) + continue + + msg = u'共享公共资料成功,请前往共享管理查看。' % \ + (reverse('share_admin')) + messages.add_message(request, messages.INFO, msg) + + elif to_email.find('@') == -1: ''' Share repo to group ''' # TODO: if we know group id, then we can simplly call group_share_repo group_name = to_email @@ -114,36 +135,39 @@ def share_admin(request): """ username = request.user.username - # personal repos that are share to user - out_repos = list_personal_shared_repos(username, 'from_email', -1, -1) + shared_repos = [] - # repos that are share to groups + # personal repos shared by this user + shared_repos += seafserv_threaded_rpc.list_share_repos(username, 'from_email', + -1, -1) + + # repos shared to groups group_repos = seafserv_threaded_rpc.get_group_repos_by_owner(username) - for group_repo in group_repos: - repo_id = group_repo.props.repo_id - if not repo_id: - continue - repo = get_repo(repo_id) - if not repo: - continue - group_id = group_repo.props.group_id - group = ccnet_threaded_rpc.get_group(int(group_id)) + for repo in group_repos: + group = ccnet_threaded_rpc.get_group(int(repo.group_id)) if not group: + repo.props.user = '' continue - repo.props.shared_email = group.props.group_name - repo.props.share_permission = group_repo.props.permission - repo.gid = group_id - - out_repos.append(repo) + repo.props.user = group.props.group_name + shared_repos += group_repos - for repo in out_repos: - if repo.props.share_permission == 'rw': + if not CLOUD_MODE: + # public repos shared by this user + pub_repos = seafserv_threaded_rpc.list_inner_pub_repos_by_owner(username) + for repo in pub_repos: + repo.props.user = '所有人' + shared_repos += pub_repos + + for repo in shared_repos: + if repo.props.permission == 'rw': repo.share_permission = '可读写' - elif repo.props.share_permission == 'r': + elif repo.props.permission == 'r': repo.share_permission = '只可浏览' else: repo.share_permission = '' + shared_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id)) + # Repo anonymous share links # out_links = AnonymousShare.objects.filter(repo_owner=request.user.username) # for link in out_links: @@ -162,7 +186,8 @@ def share_admin(request): p_fileshares.append(fs) return render_to_response('repo/share_admin.html', { - "out_repos": out_repos, + "org": None, + "shared_repos": shared_repos, # "out_links": out_links, "fileshares": p_fileshares, "protocol": request.is_secure() and 'https' or 'http', diff --git a/templates/public_home.html b/templates/public_home.html index b74c14bbc4..297369dd96 100644 --- a/templates/public_home.html +++ b/templates/public_home.html @@ -33,17 +33,18 @@ {% for repo in public_repos %} - - - {% if repo.latest_modify %} - + + + {% if repo.props.last_modified %} + {% else %} {% endif %} - + {% endfor %} diff --git a/templates/snippets/repo_create_form.html b/templates/snippets/repo_create_form.html index d1efde3a17..712b508928 100644 --- a/templates/snippets/repo_create_form.html +++ b/templates/snippets/repo_create_form.html @@ -4,6 +4,13 @@

+ {% if create_shared_repo %} + + + {% endif %}

(3到15个字符)
diff --git a/templates/snippets/repo_create_js.html b/templates/snippets/repo_create_js.html index 6a36248a18..7889e33570 100644 --- a/templates/snippets/repo_create_js.html +++ b/templates/snippets/repo_create_js.html @@ -31,6 +31,9 @@ $('#repo-create-submit').click(function() { data: { 'repo_name': $('#repo-name').val(), 'repo_desc': $('#repo-desc').val(), + {% if create_shared_repo %} + 'permission': $('#repo-create-form select[name="permission"]').val(), + {% endif %} 'encryption': $('#encrypt-switch').attr('checked') ? 1 : 0, 'passwd': passwd.val(), 'passwd_again': passwd_again.val() diff --git a/templates/snippets/repo_share_form.html b/templates/snippets/repo_share_form.html index ae28f1c7b5..a1a6cd16f3 100644 --- a/templates/snippets/repo_share_form.html +++ b/templates/snippets/repo_share_form.html @@ -1,12 +1,14 @@
+ {% if allow_public_share %} +
+ {% else %}
+ {% endif %} -
- -
+

{{ tips }}

diff --git a/templates/snippets/shared_in_repos.html b/templates/snippets/shared_in_repos.html index 1432998adc..80602f580f 100644 --- a/templates/snippets/shared_in_repos.html +++ b/templates/snippets/shared_in_repos.html @@ -14,17 +14,19 @@ {% for repo in in_repos %}
- - - {% if repo.latest_modify %} - + + + {% if repo.props.last_modified %} + {% else %} {% endif %} - + {% endfor %} diff --git a/thirdpart/seaserv/service.py b/thirdpart/seaserv/service.py index 7d66d59490..e7e78e12e2 100644 --- a/thirdpart/seaserv/service.py +++ b/thirdpart/seaserv/service.py @@ -521,21 +521,22 @@ def get_org_groups_by_repo(org_id, repo_id): return groups # inner pub repo -def list_inner_pub_repos(): +def list_inner_pub_repos(username): """ List inner pub repos, which can be access by everyone. """ - inner_pub_repos = seafserv_threaded_rpc.list_inner_pub_repos() - for repo in inner_pub_repos: - repo.owner = seafserv_threaded_rpc.get_repo_owner(repo.id) + try: + shared_repos = seafserv_threaded_rpc.list_inner_pub_repos() + except: + shared_repos = [] - try: - repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime - except: - repo.latest_modify = None + for repo in shared_repos: + perm = seafserv_threaded_rpc.check_permission(repo.props.repo_id, + username) + repo.user_perm = perm - inner_pub_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) - return inner_pub_repos + shared_repos.sort(lambda x, y: cmp(y.props.last_modified, x.props.last_modified)) + return shared_repos def is_inner_pub_repo(repo_id): """ @@ -550,25 +551,23 @@ def is_inner_pub_repo(repo_id): return ret # org inner pub repo -def list_org_inner_pub_repos(org_id, start=None, limit=None): +def list_org_inner_pub_repos(org_id, username, start=None, limit=None): """ List org inner pub repos, which can be access by all org members. """ try: - repos = seafserv_threaded_rpc.list_org_inner_pub_repos(org_id) + shared_repos = seafserv_threaded_rpc.list_org_inner_pub_repos(org_id) except SearpcError: - repos = [] - - # calculate repo's lastest modify time - for repo in repos: - repo.owner = seafserv_threaded_rpc.get_org_repo_owner(repo.id) - try: - repo.latest_modify = get_commits(repo.id, 0, 1)[0].ctime - except: - repo.latest_modify = None - # sort repos by latest modify time - repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) - return repos + shared_repos = [] + + for repo in shared_repos: + perm = seafserv_threaded_rpc.check_permission(repo.props.repo_id, + username) + repo.user_perm = perm + + # sort repos by last modify time + shared_repos.sort(lambda x, y: cmp(y.props.last_modified, x.props.last_modified)) + return shared_repos # repo permissoin def check_permission(repo_id, user): @@ -606,48 +605,35 @@ def list_personal_shared_repos(user, user_type, start, limit): If `user_type` is 'to_email', list repos others sahre to user. """ try: - repos = seafserv_threaded_rpc.list_share_repos(user, user_type, - start, limit) + share_repos = seafserv_threaded_rpc.list_share_repos(user, user_type, + start, limit) except SearpcError: - repos = [] + share_repos = [] - p_repos = [] - if repos: - for r in repos: - if is_personal_repo(r.id): - try: - r.latest_modify = get_commits(r.id, 0, 1)[0].ctime - except: - r.latest_modify = None - p_repos.append(r) + for repo in share_repos: + repo.user_perm = check_permission(repo.props.repo_id, user) - p_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) - return p_repos + share_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified)) + return share_repos -def list_org_shared_repos(user, user_type, start, limit): +def list_org_shared_repos(org_id, user, user_type, start, limit): """ List org repos that user share with others. If `user_type` is 'from_email', list repos user shares to others; If `user_type` is 'to_email', list repos others sahre to user. """ try: - repos = seafserv_threaded_rpc.list_share_repos(user, user_type, - start, limit) + share_repos = seafserv_threaded_rpc.list_org_share_repos(org_id, + user, user_type, + start, limit) except SearpcError: - repos = [] + share_repos = [] - o_repos = [] - if repos: - for r in repos: - if not is_personal_repo(r.id): - try: - r.latest_modify = get_commits(r.id, 0, 1)[0].ctime - except: - r.latest_modify = None - o_repos.append(r) + for repo in share_repos: + repo.user_perm = check_permission(repo.props.repo_id, user) - o_repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify)) - return o_repos + share_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified)) + return share_repos def is_valid_filename(file_or_dir): """ diff --git a/views.py b/views.py index 88b6caf811..ce9a920252 100644 --- a/views.py +++ b/views.py @@ -55,7 +55,7 @@ from notifications.models import UserNotification from profile.models import Profile from forms import AddUserForm, FileLinkShareForm, RepoCreateForm, \ RepoNewDirForm, RepoNewFileForm, FileCommentForm, RepoRenameFileForm, \ - RepoPassowrdForm + RepoPassowrdForm, SharedRepoCreateForm from utils import render_permission_error, render_error, list_to_string, \ get_httpserver_root, get_ccnetapplet_root, gen_token, \ calculate_repo_last_modify, valid_previewed_file, \ @@ -790,6 +790,13 @@ def myhome(request): profile = Profile.objects.filter(user=request.user.username)[0] nickname = profile.nickname + try: + from settings import CLOUD_MODE + except: + CLOUD_MODE = False + + allow_public_share = True if not CLOUD_MODE else False + return render_to_response('myhome.html', { "myname": email, "nickname": nickname, @@ -803,6 +810,8 @@ def myhome(request): "grpmsg_list": grpmsg_list, "grpmsg_reply_list": grpmsg_reply_list, "orgmsg_list": orgmsg_list, + "create_shared_repo": False, + "allow_public_share": allow_public_share, }, context_instance=RequestContext(request)) @login_required @@ -824,7 +833,7 @@ def public_home(request): # form = MessageForm() users = get_emailusers(-1, -1) - public_repos = list_inner_pub_repos() + public_repos = list_inner_pub_repos(request.user.username) # """inner pub messages""" # # Make sure page request is an int. If not, deliver first page. @@ -855,6 +864,7 @@ def public_home(request): return render_to_response('public_home.html', { 'users': users, 'public_repos': public_repos, + 'create_shared_repo': True, # 'form': form, # 'innerpub_msgs': innerpub_msgs, # 'current_page': current_page, @@ -943,19 +953,22 @@ def public_repo_create(request): result = {} content_type = 'application/json; charset=utf-8' - form = RepoCreateForm(request.POST) + form = SharedRepoCreateForm(request.POST) if form.is_valid(): repo_name = form.cleaned_data['repo_name'] repo_desc = form.cleaned_data['repo_desc'] + permission = form.cleaned_data['permission'] passwd = form.cleaned_data['passwd'] user = request.user.username + print permission + try: # create a repo repo_id = seafserv_threaded_rpc.create_repo(repo_name, repo_desc, user, passwd) # set this repo as inner pub - seafserv_threaded_rpc.set_inner_pub_repo(repo_id) + seafserv_threaded_rpc.set_inner_pub_repo(repo_id, permission) except: repo_id = None if not repo_id: @@ -973,7 +986,10 @@ def unset_inner_pub_repo(request, repo_id): seafserv_threaded_rpc.unset_inner_pub_repo(repo_id) except SearpcError: pass - return HttpResponseRedirect(reverse('public_home')) + + messages.add_message(request, messages.INFO, '操作成功') + + return HttpResponseRedirect(reverse('share_admin')) @login_required def ownerhome(request, owner_name):
名字 共享给 权限描述操作描述操作
目录icon{{ repo.props.name }}{{ repo.props.shared_email }}{{ repo.props.repo_name }}{{ repo.props.user }} {{ repo.share_permission }}{{ repo.props.desc }}{{ repo.props.repo_desc }} - {% if repo.gid %} - - {% else %} - + {% if repo.props.share_type == 'group' %} + + {% endif %} + {% if repo.props.share_type == 'personal' %} + + {% endif %} + {% if repo.props.share_type == 'public' %} + {% if not org %} + + {% else %} + + {% endif %} {% endif %}
目录icon{{ repo.props.name }}{{ repo.props.desc }}{{ repo.latest_modify|translate_commit_time }}{{ repo.props.repo_name }}{{ repo.props.repo_desc }}{{ repo.props.last_modified|translate_commit_time }}--{{ repo.owner|email2nickname }}{{ repo.props.user|email2nickname }} - 下载 - 取消共享 + {% if repo.user_perm == 'rw' %} + 下载 + {% endif %}
目录icon{{ repo.props.name }}{{ repo.props.desc }}{{ repo.latest_modify|translate_commit_time }}{{ repo.props.repo_name }}{{ repo.props.repo_desc }}{{ repo.props.last_modified|translate_commit_time }}--{{ repo.props.shared_email|email2nickname }}{{ repo.props.user|email2nickname }} - 下载 - 取消共享 + {% if repo.user_perm == 'rw' %} + 下载 + {% endif %} + 取消共享