From 900fbf7521ea2019745678a7efeadcae78618497 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Thu, 30 Jan 2014 00:54:34 +0100 Subject: [PATCH] Added own module to add member users to search index data. --- app/models/organization.rb | 4 +- app/models/organization/search_index.rb | 59 +++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 app/models/organization/search_index.rb diff --git a/app/models/organization.rb b/app/models/organization.rb index 6980da61b..186c1da50 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -3,9 +3,11 @@ class Organization < ApplicationModel include Organization::Assets extend Organization::Search + include Organization::SearchIndex has_and_belongs_to_many :users - validates :name, :presence => true + has_many :members, :class_name => 'User' + validates :name, :presence => true activity_stream_support :role => 'Admin' history_support diff --git a/app/models/organization/search_index.rb b/app/models/organization/search_index.rb new file mode 100644 index 000000000..0727b2f44 --- /dev/null +++ b/app/models/organization/search_index.rb @@ -0,0 +1,59 @@ +# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/ + +module Organization::SearchIndex + +=begin + +lookup name of ref. objects + + attributes = search_index_attribute_lookup(attributes, Ticket) + +returns + + attributes # object with lookup data + +=end + + def search_index_attribute_lookup(attributes, ref_object) + attributes_new = {} + attributes.each {|key, value| + next if !value + + # get attribute name + attribute_name = key.to_s + next if attribute_name[-3,3] != '_id' + attribute_name = attribute_name[ 0, attribute_name.length-3 ] + + # check if attribute method exists + next if !ref_object.respond_to?( attribute_name ) + + # check if method has own class + relation_class = ref_object.send(attribute_name).class + next if !relation_class + + # lookup ref object + relation_model = relation_class.lookup( :id => value ) + next if !relation_model + + # get name of ref object + value = nil + if relation_model.respond_to?('search_index_data') + value = relation_model.send('search_index_data') + end + next if !value + + # save name of ref object + attributes_new[ attribute_name ] = value + attributes.delete(key) + } + + attributes['member'] = [] + users = User.where( :organization_id => self.id ) + users.each { |user| + attributes['member'].push user.search_index_data + } + + attributes_new.merge(attributes) + end + +end \ No newline at end of file