mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
@@ -56,61 +56,50 @@ def get_listing_page(objects, pagenum):
|
||||
return page
|
||||
|
||||
|
||||
def get_identities(user, args=None):
|
||||
def get_identities(user, searchquery=None, idtfilter=None, grpfilter=None):
|
||||
"""Return all the identities owned by a user
|
||||
|
||||
:param user: the desired user
|
||||
:param args: a args object
|
||||
:param str searchquery: search pattern
|
||||
:param list idtfilter: identity type filters
|
||||
:param list grpfilter: group names filters
|
||||
:return: a queryset
|
||||
"""
|
||||
from itertools import chain
|
||||
|
||||
if args:
|
||||
squery = args.get("searchquery", None)
|
||||
idtfilter = args.getlist("idtfilter", None)
|
||||
grpfilter = args.getlist("grpfilter", None)
|
||||
else:
|
||||
squery = None
|
||||
idtfilter = None
|
||||
grpfilter = None
|
||||
|
||||
accounts = []
|
||||
if not idtfilter or "account" in idtfilter:
|
||||
if idtfilter is None or idtfilter == "account":
|
||||
ids = user.objectaccess_set \
|
||||
.filter(content_type=ContentType.objects.get_for_model(user)) \
|
||||
.values_list('object_id', flat=True)
|
||||
q = Q(pk__in=ids)
|
||||
if squery:
|
||||
q &= Q(username__icontains=squery) | Q(email__icontains=squery)
|
||||
if grpfilter and len(grpfilter):
|
||||
if "SuperAdmins" in grpfilter:
|
||||
if searchquery is not None:
|
||||
q &= Q(username__icontains=searchquery) \
|
||||
| Q(email__icontains=searchquery)
|
||||
if grpfilter is not None:
|
||||
if grpfilter == "SuperAdmins":
|
||||
q &= Q(is_superuser=True)
|
||||
grpfilter.remove("SuperAdmins")
|
||||
if len(grpfilter):
|
||||
q |= Q(groups__name__in=grpfilter)
|
||||
else:
|
||||
q &= Q(groups__name__in=grpfilter)
|
||||
q &= Q(groups__name=grpfilter)
|
||||
accounts = User.objects.select_related().filter(q)
|
||||
|
||||
aliases = []
|
||||
if not idtfilter or ("alias" in idtfilter
|
||||
or "forward" in idtfilter
|
||||
or "dlist" in idtfilter):
|
||||
if idtfilter is None or (idtfilter in ["alias", "forward", "dlist"]):
|
||||
alct = ContentType.objects.get_for_model(Alias)
|
||||
ids = user.objectaccess_set.filter(content_type=alct) \
|
||||
.values_list('object_id', flat=True)
|
||||
q = Q(pk__in=ids)
|
||||
if squery:
|
||||
if '@' in squery:
|
||||
local_part, domname = split_mailbox(squery)
|
||||
if searchquery is not None:
|
||||
if '@' in searchquery:
|
||||
local_part, domname = split_mailbox(searchquery)
|
||||
if local_part:
|
||||
q &= Q(address__icontains=local_part)
|
||||
if domname:
|
||||
q &= Q(domain__name__icontains=domname)
|
||||
else:
|
||||
q &= Q(address__icontains=squery) | Q(domain__name__icontains=squery)
|
||||
q &= Q(address__icontains=searchquery) | \
|
||||
Q(domain__name__icontains=searchquery)
|
||||
aliases = Alias.objects.select_related().filter(q)
|
||||
if idtfilter:
|
||||
aliases = [al for al in aliases if al.type in idtfilter]
|
||||
|
||||
if idtfilter is not None:
|
||||
aliases = [al for al in aliases if al.type == idtfilter]
|
||||
return chain(accounts, aliases)
|
||||
|
||||
@@ -48,6 +48,12 @@ def domains_menu(selection, user):
|
||||
|
||||
@register.simple_tag
|
||||
def identities_menu(user):
|
||||
"""Menu specific to the Identities page.
|
||||
|
||||
:param ``User`` user: the connecter user
|
||||
:rtype: str
|
||||
:return: the rendered menu
|
||||
"""
|
||||
entries = [
|
||||
{"name": "identities",
|
||||
"label": _("List identities"),
|
||||
@@ -94,7 +100,8 @@ def identities_menu(user):
|
||||
"img": "icon-share-alt",
|
||||
"url": reverse("modoboa.extensions.admin.views.export.export_identities"),
|
||||
"modal": True,
|
||||
"modalcb": "admin.exportform_cb"}
|
||||
"modalcb": "admin.exportform_cb"
|
||||
}
|
||||
]
|
||||
|
||||
return render_to_string('common/menulist.html', {
|
||||
|
||||
@@ -47,7 +47,7 @@ def export_identities(request):
|
||||
form.is_valid()
|
||||
fp = cStringIO.StringIO()
|
||||
csvwriter = csv.writer(fp, delimiter=form.cleaned_data["sepchar"])
|
||||
for ident in get_identities(request.user):
|
||||
for ident in get_identities(request.user, **request.session['identities_filters']):
|
||||
ident.to_csv(csvwriter)
|
||||
content = fp.getvalue()
|
||||
fp.close()
|
||||
|
||||
@@ -29,7 +29,10 @@ from modoboa.extensions.admin.forms import (
|
||||
lambda u: u.has_perm("core.add_user") or u.has_perm("admin.add_alias")
|
||||
)
|
||||
def _identities(request):
|
||||
idents_list = get_identities(request.user, request.GET)
|
||||
filters = dict((fname, request.GET.get(fname, None))
|
||||
for fname in ['searchquery', 'idtfilter', 'grpfilter'])
|
||||
request.session['identities_filters'] = filters
|
||||
idents_list = get_identities(request.user, **filters)
|
||||
sort_order, sort_dir = get_sort_order(request.GET, "identity",
|
||||
["identity", "name_or_rcpt", "tags"])
|
||||
if sort_order in ["identity", "name_or_rcpt"]:
|
||||
|
||||
Reference in New Issue
Block a user