summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Balteanu <marius.balteanu@zitec.com>2023-12-22 02:13:32 +0000
committerMarius Balteanu <marius.balteanu@zitec.com>2023-12-22 02:13:32 +0000
commit73ffd58bfaf9bfb0a8dab3693336f9b349acab85 (patch)
tree7fcb7d3725c4c9bc46cbb7402f3c6d6e2080f5e7
parent002187d8b618e01a1427dca7d1f120449dcb560f (diff)
downloadredmine-73ffd58bfaf9bfb0a8dab3693336f9b349acab85.tar.gz
redmine-73ffd58bfaf9bfb0a8dab3693336f9b349acab85.zip
Merge r22551 from trunk to 5.1-stable (#39862).
git-svn-id: https://svn.redmine.org/redmine/branches/5.1-stable@22552 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--config/routes.rb4
-rw-r--r--lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb24
-rw-r--r--test/integration/routing/plugins_test.rb5
3 files changed, 32 insertions, 1 deletions
diff --git a/config/routes.rb b/config/routes.rb
index 6176fdfae..12be7b3ec 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -317,7 +317,9 @@ Rails.application.routes.draw do
get 'attachments/download/:id', :to => 'attachments#download', :id => /\d+/
get 'attachments/thumbnail/:id(/:size)', :to => 'attachments#thumbnail', :id => /\d+/, :size => /\d+/, :as => 'thumbnail'
resources :attachments, :only => [:show, :update, :destroy]
- constraints object_type: /(issues|versions|news|messages|wiki_pages|projects|documents|journals)/ do
+
+ # register plugin object types with ObjectTypeConstraint.register_object_type(PluginModel.name.underscore.pluralize')
+ constraints Redmine::Acts::Attachable::ObjectTypeConstraint do
get 'attachments/:object_type/:object_id/edit', :to => 'attachments#edit_all', :as => :object_attachments_edit
patch 'attachments/:object_type/:object_id', :to => 'attachments#update_all', :as => :object_attachments
get 'attachments/:object_type/:object_id/download', :to => 'attachments#download_all', :as => :object_attachments_download
diff --git a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb
index 4a069980d..9c09a7870 100644
--- a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb
+++ b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb
@@ -20,6 +20,30 @@
module Redmine
module Acts
module Attachable
+
+ class ObjectTypeConstraint
+ cattr_accessor :object_types
+
+ self.object_types = Concurrent::Set.new(%w[
+ issues versions news messages wiki_pages projects documents journals
+ ])
+
+ class << self
+ def matches?(request)
+ request.path_parameters[:object_type] =~ param_expression
+ end
+
+ def register_object_type(type)
+ object_types << type
+ @param_expression = nil
+ end
+
+ def param_expression
+ @param_expression ||= Regexp.new("^(#{object_types.join("|")})$")
+ end
+ end
+ end
+
def self.included(base)
base.extend ClassMethods
end
diff --git a/test/integration/routing/plugins_test.rb b/test/integration/routing/plugins_test.rb
index b6397de99..cc96b7fe4 100644
--- a/test/integration/routing/plugins_test.rb
+++ b/test/integration/routing/plugins_test.rb
@@ -73,6 +73,11 @@ class RoutingPluginsTest < Redmine::RoutingTest
should_route 'GET /plugin_articles' => 'plugin_articles#index'
should_route 'GET /bar_plugin_articles' => 'bar_plugin_articles#index'
assert_equal("/bar_plugin_articles", plugin_articles_path)
+ should_route(
+ 'GET /attachments/plugin_articles/12/edit' => 'attachments#edit_all',
+ object_id: '12',
+ object_type: 'plugin_articles'
+ )
end
private