diff --git a/seahub/group/forms.py b/seahub/group/forms.py
index 1d6ee80ab6..23b9c836bd 100644
--- a/seahub/group/forms.py
+++ b/seahub/group/forms.py
@@ -6,7 +6,7 @@ from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from seaserv import is_valid_filename
-from seahub.utils import validate_group_name
+from seahub.group.utils import validate_group_name
class MessageForm(forms.Form):
message = forms.CharField(max_length=2048)
diff --git a/seahub/group/templates/group/group_manage.html b/seahub/group/templates/group/group_manage.html
index 979badb7c1..304aafaf42 100644
--- a/seahub/group/templates/group/group_manage.html
+++ b/seahub/group/templates/group/group_manage.html
@@ -23,6 +23,7 @@
{% trans "Operations" %}
+
{% include 'group/grpmember_add_form.html' %} {# for member/admin add #}
{% include 'group/modules_toggle_form.html' %}
@@ -127,6 +136,17 @@ $('#group-transfer-form').submit(function() {
}
});
+$('#group-rename').click(function() {
+ $('#group-rename-form').modal({appendTo: "#main", focus:false});
+ return false;
+});
+$('#group-rename-form').submit(function() {
+ if (!$.trim($('[name="new_name"]', $(this)).val())) {
+ return false;
+ }
+});
+
+
{% include "group/modules_toggle_js.html" %}
{% endblock %}
diff --git a/seahub/group/urls.py b/seahub/group/urls.py
index c16f357608..a77c8e9100 100644
--- a/seahub/group/urls.py
+++ b/seahub/group/urls.py
@@ -7,7 +7,7 @@ from views import group_info, group_members, group_member_operations, group_add_
group_wiki_page_new, group_wiki_page_edit, group_wiki_pages, \
group_wiki_page_delete, group_remove, group_dismiss, group_quit, \
group_make_public, group_revoke_public, group_transfer, group_toggle_modules, \
- group_add_discussion
+ group_add_discussion, group_rename
urlpatterns = patterns('',
url(r'^(?P
\d+)/$', group_info, name='group_info'),
@@ -24,6 +24,7 @@ urlpatterns = patterns('',
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+)/rename/$', group_rename, name='group_rename'),
url(r'^(?P\d+)/transfer/$', group_transfer, name='group_transfer'),
url(r'^(?P\d+)/make_pub/$', group_make_public, name='group_make_pub'),
url(r'^(?P\d+)/revoke_pub/$', group_revoke_public, name='group_revoke_pub'),
diff --git a/seahub/group/utils.py b/seahub/group/utils.py
new file mode 100644
index 0000000000..9352dfb510
--- /dev/null
+++ b/seahub/group/utils.py
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+import re
+
+def validate_group_name(group_name):
+ """
+ Check whether group name is valid.
+ A valid group name only contains alphanumeric character, and the length
+ should less than 255.
+ """
+ if len(group_name) > 255:
+ return False
+ return re.match('^\w+$', group_name, re.U)
+
diff --git a/seahub/group/views.py b/seahub/group/views.py
index 970b65101d..480a033d22 100644
--- a/seahub/group/views.py
+++ b/seahub/group/views.py
@@ -42,6 +42,7 @@ from seahub.base.decorators import sys_staff_required
from seahub.base.models import FileDiscuss, FileContributors
from seahub.contacts.models import Contact
from seahub.contacts.signals import mail_sended
+from seahub.group.utils import validate_group_name
from seahub.notifications.models import UserNotification
from seahub.wiki import get_group_wiki_repo, get_group_wiki_page, convert_wiki_link,\
get_wiki_pages
@@ -234,6 +235,26 @@ def group_dismiss(request, group_id):
return HttpResponseRedirect(reverse('group_list'))
+@login_required
+@group_staff_required
+def group_rename(request, group_id):
+ """Rename a group.
+ """
+ if request.method != 'POST':
+ raise Http404
+
+ new_name = request.POST.get('new_name', '')
+ if validate_group_name(new_name):
+ ccnet_threaded_rpc.set_group_name(int(group_id), new_name)
+ messages.success(request, _('Successfully renamed group to "%s".') % new_name)
+ else:
+ messages.error(request, _('Failed to rename group, group name can only contain letters, numbers or underscore'))
+
+ next = request.META.get('HTTP_REFERER', None)
+ if not next:
+ next = SITE_ROOT
+ return HttpResponseRedirect(next)
+
@login_required
@group_staff_required
def group_transfer(request, group_id):
diff --git a/seahub/utils/__init__.py b/seahub/utils/__init__.py
index 917e131006..471d7dca64 100644
--- a/seahub/utils/__init__.py
+++ b/seahub/utils/__init__.py
@@ -171,14 +171,6 @@ def normalize_cache_key(value, prefix=None):
key = value if prefix is None else prefix + value
return urlquote(key)
-def validate_group_name(group_name):
- """
- Check whether group name is valid.
- A valid group name only contains alphanumeric character.
-
- """
- return re.match('^\w+$', group_name, re.U)
-
def get_repo_last_modify(repo):
""" Get last modification time for a repo.