mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-25 06:33:48 +00:00
Clean group info
This commit is contained in:
@@ -31,7 +31,7 @@
|
|||||||
<div class="fleft">{% grp_avatar group.props.id 48 %}</div>
|
<div class="fleft">{% grp_avatar group.props.id 48 %}</div>
|
||||||
<p class="txt fright">{{ group.creator_name|email2nickname }} {% trans "created at" %}<br />{{ group.timestamp|tsstr_day }}</p>
|
<p class="txt fright">{{ group.creator_name|email2nickname }} {% trans "created at" %}<br />{{ group.timestamp|tsstr_day }}</p>
|
||||||
{% if not is_staff %}
|
{% if not is_staff %}
|
||||||
<p class="txt fright"><a id="quit-group" href="#" data-url="{{ SITE_ROOT }}group/{{ group.id }}/?op=quit">{% trans "Quit" %}</a></p>
|
<p class="txt fright"><a id="quit-group" href="#" data-url="{% url 'group_quit' group.id %}">{% trans "Quit" %}</a></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -34,7 +34,7 @@
|
|||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<h3 class="info-item-top">{% trans "Operations"%}</h3>
|
<h3 class="info-item-top">{% trans "Operations"%}</h3>
|
||||||
<ul class="info-item-bottom op-list">
|
<ul class="info-item-bottom op-list">
|
||||||
<li><a id="group-dismiss" href="#" data-url="{{ SITE_ROOT }}group/{{ group.id }}/?op=dismiss">{% trans "Dismiss"%}</a></li>
|
<li><a id="group-dismiss" href="#" data-url="{% url 'group_dismiss' group.id %}">{% trans "Dismiss"%}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -5,7 +5,7 @@ from views import group_info, group_member_operations, group_add_admin, \
|
|||||||
create_group_repo, group_joinrequest, attention, group_message_remove, \
|
create_group_repo, group_joinrequest, attention, group_message_remove, \
|
||||||
group_remove_admin, group_discuss, group_wiki, group_wiki_create, \
|
group_remove_admin, group_discuss, group_wiki, group_wiki_create, \
|
||||||
group_wiki_page_new, group_wiki_page_edit, group_wiki_pages, \
|
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('',
|
urlpatterns = patterns('',
|
||||||
url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'),
|
url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'),
|
||||||
@@ -20,6 +20,9 @@ urlpatterns = patterns('',
|
|||||||
url(r'^reply/(?P<msg_id>[\d]+)/$', msg_reply, name='msg_reply'),
|
url(r'^reply/(?P<msg_id>[\d]+)/$', msg_reply, name='msg_reply'),
|
||||||
url(r'^reply/new/$', msg_reply_new, name='msg_reply_new'),
|
url(r'^reply/new/$', msg_reply_new, name='msg_reply_new'),
|
||||||
url(r'^(?P<group_id>\d+)/manage/$', group_manage, name='group_manage'),
|
url(r'^(?P<group_id>\d+)/manage/$', group_manage, name='group_manage'),
|
||||||
|
url(r'^(?P<group_id>\d+)/remove/$', group_remove, name='group_remove'),
|
||||||
|
url(r'^(?P<group_id>\d+)/dismiss/$', group_dismiss, name='group_dismiss'),
|
||||||
|
url(r'^(?P<group_id>\d+)/quit/$', group_quit, name='group_quit'),
|
||||||
url(r'^(?P<group_id>[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'),
|
url(r'^(?P<group_id>[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'),
|
||||||
(r'^(?P<group_id>[\d]+)/member/(?P<user_name>[^/]+)/$', group_member_operations),
|
(r'^(?P<group_id>[\d]+)/member/(?P<user_name>[^/]+)/$', group_member_operations),
|
||||||
url(r'^(?P<group_id>\d+)/msgdel/(?P<msg_id>\d+)/$', group_message_remove, name='group_message_remove'),
|
url(r'^(?P<group_id>\d+)/msgdel/(?P<msg_id>\d+)/$', group_message_remove, name='group_message_remove'),
|
||||||
|
135
group/views.py
135
group/views.py
@@ -37,7 +37,7 @@ from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \
|
|||||||
GroupAddForm, GroupJoinMsgForm, WikiCreateForm
|
GroupAddForm, GroupJoinMsgForm, WikiCreateForm
|
||||||
from signals import grpmsg_added, grpmsg_reply_added
|
from signals import grpmsg_added, grpmsg_reply_added
|
||||||
from settings import GROUP_MEMBERS_DEFAULT_DISPLAY
|
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 base.mixins import LoginRequiredMixin
|
||||||
from seahub.contacts.models import Contact
|
from seahub.contacts.models import Contact
|
||||||
from seahub.contacts.signals import mail_sended
|
from seahub.contacts.signals import mail_sended
|
||||||
@@ -123,15 +123,12 @@ def group_list(request):
|
|||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@sys_staff_required
|
||||||
def group_remove(request, group_id):
|
def group_remove(request, group_id):
|
||||||
"""
|
"""
|
||||||
Remove group from groupadmin page. Only system admin can perform this
|
Remove group from groupadmin page. Only system admin can perform this
|
||||||
operation.
|
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.
|
# Request header may missing HTTP_REFERER, we need to handle that case.
|
||||||
next = request.META.get('HTTP_REFERER', None)
|
next = request.META.get('HTTP_REFERER', None)
|
||||||
if not next:
|
if not next:
|
||||||
@@ -201,71 +198,6 @@ def group_quit(request, group_id):
|
|||||||
|
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
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
|
@login_required
|
||||||
def group_message_remove(request, group_id, msg_id):
|
def group_message_remove(request, group_id, msg_id):
|
||||||
"""
|
"""
|
||||||
@@ -395,40 +327,47 @@ def msg_reply_new(request):
|
|||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ctx_switch_required
|
@group_check
|
||||||
def group_info(request, group_id):
|
def group_info(request, group):
|
||||||
if request.method == 'POST':
|
# Get all group members.
|
||||||
form = MessageForm(request.POST)
|
members = get_group_members(group.id)
|
||||||
|
is_staff = True if check_group_staff(group.id, request.user) else False
|
||||||
|
|
||||||
if form.is_valid():
|
org = request.user.org
|
||||||
msg = form.cleaned_data['message']
|
if org:
|
||||||
message = GroupMessage()
|
repos = get_org_group_repos(org['org_id'], group.id,
|
||||||
message.group_id = group_id
|
request.user.username)
|
||||||
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:
|
else:
|
||||||
form = MessageForm()
|
repos = get_group_repos(group.id, request.user.username)
|
||||||
|
|
||||||
op = request.GET.get('op', '')
|
recent_commits = []
|
||||||
if op == 'delete':
|
cmt_repo_dict = {}
|
||||||
return group_remove(request, group_id)
|
for repo in repos:
|
||||||
elif op == 'dismiss':
|
repo.user_perm = check_permission(repo.props.id, request.user.username)
|
||||||
return group_dismiss(request, group_id)
|
cmmts = get_commits(repo.props.id, 0, 10)
|
||||||
elif op == 'quit':
|
for c in cmmts:
|
||||||
return group_quit(request, group_id)
|
cmt_repo_dict[c.id] = repo
|
||||||
|
recent_commits += cmmts
|
||||||
|
|
||||||
return render_group_info(request, group_id, form)
|
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
|
@login_required
|
||||||
@ctx_switch_required
|
|
||||||
@group_staff_required
|
@group_staff_required
|
||||||
@group_check
|
@group_check
|
||||||
def group_manage(request, group):
|
def group_manage(request, group):
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
{% extends "admin_base.html" %}
|
{% extends "admin_base.html" %}
|
||||||
{% load seahub_tags i18n %}
|
{% load seahub_tags i18n %}
|
||||||
|
{% load url from future %}
|
||||||
|
|
||||||
{% block nav_groupadmin_class %}class="cur"{% endblock %}
|
{% block nav_groupadmin_class %}class="cur"{% endblock %}
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@
|
|||||||
<td><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/">{{ group.props.group_name }}</a></td>
|
<td><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/">{{ group.props.group_name }}</a></td>
|
||||||
<td>{{ group.props.creator_name }}</td>
|
<td>{{ group.props.creator_name }}</td>
|
||||||
<td>{{ group.props.timestamp|tsstr_sec }}</td>
|
<td>{{ group.props.timestamp|tsstr_sec }}</td>
|
||||||
<td><a href="#" data-url="{{ SITE_ROOT}}group/{{ group.id }}/?op=delete&src=sysgroupadmin" data-target="{{ group.props.group_name }}" class="group-remove-btn op">{% trans "Delete" %}</a></td>
|
<td><a href="#" data-url="{% url 'group_remove' group.id %}" data-target="{{ group.props.group_name }}" class="group-remove-btn op">{% trans "Delete" %}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
Reference in New Issue
Block a user