diff --git a/extensions/webmail/imaputils.py b/extensions/webmail/imaputils.py
index e231ec01e..cec5e83ab 100644
--- a/extensions/webmail/imaputils.py
+++ b/extensions/webmail/imaputils.py
@@ -470,20 +470,20 @@ class IMAPconnector(object):
raise WebmailError(data[0])
return True
- def getquota(self, folder):
+ def getquota(self, mailbox):
if not "QUOTA" in self.m.capabilities:
self.quota_limit = self.quota_actual = None
return
- status, data = self.m.getquotaroot(self._encodefolder(folder))
- if status == "OK":
- quotadef = data[1][0]
- m = re.match("[^\s]+ \(STORAGE (\d+) (\d+)\)", quotadef)
- if not m:
- print "Problem while parsing quota def"
- return
- self.quota_limit = int(m.group(2))
- self.quota_actual = int(m.group(1))
+ data = self._cmd("GETQUOTAROOT", self._encodefolder(mailbox))
+ print data
+ quotadef = data[1][0]
+ m = re.match("[^\s]+ \(STORAGE (\d+) (\d+)\)", quotadef)
+ if not m:
+ print "Problem while parsing quota def"
+ return
+ self.quota_limit = int(m.group(2))
+ self.quota_actual = int(m.group(1))
def fetchpart(self, uid, mbox, partnum):
self.select_mailbox(mbox, False)
@@ -517,6 +517,8 @@ class IMAPconnector(object):
msg['class'] = 'unseen'
if r'\Answered' in data[int(uid)]['FLAGS']:
msg['img_flags'] = static_url('pics/answered.png')
+ if r'$Forwarded' in data[int(uid)]['FLAGS']:
+ msg['img_flags'] = static_url('pics/forwarded.png')
bs = BodyStructure(data[int(uid)]['BODYSTRUCTURE'])
if bs.has_attachments():
msg['img_withatts'] = static_url('pics/attachment.png')
diff --git a/extensions/webmail/static/js/webmail.js b/extensions/webmail/static/js/webmail.js
index 5f57c1073..6ec536852 100644
--- a/extensions/webmail/static/js/webmail.js
+++ b/extensions/webmail/static/js/webmail.js
@@ -23,6 +23,7 @@ var Webmail = new Class({
this.init_folders_buttons();
this.init_folders_browsing();
+ this.init_quota_bar();
/* FIXME: à faire uniquement pour le mode pushState */
/*this.init_emails_table();*/
@@ -35,6 +36,7 @@ var Webmail = new Class({
current_anchor.register_callback("reply", this.compose_callback.bind(this));
current_anchor.register_callback("replyall", this.compose_callback.bind(this));
current_anchor.register_callback("forward", this.compose_callback.bind(this));
+ current_anchor.register_callback("delete", this.delete_callback);
this.gspinner = new Spinner("document.body", {
message: gettext("Loading, please wait..."),
@@ -478,7 +480,9 @@ var Webmail = new Class({
$$("a[name=delete]").addEvent("click", function(event) {
var lnk = event.target;
event.stop();
- this.simple_request(lnk.get("href"));
+ this.simple_request(lnk.get("href"), undefined, function(resp) {
+ history.go(-1);
+ });
}.bind(this));
$$("a[name=activate_links]").addEvent("click", function(evt) {
evt.stop();
@@ -620,7 +624,6 @@ var Webmail = new Class({
profile: "gray",
spinner: true
});
- params["json"] = "1";
new Request.JSON({
url : url,
onSuccess : function(response) {
diff --git a/extensions/webmail/templates/webmail/index.html b/extensions/webmail/templates/webmail/index.html
index 5931fc72b..3f1208fc6 100644
--- a/extensions/webmail/templates/webmail/index.html
+++ b/extensions/webmail/templates/webmail/index.html
@@ -225,6 +225,6 @@ function wm_updatelisting(resp) {
{% block menu %}{{ menu }}{% endblock %}
{% block footer %}
{% trans "Mailbox quota" %}
-
+{{ quota }}
{{ block.super }}
{% endblock %}
diff --git a/extensions/webmail/templatetags/webextras.py b/extensions/webmail/templatetags/webextras.py
index 0a27bdbf6..43a03a12a 100644
--- a/extensions/webmail/templatetags/webextras.py
+++ b/extensions/webmail/templatetags/webextras.py
@@ -31,7 +31,7 @@ def viewmail_menu(selection, folder, user, mail_id=None):
"label" : _("Forward")},
{"name" : "delete",
"img" : static_url("pics/remove.png"),
- "url" : "action=delete&mbox=%s&mailid=%s" % (folder, mail_id),
+ "url" : reverse(webmail.views.delete) + "?mbox=%s&mailid=%s" % (folder, mail_id),
"label" : _("Delete")},
{"name" : "display_options",
"label" : _("Display options"),
diff --git a/extensions/webmail/urls.py b/extensions/webmail/urls.py
index 17a146d4d..64a27c006 100644
--- a/extensions/webmail/urls.py
+++ b/extensions/webmail/urls.py
@@ -13,6 +13,7 @@ urlpatterns = patterns(
(r'^getmailcontent', 'getmailcontent'),
# (r'^compose/$', "compose"),
+ (r'^delete/$', 'delete'),
(r'^move/$', "move"),
(r'^mark/(?P.+)/$', "mark"),
(r'^empty/(?P.+)/$', "empty"),
@@ -25,7 +26,7 @@ urlpatterns = patterns(
(r'^delattachment/$', 'delattachment'),
(r'^(?P.+)/(?P[\w\-\+]+)/part/$', 'getattachment'),
- (r'^(?P.+)/(?P[\w\-\+]+)/delete/$', 'delete'),
+ #(r'^(?P.+)/(?P[\w\-\+]+)/delete/$', 'delete'),
#(r'^(?P.+)/(?P[\w\-\+]+)/content/$', 'getmailcontent'),
(r'^(?P.+)/(?P[\w\-\+]+)/forward/$', 'forward'),
# (r'^(?P.+)/(?P[\w\-\+]+)/reply/$', 'reply'),
diff --git a/extensions/webmail/views.py b/extensions/webmail/views.py
index ee551b267..604d1dac0 100644
--- a/extensions/webmail/views.py
+++ b/extensions/webmail/views.py
@@ -123,60 +123,6 @@ def index(request):
return _render_error(request, user_context={"error" : exp})
return lst.render(request)
-def fetchmail(request, mbox, mailid, all=False):
- imapc = get_imapconnector(request)
- res = imapc.fetchmail(mbox, mailid)
-
- return res
- # res = IMAPconnector(user=request.user.username,
- # password=request.session["password"]).fetch(start=mail_id,
- # folder=folder,
- # all=all)
- # if len(res):
- # return res[0]
- # return None
-
-# @login_required
-# @is_not_localadmin()
-# def viewmail(request, folder, mail_id=None):
-# from templatetags.webextras import viewm_menu
-
-# if request.GET.has_key("links"):
-# links = int(request.GET["links"])
-# else:
-# links = parameters.get_user(request.user, "ENABLE_LINKS") == "yes" and 1 or 0
-# url = reverse(getmailcontent, args=[folder, mail_id]) + ("?links=%d" % links)
-# content = Template("""
-#
-# """).render(Context({"url" : url}))
-# menu = viewm_menu("", get_current_url(request), folder, mail_id,
-# request.user.get_all_permissions())
-# mbc = IMAPconnector(user=request.user.username,
-# password=request.session["password"])
-# ctx = getctx("ok", **__render_common_components(request, folder,
-# menu=menu, content=content))
-# return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
-
-
-@login_required
-@needs_mailbox()
-def viewmail(request, folder, mail_id=None):
- from templatetags.webextras import viewm_menu
-
- #content = fetchmail(request, mbox, mailid, True)
-
- # if "class" in msg.keys() and msg["class"] == "unseen":
- # IMAPconnector(user=request.user.username,
- # password=request.session["password"]).msg_read(folder, mail_id)
-
- email = ImapEmail(mbox, mailid, request, links=request.GET["links"])
- return _render(request, "common/viewmail.html", {
- "headers" : email.render_headers(folder=mbox, mail_id=mailid),
- "folder" : mbox, "imapid" : mailid, "mailbody" : email.body
- })
-
-
-
@login_required
@needs_mailbox()
def getattachment(request, folder, mail_id):
@@ -226,12 +172,15 @@ def move(request):
@login_required
@needs_mailbox()
-def delete(request, fdname, mail_id):
- mbc = IMAPconnector(user=request.user.username,
- password=request.session["password"])
- mbc.move(mail_id, fdname, parameters.get_user(request.user, "TRASH_FOLDER"))
- ctx = getctx("ok", next=get_current_url(request))
- return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
+def delete(request):
+ mbox = request.GET.get("mbox", None)
+ mailid = request.GET.get("mailid", None)
+ if mbox is None or mailid is None:
+ raise WebmailError(_("Invalid request"))
+ mbc = get_imapconnector(request)
+ mbc.move(mailid, mbox, parameters.get_user(request.user, "TRASH_FOLDER"))
+ resp = dict(status="ok")
+ return ajax_simple_response(resp)
@login_required
@needs_mailbox()
@@ -265,98 +214,6 @@ def compact(request, name):
imapc.compact(name)
return ajax_simple_response(dict(status="ok"))
-# def render_compose(request, form, posturl, email=None, insert_signature=False):
-# menu = compose_menu("", get_current_url(request),
-# request.user.get_all_permissions())
-# editor = parameters.get_user(request.user, "EDITOR")
-# if email is None:
-# body = ""
-# textheader = ""
-# else:
-# body = email.body
-# textheader = email.textheader
-# if insert_signature:
-# signature = EmailSignature(request.user)
-# body += str(signature)
-# randid = None
-# if not request.GET.has_key("id"):
-# if request.session.has_key("compose_mail"):
-# clean_attachments(request.session["compose_mail"]["attachments"])
-# randid = set_compose_session(request)
-# elif not request.session.has_key("compose_mail") \
-# or request.session["compose_mail"]["id"] != request.GET["id"]:
-# randid = set_compose_session(request)
-
-# attachments = request.session["compose_mail"]["attachments"]
-# if len(attachments):
-# short_att_list = "(%s)" \
-# % ", ".join(map(lambda att: att["fname"],
-# attachments[:2] + [{"fname" : "..."}] \
-# if len(attachments) > 2 else attachments))
-# else:
-# short_att_list = ""
-# content = _render_to_string(request, "webmail/compose.html", {
-# "form" : form, "bodyheader" : textheader,
-# "body" : body, "posturl" : posturl,
-# "attachments" : attachments, "short_att_list" : short_att_list
-# })
-# mbc = IMAPconnector(user=request.user.username,
-# password=request.session["password"])
-# ctx = getctx("ok", level=2, editor=editor,
-# **__render_common_components(request, request.session["folder"],
-# menu=menu, content=content))
-# if randid is not None:
-# ctx["id"] = randid
-# return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
-
-# @login_required
-# @is_not_localadmin()
-# def compose(request):
-# if request.method == "POST":
-# status, resp = send_mail(request, posturl=reverse(compose))
-# return resp
-
-# form = ComposeMailForm()
-# form.fields["from_"].initial = request.user.username
-# return render_compose(request, form, reverse(compose), insert_signature=True)
-
-# @login_required
-# @needs_mailbox()
-# def reply(request, folder, mail_id):
-# msg = fetchmail(request, folder, mail_id, True)
-# if request.method == "POST":
-# status, resp = send_mail(request, origmsg=msg,
-# posturl=reverse(reply, args=[folder, mail_id]))
-# if status:
-# IMAPconnector(user=request.user.username,
-# password=request.session["password"]).msg_answered(folder,
-# mail_id)
-# return resp
-
-# form = ComposeMailForm()
-# email = ReplyModifier(msg, request.user, form, request.GET.has_key("all"),
-# addrfull=True, links="1")
-# return render_compose(request, form, reverse(reply, args=[folder, mail_id]),
-# email)
-
-# @login_required
-# @needs_mailbox()
-# def forward(request, folder, mail_id):
-# if request.method == "POST":
-# status, response = send_mail(request,
-# posturl=reverse(forward, args=[folder, mail_id]))
-# if status:
-# IMAPconnector(user=request.user.username,
-# password=request.session["password"]).msgforwarded(folder,
-# mail_id)
-# return response
-
-# msg = fetchmail(request, folder, mail_id, True)
-# form = ComposeMailForm()
-# email = ForwardModifier(msg, request.user, form, addrfull=True, links="1")
-# return render_compose(request, form, reverse(forward, args=[folder, mail_id]),
-# email)
-
def separate_folder(fullname, sep="."):
"""Split a folder name
@@ -641,7 +498,7 @@ def forward(request):
def msg_forwarded(mbox, mailid):
get_imapconnector(request).msg_forwarded(mbox, mailid)
- return compose_and_send(request, "reply", msg_forwarded)
+ return compose_and_send(request, "forward", msg_forwarded)
@login_required
@needs_mailbox()
@@ -650,7 +507,7 @@ def getmailcontent(request):
mailid = request.GET.get("mailid", None)
if mbox is None or mailid is None:
raise WebmailError(_("Invalid request"))
- email = ImapEmail(mbox, mailid, request, links=request.GET["links"])
+ email = ImapEmail(mbox, mailid, request, links=int(request.GET["links"]))
return _render(request, "common/viewmail.html", {
"headers" : email.render_headers(folder=mbox, mail_id=mailid),
"folder" : mbox, "imapid" : mailid, "mailbody" : email.body
@@ -660,8 +517,12 @@ def viewmail(request):
mailid = request.GET.get("mailid", None)
if mailid is None:
raise WebmailError(_("Invalid request"))
+ links = request.GET.get("links", None)
+ if links is None:
+ links = 1 if parameters.get_user(request.user, "ENABLE_LINKS") == "yes" else 0
+ else:
+ links = int(links)
- links = 1
url = reverse(getmailcontent) + "?mbox=%s&mailid=%s&links=%d" % \
(request.session["mbox"], mailid, links)
content = Template("""
@@ -720,6 +581,7 @@ def newindex(request):
response["refreshrate"] = \
int(parameters.get_user(request.user, "REFRESH_INTERVAL")) * 1000
response["mboxes"] = render_mboxes_list(request, imapc)
+ response["quota"] = ImapListing.computequota(imapc)
return _render(request, "webmail/index.html", response)
if action in ["reply", "forward"]: