mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-22 06:28:41 +02:00
+15
-3
@@ -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
@@ -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")))
|
||||
|
||||
Reference in New Issue
Block a user