mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-17 15:53:28 +00:00
Modify group
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
<h3>操作</h3>
|
<h3>操作</h3>
|
||||||
<ul class="with-bg">
|
<ul class="with-bg">
|
||||||
<li><a href="{{ SITE_ROOT }}avatar/group/add/?gid={{ group.id }}">设置小组图标</a></li>
|
<li><a href="{{ SITE_ROOT }}avatar/group/add/?gid={{ group.id }}">设置小组图标</a></li>
|
||||||
<li><a id="group-remove" href="#" data="{{ SITE_ROOT }}group/{{ group.id }}/?op=delete">解散小组</a></li>
|
<li><a id="group-remove" href="#" data="{{ SITE_ROOT }}group/{{ group.id }}/?op=dismiss">解散小组</a></li>
|
||||||
<li><a href="{{ SITE_ROOT }}group/{{ group.id }}/">返回小组</a></li>
|
<li><a href="{{ SITE_ROOT }}group/{{ group.id }}/">返回小组</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -18,6 +18,7 @@ from seahub.contacts.models import Contact
|
|||||||
from seahub.contacts.signals import mail_sended
|
from seahub.contacts.signals import mail_sended
|
||||||
from seahub.notifications.models import UserNotification
|
from seahub.notifications.models import UserNotification
|
||||||
from seahub.profile.models import Profile
|
from seahub.profile.models import Profile
|
||||||
|
from seahub.settings import SITE_ROOT
|
||||||
from seahub.utils import render_error, render_permission_error, \
|
from seahub.utils import render_error, render_permission_error, \
|
||||||
validate_group_name, emails2list
|
validate_group_name, emails2list
|
||||||
from seahub.views import validate_emailuser
|
from seahub.views import validate_emailuser
|
||||||
@@ -48,35 +49,76 @@ def group_list(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_remove(request, group_id):
|
def group_remove(request, group_id):
|
||||||
|
"""
|
||||||
|
Remove group from groupadmin page. Only sys admin or org admin can perform
|
||||||
|
this operation.
|
||||||
|
"""
|
||||||
|
# Request header may missing HTTP_REFERER, we need to handle that case.
|
||||||
|
next = request.META.get('HTTP_REFERER', None)
|
||||||
|
if not next:
|
||||||
|
next = SITE_ROOT
|
||||||
|
|
||||||
try:
|
try:
|
||||||
group_id_int = int(group_id)
|
group_id_int = int(group_id)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
return HttpResponseRedirect(next)
|
||||||
|
|
||||||
|
# Check whether user is sys_admin or org_admin
|
||||||
|
is_sys_staff = request.user.is_staff
|
||||||
|
if request.user.org and request.user.org['is_staff']:
|
||||||
|
is_org_staff = True
|
||||||
|
else:
|
||||||
|
is_org_staff = False
|
||||||
|
|
||||||
|
if not is_sys_staff and not is_org_staff:
|
||||||
|
return render_permission_error(request, u'只有管理员有权删除小组')
|
||||||
|
|
||||||
# Check whether user is the group staff or admin
|
|
||||||
if not ccnet_threaded_rpc.check_group_staff(group_id_int, request.user.username) \
|
|
||||||
and not request.user.is_staff:
|
|
||||||
return render_permission_error(request, u'只有小组管理员有权解散小组')
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ccnet_threaded_rpc.remove_group(group_id_int, request.user.username)
|
ccnet_threaded_rpc.remove_group(group_id_int, request.user.username)
|
||||||
seafserv_threaded_rpc.remove_repo_group(group_id_int, None)
|
seafserv_threaded_rpc.remove_repo_group(group_id_int, None)
|
||||||
|
|
||||||
|
if request.user.org:
|
||||||
|
org_id = request.user.org['org_id']
|
||||||
|
ccnet_threaded_rpc.remove_org_group(org_id, group_id_int)
|
||||||
|
except SearpcError, e:
|
||||||
|
return render_error(request, e.msg)
|
||||||
|
|
||||||
|
return HttpResponseRedirect(next)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def group_dismiss(request, group_id):
|
||||||
|
"""
|
||||||
|
Dismiss a group, only group staff can perform this operation.
|
||||||
|
"""
|
||||||
|
next = request.META.get('HTTP_REFERER', None)
|
||||||
|
if not next:
|
||||||
|
next = SITE_ROOT
|
||||||
|
|
||||||
|
try:
|
||||||
|
group_id_int = int(group_id)
|
||||||
|
except ValueError:
|
||||||
|
return HttpResponseRedirect(next)
|
||||||
|
|
||||||
|
# Check whether user is group staff
|
||||||
|
user = request.user.username
|
||||||
|
if not ccnet_threaded_rpc.check_group_staff(group_id_int, user):
|
||||||
|
return render_permission_error(request, u'只有小组管理员有权解散小组')
|
||||||
|
|
||||||
|
try:
|
||||||
|
ccnet_threaded_rpc.remove_group(group_id_int, user)
|
||||||
|
seafserv_threaded_rpc.remove_repo_group(group_id_int, None)
|
||||||
|
|
||||||
if request.user.org:
|
if request.user.org:
|
||||||
org_id = request.user.org['org_id']
|
org_id = request.user.org['org_id']
|
||||||
url_prefix = request.user.org['url_prefix']
|
url_prefix = request.user.org['url_prefix']
|
||||||
ccnet_threaded_rpc.remove_org_group(org_id, group_id_int)
|
ccnet_threaded_rpc.remove_org_group(org_id, group_id_int)
|
||||||
return HttpResponseRedirect(reverse('org_groups',
|
return HttpResponseRedirect(reverse('org_groups',
|
||||||
args=[url_prefix]))
|
args=[url_prefix]))
|
||||||
|
|
||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
return render_error(request, e.msg)
|
return render_error(request, e.msg)
|
||||||
|
|
||||||
if request.GET.get('src', '') == 'orggroupadmin':
|
return HttpResponseRedirect(reverse('group_list'))
|
||||||
return HttpResponseRedirect(reverse('org_group_admin'))
|
|
||||||
elif request.GET.get('src', '') == 'sysgroupadmin':
|
|
||||||
return HttpResponseRedirect(reverse('sys_group_admin'))
|
|
||||||
else:
|
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def group_quit(request, group_id):
|
def group_quit(request, group_id):
|
||||||
@@ -314,6 +356,8 @@ def group_info(request, group_id):
|
|||||||
op = request.GET.get('op', '')
|
op = request.GET.get('op', '')
|
||||||
if op == 'delete':
|
if op == 'delete':
|
||||||
return group_remove(request, group_id)
|
return group_remove(request, group_id)
|
||||||
|
elif op == 'dismiss':
|
||||||
|
return group_dismiss(request, group_id)
|
||||||
elif op == 'quit':
|
elif op == 'quit':
|
||||||
return group_quit(request, group_id)
|
return group_quit(request, group_id)
|
||||||
|
|
||||||
@@ -346,7 +390,7 @@ def group_members(request, group_id):
|
|||||||
# Add email to contacts
|
# Add email to contacts
|
||||||
mail_sended.send(sender=None, user=request.user.username,
|
mail_sended.send(sender=None, user=request.user.username,
|
||||||
email=member_name)
|
email=member_name)
|
||||||
if not ccnet_threaded_rpc.org_user_exists(request.user.org.org_id,
|
if not ccnet_threaded_rpc.org_user_exists(request.user.org['org_id'],
|
||||||
member_name):
|
member_name):
|
||||||
err_msg = u'当前企业不存在 %s 用户' % member_name
|
err_msg = u'当前企业不存在 %s 用户' % member_name
|
||||||
return render_error(request, err_msg)
|
return render_error(request, err_msg)
|
||||||
|
@@ -335,6 +335,12 @@ p {
|
|||||||
width:3em;
|
width:3em;
|
||||||
margin:8px 0 0;
|
margin:8px 0 0;
|
||||||
}
|
}
|
||||||
|
.narrow-panel .note {
|
||||||
|
color: #666666;
|
||||||
|
font-size: 11px;
|
||||||
|
margin: 2px 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.login-form a {
|
.login-form a {
|
||||||
font-size:12px;
|
font-size:12px;
|
||||||
vertical-align:middle;
|
vertical-align:middle;
|
||||||
@@ -859,3 +865,4 @@ p {
|
|||||||
.view-link-alert p {
|
.view-link-alert p {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
{{ form.org_name}}
|
{{ form.org_name}}
|
||||||
<lable for="id_url_prefix">个性域名:</label>
|
<lable for="id_url_prefix">个性域名:</label>
|
||||||
{{ form.url_prefix }}
|
{{ form.url_prefix }}
|
||||||
|
<p class="note">域名前缀只能包含字母或数字</p>
|
||||||
<p class="error hide"></p>
|
<p class="error hide"></p>
|
||||||
{{ form.url_prefix.errors }}
|
{{ form.url_prefix.errors }}
|
||||||
<input type="submit" value="提交" class="submit" />
|
<input type="submit" value="提交" class="submit" />
|
||||||
|
10
views.py
10
views.py
@@ -159,10 +159,10 @@ def render_repo(request, repo_id, error=''):
|
|||||||
return render_permission_error(request, '无法访问该同步目录')
|
return render_permission_error(request, '无法访问该同步目录')
|
||||||
|
|
||||||
# Check whether use is repo owner
|
# Check whether use is repo owner
|
||||||
if validate_owner(request, repo_id):
|
# if validate_owner(request, repo_id):
|
||||||
is_owner = True
|
# is_owner = True
|
||||||
else:
|
# else:
|
||||||
is_owner = False
|
# is_owner = False
|
||||||
|
|
||||||
repo = get_repo(repo_id)
|
repo = get_repo(repo_id)
|
||||||
if not repo:
|
if not repo:
|
||||||
@@ -238,7 +238,7 @@ def render_repo(request, repo_id, error=''):
|
|||||||
"can_access": can_access,
|
"can_access": can_access,
|
||||||
"current_commit": current_commit,
|
"current_commit": current_commit,
|
||||||
"view_history": view_history,
|
"view_history": view_history,
|
||||||
"is_owner": is_owner,
|
# "is_owner": is_owner,
|
||||||
"password_set": password_set,
|
"password_set": password_set,
|
||||||
"repo_size": repo_size,
|
"repo_size": repo_size,
|
||||||
"dir_list": dir_list,
|
"dir_list": dir_list,
|
||||||
|
Reference in New Issue
Block a user