diff --git a/frontend/src/pages/sys-admin/orgs/orgs-content.js b/frontend/src/pages/sys-admin/orgs/orgs-content.js index 1c6c56165a..115d158a04 100644 --- a/frontend/src/pages/sys-admin/orgs/orgs-content.js +++ b/frontend/src/pages/sys-admin/orgs/orgs-content.js @@ -6,9 +6,11 @@ import { siteRoot, gettext } from '../../../utils/constants'; import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; +import { seafileAPI } from '../../../utils/seafile-api.js'; import SysAdminUserRoleEditor from '../../../components/select-editor/sysadmin-user-role-editor'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import UserLink from '../user-link'; +import toaster from '../../../components/toast'; const { availableRoles } = window.sysadmin.pageOptions; @@ -85,7 +87,8 @@ class Item extends Component { super(props); this.state = { isOpIconShown: false, - isDeleteDialogOpen: false + isDeleteDialogOpen: false, + deleteDialogMsg: '', }; } @@ -101,7 +104,23 @@ class Item extends Component { if (e) { e.preventDefault(); } - this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen}); + this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen}, () => { + if (this.state.isDeleteDialogOpen) { + seafileAPI.sysAdminGetOrg(this.props.item.org_id).then((res) => { + let orgName = '' + Utils.HTMLescape(res.data.org_name) + ''; + let userCount = '' + Utils.HTMLescape(res.data.users_count) + ''; + let repoCount = '' + Utils.HTMLescape(res.data.repos_count) + ''; + let deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?
{userCount} user(s) and {repoCount} libraries of this orgnization will also be deleted.') + .replace('{placeholder}', orgName) + .replace('{userCount}', userCount) + .replace('{repoCount}', repoCount); + this.setState({deleteDialogMsg: deleteDialogMsg}); + }).catch(error => { + let errorMsg = Utils.getErrorMsg(error); + toaster.danger(errorMsg); + }); + } + }); } updateRole = (role) => { @@ -114,10 +133,7 @@ class Item extends Component { render() { const { item } = this.props; - const { isOpIconShown, isDeleteDialogOpen } = this.state; - - const orgName = '' + Utils.HTMLescape(item.org_name) + ''; - const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', orgName); + const { isOpIconShown, isDeleteDialogOpen, deleteDialogMsg } = this.state; return ( diff --git a/seahub/api2/endpoints/admin/organizations.py b/seahub/api2/endpoints/admin/organizations.py index 532cd2ef1c..e1d7d48ece 100644 --- a/seahub/api2/endpoints/admin/organizations.py +++ b/seahub/api2/endpoints/admin/organizations.py @@ -70,6 +70,9 @@ def get_org_detailed_info(org): users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) org_info['users_count'] = len(users) + repos = seafile_api.get_org_repo_list(org_id, -1, -1) + org_info['repos_count'] = len(repos) + # groups groups = ccnet_api.get_org_groups(org_id, -1, -1) org_info['groups_count'] = len(groups) @@ -379,6 +382,7 @@ class AdminOrganization(APIView): users = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) for u in users: ccnet_api.remove_org_user(org_id, u.email) + User.objects.get(email=u.email).delete() # remove org groups groups = ccnet_api.get_org_groups(org_id, -1, -1)