mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Partial implementation of ticket #40
(modifying an alias is not working yet)
This commit is contained in:
+3
-3
@@ -45,13 +45,13 @@ class AliasForm(forms.ModelForm):
|
||||
del kwargs["domain"]
|
||||
super(AliasForm, self).__init__(*args, **kwargs)
|
||||
self.fields['address'].widget.attrs['size'] = 14
|
||||
self.fields['mbox'].widget.attrs['size'] = 5
|
||||
self.fields['mboxes'].widget.attrs['size'] = 5
|
||||
if domain:
|
||||
self.fields['mbox'].queryset = Mailbox.objects.filter(domain=domain.id)
|
||||
self.fields['mboxes'].queryset = Mailbox.objects.filter(domain=domain.id)
|
||||
|
||||
class Meta:
|
||||
model = Alias
|
||||
fields = ('address', 'mbox', 'enabled')
|
||||
fields = ('address', 'mboxes', 'enabled')
|
||||
|
||||
class PermissionForm(forms.Form):
|
||||
domain = forms.ModelChoiceField(queryset=Domain.objects.all(), label=_("Domain"),
|
||||
|
||||
+3
-3
@@ -38,7 +38,7 @@ class Domain(models.Model):
|
||||
class Mailbox(models.Model):
|
||||
name = models.CharField(_('name'), max_length=100,
|
||||
help_text=_("First name and last name of mailbox owner"))
|
||||
address = models.CharField(_('address'), max_length=10,
|
||||
address = models.CharField(_('address'), max_length=100,
|
||||
help_text=_("Mailbox address (without the @domain.tld part)"))
|
||||
full_address = models.CharField(max_length=150)
|
||||
password = models.CharField(_('password'), max_length=100)
|
||||
@@ -102,8 +102,8 @@ class Alias(models.Model):
|
||||
address = models.CharField(_('address'), max_length=100,
|
||||
help_text=_("The alias address (without the domain part)"))
|
||||
full_address = models.CharField(max_length=150)
|
||||
mbox = models.ForeignKey(Mailbox, verbose_name=_('mailbox'),
|
||||
help_text=_("The mailbox this alias points to"))
|
||||
mboxes = models.ManyToManyField(Mailbox, verbose_name=_('mailboxes'),
|
||||
help_text=_("The mailboxes this alias points to"))
|
||||
enabled = models.BooleanField(_('enabled'),
|
||||
help_text=_("Check to activate this alias"))
|
||||
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ urlpatterns = patterns('mailng.admin.views',
|
||||
(r'^domains/(?P<dom_id>\d+)/newmailbox/$', 'newmailbox'),
|
||||
(r'^domains/(?P<dom_id>\d+)/editmailbox/(?P<mbox_id>\d+)/$', 'editmailbox'),
|
||||
(r'^domains/(?P<dom_id>\d+)/deletemailbox/(?P<mbox_id>\d+)/$', 'delmailbox'),
|
||||
(r'^domains/(?P<dom_id>\d+)/newalias/(?P<mbox_id>\d+)/$', 'newalias'),
|
||||
(r'^domains/(?P<dom_id>\d+)/newalias/$', 'newalias'),
|
||||
(r'^domains/(?P<dom_id>\d+)/editalias/(?P<alias_id>\d+)/$', 'editalias'),
|
||||
(r'^domains/(?P<dom_id>\d+)/$', 'mailboxes'),
|
||||
(r'^domains/(?P<dom_id>\d+)/raw/$', 'mailboxes_raw'),
|
||||
|
||||
+13
-16
@@ -275,12 +275,9 @@ def delmailbox(request, dom_id, mbox_id=None):
|
||||
def aliases(request, dom_id=None, mbox_id=None):
|
||||
domain = Domain.objects.get(pk=dom_id)
|
||||
if not mbox_id:
|
||||
mboxes = Mailbox.objects.filter(domain=dom_id)
|
||||
aliases = []
|
||||
for mb in mboxes:
|
||||
aliases += Alias.objects.filter(mbox=mb.id)
|
||||
aliases = Alias.objects.filter(mboxes__domain__id=dom_id).distinct()
|
||||
else:
|
||||
aliases = Alias.objects.filter(mbox=mbox_id)
|
||||
aliases = Alias.objects.filter(mboxes__id=mbox_id)
|
||||
return _render(request, 'admin/aliases.html', {
|
||||
"aliases" : aliases, "domain" : domain
|
||||
})
|
||||
@@ -288,30 +285,30 @@ def aliases(request, dom_id=None, mbox_id=None):
|
||||
@login_required
|
||||
@good_domain
|
||||
@permission_required("admin.add_alias")
|
||||
def newalias(request, dom_id, mbox_id):
|
||||
mbox = Mailbox.objects.get(pk=mbox_id)
|
||||
def newalias(request, dom_id):
|
||||
if request.method == "POST":
|
||||
form = AliasForm(request.POST)
|
||||
error = None
|
||||
if form.is_valid():
|
||||
if Alias.objects.filter(address=request.POST["address"],
|
||||
mbox=mbox_id):
|
||||
error = _("Alias with this address already exists")
|
||||
if Alias.objects.filter(address=request.POST["address"]):
|
||||
error = _("Alias with this name already exists")
|
||||
else:
|
||||
domain = Domain.objects.get(pk=dom_id)
|
||||
alias = form.save(commit=False)
|
||||
alias.full_address = "%s@%s" % (alias.address, mbox.domain.name)
|
||||
alias.full_address = "%s@%s" % (alias.address, domain.name)
|
||||
alias.save()
|
||||
ctx = _ctx_ok(reverse(admin.views.aliases, args=[mbox.domain.id]))
|
||||
form.save_m2m()
|
||||
ctx = _ctx_ok(reverse(admin.views.aliases, args=[dom_id]))
|
||||
return HttpResponse(simplejson.dumps(ctx),
|
||||
mimetype="application/json")
|
||||
ctx = _ctx_ko("admin/newalias.html", {
|
||||
"mbox" : mbox, "form" : form, "error" : error
|
||||
"domain" : dom_id, "form" : form, "error" : error
|
||||
})
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
|
||||
form = AliasForm({"mbox" : mbox_id}, domain=mbox.domain)
|
||||
form = AliasForm()
|
||||
return render_to_response('admin/newalias.html', {
|
||||
"mbox" : mbox, "form" : form, "noerrors" : True
|
||||
"domain" : dom_id, "form" : form, "noerrors" : True
|
||||
})
|
||||
|
||||
@login_required
|
||||
@@ -341,7 +338,7 @@ def editalias(request, dom_id, alias_id):
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
form = AliasForm(instance=alias)
|
||||
return _render(request, 'admin/editalias.html', {
|
||||
"form" : form, "alias" : alias
|
||||
"form" : form, "alias" : alias, "domain" : dom_id
|
||||
})
|
||||
|
||||
@login_required
|
||||
|
||||
@@ -330,7 +330,7 @@ ul.visible {
|
||||
selectedRows.each(function(item, index) {
|
||||
msgset.include(item.get("id"));
|
||||
});
|
||||
{% url extensions.webmail.main.move as moveurl %}
|
||||
{% url extensions.webmail.views.move as moveurl %}
|
||||
new Request.JSON({url: "{{ moveurl }}",
|
||||
onSuccess: get_callback("folder")}
|
||||
).get({msgset : msgset.join(), to : dest});
|
||||
|
||||
@@ -28,8 +28,12 @@
|
||||
<img src="/static/pics/remove.png" border="0" title="{% trans 'Delete alias' %}" />
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ alias.address }}@{{ alias.mbox.domain.name }}</td>
|
||||
<td>{{ alias.mbox.address }}@{{ alias.mbox.domain.name }}</td>
|
||||
<td>{{ alias.full_address }}</td>
|
||||
<td>
|
||||
{% for mb in alias.mboxes.all %}
|
||||
{{ mb.full_address }}<br/>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ alias.enabled|yesno }}</td
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
{% load i18n %}
|
||||
<div class="title"><h1>Alias {{ alias.address }}</h1></div>
|
||||
{% if error %}<div class="error">{{ error }}</div>{% endif %}
|
||||
{% url admin.views.editalias alias.mbox.domain.id alias.id as edit_url %}
|
||||
{% url admin.views.editalias domain alias.id as edit_url %}
|
||||
<form action="{{ edit_url }}" method="POST" id="aliasform" name="aliasform">
|
||||
{% include "common/genericform.html" %}
|
||||
<div class="spacer"></div>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<img src="/static/pics/remove.png" border="0"
|
||||
title="{% trans 'Delete mailbox' %}" />
|
||||
</a>
|
||||
{% url admin.views.newalias domain.id mb.id as alias_url %}
|
||||
{% url admin.views.newalias domain.id as alias_url %}
|
||||
<a href="{{ alias_url }}" class="boxed"
|
||||
rel="{handler:'iframe',size:{x:300,y:250}}">
|
||||
<img src="/static/pics/add.png" border="0" title="{% trans 'Add new alias' %}"/>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
{% block content %}
|
||||
<div class="title"><h1>{% trans "New alias" %}</h1></div>
|
||||
{% if error %}<div class="error">{{ error }}</div>{% endif %}
|
||||
{% url admin.views.newalias mbox.domain_id mbox.id as box_url %}
|
||||
{% url admin.views.newalias domain as box_url %}
|
||||
<form action="{{ box_url }}" method="POST" id="aliasform" name="aliasform">
|
||||
{% include "common/genericform.html" %}
|
||||
<div class="spacer"></div>
|
||||
|
||||
Reference in New Issue
Block a user