Export options.

see #116
This commit is contained in:
Antoine Nguyen
2013-01-17 21:51:02 +01:00
parent 55df67973f
commit c6847ac06e
5 changed files with 87 additions and 44 deletions
+30
View File
@@ -344,6 +344,36 @@ class ImportIdentitiesForm(ImportDataForm):
help_text=ugettext_lazy("Check this option if passwords contained in your file are not crypted")
)
class ExportDataForm(forms.Form):
filename = forms.CharField(
label=ugettext_lazy("File name"), max_length=100, required=False
)
sepchar = forms.CharField(label=ugettext_lazy("Separator"), max_length=1, required=False)
def __init__(self, *args, **kwargs):
super(ExportDataForm, self).__init__(*args, **kwargs)
self.fields["sepchar"].widget.attrs = {"class" : "span1"}
def clean_sepchar(self):
if self.cleaned_data["sepchar"] == "":
return ";"
return str(self.cleaned_data["sepchar"])
def clean_filename(self):
if self.cleaned_data["filename"] == "":
return self.fields["filename"].initial
return str(self.cleaned_data["filename"])
class ExportDomainsForm(ExportDataForm):
def __init__(self, *args, **kwargs):
super(ExportDomainsForm, self).__init__(*args, **kwargs)
self.fields["filename"].initial = "modoboa-domains.csv"
class ExportIdentitiesForm(ExportDataForm):
def __init__(self, *args, **kwargs):
super(ExportIdentitiesForm, self).__init__(*args, **kwargs)
self.fields["filename"].initial = "modoboa-identities.csv"
class AccountFormGeneral(forms.ModelForm):
username = forms.CharField(label=ugettext_lazy("Username"), max_length=254)
role = forms.ChoiceField(
-18
View File
@@ -230,24 +230,6 @@ class User(DUser):
return False
return True
def get_accounts(self):
"""Return all accounts owned by this user
:return: a queryset
"""
from modoboa.lib.permissions import get_content_type
return self.objectaccess_set.filter(content_type=get_content_type(self))
def get_aliases(self):
"""Return all aliases owned by this user
:return: a queryset
"""
from modoboa.lib.permissions import get_content_type
return self.objectaccess_set.filter(content_type=get_content_type(Alias))
def get_identities(self):
"""Return all identities owned by this user
+8
View File
@@ -84,6 +84,14 @@ Admin.prototype = {
}
},
exportform_cb: function() {
$(".submit").one('click', function(e) {
e.preventDefault();
$("#exportform").submit();
$("#modalbox").modal('hide');
});
},
reload_listing: function(data) {
this.navobj.update(true);
if (data.respmsg) {
+6 -2
View File
@@ -88,7 +88,9 @@ def domains_menu(selection, user):
{"name" : "export",
"label" : _("Export"),
"img" : "icon-share-alt",
"url" : reverse(admin.views.export_domains),}
"url" : reverse(admin.views.export_domains),
"modal" : True,
"modalcb" : "admin.exportform_cb"}
]
return render_to_string('common/menulist.html', {
@@ -133,7 +135,9 @@ def identities_menu(user):
{"name" : "export",
"label" : _("Export"),
"img" : "icon-share-alt",
"url" : reverse(admin.views.export_identities),}
"url" : reverse(admin.views.export_identities),
"modal" : True,
"modalcb" : "admin.exportform_cb"}
]
return render_to_string('common/menulist.html', {
+43 -24
View File
@@ -697,18 +697,27 @@ def _export(content, filename):
@login_required
@permission_required(lambda u: u.has_perm("auth.add_user") or u.has_perm("auth.add_alias"))
def export_identities(request):
fp = cStringIO.StringIO()
csvwriter = csv.writer(fp, delimiter=';')
for oa in request.user.get_accounts():
if oa.content_object:
oa.content_object.to_csv(csvwriter)
for oa in request.user.get_aliases():
if oa.content_object:
oa.content_object.to_csv(csvwriter)
content = fp.getvalue()
fp.close()
return _export(content, "modoboa-identities.csv")
ctx = {
"title" : _("Export identities"),
"action_label" : _("Export"),
"action_classes" : "submit",
"formid" : "exportform",
"action" : reverse(export_identities),
}
if request.method == "POST":
form = ExportIdentitiesForm(request.POST)
form.is_valid()
fp = cStringIO.StringIO()
csvwriter = csv.writer(fp, delimiter=form.cleaned_data["sepchar"])
for ident in request.user.get_identities():
ident.to_csv(csvwriter)
content = fp.getvalue()
fp.close()
return _export(content, form.cleaned_data["filename"])
ctx["form"] = ExportIdentitiesForm()
return render(request, "common/generic_modal_form.html", ctx)
@login_required
@permission_required("admin.add_domain")
@@ -742,16 +751,26 @@ def import_domains(request):
@login_required
@permission_required("admin.add_domain")
def export_domains(request):
import cStringIO
import csv
ctx = {
"title" : _("Export domains"),
"action_label" : _("Export"),
"action_classes" : "submit",
"formid" : "exportform",
"action" : reverse(export_domains),
}
fp = cStringIO.StringIO()
csvwriter = csv.writer(fp, delimiter=';')
for dom in request.user.get_domains():
dom.to_csv(csvwriter)
for da in dom.domainalias_set.all():
da.to_csv(csvwriter)
content = fp.getvalue()
fp.close()
return _export(content, "modoboa-domains.csv")
if request.method == "POST":
form = ExportDomainsForm(request.POST)
form.is_valid()
fp = cStringIO.StringIO()
csvwriter = csv.writer(fp, delimiter=form.cleaned_data["sepchar"])
for dom in request.user.get_domains():
dom.to_csv(csvwriter)
for da in dom.domainalias_set.all():
da.to_csv(csvwriter)
content = fp.getvalue()
fp.close()
return _export(content, form.cleaned_data["filename"])
ctx["form"] = ExportDomainsForm()
return render(request, "common/generic_modal_form.html", ctx)