Skip to content

Commit de63f25

Browse files
authored
Merge pull request #277 from tulibraries/IMT-142-migration-status-duplicate-checking
IMT-142 migration status duplicate checking
2 parents 652660b + 637957c commit de63f25

21 files changed

+269
-210
lines changed

app/assets/stylesheets/application.css.scss

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,20 @@ a {
107107
color: #fff;
108108
}
109109

110+
.duplicates-table {
111+
overflow-x: auto;
112+
}
113+
114+
.duplicates-table table {
115+
width: 100%;
116+
table-layout: fixed;
117+
}
118+
119+
.duplicates-table td {
120+
word-break: break-word;
121+
white-space: normal;
122+
}
123+
110124
[data-command="filter"].wb-helper-invalid,
111125
[data-command="filter"].filter-active.wb-helper-invalid {
112126
color: #2E6F40 !important;

app/controllers/admin/isilon_assets_controller.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ class IsilonAssetsController < Admin::ApplicationController
3939
# permit(dashboard.permitted_attributes(action_name)).
4040
# transform_values { |value| value == "" ? nil : value }
4141
# end
42+
def resource_params
43+
params.require(resource_class.model_name.param_key)
44+
.permit(dashboard.permitted_attributes(action_name))
45+
.except(:parent_folder_id)
46+
end
4247

4348
# See https://administrate-demo.herokuapp.com/customizing_controller_actions
4449
# for more information

app/dashboards/isilon_asset_dashboard.rb

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,16 @@ class IsilonAssetDashboard < Administrate::BaseDashboard
1515
assigned_to: Field::String,
1616
contentdm_collection: Field::BelongsTo,
1717
date_created_in_isilon: Field::String,
18-
duplicate_of: Field::BelongsTo.with_options(
19-
class_name: "IsilonAsset",
20-
foreign_key: "duplicate_of_id"
21-
),
22-
duplicates: Field::HasMany.with_options(
18+
duplicates: DuplicatesField.with_options(
2319
class_name: "IsilonAsset"
2420
),
21+
has_duplicates: HasDuplicatesField,
2522
file_checksum: Field::String,
2623
file_size: Field::String,
2724
file_type: Field::String,
2825
isilon_name: Field::String,
2926
isilon_path: Field::String,
27+
full_path_with_volume: Field::String,
3028
last_modified_in_isilon: Field::String,
3129
last_updated_by: Field::String,
3230
migration_status: Field::BelongsTo,
@@ -48,6 +46,7 @@ class IsilonAssetDashboard < Administrate::BaseDashboard
4846
COLLECTION_ATTRIBUTES = %i[
4947
isilon_name
5048
migration_status
49+
has_duplicates
5150
assigned_to
5251
].freeze
5352

@@ -59,6 +58,7 @@ class IsilonAssetDashboard < Administrate::BaseDashboard
5958
isilon_name
6059
isilon_path
6160
parent_folder
61+
full_path_with_volume
6262
date_created_in_isilon
6363
last_modified_in_isilon
6464
file_size
@@ -68,7 +68,6 @@ class IsilonAssetDashboard < Administrate::BaseDashboard
6868
aspace_linking_status
6969
contentdm_collection
7070
preservica_reference_id
71-
duplicate_of
7271
duplicates
7372
notes
7473
assigned_to
@@ -84,7 +83,6 @@ class IsilonAssetDashboard < Administrate::BaseDashboard
8483
migration_status
8584
isilon_name
8685
isilon_path
87-
parent_folder
8886
date_created_in_isilon
8987
last_modified_in_isilon
9088
file_size

app/fields/duplicates_field.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
require "administrate/field/has_many"
4+
5+
class DuplicatesField < Administrate::Field::HasMany
6+
end

app/fields/has_duplicates_field.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# frozen_string_literal: true
2+
3+
require "administrate/field/base"
4+
5+
class HasDuplicatesField < Administrate::Field::Base
6+
def to_s
7+
data ? "Yes" : ""
8+
end
9+
end

app/models/duplicate_group.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
class DuplicateGroup < ApplicationRecord
4+
has_many :duplicate_group_memberships, dependent: :delete_all
5+
has_many :isilon_assets, through: :duplicate_group_memberships
6+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
class DuplicateGroupMembership < ApplicationRecord
4+
belongs_to :duplicate_group
5+
belongs_to :isilon_asset
6+
end

app/models/isilon_asset.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,22 @@ class IsilonAsset < ApplicationRecord
55
belongs_to :contentdm_collection, optional: true
66
belongs_to :assigned_to, class_name: "User", foreign_key: "assigned_to", optional: true
77

8-
# Self-referencing association for duplicate tracking
9-
belongs_to :duplicate_of, class_name: "IsilonAsset", foreign_key: "duplicate_of_id", optional: true
10-
has_many :duplicates, class_name: "IsilonAsset", foreign_key: "duplicate_of_id", dependent: :nullify
8+
has_many :duplicate_group_memberships, dependent: :delete_all
9+
has_many :duplicate_groups, through: :duplicate_group_memberships
10+
has_many :duplicates, -> { distinct }, through: :duplicate_groups, source: :isilon_assets
1111

1212
before_validation :set_default_migration_status, on: :create
1313

14+
def full_path_with_volume
15+
volume_name = parent_folder&.volume&.name
16+
return isilon_path unless volume_name.present?
17+
18+
path = isilon_path.to_s
19+
path = "/#{path}" unless path.start_with?("/")
20+
"/#{volume_name}#{path}".gsub(%r{//+}, "/")
21+
end
22+
23+
1424
private
1525

1626
def set_default_migration_status
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<% if field.data.present? %>
2+
<div class="duplicates-table">
3+
<table>
4+
<thead>
5+
<tr>
6+
<th>Path (with volume)</th>
7+
</tr>
8+
</thead>
9+
<tbody>
10+
<% field.data.each do |duplicate| %>
11+
<tr>
12+
<td><%= link_to duplicate.full_path_with_volume, admin_isilon_asset_path(duplicate) %></td>
13+
</tr>
14+
<% end %>
15+
</tbody>
16+
</table>
17+
</div>
18+
<% end %>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<%= field.to_s %>

0 commit comments

Comments
 (0)