From 4852dec6f40af99c9f57215657a79cb1c63bfa67 Mon Sep 17 00:00:00 2001 From: Stephan Wiehr Date: Tue, 15 May 2018 15:53:16 +0200 Subject: [PATCH 1/2] Limit @query modifications to IssueQuery instances Only IssueQuery implements the used functions, thus the plugin breaks any other implementations creating subclasses of Query and QueriesController. --- .../patches/queries_controller_patch.rb | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/query_share/patches/queries_controller_patch.rb b/lib/query_share/patches/queries_controller_patch.rb index 76ea831..64f2ca5 100644 --- a/lib/query_share/patches/queries_controller_patch.rb +++ b/lib/query_share/patches/queries_controller_patch.rb @@ -18,17 +18,18 @@ module ClassMethods module InstanceMethods def update_query_from_params_with_share update_query_from_params_without_share - share_visibility = params[:query] && params[:query][:visibility] + if @query.instanceof?(IssueQuery) + share_visibility = params[:query] && params[:query][:visibility] - if (User.current.allowed_to?(:manage_group_queries, @query.project) || User.current.admin?) && - share_visibility.to_i == IssueQuery::VISIBILITY_GROUP - @query.query_principal_ids = params[:query] && params[:query][:principal_ids] - @query.principals_logins = params[:query] && params[:query][:principals_logins] - @query.visibility = share_visibility - elsif @query.visibility.to_i == IssueQuery::VISIBILITY_GROUP - @query.visibility = IssueQuery::VISIBILITY_PRIVATE + if (User.current.allowed_to?(:manage_group_queries, @query.project) || User.current.admin?) && + share_visibility.to_i == IssueQuery::VISIBILITY_GROUP + @query.query_principal_ids = params[:query] && params[:query][:principal_ids] + @query.principals_logins = params[:query] && params[:query][:principals_logins] + @query.visibility = share_visibility + elsif @query.visibility.to_i == IssueQuery::VISIBILITY_GROUP + @query.visibility = IssueQuery::VISIBILITY_PRIVATE + end end - @query end end From dfa7cec718b4defeecc59e94e4610f0ba2fc0548 Mon Sep 17 00:00:00 2001 From: Vegaminer Date: Thu, 16 Jan 2020 12:07:24 +0000 Subject: [PATCH 2/2] Rails 5.2 --- db/migrate/001_create_query_users.rb | 2 +- init.rb | 3 ++- lib/query_share/patches/issue_query_patch.rb | 10 ++++++++-- .../patches/queries_controller_patch.rb | 10 ++++++++-- lib/query_share/patches/queries_helper_patch.rb | 17 +++++++++++++++-- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/db/migrate/001_create_query_users.rb b/db/migrate/001_create_query_users.rb index 070150f..0f8bdbe 100644 --- a/db/migrate/001_create_query_users.rb +++ b/db/migrate/001_create_query_users.rb @@ -1,4 +1,4 @@ -class CreateQueryUsers < ActiveRecord::Migration +class CreateQueryUsers < ActiveRecord::Migration[4.2] def change create_table :queries_users, :id => false do |t| t.column :query_id, :integer, :null => false diff --git a/init.rb b/init.rb index 04261c7..9785b6e 100644 --- a/init.rb +++ b/init.rb @@ -5,7 +5,8 @@ require 'query_share/patches/queries_helper_patch' end -ActionDispatch::Callbacks.to_prepare do +#ActionDispatch::Callbacks.to_prepare do +ActiveSupport::Reloader.to_prepare do require_dependency 'query_share/hooks/view_layout' end diff --git a/lib/query_share/patches/issue_query_patch.rb b/lib/query_share/patches/issue_query_patch.rb index 58bb9cc..cf599d3 100644 --- a/lib/query_share/patches/issue_query_patch.rb +++ b/lib/query_share/patches/issue_query_patch.rb @@ -7,7 +7,9 @@ def self.included(base) # :nodoc: base.send(:include, InstanceMethods) base.class_eval do unloadable - alias_method_chain :visible?, :share + #alias_method_chain :visible?, :share + alias_method :visible_without_share?, :visible? + alias_method :visible?, :visible_with_share? class << self alias_method :visible, :esi_visible @@ -75,7 +77,11 @@ def principals_logins= (str_val) logger.debug("Redmine QueryShare : users updated #{self.query_principals.to_a}") end - def visible_with_share?(user=User.current) + def visible_without_share?(user=User.current) + return true if visible?(user) == true + end + + def visible_with_share?(user=User.current) return true if visible_without_share?(user) == true case visibility when Query::VISIBILITY_GROUP diff --git a/lib/query_share/patches/queries_controller_patch.rb b/lib/query_share/patches/queries_controller_patch.rb index 64f2ca5..5ace68c 100644 --- a/lib/query_share/patches/queries_controller_patch.rb +++ b/lib/query_share/patches/queries_controller_patch.rb @@ -8,7 +8,9 @@ def self.included(base) # :nodoc: base.class_eval do unloadable - alias_method_chain :update_query_from_params, :share + #alias_method_chain :update_query_from_params, :share + alias_method :update_query_from_params_without_share, :update_query_from_params + alias_method :update_query_from_params, :update_query_from_params_with_share end end @@ -16,9 +18,13 @@ module ClassMethods end module InstanceMethods + #def upate_query_from_params_without_share + # upate_query_from_params + #end + def update_query_from_params_with_share update_query_from_params_without_share - if @query.instanceof?(IssueQuery) + if @query.instance_of? IssueQuery share_visibility = params[:query] && params[:query][:visibility] if (User.current.allowed_to?(:manage_group_queries, @query.project) || User.current.admin?) && diff --git a/lib/query_share/patches/queries_helper_patch.rb b/lib/query_share/patches/queries_helper_patch.rb index 9d7c2ba..2558d51 100644 --- a/lib/query_share/patches/queries_helper_patch.rb +++ b/lib/query_share/patches/queries_helper_patch.rb @@ -28,7 +28,13 @@ def query_links_with_share(title, queries) :class => 'queries' ) + "\n" end - alias_method_chain :query_links, :share + #alias_method_chain :query_links, :share + alias_method :query_links_without_share, :query_links + alias_method :query_links, :query_links_with_share + + #def query_links_without_share(title, queries) + # return query_links(title, queries) + #end def sidebar_queries_with_share(klass, project) return sidebar_queries_without_share(klass, project) unless Setting.plugin_redmine_query_share['query_share_enable'] == "1" @@ -37,5 +43,12 @@ def sidebar_queries_with_share(klass, project) end @sidebar_queries end - alias_method_chain :sidebar_queries, :share + + #def sidebar_queries_without_share(klass, project) + # return sidebar_queries(klass, project) + #end + + #alias_method_chain :sidebar_queries, :share + alias_method :sidebar_queries_without_share, :sidebar_queries + alias_method :sidebar_queries, :sidebar_queries_with_share end