user display changes in model and mailer

This commit is contained in:
wvengen 2013-09-22 14:38:56 +02:00
parent f6c2fd9a9d
commit ea3db22306
4 changed files with 23 additions and 9 deletions

View file

@ -1,6 +1,11 @@
# encoding: utf-8
# ActionMailer class that handles all emails for the FoodSoft.
class Mailer < ActionMailer::Base
# XXX Quick fix to allow the use of show_user. Proper take would be one of
# (1) Use draper, decorate user
# (2) Create a helper with this method, include here and in ApplicationHelper
helper :application
include ApplicationHelper
layout 'email' # Use views/layouts/email.txt.erb
@ -15,7 +20,7 @@ class Mailer < ActionMailer::Base
mail subject: "[#{FoodsoftConfig[:name]}] " + message.subject,
to: recipient.email,
from: "#{message.sender.nick} <#{message.sender.email}>"
from: "#{show_user(message.sender)} <#{message.sender.email}>"
end
# Sends an email with instructions on how to reset the password.
@ -26,7 +31,7 @@ class Mailer < ActionMailer::Base
@link = new_password_url(id: @user.id, token: @user.reset_password_token)
mail :to => @user.email,
:subject => "[#{FoodsoftConfig[:name]}] " + I18n.t('mailer.reset_password.subject', :username => @user.nick)
:subject => "[#{FoodsoftConfig[:name]}] " + I18n.t('mailer.reset_password.subject', :username => show_user(@user))
end
# Sends an invite email.
@ -75,7 +80,7 @@ class Mailer < ActionMailer::Base
@feedback = feedback
mail :to => FoodsoftConfig[:notification]["error_recipients"],
:from => "#{user.nick} <#{user.email}>",
:from => "#{show_user user} <#{user.email}>",
:sender => FoodsoftConfig[:notification]["sender_address"],
:errors_to => FoodsoftConfig[:notification]["sender_address"],
:subject => "[#{FoodsoftConfig[:name]}] " + I18n.t('mailer.feedback.subject', :email => user.email)

View file

@ -49,7 +49,7 @@ class Message < ActiveRecord::Base
@reply_to = Message.find(message_id)
add_recipients([@reply_to.sender])
self.subject = I18n.t('messages.model.reply_subject', :subject => @reply_to.subject)
self.body = I18n.t('messages.model.reply_header', :user => @reply_to.sender.nick, :when => I18n.l(@reply_to.created_at, :format => :short)) + "\n"
self.body = I18n.t('messages.model.reply_header', :user => @reply_to.sender.display, :when => I18n.l(@reply_to.created_at, :format => :short)) + "\n"
@reply_to.body.each_line{ |l| self.body += I18n.t('messages.model.reply_indent', :line => l) }
end
@ -64,7 +64,7 @@ class Message < ActiveRecord::Base
end
def sender_name
system_message? ? I18n.t('layouts.foodsoft') : sender.nick rescue "??"
system_message? ? I18n.t('layouts.foodsoft') : sender.display rescue "?"
end
def recipients
@ -77,7 +77,7 @@ class Message < ActiveRecord::Base
begin
Mailer.foodsoft_message(self, user).deliver
rescue
Rails.logger.warn "Deliver failed for #{user.nick}: #{user.email}"
Rails.logger.warn "Deliver failed for user \##{user.id}: #{user.email}"
end
end
end

View file

@ -23,7 +23,7 @@ class Ordergroup < Group
"#{contact_phone} (#{contact_person})"
end
def non_members
User.all(:order => 'nick').reject { |u| (users.include?(u) || u.ordergroup) }
User.natural_order.all.reject { |u| (users.include?(u) || u.ordergroup) }
end
def value_of_open_orders(exclude = nil)
@ -102,7 +102,7 @@ class Ordergroup < Group
# Make sure, that a user can only be in one ordergroup
def uniqueness_of_members
users.each do |user|
errors.add :user_tokens, I18n.t('ordergroups.model.error_single_group', :user => user.nick) if user.groups.where(:type => 'Ordergroup').size > 1
errors.add :user_tokens, I18n.t('ordergroups.model.error_single_group', :user => user.display) if user.groups.where(:type => 'Ordergroup').size > 1
end
end

View file

@ -158,8 +158,17 @@ class User < ActiveRecord::Base
end
end
# XXX this is view-related; need to move out things like token_attributes
# then this can be removed
def display
# would be sensible to match ApplicationController#show_user
FoodsoftConfig[:use_nick] ? nick : "#{first_name} #{last_name}"
end
def token_attributes
{:id => id, :name => "#{nick} (#{ordergroup.try(:name)})"}
# would be sensible to match ApplicationController#show_user
# this should not be part of the model anyway
{:id => id, :name => "#{display} (#{ordergroup.try(:name)})"}
end
end