Log mail delivery errors to database and add an UI for it
This commit is contained in:
parent
0363f2dadc
commit
97abcabffa
16 changed files with 137 additions and 4 deletions
30
app/controllers/admin/mail_delivery_status_controller.rb
Normal file
30
app/controllers/admin/mail_delivery_status_controller.rb
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
class Admin::MailDeliveryStatusController < Admin::BaseController
|
||||
inherit_resources
|
||||
|
||||
def index
|
||||
@maildeliverystatus = MailDeliveryStatus.order(created_at: :desc)
|
||||
@maildeliverystatus = @maildeliverystatus.where(email: params[:email]) unless params[:email].blank?
|
||||
@maildeliverystatus = @maildeliverystatus.page(params[:page]).per(@per_page)
|
||||
end
|
||||
|
||||
def show
|
||||
@maildeliverystatus = MailDeliveryStatus.find(params[:id])
|
||||
filename = "maildeliverystatus_#{params[:id]}.#{MIME::Types[@maildeliverystatus.attachment_mime].first.preferred_extension}"
|
||||
send_data(@maildeliverystatus.attachment_data, :filename => filename, :type => @maildeliverystatus.attachment_mime)
|
||||
end
|
||||
|
||||
def destroy_all
|
||||
@maildeliverystatus = MailDeliveryStatus.delete_all
|
||||
redirect_to admin_mail_delivery_status_index_path, notice: t('.notice')
|
||||
rescue => error
|
||||
redirect_to admin_mail_delivery_status_index_path, alert: I18n.t('errors.general_msg', msg: error.message)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@maildeliverystatus = MailDeliveryStatus.find(params[:id])
|
||||
@maildeliverystatus.destroy
|
||||
redirect_to admin_mail_delivery_status_index_path, notice: t('.notice')
|
||||
rescue => error
|
||||
redirect_to admin_mail_delivery_status_index_path, I18n.t('errors.general_msg', msg: error.message)
|
||||
end
|
||||
end
|
||||
|
|
@ -3,6 +3,7 @@ class Admin::UsersController < Admin::BaseController
|
|||
|
||||
def index
|
||||
@users = params[:show_deleted] ? User.deleted : User.undeleted
|
||||
@users = @users.includes(:mail_delivery_status)
|
||||
|
||||
# if somebody uses the search field:
|
||||
@users = @users.natural_search(params[:user_name]) unless params[:user_name].blank?
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ class Mailer < ActionMailer::Base
|
|||
message = yield
|
||||
message.deliver_now
|
||||
rescue => error
|
||||
Rails.logger.warn "Can't deliver mail to #{message.to[0]}: #{error.message}"
|
||||
MailDeliveryStatus.create email: message.to[0], message: error.message
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
5
app/models/mail_delivery_status.rb
Normal file
5
app/models/mail_delivery_status.rb
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
class MailDeliveryStatus < ActiveRecord::Base
|
||||
self.table_name = 'mail_delivery_status'
|
||||
|
||||
belongs_to :user, foreign_key: 'email', primary_key: 'email'
|
||||
end
|
||||
|
|
@ -18,6 +18,7 @@ class User < ActiveRecord::Base
|
|||
has_many :tasks, :through => :assignments
|
||||
has_many :send_messages, :class_name => "Message", :foreign_key => "sender_id"
|
||||
has_many :created_orders, :class_name => 'Order', :foreign_key => 'created_by_user_id', :dependent => :nullify
|
||||
has_many :mail_delivery_status, :class_name => 'MailDeliveryStatus', :foreign_key => 'email', :primary_key => 'email'
|
||||
|
||||
attr_accessor :password, :settings_attributes
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
- if MailDeliveryStatus.count > 20
|
||||
= items_per_page
|
||||
= pagination_links_remote @maildeliverystatus
|
||||
%table.table.table-striped
|
||||
%thead
|
||||
%tr
|
||||
%th= heading_helper MailDeliveryStatus, :created_at
|
||||
%th= heading_helper MailDeliveryStatus, :email
|
||||
%th= heading_helper MailDeliveryStatus, :message
|
||||
%th= t 'ui.actions'
|
||||
%tbody
|
||||
- for maildeliverystatus in @maildeliverystatus
|
||||
%tr{:class => cycle('even','odd', :name => 'groups')}
|
||||
%td= format_time maildeliverystatus.created_at
|
||||
%td
|
||||
- if user = maildeliverystatus.user
|
||||
= link_to maildeliverystatus.email, [:admin, user]
|
||||
- else
|
||||
= maildeliverystatus.email
|
||||
%td
|
||||
- if maildeliverystatus.attachment_data
|
||||
= link_to maildeliverystatus.message, [:admin, maildeliverystatus]
|
||||
- else
|
||||
= maildeliverystatus.message
|
||||
%td
|
||||
= link_to t('ui.delete'), [:admin, maildeliverystatus], :method => :delete, class: 'btn btn-mini btn-danger'
|
||||
7
app/views/admin/mail_delivery_status/index.html.haml
Normal file
7
app/views/admin/mail_delivery_status/index.html.haml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
- title t('.title')
|
||||
|
||||
- content_for :actionbar do
|
||||
= link_to t('.destroy_all'), admin_mail_delivery_status_index_path, :method => :delete, class: 'btn btn-danger'
|
||||
|
||||
#maildeliverystatus
|
||||
= render "maildeliverystatus"
|
||||
1
app/views/admin/mail_delivery_status/index.js.haml
Normal file
1
app/views/admin/mail_delivery_status/index.js.haml
Normal file
|
|
@ -0,0 +1 @@
|
|||
$('#maildeliverystatus').html('#{escape_javascript(render("maildeliverystatus"))}');
|
||||
|
|
@ -17,7 +17,10 @@
|
|||
%td= link_to show_user(user), [:admin, user]
|
||||
- if FoodsoftConfig[:use_nick]
|
||||
%td= user.name
|
||||
%td= user.email
|
||||
%td
|
||||
= user.email
|
||||
- if user.mail_delivery_status.any?
|
||||
= link_to t('.show_email_problems'), admin_mail_delivery_status_index_path(email: user.email), class: 'btn btn-warning btn-mini'
|
||||
%td= format_roles(user, true)
|
||||
%td= format_time(user.last_activity)
|
||||
%td= link_to t('ui.edit'), edit_admin_user_path(user), class: 'btn btn-mini'
|
||||
|
|
|
|||
|
|
@ -12,7 +12,10 @@
|
|||
%dt= heading_helper User, :name
|
||||
%dd= h @user.name
|
||||
%dt= heading_helper User, :email
|
||||
%dd= @user.email
|
||||
%dd
|
||||
= @user.email
|
||||
- if @user.mail_delivery_status.any?
|
||||
= link_to t('.show_email_problems'), admin_mail_delivery_status_index_path(email: @user.email), class: 'btn btn-warning btn-mini'
|
||||
%dt= heading_helper User, :phone
|
||||
%dd= @user.phone
|
||||
%dt= heading_helper User, :last_login
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue