dmails: add unread folder, show only received messages by default.

* Add unread and deleted dmail folders.
* Remove dmail_folder cookie (wasn't used).
* Default to the received folder so that we don't show sent messages by default.
This commit is contained in:
evazion
2020-01-30 22:51:26 -06:00
parent f8db577c25
commit d8eba59cfa
7 changed files with 37 additions and 62 deletions

View File

@@ -15,11 +15,7 @@ class DmailsController < ApplicationController
end
def index
if params[:folder] && params[:set_default_folder]
cookies.permanent[:dmail_folder] = params[:folder]
end
@dmails = Dmail.visible.paginated_search(params, defaults: { is_spam: false, is_deleted: false }, count_pages: true)
@dmails = Dmail.visible.paginated_search(params, defaults: { folder: "received" }, count_pages: true)
respond_with(@dmails)
end

View File

@@ -1,28 +0,0 @@
module DmailsHelper
def dmails_current_folder_path
case cookies[:dmail_folder]
when "sent"
sent_dmails_path
when "received"
received_dmails_path
else
all_dmails_path
end
end
def all_dmails_path(params = {})
dmails_path(folder: "all", **params)
end
def sent_dmails_path(params = {})
dmails_path(search: {from_id: CurrentUser.id}, folder: "sent", **params)
end
def spam_dmails_path
dmails_path(search: {to_id: CurrentUser.id, is_spam: true}, folder: "spam")
end
def received_dmails_path(params = {})
dmails_path(search: {to_id: CurrentUser.id}, folder: "received", **params)
end
end

View File

@@ -19,6 +19,15 @@ class Dmail < ApplicationRecord
api_attributes including: [:key]
scope :active, -> { where(is_deleted: false) }
scope :deleted, -> { where(is_deleted: true) }
scope :read, -> { where(is_read: true) }
scope :unread, -> { where(is_read: false) }
scope :spam, -> { where(is_spam: true) }
scope :visible, -> { where(owner: CurrentUser.user) }
scope :sent, -> { where("dmails.owner_id = dmails.from_id") }
scope :received, -> { where("dmails.owner_id = dmails.to_id") }
concerning :SpamMethods do
class_methods do
def is_spammer?(user)
@@ -109,24 +118,21 @@ class Dmail < ApplicationRecord
where("dmails.from_id = ? AND dmails.owner_id != ?", user.id, user.id)
end
def active
where("is_deleted = ?", false)
end
def deleted
where("is_deleted = ?", true)
end
def read
where(is_read: true)
end
def unread
where("is_read = false and is_deleted = false")
end
def visible
where("owner_id = ?", CurrentUser.id)
def folder_matches(folder)
case folder
when "received"
active.received
when "unread"
active.received.unread
when "sent"
active.sent
when "spam"
active.spam
when "deleted"
deleted
else
all
end
end
def search(params)
@@ -136,6 +142,8 @@ class Dmail < ApplicationRecord
q = q.text_attribute_matches(:title, params[:title_matches])
q = q.text_attribute_matches(:body, params[:message_matches], index_column: :message_index)
q = q.folder_matches(params[:folder])
q = q.read if params[:read].to_s.truthy?
q = q.unread if params[:read].to_s.falsy?

View File

@@ -1,5 +1,5 @@
<%= search_form_for(dmails_path) do |f| %>
<%= f.hidden_field :folder, value: params[:folder] %>
<%= f.input :folder, as: :hidden, input_html: { value: params[:search][:folder] } %>
<%= f.input :title_matches, label: "Title", hint: "Use * for wildcard", input_html: { value: params[:search][:title_matches] } %>
<%= f.input :message_matches, label: "Message", hint: "Use * for wildcard", input_html: { value: params[:search][:messages_matches] } %>
<%= f.input :to_name, label: "To", input_html: { value: params[:search][:to_name], data: { autocomplete: "user" } } %>

View File

@@ -1,10 +1,11 @@
<% content_for(:secondary_links) do %>
<%= quick_search_form_for(:message_matches, dmails_path, "dmails") %>
<%= subnav_link_to "All", all_dmails_path(set_default_folder: true) %>
<%= subnav_link_to "Received", received_dmails_path(set_default_folder: true) %>
<%= subnav_link_to "Sent", sent_dmails_path(set_default_folder: true) %>
<%= subnav_link_to "Spam", spam_dmails_path %>
<%= subnav_link_to "Deleted", dmails_path(search: { is_deleted: true }) %>
<%= subnav_link_to "All", dmails_path(search: { folder: "all" }) %>
<%= subnav_link_to "Received", dmails_path(search: { folder: "received" }) %>
<%= subnav_link_to "Unread", dmails_path(search: { folder: "unread" }) %>
<%= subnav_link_to "Sent", dmails_path(search: { folder: "sent" }) %>
<%= subnav_link_to "Spam", dmails_path(search: { folder: "spam" }) %>
<%= subnav_link_to "Deleted", dmails_path(search: { folder: "deleted" }) %>
<li>|</li>
<%= subnav_link_to "New", new_dmail_path %>
<%= subnav_link_to "Mark all as read", {:controller => "dmails", :action => "mark_all_as_read"}, :method => :post, :remote => true %></li>

View File

@@ -3,10 +3,8 @@
<div id="c-dmails">
<div id="a-index">
<% if params[:folder] == "sent" %>
<h1>Sent Messages</h1>
<% elsif params[:folder] == "received" %>
<h1>Received Messages</h1>
<% if params[:search][:folder].present? %>
<h1><%= params[:search][:folder].titleize %> Messages</h1>
<% else %>
<h1>Messages</h1>
<% end %>

View File

@@ -12,7 +12,7 @@
<% if @user.id == CurrentUser.user.id %>
<%= subnav_link_to "Profile", profile_path %>
<%= subnav_link_to "Settings", settings_path %>
<%= subnav_link_to "Messages #{CurrentUser.user.dmail_count}", dmails_current_folder_path %>
<%= subnav_link_to "Messages #{CurrentUser.user.dmail_count}", dmails_path %>
<% if !@user.is_platinum? %>
<%= subnav_link_to "Upgrade", new_user_upgrade_path %>