Update sender name if not exists.
This commit is contained in:
parent
91ab4aef64
commit
6655485649
2 changed files with 60 additions and 9 deletions
|
@ -33,7 +33,7 @@ class User < ApplicationModel
|
||||||
include User::SearchIndex
|
include User::SearchIndex
|
||||||
|
|
||||||
before_create :check_name, :check_email, :check_login, :check_password, :check_preferences_default, :validate_roles
|
before_create :check_name, :check_email, :check_login, :check_password, :check_preferences_default, :validate_roles
|
||||||
before_update :check_password, :check_email, :check_login, :check_preferences_default, :validate_roles
|
before_update :check_password, :check_name, :check_email, :check_login, :check_preferences_default, :validate_roles
|
||||||
after_create :avatar_for_email_check
|
after_create :avatar_for_email_check
|
||||||
after_update :avatar_for_email_check
|
after_update :avatar_for_email_check
|
||||||
after_destroy :avatar_destroy
|
after_destroy :avatar_destroy
|
||||||
|
@ -363,12 +363,19 @@ returns
|
||||||
keys = [key]
|
keys = [key]
|
||||||
end
|
end
|
||||||
keys.each { |local_key|
|
keys.each { |local_key|
|
||||||
|
cache_key = "User::permissions?:local_key:::#{id}"
|
||||||
|
if Rails.env.production?
|
||||||
|
cache = Cache.get(cache_key)
|
||||||
|
return cache if cache
|
||||||
|
end
|
||||||
permissions = Object.const_get('Permission').with_parents(local_key)
|
permissions = Object.const_get('Permission').with_parents(local_key)
|
||||||
Object.const_get('Permission').joins(:roles).where('roles.id IN (?) AND permissions.name IN (?)', role_ids, permissions).each { |permission|
|
Object.const_get('Permission').joins(:roles).where('roles.id IN (?) AND permissions.name IN (?)', role_ids, permissions).each { |permission|
|
||||||
next if permission.preferences[:selectable] == false
|
next if permission.preferences[:selectable] == false
|
||||||
|
Cache.write(key, true, expires_in: 20.seconds)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Cache.write(key, false, expires_in: 20.seconds)
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -685,13 +692,18 @@ returns
|
||||||
# delete asset caches
|
# delete asset caches
|
||||||
key = "User::authorizations::#{id}"
|
key = "User::authorizations::#{id}"
|
||||||
Cache.delete(key)
|
Cache.delete(key)
|
||||||
|
|
||||||
|
# delete permission cache
|
||||||
|
key = "User::permissions?:local_key:::#{id}"
|
||||||
|
Cache.delete(key)
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_name
|
def check_name
|
||||||
|
return if !firstname.empty? && !lastname.empty?
|
||||||
|
|
||||||
if (firstname && !firstname.empty?) && (!lastname || lastname.empty?)
|
if !firstname.empty? && lastname.empty?
|
||||||
|
|
||||||
# Lastname, Firstname
|
# "Lastname, Firstname"
|
||||||
scan = firstname.scan(/, /)
|
scan = firstname.scan(/, /)
|
||||||
if scan[0]
|
if scan[0]
|
||||||
name = firstname.split(', ', 2)
|
name = firstname.split(', ', 2)
|
||||||
|
@ -704,7 +716,7 @@ returns
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
# Firstname Lastname
|
# "Firstname Lastname"
|
||||||
name = firstname.split(' ', 2)
|
name = firstname.split(' ', 2)
|
||||||
if !name[0].nil?
|
if !name[0].nil?
|
||||||
self.firstname = name[0]
|
self.firstname = name[0]
|
||||||
|
@ -714,8 +726,8 @@ returns
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
|
|
||||||
# -no name- firstname.lastname@example.com
|
# -no name- "firstname.lastname@example.com"
|
||||||
elsif (!firstname || firstname.empty?) && (!lastname || lastname.empty?) && (email && !email.empty?)
|
elsif firstname.empty? && lastname.empty? && !email.empty?
|
||||||
scan = email.scan(/^(.+?)\.(.+?)\@.+?$/)
|
scan = email.scan(/^(.+?)\.(.+?)\@.+?$/)
|
||||||
if scan[0]
|
if scan[0]
|
||||||
if !scan[0][0].nil?
|
if !scan[0][0].nil?
|
||||||
|
@ -729,9 +741,7 @@ returns
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_email
|
def check_email
|
||||||
|
|
||||||
return if !email
|
return if !email
|
||||||
|
|
||||||
self.email = email.downcase
|
self.email = email.downcase
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -779,7 +789,6 @@ returns
|
||||||
end
|
end
|
||||||
|
|
||||||
def avatar_for_email_check
|
def avatar_for_email_check
|
||||||
|
|
||||||
return if !email
|
return if !email
|
||||||
return if email.empty?
|
return if email.empty?
|
||||||
return if email !~ /@/
|
return if email !~ /@/
|
||||||
|
|
42
test/unit/email_process_sender_name_update_if_needed.rb
Normal file
42
test/unit/email_process_sender_name_update_if_needed.rb
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class EmailProcessSenderNameUpdateIfNeeded < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
test 'basic' do
|
||||||
|
email_raw_string = "From: customer@example.com
|
||||||
|
To: myzammad@example.com
|
||||||
|
Subject: test sender name update 1
|
||||||
|
|
||||||
|
Some Text"
|
||||||
|
|
||||||
|
ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
|
||||||
|
ticket = Ticket.find(ticket_p.id)
|
||||||
|
article = Ticket::Article.find(article_p.id)
|
||||||
|
assert_equal('test sender name update 1', ticket.title)
|
||||||
|
assert_equal('new', ticket.state.name)
|
||||||
|
assert_equal('Customer', ticket.create_article_sender.name)
|
||||||
|
assert_equal('Customer', article.sender.name)
|
||||||
|
assert_equal('customer@example.com', ticket.customer.email)
|
||||||
|
assert_equal('', ticket.customer.firstname)
|
||||||
|
assert_equal('', ticket.customer.lastname)
|
||||||
|
|
||||||
|
email_raw_string = "From: Max Smith <customer@example.com>
|
||||||
|
To: myzammad@example.com
|
||||||
|
Subject: test sender name update 2
|
||||||
|
|
||||||
|
Some Text"
|
||||||
|
|
||||||
|
ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
|
||||||
|
ticket = Ticket.find(ticket_p.id)
|
||||||
|
article = Ticket::Article.find(article_p.id)
|
||||||
|
assert_equal('test sender name update 2', ticket.title)
|
||||||
|
assert_equal('new', ticket.state.name)
|
||||||
|
assert_equal('Customer', ticket.create_article_sender.name)
|
||||||
|
assert_equal('Customer', article.sender.name)
|
||||||
|
assert_equal('customer@example.com', ticket.customer.email)
|
||||||
|
assert_equal('Max', ticket.customer.firstname)
|
||||||
|
assert_equal('Smith', ticket.customer.lastname)
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue