diff --git a/frontend/src/pages/org-admin/org-users-search-users.js b/frontend/src/pages/org-admin/org-users-search-users.js
index 455f2df92e7..b20e3c6bba1 100644
--- a/frontend/src/pages/org-admin/org-users-search-users.js
+++ b/frontend/src/pages/org-admin/org-users-search-users.js
@@ -26,7 +26,7 @@ class OrgUsersSearchUsersResult extends React.Component {
};
render() {
- let { orgUsers } = this.props;
+ let { orgUsers, changeStatus } = this.props;
return (
@@ -52,6 +52,7 @@ class OrgUsersSearchUsersResult extends React.Component {
toggleDelete={this.props.toggleDelete}
onFreezedItem={this.onFreezedItem}
onUnfreezedItem={this.onUnfreezedItem}
+ changeStatus={changeStatus}
/>
);})}
@@ -159,6 +160,22 @@ class OrgUsersSearchUsers extends Component {
}
};
+ changeStatus= (email, isActive) => {
+ seafileAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => {
+ let users = this.state.orgUsers.map(item => {
+ if (item.email == email) {
+ item['is_active']= res.data['is_active'];
+ }
+ return item;
+ });
+ this.setState({orgUsers: users});
+ toaster.success(gettext('Edit succeeded.'));
+ }).catch(error => {
+ let errMessage = Utils.getErrorMsg(error);
+ toaster.danger(errMessage);
+ });
+ }
+
render() {
const { query, isSubmitBtnActive } = this.state;
@@ -189,6 +206,7 @@ class OrgUsersSearchUsers extends Component {
{gettext('Result')}
diff --git a/seahub/auth/views.py b/seahub/auth/views.py
index cb958b6e99a..e470b07d252 100644
--- a/seahub/auth/views.py
+++ b/seahub/auth/views.py
@@ -144,7 +144,7 @@ def login(request, template_name='registration/login.html',
try:
user = User.objects.get(email)
if user.is_active:
- user.freeze_user(notify_admins=True)
+ user.freeze_user(notify_admins=True, notify_org_admins=True)
logger.warn('Login attempt limit reached, freeze the user email/username: %s, ip: %s, attemps: %d' %
(login, ip, failed_attempt))
except User.DoesNotExist:
diff --git a/seahub/base/accounts.py b/seahub/base/accounts.py
index 82c9f36b75a..92462240a64 100644
--- a/seahub/base/accounts.py
+++ b/seahub/base/accounts.py
@@ -682,7 +682,7 @@ def email_user(self, subject, message, from_email=None):
"Sends an e-mail to this User."
send_mail(subject, message, from_email, [self.email])
- def freeze_user(self, notify_admins=False):
+ def freeze_user(self, notify_admins=False, notify_org_admins=False):
self.is_active = False
self.save()
@@ -706,6 +706,37 @@ def freeze_user(self, notify_admins=False):
# restore current language
translation.activate(cur_language)
+ if notify_org_admins:
+ org = None
+ if is_pro_version():
+ orgs = ccnet_api.get_orgs_by_user(self.username)
+ if orgs:
+ org = orgs[0]
+
+ org_members = list()
+ if org:
+ org_members = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1)
+ for u in org_members:
+ if not (ccnet_api.is_org_staff(org.org_id, u.email) == 1):
+ continue
+
+ # save current language
+ cur_language = translation.get_language()
+
+ # get and active user language
+ user_language = Profile.objects.get_user_language(u.email)
+ translation.activate(user_language)
+
+ send_html_email_with_dj_template(u.email,
+ subject=_('Account %(account)s froze on %(site)s.') % {
+ "account": self.email,
+ "site": get_site_name()},
+ dj_template='sysadmin/user_freeze_email.html',
+ context={'user': self.email})
+
+ # restore current language
+ translation.activate(cur_language)
+
def remove_repo_passwds(self):
"""
Remove all repo decryption passwords stored on server.