# File lib/better_nested_set.rb, line 274
274:         def all_children(special=nil)
275:           if special && special[:exclude]
276:             transaction do
277:               # exclude some items and all their children
278:               special[:exclude] = [special[:exclude]] if !special[:exclude].is_a?(Array)
279:               # get objects for ids
280:               special[:exclude].collect! {|s| s.is_a?(self.class) ? s : self.class.find(s)}
281:               # get all subtrees and flatten the list
282:               exclude_list = special[:exclude].map{|e| e.full_set.map{|ee| ee.id}}.flatten.uniq.join(',')
283:               if exclude_list.blank?
284:                 self.class.find(:all, :conditions => "#{acts_as_nested_set_options[:scope]} AND (#{acts_as_nested_set_options[:left_column]} > #{self[acts_as_nested_set_options[:left_column]]}) and (#{acts_as_nested_set_options[:right_column]} < #{self[acts_as_nested_set_options[:right_column]]})", :order => acts_as_nested_set_options[:left_column])
285:               else
286:                 self.class.find(:all, :conditions => "#{acts_as_nested_set_options[:scope]} AND id NOT IN (#{exclude_list}) AND (#{acts_as_nested_set_options[:left_column]} > #{self[acts_as_nested_set_options[:left_column]]}) and (#{acts_as_nested_set_options[:right_column]} < #{self[acts_as_nested_set_options[:right_column]]})", :order => acts_as_nested_set_options[:left_column])
287:               end
288:             end
289:           else
290:             self.class.find(:all, :conditions => "#{acts_as_nested_set_options[:scope]} AND (#{acts_as_nested_set_options[:left_column]} > #{self[acts_as_nested_set_options[:left_column]]}) and (#{acts_as_nested_set_options[:right_column]} < #{self[acts_as_nested_set_options[:right_column]]})", :order => acts_as_nested_set_options[:left_column])
291:           end
292:         end