From a260817960a10e1e6c290d747798f9032e119c6d Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 14 Jan 2013 21:58:32 +0100 Subject: [PATCH] Add *enabled* status to exports (and so imports) see #116 & #317 --- modoboa/admin/forms.py | 3 ++- modoboa/admin/models.py | 29 +++++++++++++++++------------ modoboa/admin/views.py | 16 ++++++++-------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/modoboa/admin/forms.py b/modoboa/admin/forms.py index 23d77fdf5..8bdbe13a6 100644 --- a/modoboa/admin/forms.py +++ b/modoboa/admin/forms.py @@ -273,7 +273,8 @@ class AliasForm(GenericAliasForm): self.fields.keyOrder = ['email', 'int_recipient', 'enabled'] if kwargs.has_key("instance"): alias = kwargs["instance"] - self.fields["int_recipient"].initial = alias.mboxes.all()[0].full_address + if len(alias.mboxes.all()): + self.fields["int_recipient"].initial = alias.mboxes.all()[0].full_address def clean_int_recipient(self): localpart, domname = split_mailbox(self.cleaned_data["int_recipient"]) diff --git a/modoboa/admin/models.py b/modoboa/admin/models.py index 3d4c3d413..40f16ec12 100644 --- a/modoboa/admin/models.py +++ b/modoboa/admin/models.py @@ -369,6 +369,8 @@ class User(DUser): :param row: a list containing the expected information :param crypt_password: """ + from modoboa.lib.permissions import grant_access_to_object + if len(row) < 6: raise AdminError(_("Invalid line")) self.username = row[1].strip() @@ -393,7 +395,8 @@ class User(DUser): self.email = row[7].strip() if self.email != "": - mailbox, domname = split_mailbox(row[6].strip()) + mailbox, domname = split_mailbox(self.email) + print mailbox, domname try: domain = Domain.objects.get(name=domname) except Domain.DoesNotExist: @@ -556,15 +559,15 @@ class Domain(DatesAware): return self.name def from_csv(self, user, row): - if len(row) < 3: + if len(row) < 4: raise AdminError(_("Invalid line")) self.name = row[1].strip() self.quota = int(row[2].strip()) - self.enabled = True + self.enabled = (row[3].strip() == 'True') self.save() def to_csv(self, csvwriter): - csvwriter.writerow(["domain", self.name, self.quota]) + csvwriter.writerow(["domain", self.name, self.quota, self.enabled]) class DomainAlias(DatesAware): name = models.CharField(ugettext_lazy("name"), max_length=100, unique=True, @@ -593,12 +596,12 @@ class DomainAlias(DatesAware): def from_csv(self, user, row): """Create a domain alias from a CSV row - Expected format: ["domainalias", domain alias name, targeted domain] + Expected format: ["domainalias", domain alias name, targeted domain, enabled] :param user: a ``User`` object :param row: a list containing the alias definition """ - if len(row) < 3: + if len(row) < 4: raise AdminError(_("Invalid line")) self.name = row[1].strip() domname = row[2].strip() @@ -606,7 +609,7 @@ class DomainAlias(DatesAware): self.target = Domain.objects.get(name=domname) except Domain.DoesNotExist: raise AdminError(_("Unknown domain %s" % domname)) - self.enabled = True + self.enabled = row[3].strip() == 'True' self.save() def to_csv(self, csvwriter): @@ -614,7 +617,7 @@ class DomainAlias(DatesAware): :param csvwriter: a ``csv.writer`` object """ - csvwriter.writerow(["domainalias", self.name, self.target.name]) + csvwriter.writerow(["domainalias", self.name, self.target.name, self.enabled]) class Mailbox(DatesAware): address = models.CharField( @@ -849,6 +852,8 @@ class Alias(DatesAware): @property def name_or_rcpt(self): rcpts = self.get_recipients() + if not len(rcpts): + return "---" if len(rcpts) > 1: return "%s, ..." % rcpts[0] return rcpts[0] @@ -903,7 +908,7 @@ class Alias(DatesAware): return True return False - def from_csv(self, user, row, expected_elements=4): + def from_csv(self, user, row, expected_elements=5): if len(row) < expected_elements: raise AdminError(_("Invalid line: %s" % row)) localpart, domname = split_mailbox(row[1].strip()) @@ -915,10 +920,10 @@ class Alias(DatesAware): raise PermDeniedException self.address = localpart self.domain = domain - self.enabled = True + self.enabled = (row[2].strip() == 'True') int_rcpts = [] ext_rcpts = [] - for rcpt in row[2:]: + for rcpt in row[3:]: rcpt = rcpt.strip() localpart, domname = split_mailbox(rcpt) try: @@ -941,7 +946,7 @@ class Alias(DatesAware): altype = "forward" else: altype = "alias" - row = [altype, self.full_address] + row = [altype, self.full_address, self.enabled] row += self.get_recipients() csvwriter.writerow(row) diff --git a/modoboa/admin/views.py b/modoboa/admin/views.py index 8bafd7539..9489731c3 100644 --- a/modoboa/admin/views.py +++ b/modoboa/admin/views.py @@ -573,7 +573,7 @@ def import_account(user, row, formopts): account.from_csv(user, row, formopts["crypt_password"]) grant_access_to_object(user, account, is_owner=True) events.raiseEvent("AccountCreated", account) - if len(row) > 5: + if len(account.mailbox_set.all()): mb = account.mailbox_set.all()[0] grant_access_to_object(user, mb, is_owner=True) events.raiseEvent("CreateMailbox", user, mb) @@ -586,10 +586,10 @@ def _import_alias(user, row, **kwargs): events.raiseEvent("MailboxAliasCreated", user, alias) def import_alias(user, row, formopts): - _import_alias(user, row, expected_elements=3) + _import_alias(user, row, expected_elements=4) def import_forward(user, row, formopts): - _import_alias(user, row, expected_elements=3) + _import_alias(user, row, expected_elements=4) def import_dlist(user, row, formopts): _import_alias(user, row) @@ -649,9 +649,9 @@ def import_identities(request): helptext = _("""Provide a CSV file where lines respect one of the following formats:

The first element of each line is mandatory and must be equal to one of the previous values.

@@ -708,8 +708,8 @@ def import_domains(request): helptext = _("""Provide a CSV file where lines respect one of the following formats:

The first element of each line is mandatory and must be equal to one of the previous values.

You can use a different character as separator.