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)