ref: master
plugins/people_block/lib/people_block_base.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
class PeopleBlockBase < Block settings_items :prioritize_profiles_with_image, :type => :boolean, :default => true settings_items :limit, :type => :integer, :default => 6 settings_items :name, :type => String, :default => "" settings_items :address, :type => String, :default => "" attr_accessible :name, :address, :prioritize_profiles_with_image def self.description _('Random people') end def help c_('Clicking on the people or groups will take you to their home page.') end def default_title _('{#} People') end def view_title title.gsub('{#}', profile_count.to_s) end def profiles owner.profiles end def profile_list result = nil visible_profiles = profiles.visible.includes([:image,:domains,:preferred_domain,:environment]) if !prioritize_profiles_with_image result = visible_profiles.limit(limit).order('profiles.updated_at DESC').sort_by{ rand } elsif profiles.visible.with_image.count >= limit result = visible_profiles.with_image.limit(limit * 5).order('profiles.updated_at DESC').sort_by{ rand } else result = visible_profiles.with_image.sort_by{ rand } + visible_profiles.without_image.limit(limit * 5).order('profiles.updated_at DESC').sort_by{ rand } end result.slice(0..limit-1) end def profile_count profiles.visible.count end def extra_option { } end def api_content(params = {}) content = {} content['people'] = Api::Entities::Person.represent(profiles.limit(self.limit)).as_json content['#'] = profiles.size content end end |