diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index f66942c..7cffd18 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -4,6 +4,7 @@ en: alt: solved: accepted_notification: "accepted" + solutions: "Solutions" solved: title: "Solved" diff --git a/db/migrate/20210609171830_add_solutions_to_directory_items.rb b/db/migrate/20210609171830_add_solutions_to_directory_items.rb new file mode 100644 index 0000000..eccccf8 --- /dev/null +++ b/db/migrate/20210609171830_add_solutions_to_directory_items.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddSolutionsToDirectoryItems < ActiveRecord::Migration[6.1] + def change + add_column :directory_items, :solutions, :integer, default: 0 + end +end diff --git a/plugin.rb b/plugin.rb index 01f5e14..88dd7a0 100644 --- a/plugin.rb +++ b/plugin.rb @@ -613,6 +613,26 @@ SQL options[:refresh_stream] = true if old_category_allows != new_category_allows end + query = " + WITH x AS (SELECT + u.id user_id, + COUNT(DISTINCT ua.id) AS solutions + FROM users AS u + INNER JOIN user_actions AS ua ON ua.user_id = u.id AND ua.action_type = #{UserAction::SOLVED} AND COALESCE(ua.created_at, :since) > :since + WHERE u.active + AND u.silenced_till IS NULL + AND u.id > 0 + GROUP BY u.id + ) + UPDATE directory_items di SET + solutions = x.solutions + FROM x + WHERE x.user_id = di.user_id + AND di.period_type = :period_type + AND di.solutions <> x.solutions + " + add_directory_column("solutions", query: query) + add_to_class(:composer_messages_finder, :check_topic_is_solved) do return if !SiteSetting.solved_enabled || SiteSetting.disable_solved_education_message return if !replying? || @topic.blank? || @topic.private_message?