diff --git a/app/controllers/blazer/queries_controller.rb b/app/controllers/blazer/queries_controller.rb index 6140460d7..85234c0eb 100644 --- a/app/controllers/blazer/queries_controller.rb +++ b/app/controllers/blazer/queries_controller.rb @@ -1,6 +1,7 @@ module Blazer class QueriesController < BaseController - before_action :set_query, only: [:show, :edit, :update, :destroy, :refresh] + before_action :set_query, only: [:show, :edit, :update, :destroy, :refresh, :add_to_dashboards] + before_action :set_dashboards, only: [:show] before_action :set_data_source, only: [:tables, :docs, :schema, :cancel] def home @@ -198,6 +199,33 @@ def cancel head :ok end + def add_to_dashboards + dashboard_ids = params[:query] ? params[:query][:dashboard_ids] : [] + if dashboard_ids && @query.persisted? + # Remove Dashboard Queries where dashboard ID was not selected + destroyed_dashboard_queries = @query.dashboard_queries.where.not(dashboard_id: dashboard_ids).destroy_all + + # Fix/Reset dashboard_query positions after removal of queries + destroyed_dashboard_queries.each do |destroyed_dashboard_query| + dashboard_id = destroyed_dashboard_query.dashboard_id + Blazer::Dashboard.find(dashboard_id).dashboard_queries.order(:position).each_with_index do |dashboard_query, i| + dashboard_query.position = i + dashboard_query.save! + end + end + + # Add query to selected dashboards + dashboard_ids.each do |dashboard_id| + # only modifies new dashboard queries + @query.dashboard_queries.where(dashboard_id: dashboard_id).first_or_initialize do |dashboard_query| + dashboard_query.position = Blazer::Dashboard.find(dashboard_id).query_ids.length + dashboard_query.save! + end + end + end + redirect_to query_path(@query) + end + private def set_data_source @@ -312,6 +340,10 @@ def set_query end end + def set_dashboards + @dashboards = Blazer::Dashboard.order(:name) + end + def render_forbidden render plain: "Access denied", status: :forbidden end diff --git a/app/views/blazer/queries/_add_to_dashboards.html.erb b/app/views/blazer/queries/_add_to_dashboards.html.erb new file mode 100644 index 000000000..95f5f5cc7 --- /dev/null +++ b/app/views/blazer/queries/_add_to_dashboards.html.erb @@ -0,0 +1,28 @@ + + +