Skip to content

Commit

Permalink
Merge pull request #79 from modoboa/feature/mark_as_not_junk
Browse files Browse the repository at this point in the history
Added 'mark as not spam' button.
  • Loading branch information
tonioo committed May 19, 2017
2 parents 32260ba + c228995 commit 26d434b
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 24 deletions.
40 changes: 24 additions & 16 deletions modoboa_webmail/static/modoboa_webmail/js/webmail.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,11 @@ Webmail.prototype = {
$document.on(
"click", "a[name=totrash]", $.proxy(this.delete_messages, this));
$document.on(
"click", "a[name=mark_as_junk_multi]", $.proxy(this.markMessagesAsJunk, this));
"click", "a[name=mark_as_junk_multi]",
$.proxy(this.toggleJunkStateMulti, this));
$document.on(
"click", "a[name=mark_as_not_junk_multi]",
$.proxy(this.toggleJunkStateMulti, this));

$document.on(
"click", "a[name*=mark-]", $.proxy(this.send_mark_request, this));
Expand All @@ -137,7 +141,11 @@ Webmail.prototype = {
$document.on("click", "a[name=replyall]", $.proxy(this.reply_loader, this));
$document.on("click", "a[name=forward]", $.proxy(this.reply_loader, this));
$document.on("click", "a[name=delete]", $.proxy(this.delete_message, this));
$document.on("click", "a[name=mark_as_junk]", $.proxy(this.markMessageAsJunk, this));
$document.on("click", "a[name=mark_as_junk]",
$.proxy(this.toggleJunkState, this));
$document.on("click", "a[name=mark_as_not_junk]",
$.proxy(this.toggleJunkState, this));

$document.on(
"click", "a[name=activate_links]", $.proxy(function(e) { this.display_mode(e, "1"); }, this));
$document.on("click", "a[name=disable_links]", $.proxy(function(e) { this.display_mode(e, "0"); }, this));
Expand Down Expand Up @@ -887,42 +895,42 @@ Webmail.prototype = {
}).done($.proxy(this.delete_callback, this));
},

markMessageAsJunk: function(e) {
toggleJunkState: function(e) {
var $link = get_target(e, 'a');
e.preventDefault();
$.ajax({
url: $link.attr('href'),
dataType: 'json'
}).done($.proxy(this.markAsJunkCallback, this));
}).done($.proxy(this.toggleJunkStateCallback, this));
},

markMessagesAsJunk: function(e) {
toggleJunkStateMulti: function(e) {
e.preventDefault();
var $link = get_target(e, 'a');
if ($link.hasClass("disabled")) {
if ($link.hasClass('disabled')) {
return;
}
var msgs = this.htmltable.current_selection();
var selection = [];
var unseen_cnt = 0;
var unseenCnt = 0;

if (!msgs.length) {
return;
}
$link.addClass("disabled");
$link.addClass('disabled');
$.each(msgs, function(idx, item) {
var $tr = $(item);
selection.push($tr.attr("id"));
if ($tr.hasClass("unseen")) {
unseen_cnt++;
selection.push($tr.attr('id'));
if ($tr.hasClass('unseen')) {
unseenCnt++;
}
});
this.change_unseen_messages(this.get_current_mailbox(), -unseen_cnt);
this.change_unseen_messages(this.options.trash, unseen_cnt);
this.change_unseen_messages(this.get_current_mailbox(), -unseenCnt);
this.change_unseen_messages(this.options.trash, unseenCnt);
$.ajax({
url: $link.attr("href"),
url: $link.attr('href'),
data: {mbox: this.get_current_mailbox(), selection: selection}
}).done($.proxy(this.markAsJunkCallback, this));
}).done($.proxy(this.toggleJunkStateCallback, this));
},

display_mode: function(e, value) {
Expand Down Expand Up @@ -1207,7 +1215,7 @@ Webmail.prototype = {
$("body").notify("success", data, 2000);
},

markAsJunkCallback: function(data) {
toggleJunkStateCallback: function(data) {
this.go_back_to_listing();
$("body").notify("success", data, 2000);
},
Expand Down
19 changes: 18 additions & 1 deletion modoboa_webmail/templatetags/webmail_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,19 @@ def viewmail_menu(selection, folder, user, mail_id=None):
"label": _("Disable links")
}]
}]
if folder == user.parameters.get_value("junk_folder"):
entries[3] = {
"name": "mark_as_not_junk",
"img": "fa fa-thumbs-up",
"class": "btn-success",
"url": u"{0}?mbox={1}&selection[]={2}".format(
reverse("modoboa_webmail:mail_mark_as_not_junk"),
folder, mail_id),
"title": _("Mark as not spam")
}
menu = render_to_string('common/buttons_list.html',
{"selection": selection, "entries": entries,
"user": user, "extraclasses": "pull-left"})

return menu


Expand Down Expand Up @@ -133,6 +142,14 @@ def listmailbox_menu(selection, folder, user):
"url": u"{0}?name={1}".format(
reverse("modoboa_webmail:trash_empty"), folder)}
]
elif folder == user.parameters.get_value("junk_folder"):
entries[1] = {
"name": "mark_as_not_junk_multi",
"img": "fa fa-thumbs-up",
"class": "btn-success",
"url": reverse("modoboa_webmail:mail_mark_as_not_junk"),
"title": _("Mark as not spam")
}
return render_to_string('modoboa_webmail/main_action_bar.html', {
'selection': selection, 'entries': entries, 'user': user, 'css': "nav",
'STATIC_URL': settings.STATIC_URL
Expand Down
2 changes: 2 additions & 0 deletions modoboa_webmail/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
name="mail_mark"),
url(r'^mark_as_junk/$', views.mark_as_junk,
name="mail_mark_as_junk"),
url(r'^mark_as_not_junk/$', views.mark_as_not_junk,
name="mail_mark_as_not_junk"),

url(r'^newfolder/$', views.newfolder,
name="folder_add"),
Expand Down
30 changes: 23 additions & 7 deletions modoboa_webmail/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,19 +120,35 @@ def mark(request, name):
})


@login_required
@needs_mailbox()
def mark_as_junk(request):
"""Mark a message as SPAM."""
def _move_selection_to_folder(request, folder):
"""Move selected messages to the given folder."""
mbox = request.GET.get("mbox")
selection = request.GET.getlist("selection[]")
if mbox is None or selection is None:
raise BadRequest(_("Invalid request"))
selection = [item for item in selection if item.isdigit()]
mbc = get_imapconnector(request)
mbc.move(",".join(selection), mbox,
request.user.parameters.get_value("junk_folder"))
count = len(selection)
mbc.move(",".join(selection), mbox, folder)
return len(selection)


@login_required
@needs_mailbox()
def mark_as_junk(request):
"""Mark a message as SPAM."""
count = _move_selection_to_folder(
request, request.user.parameters.get_value("junk_folder"))
message = ungettext("%(count)d message marked",
"%(count)d messages marked",
count) % {"count": count}
return render_to_json_response(message)


@login_required
@needs_mailbox()
def mark_as_not_junk(request):
"""Mark a message as not SPAM."""
count = _move_selection_to_folder(request, "INBOX")
message = ungettext("%(count)d message marked",
"%(count)d messages marked",
count) % {"count": count}
Expand Down

0 comments on commit 26d434b

Please sign in to comment.