diff --git a/app/notifications/base_notification.rb b/app/notifications/base_notification.rb index d17d4a245..8eb97d074 100644 --- a/app/notifications/base_notification.rb +++ b/app/notifications/base_notification.rb @@ -34,6 +34,10 @@ class BaseNotification < Noticed::Base private + def subject_class + ApplicationRecord.descendants.find { |klass| klass.name == params[:subject_class] } + end + def database_notification? # always save all notifications, # but flag if they should display in app or not diff --git a/app/notifications/delivery_notification.rb b/app/notifications/delivery_notification.rb index fa85905bf..403606cef 100644 --- a/app/notifications/delivery_notification.rb +++ b/app/notifications/delivery_notification.rb @@ -16,7 +16,7 @@ class DeliveryNotification < BaseNotification def subject return unless params[:subject_id] && params[:subject_class] - params[:subject_class].constantize.find(params[:subject_id]) + subject_class.find(params[:subject_id]) rescue ActiveRecord::RecordNotFound NonExistantRecord.new(params[:subject_name]) end diff --git a/app/notifications/general_notification.rb b/app/notifications/general_notification.rb index f74c2a298..c683736d0 100644 --- a/app/notifications/general_notification.rb +++ b/app/notifications/general_notification.rb @@ -14,7 +14,6 @@ class GeneralNotification < BaseNotification end def subject - subject_class = params[:subject_class].constantize subject_class.find(params[:subject_id]) rescue NameError, ActiveRecord::RecordNotFound NonExistantRecord.new(params[:subject_name]) diff --git a/app/services/lists/protocols_service.rb b/app/services/lists/protocols_service.rb index 5d57e75ca..b74c68e55 100644 --- a/app/services/lists/protocols_service.rb +++ b/app/services/lists/protocols_service.rb @@ -25,14 +25,21 @@ module Lists @records = @records.preload(:parent, :latest_published_version, :draft, :protocol_keywords, user_assignments: %i(user user_role)) .joins("LEFT OUTER JOIN protocols protocol_versions " \ - "ON protocol_versions.protocol_type = #{Protocol.protocol_types[:in_repository_published_version]} " \ + "ON protocol_versions.protocol_type = + #{Protocol.connection.quote( + Protocol.protocol_types[:in_repository_published_version] + )} " \ "AND protocol_versions.parent_id = protocols.parent_id") .joins("LEFT OUTER JOIN protocols protocol_originals " \ - "ON protocol_originals.protocol_type = #{Protocol.protocol_types[:in_repository_published_original]} " \ + "ON protocol_originals.protocol_type = + #{Protocol.connection.quote( + Protocol.protocol_types[:in_repository_published_original] + )} " \ "AND protocol_originals.id = protocols.parent_id OR " \ "(protocols.id = protocol_originals.id AND protocols.parent_id IS NULL)") .joins("LEFT OUTER JOIN protocols linked_task_protocols " \ - "ON linked_task_protocols.protocol_type = #{Protocol.protocol_types[:linked]} " \ + "ON linked_task_protocols.protocol_type = + #{Protocol.connection.quote(Protocol.protocol_types[:linked])} " \ "AND (linked_task_protocols.parent_id = protocol_versions.id OR " \ "linked_task_protocols.parent_id = protocol_originals.id)") .joins('LEFT OUTER JOIN "protocol_protocol_keywords" ' \ @@ -49,7 +56,8 @@ module Lists '"protocols".*', 'COALESCE("protocols"."parent_id", "protocols"."id") AS adjusted_parent_id', 'STRING_AGG(DISTINCT("protocol_keywords"."name"), \', \') AS "protocol_keywords_str"', - "CASE WHEN protocols.protocol_type = #{Protocol.protocol_types[:in_repository_draft]} " \ + "CASE WHEN protocols.protocol_type = + #{Protocol.connection.quote(Protocol.protocol_types[:in_repository_draft])} " \ "THEN 0 ELSE COUNT(DISTINCT(\"protocol_versions\".\"id\")) + 1 " \ "END AS nr_of_versions", 'COUNT(DISTINCT("linked_task_protocols"."id")) AS nr_of_linked_tasks',