diff --git a/media/css/seahub.css b/media/css/seahub.css index 48a76c9310..5589f9c881 100644 --- a/media/css/seahub.css +++ b/media/css/seahub.css @@ -3291,6 +3291,9 @@ button.sf-dropdown-toggle:focus { vertical-align: middle; } /* sysadmin */ +#admin-groups .btn-white { + margin-left:3px; +} #import-members-btn .icon-upload-alt { color:#777; margin-right:3px; diff --git a/seahub/api2/endpoints/admin/groups.py b/seahub/api2/endpoints/admin/groups.py index 0f9862992b..fd4d7cd143 100644 --- a/seahub/api2/endpoints/admin/groups.py +++ b/seahub/api2/endpoints/admin/groups.py @@ -14,7 +14,8 @@ from pysearpc import SearpcError from seahub.base.accounts import User from seahub.utils import is_valid_username from seahub.utils.timeutils import timestamp_to_isoformat_timestr -from seahub.group.utils import is_group_member, is_group_admin +from seahub.group.utils import is_group_member, is_group_admin, \ + validate_group_name, check_group_name_conflict from seahub.api2.utils import api_error from seahub.api2.throttling import UserRateThrottle @@ -82,6 +83,53 @@ class AdminGroups(APIView): return Response({"page_info": page_info, "groups": return_results}) + def post(self, request): + """ Create a group + + Permission checking: + 1. Admin user; + """ + + # argument check + group_name = request.data.get('group_name', '') + if not group_name: + error_msg = 'group_name %s invalid.' % group_name + return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + + group_name = group_name.strip() + # Check whether group name is validate. + if not validate_group_name(group_name): + error_msg = _(u'Group name can only contain letters, numbers, blank, hyphen or underscore') + return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + + # Check whether group name is duplicated. + if check_group_name_conflict(request, group_name): + error_msg = _(u'There is already a group with that name.') + return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + + group_owner = request.data.get('group_owner', '') + if group_owner: + try: + User.objects.get(email=group_owner) + except User.DoesNotExist: + error_msg = 'User %s not found.' % group_owner + return api_error(status.HTTP_404_NOT_FOUND, error_msg) + + username = request.user.username + + # create group. + try: + group_id = ccnet_api.create_group(group_name, group_owner or username) + except SearpcError as e: + logger.error(e) + error_msg = 'Internal Server Error' + return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + + # get info of new group + group_info = get_group_info(group_id) + + return Response(group_info, status=status.HTTP_201_CREATED) + class AdminGroup(APIView): diff --git a/seahub/templates/js/sysadmin-templates.html b/seahub/templates/js/sysadmin-templates.html index aabff0af63..4d4e05062b 100644 --- a/seahub/templates/js/sysadmin-templates.html +++ b/seahub/templates/js/sysadmin-templates.html @@ -519,7 +519,8 @@