# coding: utf-8 """ The *limits* extension ---------------------- """ from django.contrib.auth.models import Permission, Group from django.db import IntegrityError from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext_noop as _, ugettext from django.core.urlresolvers import reverse from modoboa.lib import events from modoboa.lib.webutils import static_url from models import * from forms import ResourcePoolForm import controls import views baseurl = "limits" def init(): from modoboa.admin.models import User, Domain ct = ContentType.objects.get(app_label="admin", model="domain") dagrp = Group.objects.get(name="DomainAdmins") grp = Group(name="Resellers") grp.save() grp.permissions.add(*dagrp.permissions.all()) ct = ContentType.objects.get_for_model(Permission) for pname in ["view_permissions"]: perm = Permission.objects.get(content_type=ct, codename=pname) grp.permissions.add(perm) ct = ContentType.objects.get_for_model(Domain) for pname in ["view_domains", "add_domain", "change_domain", "delete_domain"]: perm = Permission.objects.get(content_type=ct, codename=pname) grp.permissions.add(perm) grp.save() for user in User.objects.filter(groups__name='DomainAdmins'): try: controls.create_pool(user) except IntegrityError: pass def destroy(): Group.objects.get(name="Resellers").delete() def infos(): return { "name" : "Limits", "version" : "1.0", "description" : ugettext("Limits for objects creation"), "url" : baseurl } @events.observe("GetExtraRoles") def get_extra_roles(user): if user.is_superuser: return [("Resellers", _("Reseller")),] return [] @events.observe("ExtraAdminContent") def display_pool_usage(user, target, currentpage): from django.template.loader import render_to_string if target != "leftcol" or user.is_superuser: return [] if currentpage == "identities": names = ["mailboxes_limit", "mailbox_aliases_limit"] if user.has_perm("admin.add_domain"): names += ["domain_admins_limit"] else: names = ["domains_limit", "domain_aliases_limit"] limits = user.limitspool.limit_set.filter(name__in=names, maxvalue__gt=0) if len(limits) == 0: return [] return [render_to_string("limits/poolusage.html", dict(limits=limits))] @events.observe("ExtraAccountForm") def extra_account_form(user, account=None): if not user.is_superuser and not user.belongs_to_group("Resellers"): return [] if account: if not account.belongs_to_group("Resellers") and \ not account.belongs_to_group("DomainAdmins"): return [] return [ dict( id="resources", title=_("Resources"), cls=ResourcePoolForm ) ] @events.observe("CheckExtraAccountForm") def check_form_access(account, form): if form["id"] != "resources": return [True] if not account.belongs_to_group("Resellers") and \ not account.belongs_to_group("DomainAdmins"): return [False] return [True] @events.observe("FillAccountInstances") def fill_account_instances(user, account, instances): if not user.is_superuser and not user.belongs_to_group("Resellers"): return if not account.belongs_to_group("Resellers") and \ not account.belongs_to_group("DomainAdmins"): return instances["resources"] = account @events.observe("GetStaticContent") def get_static_content(user): if user.group == "SimpleUsers": return [] return """ """