mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user