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 = request.user.get_mailboxes(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 AdminError(_("Invalid request")) page = get_listing_page(mboxes, request.GET.get("page", 1)) return ajax_simple_response({ "status": "ok", "page": page.number, "paginbar": pagination_bar(page), "table": _render_to_string(request, tplname, { "mboxes": 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 = request.user.get_mailboxes(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 AdminError(_("Invalid request")) page = get_listing_page(mboxes, request.GET.get("page", 1)) return ajax_simple_response({ "status": "ok", "page": page.number, "paginbar": pagination_bar(page), "table": _render_to_string(request, tplname, {"mboxes": page}) })
def _identities(request): idents_list = request.user.get_identities(request.GET) 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 ajax_simple_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 logs(request, tplname="admin/logs.html"): 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 = request.user.get_domains() 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="admin/logs.html"): 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), })