From 57a1e5d5df8ebe98b66fcddb9192d11bd0e7cd80 Mon Sep 17 00:00:00 2001
From: Ranjiwei <32759763+r350178982@users.noreply.github.com>
Date: Mon, 13 Oct 2025 09:55:59 +0800
Subject: [PATCH] update (#8295)
* update
* Update seahub_tags.py
---
frontend/src/models/activity.js | 1 +
.../src/pages/dashboard/files-activities.js | 6 ++++--
frontend/src/pages/dashboard/user-selector.js | 2 +-
seahub/api2/endpoints/activities.py | 3 ++-
seahub/api2/endpoints/group_members.py | 14 ++++++++++----
seahub/auth/forms.py | 6 ++++--
seahub/base/templatetags/seahub_tags.py | 18 +++++++++++++++++-
seahub/profile/settings.py | 3 +++
8 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/frontend/src/models/activity.js b/frontend/src/models/activity.js
index f7e0ed044a..c927bb06b7 100644
--- a/frontend/src/models/activity.js
+++ b/frontend/src/models/activity.js
@@ -14,6 +14,7 @@ class Acticity {
this.op_type = json.op_type;
this.createdFilesCount = 0;
this.createdFilesList = [];
+ this.login_id = json.login_id;
if (json.op_type === 'clean-up-trash') {
this.days = json.days;
} else if (json.op_type === 'rename' && json.obj_type === 'repo') {
diff --git a/frontend/src/pages/dashboard/files-activities.js b/frontend/src/pages/dashboard/files-activities.js
index a3e13d2148..639ba1893d 100644
--- a/frontend/src/pages/dashboard/files-activities.js
+++ b/frontend/src/pages/dashboard/files-activities.js
@@ -53,7 +53,8 @@ class FilesActivities extends Component {
name: item.author_name,
contact_email: item.author_contact_email,
avatar_url: item.avatar_url,
- isSelected: false
+ isSelected: false,
+ login_id: item.login_id
});
}
});
@@ -152,7 +153,8 @@ class FilesActivities extends Component {
name: item.author_name,
contact_email: item.author_contact_email,
avatar_url: item.avatar_url,
- isSelected: false
+ isSelected: false,
+ login_id: item.login_id,
});
}
});
diff --git a/frontend/src/pages/dashboard/user-selector.js b/frontend/src/pages/dashboard/user-selector.js
index 38745e4a70..8baa17842c 100644
--- a/frontend/src/pages/dashboard/user-selector.js
+++ b/frontend/src/pages/dashboard/user-selector.js
@@ -69,7 +69,7 @@ class UserSelector extends Component {
const { isPopoverOpen, query } = this.state;
const { currentSelectedUsers, availableUsers } = this.props;
const selectedUsers = availableUsers.filter(item => item.isSelected);
- const filteredAvailableUsers = query.trim() ? availableUsers.filter(item => item.contact_email.indexOf(query.trim()) != -1 || item.name.indexOf(query.trim()) != -1) : availableUsers;
+ const filteredAvailableUsers = query.trim() ? availableUsers.filter(item => item.contact_email.indexOf(query.trim()) != -1 || item.name.indexOf(query.trim()) != -1 || item.login_id.indexOf(query.trim()) != -1) : availableUsers;
return (
diff --git a/seahub/api2/endpoints/activities.py b/seahub/api2/endpoints/activities.py
index 0fce5ee6a2..63c4e8bade 100644
--- a/seahub/api2/endpoints/activities.py
+++ b/seahub/api2/endpoints/activities.py
@@ -9,7 +9,7 @@ from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import SessionAuthentication
-from seahub.base.templatetags.seahub_tags import email2contact_email
+from seahub.base.templatetags.seahub_tags import email2contact_email, email2login_id
from seahub.utils import EVENTS_ENABLED, get_user_activities, is_pro_version, IS_DB_SQLITE3
from seahub.utils.timeutils import utc_datetime_to_isoformat_timestr
from seahub.api2.utils import api_error
@@ -65,6 +65,7 @@ class ActivitiesView(APIView):
d['author_email'] = e.op_user
d['author_name'] = email2nickname(e.op_user)
d['author_contact_email'] = email2contact_email(e.op_user)
+ d['login_id'] = email2login_id(e.op_user)
try:
avatar_size = int(request.GET.get('avatar_size', 72))
diff --git a/seahub/api2/endpoints/group_members.py b/seahub/api2/endpoints/group_members.py
index 904cb1b4e9..6dabd6f893 100644
--- a/seahub/api2/endpoints/group_members.py
+++ b/seahub/api2/endpoints/group_members.py
@@ -444,7 +444,7 @@ class GroupMembersImport(APIView):
emails_list = []
for record in records:
if record[0]:
- email = record[0].strip().lower()
+ email = str(record[0]).strip().lower()
emails_list.append(email)
result = {}
@@ -463,12 +463,14 @@ class GroupMembersImport(APIView):
user_not_found = False
try:
- User.objects.get(email=email)
+ User.objects.get(email=email_from_excel)
except User.DoesNotExist:
user_not_found = True
if user_not_found:
- email = Profile.objects.get_username_by_contact_email(email)
+ email = Profile.objects.get_username_by_contact_email(email_from_excel)
+ if not email:
+ email = Profile.objects.get_username_by_login_id(email_from_excel)
try:
User.objects.get(email=email)
user_not_found = False
@@ -538,10 +540,14 @@ class GroupMembersImportExample(APIView):
def get(self, request):
data_list = []
- head = [_('Email')]
+ head = [_('Email or LoginID')]
for i in range(5):
username = "test" + str(i) + "@example.com"
data_list.append([username])
+
+ for i in range(5):
+ login_id = "ID" + str(i)
+ data_list.append([login_id])
wb = write_xls('sample', head, data_list)
if not wb:
diff --git a/seahub/auth/forms.py b/seahub/auth/forms.py
index 99d51526d6..78c498d4d1 100644
--- a/seahub/auth/forms.py
+++ b/seahub/auth/forms.py
@@ -58,8 +58,10 @@ class AuthenticationForm(forms.Form):
try:
user = User.objects.get(email=email)
if not user.is_active:
- self.errors['inactive'] = _("This account is inactive.")
- raise forms.ValidationError(_("This account is inactive."))
+ is_first_login = not UserOptions.objects.is_user_logged_in(user.username)
+ if not is_first_login:
+ self.errors['inactive'] = _("This account is inactive.")
+ raise forms.ValidationError(_("This account is inactive."))
except User.DoesNotExist:
pass
diff --git a/seahub/base/templatetags/seahub_tags.py b/seahub/base/templatetags/seahub_tags.py
index fdfccadec0..ba67dffce4 100644
--- a/seahub/base/templatetags/seahub_tags.py
+++ b/seahub/base/templatetags/seahub_tags.py
@@ -19,7 +19,7 @@ from seahub.base.accounts import User
from seahub.profile.models import Profile
from seahub.profile.settings import NICKNAME_CACHE_TIMEOUT, NICKNAME_CACHE_PREFIX, \
EMAIL_ID_CACHE_TIMEOUT, EMAIL_ID_CACHE_PREFIX, CONTACT_CACHE_TIMEOUT, \
- CONTACT_CACHE_PREFIX
+ CONTACT_CACHE_PREFIX, LOGIN_ID_CACHE_PREFIX, LOGIN_ID_CACHE_TIMEOUT
from seahub.cconvert import CConvert
from seahub.settings import TIME_ZONE
from seahub.shortcuts import get_first_object_or_none
@@ -393,6 +393,22 @@ def email2contact_email(value):
cache.set(key, contact_email, CONTACT_CACHE_TIMEOUT)
return contact_email
+@register.filter(name='email2login_id')
+def email2login_id(value):
+ if not value:
+ return ''
+
+ key = normalize_cache_key(value, LOGIN_ID_CACHE_PREFIX)
+ login_id = cache.get(key)
+ if login_id and login_id.strip():
+ return login_id
+
+ profile = Profile.objects.get_profile_by_user(value)
+ login_id = profile and profile.login_id or ''
+ cache.set(key, login_id, LOGIN_ID_CACHE_TIMEOUT)
+ return login_id
+
+
@register.filter(name='email2id')
def email2id(value):
"""
diff --git a/seahub/profile/settings.py b/seahub/profile/settings.py
index 87c0831ecc..8a73b5304e 100644
--- a/seahub/profile/settings.py
+++ b/seahub/profile/settings.py
@@ -9,3 +9,6 @@ EMAIL_ID_CACHE_PREFIX = getattr(settings, 'EMAIL_ID_CACHE_PREFIX', 'EMAIL_ID_')
CONTACT_CACHE_TIMEOUT = getattr(settings, 'CONTACT_CACHE_TIMEOUT', 24 * 60 * 60)
CONTACT_CACHE_PREFIX = getattr(settings, 'CONTACT_CACHE_PREFIX', 'CONTACT_')
+
+LOGIN_ID_CACHE_TIMEOUT = getattr(settings, 'LOGIN_ID_CACHE_TIMEOUT', 24 * 60 * 60)
+LOGIN_ID_CACHE_PREFIX = getattr(settings, 'LOGIN_ID_CACHE_PREFIX', 'LOGIN_ID_')