2014-02-03 19:23:00 +00:00
|
|
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
2014-01-27 22:59:41 +00:00
|
|
|
|
|
|
|
module Ticket::SearchIndex
|
|
|
|
|
|
|
|
=begin
|
|
|
|
|
2014-01-30 00:06:42 +00:00
|
|
|
build and send data for search index to backend
|
2014-01-27 22:59:41 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2014-01-27 22:59:41 +00:00
|
|
|
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
|
2014-02-05 12:22:14 +00:00
|
|
|
article.attachments.each {|attachment|
|
2014-02-02 18:58:59 +00:00
|
|
|
if !article_attributes['attachments']
|
|
|
|
article_attributes['attachments'] = []
|
|
|
|
end
|
|
|
|
data = {
|
2014-02-05 12:22:14 +00:00
|
|
|
"_name" => attachment.filename,
|
|
|
|
"content" => Base64.encode64( attachment.store_file.data )
|
2014-02-02 18:58:59 +00:00
|
|
|
}
|
|
|
|
article_attributes['attachments'].push data
|
|
|
|
}
|
2014-01-27 22:59:41 +00:00
|
|
|
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
|