diff --git a/group/templates/group/group_info.html b/group/templates/group/group_info.html index 4731192490..dc383b028a 100644 --- a/group/templates/group/group_info.html +++ b/group/templates/group/group_info.html @@ -31,7 +31,7 @@
{% grp_avatar group.props.id 48 %}

{{ group.creator_name|email2nickname }} {% trans "created at" %}
{{ group.timestamp|tsstr_day }}

{% if not is_staff %} -

{% trans "Quit" %}

+

{% trans "Quit" %}

{% endif %} diff --git a/group/templates/group/group_manage.html b/group/templates/group/group_manage.html index dc65e28ec4..58f0aaa1a6 100644 --- a/group/templates/group/group_manage.html +++ b/group/templates/group/group_manage.html @@ -34,7 +34,7 @@

{% trans "Operations"%}

{% endblock %} diff --git a/group/urls.py b/group/urls.py index 911a542037..f4889a4f9f 100644 --- a/group/urls.py +++ b/group/urls.py @@ -5,7 +5,7 @@ from views import group_info, group_member_operations, group_add_admin, \ create_group_repo, group_joinrequest, attention, group_message_remove, \ group_remove_admin, group_discuss, group_wiki, group_wiki_create, \ group_wiki_page_new, group_wiki_page_edit, group_wiki_pages, \ - group_wiki_page_delete + group_wiki_page_delete, group_remove, group_dismiss, group_quit urlpatterns = patterns('', url(r'^(?P\d+)/$', group_info, name='group_info'), @@ -20,6 +20,9 @@ urlpatterns = patterns('', url(r'^reply/(?P[\d]+)/$', msg_reply, name='msg_reply'), url(r'^reply/new/$', msg_reply_new, name='msg_reply_new'), url(r'^(?P\d+)/manage/$', group_manage, name='group_manage'), + url(r'^(?P\d+)/remove/$', group_remove, name='group_remove'), + url(r'^(?P\d+)/dismiss/$', group_dismiss, name='group_dismiss'), + url(r'^(?P\d+)/quit/$', group_quit, name='group_quit'), url(r'^(?P[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'), (r'^(?P[\d]+)/member/(?P[^/]+)/$', group_member_operations), url(r'^(?P\d+)/msgdel/(?P\d+)/$', group_message_remove, name='group_message_remove'), diff --git a/group/views.py b/group/views.py index 965eff7b16..d52e6d6fc6 100644 --- a/group/views.py +++ b/group/views.py @@ -37,7 +37,7 @@ from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \ GroupAddForm, GroupJoinMsgForm, WikiCreateForm from signals import grpmsg_added, grpmsg_reply_added from settings import GROUP_MEMBERS_DEFAULT_DISPLAY -from base.decorators import ctx_switch_required +from base.decorators import sys_staff_required from base.mixins import LoginRequiredMixin from seahub.contacts.models import Contact from seahub.contacts.signals import mail_sended @@ -123,15 +123,12 @@ def group_list(request): }, context_instance=RequestContext(request)) @login_required +@sys_staff_required def group_remove(request, group_id): """ Remove group from groupadmin page. Only system admin can perform this operation. """ - # Check whether user is system admin. - if not request.user.is_staff: - return render_permission_error(request, _(u'Only administrators can delete the group.')) - # Request header may missing HTTP_REFERER, we need to handle that case. next = request.META.get('HTTP_REFERER', None) if not next: @@ -201,71 +198,6 @@ def group_quit(request, group_id): return HttpResponseRedirect(reverse('group_list', args=[])) -def render_group_info(request, group_id, form): - group_id_int = int(group_id) # Checkeb by URL Conf - - # remove user notifications - UserNotification.objects.filter(to_user=request.user.username, - msg_type='group_msg', - detail=str(group_id)).delete() - - group = get_group(group_id_int) - if not group: - return HttpResponseRedirect(reverse('group_list', args=[])) - - # Get all group members. - members = get_group_members(group_id_int) - - # Check whether user belongs to the group. - joined = is_group_user(group_id_int, request.user.username) - if not joined and not request.user.is_staff: - # Return group public info page. - return render_to_response('group/group_pubinfo.html', { - 'members': members, - 'group': group, - }, context_instance=RequestContext(request)) - - is_staff = True if check_group_staff(group.id, request.user) else False - - - org = request.user.org - if org: - repos = get_org_group_repos(org['org_id'], group_id_int, - request.user.username) - else: - repos = get_group_repos(group_id_int, request.user.username) - - recent_commits = [] - cmt_repo_dict = {} - for repo in repos: - repo.user_perm = check_permission(repo.props.id, request.user.username) - cmmts = get_commits(repo.props.id, 0, 10) - for c in cmmts: - cmt_repo_dict[c.id] = repo - recent_commits += cmmts - - recent_commits.sort(lambda x, y : cmp(y.props.ctime, x.props.ctime)) - recent_commits = recent_commits[:15] - for cmt in recent_commits: - cmt.repo = cmt_repo_dict[cmt.id] - cmt.repo.password_set = is_passwd_set(cmt.props.repo_id, - request.user.username) - cmt.tp = cmt.props.desc.split(' ')[0] - - - return render_to_response("group/group_info.html", { - "members": members, - "repos": repos, - "recent_commits": recent_commits, - "group_id": group_id, - "group" : group, - "is_staff": is_staff, - "is_join": joined, - "form": form, - 'create_shared_repo': True, - 'group_members_default_display': GROUP_MEMBERS_DEFAULT_DISPLAY, - }, context_instance=RequestContext(request)); - @login_required def group_message_remove(request, group_id, msg_id): """ @@ -395,40 +327,47 @@ def msg_reply_new(request): }, context_instance=RequestContext(request)) @login_required -@ctx_switch_required -def group_info(request, group_id): - if request.method == 'POST': - form = MessageForm(request.POST) - - if form.is_valid(): - msg = form.cleaned_data['message'] - message = GroupMessage() - message.group_id = group_id - message.from_email = request.user.username - message.message = msg - message.save() - - # send signal - grpmsg_added.send(sender=GroupMessage, group_id=group_id, - from_email=request.user.username) - # Always return an HttpResponseRedirect after successfully dealing - # with POST data. - return HttpResponseRedirect(reverse('group_info', args=[group_id])) - else: - form = MessageForm() +@group_check +def group_info(request, group): + # Get all group members. + members = get_group_members(group.id) + is_staff = True if check_group_staff(group.id, request.user) else False - op = request.GET.get('op', '') - if op == 'delete': - return group_remove(request, group_id) - elif op == 'dismiss': - return group_dismiss(request, group_id) - elif op == 'quit': - return group_quit(request, group_id) + org = request.user.org + if org: + repos = get_org_group_repos(org['org_id'], group.id, + request.user.username) + else: + repos = get_group_repos(group.id, request.user.username) - return render_group_info(request, group_id, form) + recent_commits = [] + cmt_repo_dict = {} + for repo in repos: + repo.user_perm = check_permission(repo.props.id, request.user.username) + cmmts = get_commits(repo.props.id, 0, 10) + for c in cmmts: + cmt_repo_dict[c.id] = repo + recent_commits += cmmts + + recent_commits.sort(lambda x, y : cmp(y.props.ctime, x.props.ctime)) + recent_commits = recent_commits[:15] + for cmt in recent_commits: + cmt.repo = cmt_repo_dict[cmt.id] + cmt.repo.password_set = is_passwd_set(cmt.props.repo_id, + request.user.username) + cmt.tp = cmt.props.desc.split(' ')[0] + + return render_to_response("group/group_info.html", { + "members": members, + "repos": repos, + "recent_commits": recent_commits, + "group" : group, + "is_staff": is_staff, + 'create_shared_repo': True, + 'group_members_default_display': GROUP_MEMBERS_DEFAULT_DISPLAY, + }, context_instance=RequestContext(request)); @login_required -@ctx_switch_required @group_staff_required @group_check def group_manage(request, group): diff --git a/templates/sys_group_admin.html b/templates/sys_group_admin.html index 1b54e367ba..98092f5465 100644 --- a/templates/sys_group_admin.html +++ b/templates/sys_group_admin.html @@ -1,5 +1,6 @@ {% extends "admin_base.html" %} {% load seahub_tags i18n %} +{% load url from future %} {% block nav_groupadmin_class %}class="cur"{% endblock %} @@ -18,7 +19,7 @@ {{ group.props.group_name }} {{ group.props.creator_name }} {{ group.props.timestamp|tsstr_sec }} - {% trans "Delete" %} + {% trans "Delete" %} {% endfor %}