def _identities(request): 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"]: objects = sorted(idents_list, key=lambda o: getattr(o, sort_order), reverse=sort_dir == '-') else: objects = sorted(idents_list, key=lambda o: o.tags[0], reverse=sort_dir == '-') page = get_listing_page(objects, request.GET.get("page", 1)) return render_to_json_response({ "table": _render_to_string(request, "admin/identities_table.html", { "identities": page.object_list, "tableid": "objects_table" }), "handle_mailboxes": parameters.get_admin("HANDLE_MAILBOXES", raise_error=False), "page": page.number, "paginbar": pagination_bar(page) })
def list_quotas(request, tplname="admin/quotas.html"): from modoboa.lib.dbutils import db_type sort_order, sort_dir = get_sort_order(request.GET, "address") mboxes = Mailbox.objects.get_for_admin( request.user, request.GET.get("searchquery", None)) mboxes = mboxes.exclude(quota=0) if sort_order in ["address", "quota", "quota_value__bytes"]: mboxes = mboxes.order_by("%s%s" % (sort_dir, sort_order)) elif sort_order == "quota_usage": if db_type() == "postgres": select = '(admin_quota.bytes::float / (CAST(admin_mailbox.quota AS BIGINT) * 1048576)) * 100' else: select = 'admin_quota.bytes / (admin_mailbox.quota * 1048576) * 100' mboxes = mboxes.extra(select={'quota_usage': select}, where=["admin_quota.mbox_id=admin_mailbox.id"], tables=["admin_quota"], order_by=["%s%s" % (sort_dir, sort_order)]) else: raise BadRequest(_("Invalid request")) page = get_listing_page(mboxes, request.GET.get("page", 1)) return render_to_json_response({ "page": page.number, "paginbar": pagination_bar(page), "table": _render_to_string(request, tplname, {"mboxes": page}) })
def _domains(request): sort_order, sort_dir = get_sort_order(request.GET, "name") filters = dict( (flt, request.GET.get(flt, None)) for flt in ['domfilter', 'searchquery'] + events.raiseQueryEvent('ExtraDomainFilters') ) request.session['domains_filters'] = filters domainlist = get_domains( request.user, **filters ) if sort_order == 'name': domainlist = sorted( domainlist, key=lambda d: getattr(d, sort_order), reverse=sort_dir == '-' ) else: domainlist = sorted(domainlist, key=lambda d: d.tags[0], reverse=sort_dir == '-') page = get_listing_page(domainlist, request.GET.get("page", 1)) return render_to_json_response({ "table": _render_to_string(request, 'admin/domains_table.html', { 'domains': page.object_list, 'tableid': 'domains' }), "page": page.number, "paginbar": pagination_bar(page), "handle_mailboxes": parameters.get_admin("HANDLE_MAILBOXES", raise_error=False), "auto_account_removal": parameters.get_admin("AUTO_ACCOUNT_REMOVAL") })
def _listing(request): if not request.user.is_superuser and request.user.group != 'SimpleUsers': if not Domain.objects.get_for_admin(request.user).count(): return empty_quarantine(request) navparams = QuarantineNavigationParameters(request) navparams.store() lst = SQLlisting( request.user, navparams=navparams, elems_per_page=int( parameters.get_user(request.user, "MESSAGES_PER_PAGE") ) ) page = lst.paginator.getpage(navparams.get('page')) if not page: return empty_quarantine(request) content = lst.fetch(request, page.id_start, page.id_stop) ctx = getctx( "ok", listing=content, paginbar=pagination_bar(page), page=page.number ) if request.session.get('location', 'listing') != 'listing': ctx['menu'] = quar_menu() request.session['location'] = 'listing' return render_to_json_response(ctx)
def list_quotas(request, tplname="admin/quotas.html"): from modoboa.lib.dbutils import db_type sort_order, sort_dir = get_sort_order(request.GET, "address") mboxes = Mailbox.objects.get_for_admin( request.user, request.GET.get("searchquery", None) ) mboxes = mboxes.exclude(quota=0) if sort_order in ["address", "quota", "quota_value__bytes"]: mboxes = mboxes.order_by("%s%s" % (sort_dir, sort_order)) elif sort_order == "quota_usage": if db_type() == "postgres": select = '(admin_quota.bytes::float / (CAST(admin_mailbox.quota AS BIGINT) * 1048576)) * 100' else: select = 'admin_quota.bytes / (admin_mailbox.quota * 1048576) * 100' mboxes = mboxes.extra( select={'quota_usage': select}, where=["admin_quota.mbox_id=admin_mailbox.id"], tables=["admin_quota"], order_by=["%s%s" % (sort_dir, sort_order)] ) else: raise BadRequest(_("Invalid request")) page = get_listing_page(mboxes, request.GET.get("page", 1)) return render_to_json_response({ "page": page.number, "paginbar": pagination_bar(page), "table": _render_to_string(request, tplname, { "mboxes": page }) })
def _listing(request): flt = None rcptfilter = None msgs = None if not request.user.is_superuser and request.user.group != 'SimpleUsers': if not Domain.objects.get_for_admin(request.user).count(): return empty_quarantine(request) navparams = QuarantineNavigationParameters(request) navparams.store() pattern = navparams.get('pattern', '') if pattern: criteria = navparams.get('criteria') if criteria == "both": criteria = "from_addr,subject,to" for c in criteria.split(","): if c == "from_addr": nfilter = Q(mail__from_addr__contains=pattern) elif c == "subject": nfilter = Q(mail__subject__contains=pattern) elif c == "to": rcptfilter = pattern continue else: raise BadRequest("unsupported search criteria %s" % c) flt = nfilter if flt is None else flt | nfilter msgtype = navparams.get('msgtype', None) if msgtype is not None: nfilter = Q(mail__msgrcpt__content=msgtype) flt = flt | nfilter if flt is not None else nfilter msgs = get_wrapper().get_mails(request, rcptfilter) page = navparams.get('page') lst = SQLlisting(request.user, msgs, flt, navparams=request.session["quarantine_navparams"], elems_per_page=int( parameters.get_user(request.user, "MESSAGES_PER_PAGE"))) page = lst.paginator.getpage(page) if not page: return empty_quarantine(request) content = lst.fetch(request, page.id_start, page.id_stop) ctx = getctx("ok", listing=content, paginbar=pagination_bar(page), page=page.number) if request.session.get('location', 'listing') != 'listing': ctx['menu'] = quar_menu() request.session['location'] = 'listing' return render_to_json_response(ctx)
def _listing(request): flt = None rcptfilter = None msgs = None if not request.user.is_superuser and request.user.group != 'SimpleUsers': if not Domain.objects.get_for_admin(request.user).count(): return empty_quarantine(request) navparams = QuarantineNavigationParameters(request) navparams.store() pattern = navparams.get('pattern', '') if pattern: criteria = navparams.get('criteria') if criteria == "both": criteria = "from_addr,subject,to" for c in criteria.split(","): if c == "from_addr": nfilter = Q(mail__from_addr__contains=pattern) elif c == "subject": nfilter = Q(mail__subject__contains=pattern) elif c == "to": rcptfilter = pattern continue else: raise BadRequest("unsupported search criteria %s" % c) flt = nfilter if flt is None else flt | nfilter msgtype = navparams.get('msgtype', None) if msgtype is not None: nfilter = Q(mail__msgrcpt__content=msgtype) flt = flt | nfilter if flt is not None else nfilter msgs = get_wrapper().get_mails(request, rcptfilter) page = navparams.get('page') lst = SQLlisting( request.user, msgs, flt, navparams=request.session["quarantine_navparams"], elems_per_page=int(parameters.get_user(request.user, "MESSAGES_PER_PAGE")) ) page = lst.paginator.getpage(page) if not page: return empty_quarantine(request) content = lst.fetch(request, page.id_start, page.id_stop) ctx = getctx( "ok", listing=content, paginbar=pagination_bar(page), page=page.number ) if request.session.get('location', 'listing') != 'listing': ctx['menu'] = quar_menu() request.session['location'] = 'listing' return render_to_json_response(ctx)
def logs(request, tplname="core/logs.html"): from modoboa.lib.templatetags.lib_tags import pagination_bar sort_order, sort_dir = get_sort_order( request.GET, "date_created", allowed_values=["date_created", "level", "logger", "message"] ) page = get_listing_page(Log.objects.all().order_by("%s%s" % (sort_dir, sort_order)), request.GET.get("page", 1)) return ajax_simple_response( { "status": "ok", "content": render_to_string(tplname, {"logs": page.object_list}), "page": page.number, "paginbar": pagination_bar(page), } )
def _domains(request): sort_order, sort_dir = get_sort_order(request.GET, "name") domains = Domain.objects.get_for_admin(request.user) squery = request.GET.get("searchquery", None) if squery is not None: q = Q(name__contains=squery) q |= Q(domainalias__name__contains=squery) domains = domains.filter(q).distinct() if sort_order in ["name", "domainalias__name"]: domains = domains.order_by("%s%s" % (sort_dir, sort_order)) page = get_listing_page(domains, request.GET.get("page", 1)) return ajax_simple_response({ "table": DomainsTable(request, page.object_list).render(), "page": page.number, "paginbar": pagination_bar(page), "handle_mailboxes": parameters.get_admin("HANDLE_MAILBOXES", raise_error=False), "auto_account_removal": parameters.get_admin("AUTO_ACCOUNT_REMOVAL") })
def logs(request, tplname="core/logs.html"): from modoboa.lib.templatetags.lib_tags import pagination_bar sort_order, sort_dir = get_sort_order( request.GET, "date_created", allowed_values=['date_created', 'level', 'logger', 'message']) page = get_listing_page( Log.objects.all().order_by("%s%s" % (sort_dir, sort_order)), request.GET.get("page", 1)) return render_to_json_response({ "content": render_to_string(tplname, { "logs": page.object_list, }), "page": page.number, "paginbar": pagination_bar(page), })