Code improvement.

see #315
This commit is contained in:
Antoine Nguyen
2013-01-17 22:05:06 +01:00
parent c6847ac06e
commit e5d293fb6e
2 changed files with 16 additions and 20 deletions
+15 -3
View File
@@ -1,5 +1,6 @@
# coding: utf-8
from django.db import models, IntegrityError
from django.db.models import Q
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from django.contrib.contenttypes.models import ContentType
@@ -230,9 +231,10 @@ class User(DUser):
return False
return True
def get_identities(self):
def get_identities(self, squery=None):
"""Return all identities owned by this user
:param squery: an optional filter
:return: a queryset
"""
from modoboa.lib.permissions import get_content_type
@@ -241,12 +243,22 @@ class User(DUser):
userct = get_content_type(self)
ids = self.objectaccess_set.filter(content_type=userct) \
.values_list('object_id', flat=True)
result = User.objects.select_related().filter(pk__in=ids)
q = Q(pk__in=ids)
if squery:
q &= Q(username__contains=squery)
result = User.objects.select_related().filter(q)
alct = get_content_type(Alias)
ids = self.objectaccess_set.filter(content_type=alct) \
.values_list('object_id', flat=True)
return chain(result, Alias.objects.select_related().filter(pk__in=ids))
q = Q(pk__in=ids)
if squery:
if squery.find('@') != -1:
local_part, domname = split_mailbox(squery)
q &= Q(address__contains=local_part, domain__name__contains=domname)
else:
q &= Q(address__contains=squery)
return chain(result, Alias.objects.select_related().filter(q))
def get_domains(self):
+1 -17
View File
@@ -299,23 +299,7 @@ def delforward(request):
@login_required
@user_passes_test(lambda u: u.has_perm("auth.add_user") or u.has_perm("admin.add_alias"))
def _identities(request):
idents_list = request.user.get_identities()
squery = request.GET.get("searchquery", None)
if squery:
uct = get_content_type(User)
uids = idents_list.filter(content_type=uct).values_list("object_id", flat=True)
objects = [u for u in User.objects.filter(pk__in=uids, username__contains=squery)]
alct = get_content_type(Alias)
alids = idents_list.filter(content_type=alct).values_list("object_id", flat=True)
if squery.find('@') != -1:
local_part, domname = split_mailbox(squery)
mbaliases = Alias.objects.filter(address__contains=local_part,
domain__name__contains=domname)
q = Q(address__contains=local_part, domain__name__contains=domname)
else:
q = Q(address__contains=squery)
objects += [al for al in Alias.objects.filter(Q(pk__in=alids) & q)]
idents_list = request.user.get_identities(request.GET.get("searchquery", None))
objects = sorted(idents_list, key=lambda o: o.identity)
paginator = Paginator(objects, int(parameters.get_admin("ITEMS_PER_PAGE")))