Add *enabled* status to exports (and so imports)

see #116 & #317
This commit is contained in:
Antoine Nguyen
2013-01-14 21:58:32 +01:00
parent 699fbae9b0
commit a260817960
3 changed files with 27 additions and 21 deletions
+2 -1
View File
@@ -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"])
+17 -12
View File
@@ -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)
+8 -8
View File
@@ -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:
<ul>
<li><em>account; loginname; password; first name; last name; enabled, group; address[, domain, ...]</em></li>
<li><em>alias; address; internal recipient</em></li>
<li><em>forward; address; external recipient</em></li>
<li><em>dlist; address; recipient; recipient; ...</em></li>
<li><em>alias; address; enabled; internal recipient</em></li>
<li><em>forward; address; enabled; external recipient</em></li>
<li><em>dlist; address; enabled; recipient; recipient; ...</em></li>
</ul>
<p>The first element of each line is mandatory and must be equal to one of the previous values.</p>
@@ -708,8 +708,8 @@ def import_domains(request):
helptext = _("""Provide a CSV file where lines respect one of the following formats:
<ul>
<li><em>domain; name; quota</em></li>
<li><em>domainalias; name; targeted domain</em></li>
<li><em>domain; name; quota; enabled</em></li>
<li><em>domainalias; name; targeted domain; enabled</em></li>
</ul>
<p>The first element of each line is mandatory and must be equal to one of the previous values.</p>
<p>You can use a different character as separator.</p>