discourse/app/models/category_featured_topic.rb

59 lines
1.5 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
class CategoryFeaturedTopic < ActiveRecord::Base
belongs_to :category
belongs_to :topic
# Populates the category featured topics
def self.feature_topics
transaction do
2013-02-07 23:45:24 +08:00
Category.all.each do |c|
2013-02-06 03:16:51 +08:00
feature_topics_for(c)
CategoryFeaturedUser.feature_users_in(c)
end
end
end
def self.feature_topics_for(c)
return if c.blank?
2013-02-07 23:45:24 +08:00
2013-12-24 07:50:36 +08:00
query = TopicQuery.new(self.fake_admin, per_page: SiteSetting.category_featured_topics, except_topic_ids: [c.topic_id], visible: true)
results = query.list_category(c).topic_ids.to_a
2013-02-06 03:16:51 +08:00
CategoryFeaturedTopic.transaction do
CategoryFeaturedTopic.delete_all(category_id: c.id)
if results
results.each_with_index do |topic_id, idx|
c.category_featured_topics.create(topic_id: topic_id, rank: idx)
end
end
2013-02-06 03:16:51 +08:00
end
end
2013-08-31 01:39:31 +08:00
private
def self.fake_admin
# fake an admin
admin = User.new
admin.admin = true
admin.id = -1
admin
end
2013-02-06 03:16:51 +08:00
end
# == Schema Information
#
# Table name: category_featured_topics
#
# category_id :integer not null
# topic_id :integer not null
# created_at :datetime not null
# updated_at :datetime not null
2013-06-17 08:48:58 +08:00
# rank :integer default(0), not null
2013-08-14 04:09:27 +08:00
# id :integer not null, primary key
#
# Indexes
#
2013-06-17 08:48:58 +08:00
# cat_featured_threads (category_id,topic_id) UNIQUE
# index_category_featured_topics_on_category_id_and_rank (category_id,rank)
#