diff --git a/seahub/templates/sysadmin/org_admin_table.html b/seahub/templates/sysadmin/org_admin_table.html
index 720d1b5e64..74aaa0ace9 100644
--- a/seahub/templates/sysadmin/org_admin_table.html
+++ b/seahub/templates/sysadmin/org_admin_table.html
@@ -22,7 +22,7 @@
{{ org.ctime|tsstr_sec }}
{% if org.expiration %}{{ org.expiration|date:'Y-m-d H:i:s' }}{% else %}--{% endif %}
|
- {% trans "Delete" %} |
+ {% trans "Delete" %} |
{% endfor %}
diff --git a/seahub/urls.py b/seahub/urls.py
index ba3604660c..c1dafa1c2b 100644
--- a/seahub/urls.py
+++ b/seahub/urls.py
@@ -223,6 +223,7 @@ urlpatterns = patterns(
url(r'^sys/orgadmin/search/$', sys_org_search, name='sys_org_search'),
url(r'^sys/orgadmin/(?P\d+)/set_quota/$', sys_org_set_quota, name='sys_org_set_quota'),
url(r'^sys/orgadmin/(?P\d+)/rename/$', sys_org_rename, name='sys_org_rename'),
+ url(r'^sys/orgadmin/(?P\d+)/remove/$', sys_org_remove, name='sys_org_remove'),
url(r'^sys/orgadmin/(?P\d+)/set_member_quota/$', sys_org_set_member_quota, name='sys_org_set_member_quota'),
url(r'^sys/orgadmin/(?P\d+)/user/$', sys_org_info_user, name='sys_org_info_user'),
url(r'^sys/orgadmin/(?P\d+)/group/$', sys_org_info_group, name='sys_org_info_group'),
diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py
index bccd5be0a4..09a0803838 100644
--- a/seahub/views/sysadmin.py
+++ b/seahub/views/sysadmin.py
@@ -1300,6 +1300,35 @@ def sys_org_rename(request, org_id):
return HttpResponseRedirect(next)
+@login_required
+@require_POST
+@sys_staff_required
+def sys_org_remove(request, org_id):
+ """Remove an org and all members/repos/groups.
+
+ Arguments:
+ - `request`:
+ - `org_id`:
+ """
+ org_id = int(org_id)
+ org = ccnet_threaded_rpc.get_org_by_id(org_id)
+ users = ccnet_threaded_rpc.get_org_emailusers(org.url_prefix, -1, -1)
+ for u in users:
+ ccnet_threaded_rpc.remove_org_user(org_id, u.email)
+
+ groups = ccnet_threaded_rpc.get_org_groups(org.org_id, -1, -1)
+ for g in groups:
+ ccnet_threaded_rpc.remove_org_group(org_id, g.gid)
+
+ # remove org repos
+ seafserv_threaded_rpc.remove_org_repo_by_org_id(org_id)
+
+ # remove org
+ ccnet_threaded_rpc.remove_org(org_id)
+
+ messages.success(request, _(u'Successfully deleted.'))
+ return HttpResponseRedirect(reverse('sys_org_admin'))
+
@login_required_ajax
@sys_staff_required
def sys_org_set_member_quota(request, org_id):