trabajo-afectivo/app/models/ticket/search_index.rb

85 lines
2.4 KiB
Ruby
Raw Normal View History

2014-02-03 19:23:00 +00:00
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
module Ticket::SearchIndex
=begin
2014-01-30 00:06:42 +00:00
build and send data for search index to backend
ticket = Ticket.find(123)
result = ticket.search_index_update_backend
returns
result = true # false
=end
def search_index_update_backend
return if !self.class.search_index_support_config
# default ignored attributes
ignore_attributes = {
:created_by_id => true,
:updated_by_id => true,
:active => true,
}
if self.class.search_index_support_config[:ignore_attributes]
self.class.search_index_support_config[:ignore_attributes].each {|key, value|
ignore_attributes[key] = value
}
end
attributes = self.attributes
ignore_attributes.each {|key, value|
next if value != true
attributes.delete( key.to_s )
}
2014-02-05 20:53:21 +00:00
# add tags
tags = Tag.tag_list( :object=> 'Ticket', :o_id => self.id )
if tags && !tags.empty?
attributes[:tag] = tags
end
attributes = search_index_attribute_lookup( attributes, self )
# add article data
articles = Ticket::Article.where( :ticket_id => self.id )
attributes['articles_all'] = []
attributes['articles_external'] = []
articles.each {|article|
article_attributes = article.attributes
article_attributes.delete('created_by_id')
article_attributes.delete('updated_by_id')
article_attributes.delete('updated_at')
article_attributes.delete('references')
article_attributes.delete('message_id_md5')
article_attributes.delete('message_id')
article_attributes.delete('in_reply_to')
article_attributes.delete('ticket_id')
article_attributes = search_index_attribute_lookup( article_attributes, article )
2014-02-02 18:58:59 +00:00
# lookup attachments
article.attachments.each {|attachment|
2014-02-02 18:58:59 +00:00
if !article_attributes['attachments']
article_attributes['attachments'] = []
end
data = {
"_name" => attachment.filename,
2014-04-28 07:44:36 +00:00
"content" => Base64.encode64( attachment.content )
2014-02-02 18:58:59 +00:00
}
article_attributes['attachments'].push data
}
attributes['articles_all'].push article_attributes
if !article.internal
attributes['articles_external'].push article_attributes
end
}
return if !attributes
SearchIndexBackend.add(self.class.to_s, attributes)
end
2014-02-03 19:23:00 +00:00
end