diff --git a/frontend/src/pages/sys-admin/admin-logs/operation-logs.js b/frontend/src/pages/sys-admin/admin-logs/operation-logs.js
index f3ae46f052..df754bbada 100644
--- a/frontend/src/pages/sys-admin/admin-logs/operation-logs.js
+++ b/frontend/src/pages/sys-admin/admin-logs/operation-logs.js
@@ -105,6 +105,7 @@ class Item extends Component {
case 'group_delete': return gettext('Delete Group');
case 'user_add': return gettext('Add User');
case 'user_delete': return gettext('Delete User');
+ case 'user_migrate': return gettext('Migrate User');
default: return '';
}
};
@@ -184,6 +185,12 @@ class Item extends Component {
.replace('{user}', '' + detail.email+ '');
return detailText;
+ case 'user_migrate':
+ detailText = gettext('User migrate from {user_from} to {user_to}')
+ .replace('{user_from}', '' + detail.from + '')
+ .replace('{user_to}', '' + detail.to+ '');
+ return detailText;
+
default: return '';
}
};
diff --git a/seahub/admin_log/models.py b/seahub/admin_log/models.py
index b577445d0a..b0373226a1 100644
--- a/seahub/admin_log/models.py
+++ b/seahub/admin_log/models.py
@@ -28,9 +28,12 @@ USER_ADD = 'user_add'
# 'user_delete': {'email': deleted_user}
USER_DELETE = 'user_delete'
+# 'user_migrate': {'from': from_user, 'to': to_user}
+USER_MIGRATE = 'user_migrate'
+
ADMIN_LOG_OPERATION_TYPE = (REPO_TRANSFER, REPO_DELETE,
GROUP_CREATE, GROUP_TRANSFER, GROUP_DELETE,
- USER_ADD, USER_DELETE)
+ USER_ADD, USER_DELETE, USER_MIGRATE)
class AdminLogManager(models.Manager):
diff --git a/seahub/api2/endpoints/admin/account.py b/seahub/api2/endpoints/admin/account.py
index a24626d40e..af3661cefe 100644
--- a/seahub/api2/endpoints/admin/account.py
+++ b/seahub/api2/endpoints/admin/account.py
@@ -13,6 +13,8 @@ from rest_framework.views import APIView
import seaserv
from seaserv import seafile_api, ccnet_threaded_rpc, ccnet_api
+from seahub.admin_log.models import USER_MIGRATE
+from seahub.admin_log.signals import admin_operation
from seahub.api2.authentication import TokenAuthentication
from seahub.api2.serializers import AccountSerializer
from seahub.api2.throttling import UserRateThrottle
@@ -21,6 +23,7 @@ from seahub.base.accounts import User
from seahub.base.templatetags.seahub_tags import email2nickname
from seahub.profile.models import Profile, DetailedProfile
from seahub.institutions.models import Institution
+from seahub.share.models import UploadLinkShare, FileShare
from seahub.utils import is_valid_username, is_org_context
from seahub.utils.file_size import get_file_size_unit
from seahub.group.utils import is_group_member
@@ -107,6 +110,21 @@ class Account(APIView):
if from_user == g.creator_name:
ccnet_threaded_rpc.set_group_creator(g.id, to_user)
+ # reshare repo to links
+ try:
+ UploadLinkShare.objects.filter(username=from_user).update(username=to_user)
+ FileShare.objects.filter(username=from_user).update(username=to_user)
+ except Exception as e:
+ logger.error(e)
+ error_msg = 'Internal Server Error'
+ return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
+
+ admin_op_detail = {
+ "from": from_user,
+ "to": to_user
+ }
+ admin_operation.send(sender=None, admin_name=request.user.username,
+ operation=USER_MIGRATE, detail=admin_op_detail)
return Response({'success': True})
else:
return api_error(status.HTTP_400_BAD_REQUEST, 'op can only be migrate.')