From 871adc0b0f7d0816379a8b718e9db071d4635b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Tue, 7 Jan 2014 00:37:14 +0100 Subject: [PATCH] BUGFIX: Top page wasn't display any topics --- .../discourse/controllers/top_controller.js | 3 +-- .../discourse/routes/list_top_route.js | 9 +++++-- app/models/top_topic.rb | 26 +++++++++---------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/top_controller.js b/app/assets/javascripts/discourse/controllers/top_controller.js index 4f941eb7e1b..cf5240552ee 100644 --- a/app/assets/javascripts/discourse/controllers/top_controller.js +++ b/app/assets/javascripts/discourse/controllers/top_controller.js @@ -29,7 +29,6 @@ Discourse.TopController = Discourse.ObjectController.extend({ } else { return true; } - }.property(), - + }.property() }); diff --git a/app/assets/javascripts/discourse/routes/list_top_route.js b/app/assets/javascripts/discourse/routes/list_top_route.js index 672a3376915..ca11d830d23 100644 --- a/app/assets/javascripts/discourse/routes/list_top_route.js +++ b/app/assets/javascripts/discourse/routes/list_top_route.js @@ -1,6 +1,7 @@ Discourse.ListTopRoute = Discourse.Route.extend({ activate: function() { + this._super(); // will mark the "top" navigation item as selected this.controllerFor('list').setProperties({ filterMode: 'top', @@ -8,8 +9,11 @@ Discourse.ListTopRoute = Discourse.Route.extend({ }); }, - model: function() { - return Discourse.TopList.find(); + setupController: function() { + var topController = this.controllerFor("top"); + Discourse.TopList.find().then(function (result) { + topController.set("model", result); + }); }, renderTemplate: function() { @@ -17,6 +21,7 @@ Discourse.ListTopRoute = Discourse.Route.extend({ }, deactivate: function() { + this._super(); // Clear any filters when we leave the route Discourse.URL.set('queryParams', null); } diff --git a/app/models/top_topic.rb b/app/models/top_topic.rb index ea40b4c556d..d55f22f1b77 100644 --- a/app/models/top_topic.rb +++ b/app/models/top_topic.rb @@ -37,10 +37,10 @@ class TopTopic < ActiveRecord::Base def self.update_posts_count_for(period) sql = "SELECT topic_id, GREATEST(COUNT(*), 1) AS count - FROM posts p - WHERE p.created_at >= :from - AND p.deleted_at IS NULL - AND NOT p.hidden + FROM posts + WHERE created_at >= :from + AND deleted_at IS NULL + AND NOT hidden AND post_type = #{Post.types[:regular]} AND user_id <> #{Discourse.system_user.id} GROUP BY topic_id" @@ -50,8 +50,8 @@ class TopTopic < ActiveRecord::Base def self.update_views_count_for(period) sql = "SELECT parent_id as topic_id, COUNT(*) AS count - FROM views v - WHERE v.viewed_at >= :from + FROM views + WHERE viewed_at >= :from GROUP BY topic_id" TopTopic.update_top_topics(period, "views", sql) @@ -59,10 +59,10 @@ class TopTopic < ActiveRecord::Base def self.update_likes_count_for(period) sql = "SELECT topic_id, GREATEST(SUM(like_count), 1) AS count - FROM posts p - WHERE p.created_at >= :from - AND p.deleted_at IS NULL - AND NOT p.hidden + FROM posts + WHERE created_at >= :from + AND deleted_at IS NULL + AND NOT hidden GROUP BY topic_id" TopTopic.update_top_topics(period, "likes", sql) @@ -71,9 +71,9 @@ class TopTopic < ActiveRecord::Base def self.compute_top_score_for(period) # log(views) + (posts * likes) exec_sql("UPDATE top_topics - SET #{period}_score = CASE #{period}_views_count - WHEN 0 THEN 0 - ELSE log(#{period}_views_count) + (#{period}_posts_count * #{period}_likes_count) + SET #{period}_score = CASE + WHEN #{period}_views_count = 0 THEN 0 + ELSE log(#{period}_views_count) + (#{period}_posts_count * #{period}_likes_count) END") end