diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb index 30eb44a7..003e75ed 100644 --- a/app/mailers/mailer.rb +++ b/app/mailers/mailer.rb @@ -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) diff --git a/app/models/message.rb b/app/models/message.rb index e14ad59e..6504489c 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -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 diff --git a/app/models/ordergroup.rb b/app/models/ordergroup.rb index 6e1b65dc..abc7e1ef 100644 --- a/app/models/ordergroup.rb +++ b/app/models/ordergroup.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index 29c070c0..babfe2d2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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