diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4b7b1699..fcc554c7 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -397,6 +397,7 @@ module ApplicationHelper # Returns object as it was before version's change(unless its a create event's version) # Else Returns object as it was after version's change def get_version_object(version) + return nil unless version version.item || version.reify || version.next.reify end @@ -502,4 +503,10 @@ module ApplicationHelper 'deleted' end end + + def object_last_description(model_name, id) + object_version = PaperTrail::Version.where(item_type: model_name, item_id: id).last + object = (object_version.reify || object_version.item) if object_version + object.try(:name) || object.try(:title) + end end diff --git a/app/models/role.rb b/app/models/role.rb index f194ad91..c827d0dd 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -3,7 +3,7 @@ class Role < ActiveRecord::Base has_many :users_roles has_many :users, through: :users_roles - has_paper_trail on: [:update], only: [:name, :description], meta: { conference_id: :resource_id } + has_paper_trail on: [:create, :update], only: [:name, :description], meta: { conference_id: :resource_id } before_destroy :cancel scopify diff --git a/app/views/shared/_object_changes.html.haml b/app/views/shared/_object_changes.html.haml index b61d3c83..3a49b631 100644 --- a/app/views/shared/_object_changes.html.haml +++ b/app/views/shared/_object_changes.html.haml @@ -12,17 +12,37 @@ - if can? :revert_attribute, version %th Action %tbody - - if version.event!= 'destroy' + - if version.event != 'destroy' - version.changeset.reject{ |_, values| values[0].blank? && values[1].blank? }.each do |attribute, values| %tr %td= attribute - - if version.event != 'create' - %td= values[0].blank? ? '-' : values[0] - %td= values[1].blank? ? '-' : values[1] + + - if attribute.include?('_id') + - model_name = attribute.chomp('_id').camelize + - if version.event != 'create' + %td + = object_last_description(model_name, values[0]) + = "(ID: #{values[0].blank? ? '-' : values[0]})" + %td + = object_last_description(model_name, values[1]) + = "(ID: #{values[1].blank? ? '-' : values[1]})" + + - else + - if version.event != 'create' + %td= values[0].blank? ? '-' : values[0] + %td= values[1].blank? ? '-' : values[1] + - if can? :revert_attribute, version %td= link_to 'Revert', admin_revision_history_revert_attribute_path(id: version.id, attribute: attribute), class: 'btn btn-sm btn-primary', data: { confirm: "Are you sure you want to revert #{attribute}?" } - else - version.reify.attributes.each do |attribute, value| %tr %td= attribute - %td= value.blank? ? '-' : value + + - if attribute.include?('_id') + - model_name = attribute.chomp('_id').camelize + %td + = object_last_description(model_name, value) + = "(ID: #{value.blank? ? '-' : value})" + - else + %td= value.blank? ? '-' : value diff --git a/spec/features/versions_spec.rb b/spec/features/versions_spec.rb index 992061c7..5987b791 100644 --- a/spec/features/versions_spec.rb +++ b/spec/features/versions_spec.rb @@ -58,6 +58,7 @@ feature 'Version' do new_conference.update_attributes(title: 'New Con', short_title: 'NewCon') visit admin_revision_history_path + select '100', from: 'versionstable_length' expect(page).to have_text('Someone (probably via the console) created new conference New Con') expect(page).to have_text('Someone (probably via the console) created new event type Talk in conference NewCon') expect(page).to have_text('Someone (probably via the console) created new event type Workshop in conference NewCon')