diff --git a/app/controllers/protocols_controller.rb b/app/controllers/protocols_controller.rb index fc23f84f5..bd5be2e73 100644 --- a/app/controllers/protocols_controller.rb +++ b/app/controllers/protocols_controller.rb @@ -530,7 +530,7 @@ class ProtocolsController < ApplicationController else @protocol.parent.parent end - @protocol.update_from_parent(current_user, source_parent.latest_published_version) + @protocol.update_from_parent(current_user, source_parent.latest_published_version_or_self) rescue StandardError transaction_error = true raise ActiveRecord::Rollback @@ -813,7 +813,7 @@ class ProtocolsController < ApplicationController # Create folder and xml file for each protocol and populate it @protocols.each do |protocol| - protocol = protocol.latest_published_version || protocol + protocol = protocol.latest_published_version_or_self protocol_dir = get_guid(protocol.id).to_s ostream.put_next_entry("#{protocol_dir}/eln.xml") ostream.print(generate_protocol_xml(protocol)) @@ -1173,7 +1173,7 @@ class ProtocolsController < ApplicationController def check_clone_permissions load_team_and_type protocol = Protocol.find_by(id: params[:ids][0]) - @original = protocol.latest_published_version || protocol + @original = protocol.latest_published_version_or_self if @original.blank? || !can_clone_protocol_in_repository?(@original) || @type == :archive @@ -1251,7 +1251,7 @@ class ProtocolsController < ApplicationController def check_load_from_repository_permissions @protocol = Protocol.find_by(id: params[:id]) - @source = Protocol.find_by(id: params[:source_id])&.latest_published_version + @source = Protocol.find_by(id: params[:source_id])&.latest_published_version_or_self render_403 unless @protocol.present? && @source.present? && (can_manage_protocol_in_module?(@protocol) && diff --git a/app/datatables/protocols_datatable.rb b/app/datatables/protocols_datatable.rb index 8cfb621a0..e6b7dcc5e 100644 --- a/app/datatables/protocols_datatable.rb +++ b/app/datatables/protocols_datatable.rb @@ -144,6 +144,7 @@ class ProtocolsDatatable < CustomDatatable .select(:id) published_versions = @team.protocols .where(protocol_type: Protocol.protocol_types[:in_repository_published_version]) + .order(:parent_id, version_number: :desc) .select('DISTINCT ON (parent_id) id') new_drafts = @team.protocols .where(protocol_type: Protocol.protocol_types[:in_repository_draft], parent_id: nil) diff --git a/app/models/protocol.rb b/app/models/protocol.rb index 7852851e1..221c6752d 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -260,6 +260,10 @@ class Protocol < ApplicationRecord in_repository_draft? && parent.blank? end + def latest_published_version_or_self + latest_published_version || self + end + def permission_parent in_module? ? my_module : team end diff --git a/app/utilities/protocols_exporter.rb b/app/utilities/protocols_exporter.rb index 384606514..83e785338 100644 --- a/app/utilities/protocols_exporter.rb +++ b/app/utilities/protocols_exporter.rb @@ -27,7 +27,7 @@ module ProtocolsExporter envelope_xml = "\n" protocols.each do |protocol| - protocol = protocol.latest_published_version || protocol + protocol = protocol.latest_published_version_or_self protocol_name = get_protocol_name(protocol) envelope_xml << "#{protocol_name}" \ diff --git a/app/utilities/protocols_exporter_v2.rb b/app/utilities/protocols_exporter_v2.rb index dd8b6f165..537e22cda 100644 --- a/app/utilities/protocols_exporter_v2.rb +++ b/app/utilities/protocols_exporter_v2.rb @@ -9,7 +9,7 @@ module ProtocolsExporterV2 envelope_xml = "\n" protocols.each do |protocol| - protocol = protocol.latest_published_version || protocol + protocol = protocol.latest_published_version_or_self protocol_name = get_protocol_name(protocol) envelope_xml << "#{protocol_name}" \