diff --git a/app/controllers/links_controller.rb b/app/controllers/links_controller.rb index d1a5907cf..c82179d5d 100644 --- a/app/controllers/links_controller.rb +++ b/app/controllers/links_controller.rb @@ -15,7 +15,7 @@ class LinksController < ApplicationController links.each { |item| link_list.push item if item['link_object'] == 'Ticket' - data = Ticket.full_data( item['link_object_value'] ) + data = Ticket.lookup( :id => item['link_object_value'] ) tickets.push data if !users[ data['owner_id'] ] users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] ) diff --git a/app/controllers/ticket_overviews_controller.rb b/app/controllers/ticket_overviews_controller.rb index 08ce63d8b..da4660c93 100644 --- a/app/controllers/ticket_overviews_controller.rb +++ b/app/controllers/ticket_overviews_controller.rb @@ -50,7 +50,7 @@ class TicketOverviewsController < ApplicationController users = {} tickets = [] overview[:ticket_list].each {|ticket_id| - data = Ticket.full_data(ticket_id) + data = Ticket.lookup( :id => ticket_id ) tickets.push data if !users[ data['owner_id'] ] users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] ) diff --git a/app/controllers/tickets_controller.rb b/app/controllers/tickets_controller.rb index bff507df5..4b2207639 100644 --- a/app/controllers/tickets_controller.rb +++ b/app/controllers/tickets_controller.rb @@ -225,7 +225,7 @@ class TicketsController < ApplicationController users = {} tickets = [] ticket_list.each {|ticket| - data = Ticket.full_data(ticket.id) + data = Ticket.lookup( :id => ticket.id ) tickets.push data if !users[ data['owner_id'] ] users[ data['owner_id'] ] = User.user_data_full( data['owner_id'] ) @@ -508,7 +508,7 @@ class TicketsController < ApplicationController tickets = [] users = {} tickets_all.each do |ticket| - ticket_tmp = Ticket.full_data(ticket.id) + ticket_tmp = Ticket.lookup( :id => ticket.id ) tickets.push ticket_tmp users[ ticket['owner_id'] ] = User.user_data_full( ticket_tmp['owner_id'] ) users[ ticket['customer_id'] ] = User.user_data_full( ticket_tmp['customer_id'] ) diff --git a/app/models/application_model.rb b/app/models/application_model.rb index 2c34185b4..c3e499b6e 100644 --- a/app/models/application_model.rb +++ b/app/models/application_model.rb @@ -3,6 +3,10 @@ require 'cache' class ApplicationModel < ActiveRecord::Base self.abstract_class = true + after_create :cache_delete + after_update :cache_delete + after_destroy :cache_delete + def self.param_cleanup(params) data = {} self.new.attributes.each {|item| @@ -40,6 +44,28 @@ class ApplicationModel < ActiveRecord::Base Cache.get( key.to_s ) end + def self.lookup(data) + if data[:id] +# puts "GET- + #{self.to_s}.#{data[:id].to_s}" + cache = self.cache_get( data[:id] ) + return cache if cache + +# puts "Fillup- + #{self.to_s}.#{data[:id].to_s}" + record = self.where( :id => data[:id] ).first + self.cache_set( data[:id], record ) + return record + elsif data[:name] + cache = self.cache_get( data[:name] ) + return cache if cache + + record = self.where( :name => data[:name] ).first + self.cache_set( data[:name], record ) + return record + else + raise "Need name or id for lookup()" + end + end + def self.create_if_not_exists(data) if data[:name] record = self.where( :name => data[:name] ).first diff --git a/app/models/authorization.rb b/app/models/authorization.rb index 309b382a2..900013578 100644 --- a/app/models/authorization.rb +++ b/app/models/authorization.rb @@ -3,10 +3,6 @@ class Authorization < ApplicationModel validates_presence_of :user_id, :uid, :provider validates_uniqueness_of :uid, :scope => :provider - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete - def self.find_from_hash(hash) auth = Authorization.where( :provider => hash['provider'], :uid => hash['uid'] ).first if auth diff --git a/app/models/email_address.rb b/app/models/email_address.rb index 73817e606..848131f0b 100644 --- a/app/models/email_address.rb +++ b/app/models/email_address.rb @@ -1,8 +1,5 @@ class EmailAddress < ApplicationModel - has_many :groups, :after_add => :cache_update, :after_remove => :cache_update - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete + has_many :groups, :after_add => :cache_update, :after_remove => :cache_update validates :realname, :presence => true validates :email, :presence => true end diff --git a/app/models/group.rb b/app/models/group.rb index a98de29d9..08b688dad 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -2,8 +2,5 @@ class Group < ApplicationModel has_and_belongs_to_many :users, :after_add => :cache_update, :after_remove => :cache_update belongs_to :email_address belongs_to :signature - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete validates :name, :presence => true end diff --git a/app/models/history.rb b/app/models/history.rb index 8d0cfc80f..84ed180e0 100644 --- a/app/models/history.rb +++ b/app/models/history.rb @@ -1,4 +1,4 @@ -class History < ActiveRecord::Base +class History < ApplicationModel self.table_name = 'histories' belongs_to :history_type, :class_name => 'History::Type' belongs_to :history_object, :class_name => 'History::Object' @@ -349,13 +349,13 @@ class History < ActiveRecord::Base return history_attribute end - class Object < ActiveRecord::Base + class Object < ApplicationModel end - class Type < ActiveRecord::Base + class Type < ApplicationModel end - class Attribute < ActiveRecord::Base + class Attribute < ApplicationModel end end diff --git a/app/models/observer/ticket/article/communicate_email.rb b/app/models/observer/ticket/article/communicate_email.rb index abd139c8d..d876fd1bd 100644 --- a/app/models/observer/ticket/article/communicate_email.rb +++ b/app/models/observer/ticket/article/communicate_email.rb @@ -7,16 +7,16 @@ class Observer::Ticket::Article::CommunicateEmail < ActiveRecord::Observer return if Setting.get('import_mode') # if sender is customer, do not communication - sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first + sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ) return 1 if sender == nil return 1 if sender['name'] == 'Customer' # only apply on emails - type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first + type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ) return if type['name'] != 'email' # build subject - ticket = Ticket.find(record.ticket_id) + ticket = Ticket.lookup( record.ticket_id ) subject = ticket.subject_build( record.subject ) # send email diff --git a/app/models/observer/ticket/article/communicate_facebook.rb b/app/models/observer/ticket/article/communicate_facebook.rb index dea3b73b2..84cc0305d 100644 --- a/app/models/observer/ticket/article/communicate_facebook.rb +++ b/app/models/observer/ticket/article/communicate_facebook.rb @@ -7,12 +7,12 @@ class Observer::Ticket::Article::CommunicateFacebook < ActiveRecord::Observer return if Setting.get('import_mode') # if sender is customer, do not communication - sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first + sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ) return 1 if sender == nil return 1 if sender['name'] == 'Customer' # only apply on emails - type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first + type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ) return if type['name'] != 'facebook' a = Channel::Facebook.new diff --git a/app/models/observer/ticket/article/communicate_twitter.rb b/app/models/observer/ticket/article/communicate_twitter.rb index ef31a22ea..792a1c6e1 100644 --- a/app/models/observer/ticket/article/communicate_twitter.rb +++ b/app/models/observer/ticket/article/communicate_twitter.rb @@ -7,12 +7,12 @@ class Observer::Ticket::Article::CommunicateTwitter < ActiveRecord::Observer return if Setting.get('import_mode') # if sender is customer, do not communication - sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first + sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ) return 1 if sender == nil return 1 if sender['name'] == 'Customer' # only apply on tweets - type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first + type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ) return if type['name'] != 'twitter direct-message' && type['name'] != 'twitter status' a = Channel::Twitter2.new diff --git a/app/models/observer/ticket/article/fillup_from_email.rb b/app/models/observer/ticket/article/fillup_from_email.rb index 6b5ac917d..ba9196c62 100644 --- a/app/models/observer/ticket/article/fillup_from_email.rb +++ b/app/models/observer/ticket/article/fillup_from_email.rb @@ -7,16 +7,16 @@ class Observer::Ticket::Article::FillupFromEmail < ActiveRecord::Observer return if Setting.get('import_mode') # if sender is customer, do not change anything - sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first + sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ) return if sender == nil return if sender['name'] == 'Customer' # set email attributes - type = Ticket::Article::Type.where( :id => record.ticket_article_type_id ).first + type = Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ) return if type['name'] != 'email' # set subject if empty - ticket = Ticket.find( record.ticket_id ) + ticket = Ticket.lookup( :id => record.ticket_id ) if !record.subject || record.subject == '' record.subject = ticket.title end diff --git a/app/models/observer/ticket/article/fillup_from_general.rb b/app/models/observer/ticket/article/fillup_from_general.rb index fc7678da8..f4a3580c4 100644 --- a/app/models/observer/ticket/article/fillup_from_general.rb +++ b/app/models/observer/ticket/article/fillup_from_general.rb @@ -7,7 +7,7 @@ class Observer::Ticket::Article::FillupFromGeneral < ActiveRecord::Observer return if Setting.get('import_mode') # if sender is customer, do not change anything - sender = Ticket::Article::Sender.where( :id => record.ticket_article_sender_id ).first + sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ) return if sender == nil return if sender['name'] == 'Customer' diff --git a/app/models/observer/ticket/close_time.rb b/app/models/observer/ticket/close_time.rb index de13d3e43..2fbac2027 100644 --- a/app/models/observer/ticket/close_time.rb +++ b/app/models/observer/ticket/close_time.rb @@ -20,8 +20,8 @@ class Observer::Ticket::CloseTime < ActiveRecord::Observer return true if record.close_time # check if ticket is closed now - ticket_state = Ticket::State.find( record.ticket_state_id ) - ticket_state_type = Ticket::StateType.find( ticket_state.ticket_state_type_id ) + ticket_state = Ticket::State.lookup( :id => record.ticket_state_id ) + ticket_state_type = Ticket::StateType.lookup( :id => ticket_state.ticket_state_type_id ) return true if ticket_state_type.name != 'closed' # set close_time diff --git a/app/models/observer/ticket/first_response.rb b/app/models/observer/ticket/first_response.rb index 503670ace..e4949a31b 100644 --- a/app/models/observer/ticket/first_response.rb +++ b/app/models/observer/ticket/first_response.rb @@ -11,10 +11,10 @@ class Observer::Ticket::FirstResponse < ActiveRecord::Observer return true if record.internal # if sender is not agent - return true if record.ticket_article_sender.name != 'Agent' + return true if Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ).name != 'Agent' # if article is a message to customer - return true if !record.ticket_article_type.communication + return true if !Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ).communication # check if first_response is already set return true if record.ticket.first_response diff --git a/app/models/observer/ticket/last_contact.rb b/app/models/observer/ticket/last_contact.rb index a02f68624..c6a7cb489 100644 --- a/app/models/observer/ticket/last_contact.rb +++ b/app/models/observer/ticket/last_contact.rb @@ -8,10 +8,11 @@ class Observer::Ticket::LastContact < ActiveRecord::Observer return true if record.internal # if article is a message to customer - return true if !record.ticket_article_type.communication + return true if !Ticket::Article::Type.lookup( :id => record.ticket_article_type_id ).communication # if sender is not customer - if record.ticket_article_sender.name == 'Customer' + sender = Ticket::Article::Sender.lookup( :id => record.ticket_article_sender_id ) + if sender.name == 'Customer' # check if last communication is done by agent, else do not set last_contact_customer if record.ticket.last_contact_customer == nil || @@ -28,7 +29,7 @@ class Observer::Ticket::LastContact < ActiveRecord::Observer end # if sender is not agent - if record.ticket_article_sender.name == 'Agent' + if sender.name == 'Agent' # set last_contact_agent record.ticket.last_contact_agent = Time.now diff --git a/app/models/observer/ticket/notification.rb b/app/models/observer/ticket/notification.rb index a82981a0b..5c8b6a18e 100644 --- a/app/models/observer/ticket/notification.rb +++ b/app/models/observer/ticket/notification.rb @@ -16,10 +16,10 @@ class Observer::Ticket::Notification < ActiveRecord::Observer # get current state of objects if event[:name] == 'Ticket::Article' - article = Ticket::Article.find( event[:id] ) + article = Ticket::Article.lookup( :id => event[:id] ) ticket = article.ticket else - ticket = Ticket.find( event[:id] ) + ticket = Ticket.lookup( :id => event[:id] ) article = ticket.articles[-1] end diff --git a/app/models/role.rb b/app/models/role.rb index f2e573cdb..a565ff56d 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -1,7 +1,4 @@ class Role < ApplicationModel has_and_belongs_to_many :users, :after_add => :cache_update, :after_remove => :cache_update - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete validates :name, :presence => true end diff --git a/app/models/setting.rb b/app/models/setting.rb index ddd63bb4b..b17c02520 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -3,9 +3,6 @@ class Setting < ApplicationModel store :state store :state_initial before_create :set_initial - after_create :delete_cache - after_update :delete_cache - after_destroy :delete_cache def self.load diff --git a/app/models/signature.rb b/app/models/signature.rb index f4a1dee16..54b2dc01b 100644 --- a/app/models/signature.rb +++ b/app/models/signature.rb @@ -1,7 +1,4 @@ class Signature < ApplicationModel - has_many :groups, :after_add => :cache_update, :after_remove => :cache_update - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete - validates :name, :presence => true + has_many :groups, :after_add => :cache_update, :after_remove => :cache_update + validates :name, :presence => true end diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 3457700aa..df75a43b9 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -2,7 +2,7 @@ class Ticket < ApplicationModel before_create :number_generate, :check_defaults before_update :check_defaults before_destroy :destroy_dependencies - + belongs_to :group has_many :articles, :class_name => 'Ticket::Article', :after_add => :cache_update, :after_remove => :cache_update belongs_to :organization @@ -14,16 +14,12 @@ class Ticket < ApplicationModel belongs_to :create_article_type, :class_name => 'Ticket::Article::Type' belongs_to :create_article_sender, :class_name => 'Ticket::Article::Sender' - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete - def self.number_check (string) self.number_adapter.number_check_item(string) end def agent_of_group - Group.find(self.group_id).users.where( :active => true ).joins(:roles).where( 'roles.name' => 'Agent', 'roles.active' => true ).uniq() + Group.find( self.group_id ).users.where( :active => true ).joins(:roles).where( 'roles.name' => 'Agent', 'roles.active' => true ).uniq() end def self.agents @@ -41,8 +37,8 @@ class Ticket < ApplicationModel Ticket::Article.create( :created_by_id => data[:created_by_id], :ticket_id => self.id, - :ticket_article_type_id => Ticket::Article::Type.where( :name => 'note' ).first.id, - :ticket_article_sender_id => Ticket::Article::Sender.where( :name => 'Agent' ).first.id, + :ticket_article_type_id => Ticket::Article::Type.lookup( :name => 'note' ).id, + :ticket_article_sender_id => Ticket::Article::Sender.lookup( :name => 'Agent' ).id, :body => 'merged', :internal => false ) @@ -59,7 +55,7 @@ class Ticket < ApplicationModel ) # set state to 'merged' - self.ticket_state_id = Ticket::State.where( :name => 'merged' ).first.id + self.ticket_state_id = Ticket::State.lookup( :name => 'merged' ).id # rest owner self.owner_id = User.where( :login => '-' ).first.id @@ -304,16 +300,6 @@ class Ticket < ApplicationModel end -# data = Ticket.full_data(123) - def self.full_data(ticket_id) - cache = self.cache_get(ticket_id) - return cache if cache - - ticket = Ticket.find(ticket_id).attributes - self.cache_set( ticket_id, ticket ) - return ticket - end - # Ticket.create_attributes( # :current_user_id => 123, # ) @@ -428,24 +414,15 @@ class Ticket < ApplicationModel class Priority < ApplicationModel self.table_name = 'ticket_priorities' - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete validates :name, :presence => true end class StateType < ApplicationModel - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete validates :name, :presence => true end class State < ApplicationModel - belongs_to :ticket_state_type, :class_name => 'Ticket::StateType' - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete + belongs_to :ticket_state_type, :class_name => 'Ticket::StateType' validates :name, :presence => true end end \ No newline at end of file diff --git a/app/models/ticket/article.rb b/app/models/ticket/article.rb index 034904f80..dfaefa717 100644 --- a/app/models/ticket/article.rb +++ b/app/models/ticket/article.rb @@ -5,10 +5,6 @@ class Ticket::Article < ApplicationModel belongs_to :ticket_article_sender, :class_name => 'Ticket::Article::Sender' belongs_to :created_by, :class_name => 'User' - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete - private def attachment_check diff --git a/app/models/user.rb b/app/models/user.rb index e7e8eb8ce..933938ccf 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -3,9 +3,6 @@ class User < ApplicationModel before_create :check_name, :check_email, :check_login, :check_image, :check_geo before_update :check_password, :check_image, :check_geo, :check_email, :check_login - after_create :cache_delete - after_update :cache_delete - after_destroy :cache_delete has_and_belongs_to_many :groups, :after_add => :cache_update, :after_remove => :cache_update has_and_belongs_to_many :roles, :after_add => :cache_update, :after_remove => :cache_update diff --git a/lib/session.rb b/lib/session.rb index 1b2d2eacc..e17706a48 100644 --- a/lib/session.rb +++ b/lib/session.rb @@ -434,7 +434,7 @@ class ClientState return if !session_data return if !session_data[:user] return if !session_data[:user][:id] - user = User.find( session_data[:user][:id] ) + user = User.lookup( :id => session_data[:user][:id] ) return if !user # set cache key @@ -691,7 +691,7 @@ class ClientState if !@pushed[:tickets] @pushed[:tickets] = {} end - ticket = Ticket.full_data(ticket_id) + ticket = Ticket.lookup( :id => ticket_id ) if @pushed[:tickets][ticket_id] != ticket['updated_at'] @pushed[:tickets][ticket_id] = ticket['updated_at'] tickets.push ticket