diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py index ff51d94e8a..c6de6e7d1e 100644 --- a/seahub/views/sysadmin.py +++ b/seahub/views/sysadmin.py @@ -11,6 +11,7 @@ import csv, chardet, StringIO import time from constance import config +from django.db.models import Q from django.conf import settings as dj_settings from django.core.urlresolvers import reverse from django.contrib import messages @@ -22,7 +23,7 @@ from django.utils.translation import ugettext as _ import seaserv from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, \ - seafile_api, get_group, get_group_members + seafile_api, get_group, get_group_members, ccnet_api from pysearpc import SearpcError from seahub.base.accounts import User @@ -1767,10 +1768,24 @@ def user_search(request): """ email = request.GET.get('email', '') - users = ccnet_threaded_rpc.search_emailusers('DB', email, -1, -1) - ldap_users = ccnet_threaded_rpc.search_emailusers('LDAP', email, -1, -1) + # search user from ccnet db + users = ccnet_api.search_emailusers('DB', email, -1, -1) + + # search user from ccnet ldap + ldap_users = ccnet_api.search_emailusers('LDAP', email, -1, -1) users.extend(ldap_users) + # search user from profile + users_from_profile = Profile.objects.filter((Q(nickname__icontains=email)) | + Q(contact_email__icontains=email)) + + for user in users_from_profile: + try: + user_obj = User.objects.get(email=user.user) + except User.DoesNotExist: + continue + users.append(user_obj) + last_logins = UserLastLogin.objects.filter(username__in=[x.email for x in users]) if ENABLE_TRIAL_ACCOUNT: trial_users = TrialAccount.objects.filter(user_or_org__in=[x.email for x in users]) diff --git a/tests/seahub/views/sysadmin/test_user_search.py b/tests/seahub/views/sysadmin/test_user_search.py new file mode 100644 index 0000000000..d16455d929 --- /dev/null +++ b/tests/seahub/views/sysadmin/test_user_search.py @@ -0,0 +1,52 @@ +from django.core.urlresolvers import reverse + +from seahub.profile.models import Profile +from seahub.test_utils import BaseTestCase + +class UserResetTest(BaseTestCase): + def setUp(self): + self.user_name = self.user.username + + def test_can_search_user_from_ccnet(self): + self.login_as(self.admin) + + q = self.user_name[:3] + resp = self.client.get(reverse('user_search') + '?email=%s' % q) + self.assertEqual(200, resp.status_code) + self.assertTemplateUsed('sysadmin/user_search.html') + self.assertContains(resp, self.user_name) + + def test_can_search_user_from_profile_by_name(self): + self.login_as(self.admin) + + nickname = 'nickname' + p = Profile.objects.add_or_update(self.user_name, nickname=nickname) + p.save() + + resp = self.client.get(reverse('user_search') + '?email=%s' % nickname) + self.assertEqual(200, resp.status_code) + self.assertTemplateUsed('sysadmin/user_search.html') + self.assertContains(resp, self.user_name) + + def test_can_search_user_from_profile_by_contact_email(self): + self.login_as(self.admin) + + contact_email= 'contact@email.com' + p = Profile.objects.add_or_update(self.user_name, nickname='nickname') + p.contact_email = contact_email + p.save() + + resp = self.client.get(reverse('user_search') + + '?email=%s' % contact_email) + + self.assertEqual(200, resp.status_code) + self.assertTemplateUsed('sysadmin/user_search.html') + self.assertContains(resp, self.user_name) + + def test_search_user_with_invalid_user_permission(self): + self.login_as(self.user) + + resp = self.client.get(reverse('user_search') + + '?email=%s' % self.user_name) + + self.assertEqual(404, resp.status_code)