mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
"Reply" functionality. Not fully working.
This commit is contained in:
+52
-26
@@ -9,8 +9,8 @@ from django.core.urlresolvers import reverse
|
||||
from django.conf.urls.defaults import include
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from mailng.admin.models import Mailbox
|
||||
from mailng.lib import events, parameters
|
||||
from mailng.lib import _render
|
||||
from mailng.lib import events, parameters, _render
|
||||
from mailng.lib.email_listing import Email
|
||||
from imap_listing import *
|
||||
from forms import *
|
||||
from templatetags.webextras import *
|
||||
@@ -39,8 +39,8 @@ def menu(**kwargs):
|
||||
def userlogin(**kwargs):
|
||||
kwargs["request"].session["password"] = kwargs["password"]
|
||||
|
||||
def getctx(status, **kwargs):
|
||||
callername = sys._getframe(1).f_code.co_name
|
||||
def getctx(status, level=1, **kwargs):
|
||||
callername = sys._getframe(level).f_code.co_name
|
||||
ctx = {"status" : status, "callback" : callername}
|
||||
for kw, v in kwargs.iteritems():
|
||||
ctx[kw] = v
|
||||
@@ -104,6 +104,32 @@ def getmailcontent(request, folder, mail_id):
|
||||
email = Email(msg, mode="html", links="1")
|
||||
return email.render(request)
|
||||
|
||||
@login_required
|
||||
def move(request):
|
||||
for arg in ["msgset", "to"]:
|
||||
if not request.GET.has_key(arg):
|
||||
return
|
||||
folder, id = request.GET["msgset"].split("/")
|
||||
mbc = IMAPconnector(request)
|
||||
mbc.move(id, folder, request.GET["to"])
|
||||
return HttpResponse(simplejson.dumps({"status" : "ok"}),
|
||||
mimetype="application/json")
|
||||
|
||||
@login_required
|
||||
def empty(request, name):
|
||||
mbc = IMAPconnector(request)
|
||||
mbc.empty(name)
|
||||
return folder(request, name, False)
|
||||
|
||||
def render_compose(request, form, bodyheader=None, body=None):
|
||||
menu = compose_menu("", request.session["folder"], request.session["page"],
|
||||
request.user.get_all_permissions())
|
||||
content = render_to_string("webmail/compose.html", {
|
||||
"form" : form, "bodyheader" : bodyheader, "body" : body
|
||||
})
|
||||
ctx = getctx("ok", level=2, menu=menu, listing=content)
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
|
||||
@login_required
|
||||
def compose(request):
|
||||
if request.method == "POST":
|
||||
@@ -124,27 +150,27 @@ def compose(request):
|
||||
|
||||
form = ComposeMailForm()
|
||||
form.fields["from_"].initial = request.user.username
|
||||
menu = compose_menu("", request.session["folder"], request.session["page"],
|
||||
request.user.get_all_permissions())
|
||||
content = render_to_string("webmail/compose.html", {
|
||||
"form" : form
|
||||
})
|
||||
ctx = getctx("ok", menu=menu, listing=content)
|
||||
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
|
||||
return render_compose(request, form)
|
||||
|
||||
@login_required
|
||||
def move(request):
|
||||
for arg in ["msgset", "to"]:
|
||||
if not request.GET.has_key(arg):
|
||||
return
|
||||
folder, id = request.GET["msgset"].split("/")
|
||||
mbc = IMAPconnector(request)
|
||||
mbc.move(id, folder, request.GET["to"])
|
||||
return HttpResponse(simplejson.dumps({"status" : "ok"}),
|
||||
mimetype="application/json")
|
||||
|
||||
@login_required
|
||||
def empty(request, name):
|
||||
mbc = IMAPconnector(request)
|
||||
mbc.empty(name)
|
||||
return folder(request, name, False)
|
||||
def reply(request, folder, mail_id):
|
||||
if request.method == "POST":
|
||||
return
|
||||
msg = fetchmail(request, folder, mail_id, True)
|
||||
email = Email(msg)
|
||||
lines = email.body.split('\n')
|
||||
body = ""
|
||||
for l in lines:
|
||||
if body != "":
|
||||
body += "\n"
|
||||
body += ">%s" % l
|
||||
form = ComposeMailForm()
|
||||
form.fields["from_"].initial = request.user.username
|
||||
form.fields["to"].initial = msg["From"]
|
||||
m = re.match("re\s*:\s*.+", msg["Subject"].lower())
|
||||
if m:
|
||||
form.fields["subject"].initial = msg["Subject"]
|
||||
else:
|
||||
form.fields["subject"].initial = "Re: %s" % msg["Subject"]
|
||||
textheader = msg["From"] + " " + _("wrote:")
|
||||
return render_compose(request, form, textheader, body)
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
<div id="mailheader">
|
||||
{% include "common/genericform.html" %}
|
||||
</div>
|
||||
<textarea id="id_body" name="id_body"></textarea>
|
||||
<textarea id="id_body" name="id_body">
|
||||
{% if bodyheader %}{{ bodyheader }}{% endif %}
|
||||
{% if body %}{{ body }}{% endif %}</textarea>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -106,14 +106,11 @@ tr {
|
||||
register_callback("viewmail", function(resp) {
|
||||
updatelisting(resp, "hidden");
|
||||
$$("a[name=back]").addEvent("click", loadFolder);
|
||||
$$("a[name=reply]").addEvent("click", reply);
|
||||
setDivHeight("mailcontent", $("table-container").getSize().y, 0);
|
||||
});
|
||||
|
||||
loadCompose = function(event) {
|
||||
event.stop();
|
||||
location.hash = "compose/";
|
||||
}
|
||||
register_callback("compose", function(resp) {
|
||||
compose_callback = function(resp) {
|
||||
updatelisting(resp, "hidden");
|
||||
$$("a[name=back]").addEvent("click", loadFolder);
|
||||
$$("a[name=sendmail]").addEvent("click", function(evt) {
|
||||
@@ -127,7 +124,19 @@ tr {
|
||||
$("composemail").send();
|
||||
});
|
||||
setDivHeight("id_body", $("mailheader").getSize().y + 20, 0);
|
||||
});
|
||||
}
|
||||
|
||||
loadCompose = function(event) {
|
||||
event.stop();
|
||||
location.hash = "compose/";
|
||||
}
|
||||
register_callback("compose", compose_callback);
|
||||
|
||||
reply = function(event) {
|
||||
event.stop();
|
||||
location.hash += event.target.get("href");
|
||||
}
|
||||
register_callback("reply", compose_callback);
|
||||
|
||||
loadFolder = function(event, obj) {
|
||||
if (!$defined(obj)) {
|
||||
|
||||
@@ -13,7 +13,19 @@ def viewm_menu(selection, folder, mail_id, page_id, perms):
|
||||
{"name" : "back",
|
||||
"url" : folder + "?page=%s" % page_id + "&menu=1",
|
||||
"img" : "/static/pics/back.png",
|
||||
"label" : _("Back to list")},
|
||||
"label" : _("Back")},
|
||||
{"name" : "reply",
|
||||
"url" : "reply/",
|
||||
"img" : "/static/pics/reply.png",
|
||||
"label" : _("Reply")},
|
||||
{"name" : "reply-all",
|
||||
"url" : "",
|
||||
"img" : "/static/pics/reply-all.png",
|
||||
"label" : _("Reply all")},
|
||||
{"name" : "forward",
|
||||
"url" : "",
|
||||
"img" : "/static/pics/alias.png",
|
||||
"label" : _("Forward")},
|
||||
]
|
||||
|
||||
return render_to_string('main/menu.html',
|
||||
@@ -26,7 +38,7 @@ def compose_menu(selection, folder, page_id, perms):
|
||||
{"name" : "back",
|
||||
"url" : folder + "?page=%s" % page_id + "&menu=1",
|
||||
"img" : "/static/pics/back.png",
|
||||
"label" : _("Back to list")},
|
||||
"label" : _("Back")},
|
||||
{"name" : "sendmail",
|
||||
"url" : "",
|
||||
"img" : "/static/pics/send-receive.png",
|
||||
|
||||
@@ -6,6 +6,7 @@ urlpatterns = patterns('mailng.extensions.webmail.main',
|
||||
(r'^move/$', "move"),
|
||||
(r'^empty/(?P<name>.+)/', "empty"),
|
||||
(r'^(?P<folder>.+)/(?P<mail_id>[\w\-\+]+)/content/$', 'getmailcontent'),
|
||||
(r'^(?P<folder>.+)/(?P<mail_id>[\w\-\+]+)/reply/$', 'reply'),
|
||||
(r'^(?P<folder>.+)/(?P<mail_id>[\w\-\+]+)/$', 'viewmail'),
|
||||
(r'^(?P<name>.+)/$', "folder"),
|
||||
)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 868 B |
Binary file not shown.
|
After Width: | Height: | Size: 693 B |
Reference in New Issue
Block a user