bulkrax 4.2.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/bulkrax/exporters.js +12 -0
- data/app/assets/javascripts/bulkrax/importers.js.erb +27 -1
- data/app/controllers/bulkrax/exporters_controller.rb +3 -1
- data/app/controllers/bulkrax/importers_controller.rb +1 -1
- data/app/factories/bulkrax/object_factory.rb +35 -8
- data/app/jobs/bulkrax/create_relationships_job.rb +1 -1
- data/app/jobs/bulkrax/import_work_job.rb +12 -10
- data/app/matchers/bulkrax/application_matcher.rb +1 -1
- data/app/models/bulkrax/csv_entry.rb +14 -10
- data/app/models/bulkrax/importer.rb +20 -15
- data/app/models/bulkrax/oai_entry.rb +1 -2
- data/app/models/concerns/bulkrax/file_set_entry_behavior.rb +8 -1
- data/app/models/concerns/bulkrax/import_behavior.rb +10 -9
- data/app/parsers/bulkrax/application_parser.rb +87 -14
- data/app/parsers/bulkrax/bagit_parser.rb +2 -1
- data/app/parsers/bulkrax/csv_parser.rb +11 -10
- data/app/parsers/bulkrax/oai_dc_parser.rb +2 -2
- data/app/services/bulkrax/remove_relationships_for_importer.rb +107 -0
- data/app/views/bulkrax/exporters/_form.html.erb +3 -3
- data/app/views/bulkrax/exporters/show.html.erb +17 -41
- data/app/views/bulkrax/importers/edit.html.erb +1 -1
- data/app/views/bulkrax/importers/new.html.erb +1 -1
- data/app/views/bulkrax/importers/show.html.erb +3 -114
- data/app/views/bulkrax/shared/_collection_entries_tab.html.erb +39 -0
- data/app/views/bulkrax/shared/_file_set_entries_tab.html.erb +39 -0
- data/app/views/bulkrax/shared/_work_entries_tab.html.erb +39 -0
- data/app/views/hyrax/dashboard/sidebar/_bulkrax_sidebar_additions.html.erb +7 -5
- data/app/views/hyrax/dashboard/sidebar/_repository_content.html.erb +23 -15
- data/db/migrate/20211203195233_rename_children_counters_to_relationships.rb +1 -1
- data/db/migrate/20211220195027_add_file_set_counters_to_importer_runs.rb +1 -1
- data/db/migrate/20220118001339_add_import_attempts_to_entries.rb +1 -1
- data/db/migrate/20220119213325_add_work_counters_to_importer_runs.rb +1 -1
- data/db/migrate/20220301001839_create_bulkrax_pending_relationships.rb +1 -1
- data/db/migrate/20220303212810_add_order_to_bulkrax_pending_relationships.rb +1 -1
- data/db/migrate/20220412233954_add_include_thumbnails_to_bulkrax_exporters.rb +1 -1
- data/db/migrate/20220413180915_add_generated_metadata_to_bulkrax_exporters.rb +1 -1
- data/db/migrate/20220609001128_rename_bulkrax_importer_run_to_importer_run.rb +1 -1
- data/lib/bulkrax/version.rb +1 -1
- data/lib/bulkrax.rb +38 -11
- data/lib/generators/bulkrax/templates/config/initializers/bulkrax.rb +10 -0
- data/lib/tasks/bulkrax_tasks.rake +10 -11
- data/lib/tasks/reset.rake +65 -0
- metadata +7 -2
@@ -80,120 +80,9 @@
|
|
80
80
|
</ul>
|
81
81
|
<!-- Tab panes -->
|
82
82
|
<div class="tab-content outline">
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
<tr>
|
87
|
-
<th>Identifier</th>
|
88
|
-
<th>Entry ID</th>
|
89
|
-
<th>Status</th>
|
90
|
-
<th>Errors</th>
|
91
|
-
<th>Status Set At</th>
|
92
|
-
<th>Actions</th>
|
93
|
-
</tr>
|
94
|
-
</thead>
|
95
|
-
<tbody>
|
96
|
-
<% @work_entries.each do |e| %>
|
97
|
-
<tr>
|
98
|
-
<td><%= link_to e.identifier, bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
99
|
-
<td><%= e.id %></td>
|
100
|
-
<% if e.status == "Complete" %>
|
101
|
-
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
102
|
-
<% elsif e.status == "Pending" %>
|
103
|
-
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
104
|
-
<% else %>
|
105
|
-
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
|
106
|
-
<% end %>
|
107
|
-
<% if e.last_error.present? %>
|
108
|
-
<td><%= link_to e.last_error.dig("error_class"), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
109
|
-
<% else %>
|
110
|
-
<td></td>
|
111
|
-
<% end %>
|
112
|
-
<td><%= e.status_at %></td>
|
113
|
-
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
114
|
-
</tr>
|
115
|
-
<% end %>
|
116
|
-
</tbody>
|
117
|
-
</table>
|
118
|
-
<%= page_entries_info(@work_entries) %><br />
|
119
|
-
<%= paginate(@work_entries, theme: 'blacklight', param_name: :work_entries_page, params: { anchor: 'work-entries'}) %>
|
120
|
-
</div>
|
121
|
-
<div role="tabpanel" class="tab-pane bulkrax-nav-tab-table-left-align" id="collection-entries">
|
122
|
-
<table class='table table-striped'>
|
123
|
-
<thead>
|
124
|
-
<tr>
|
125
|
-
<th>Identifier</th>
|
126
|
-
<th>Entry ID</th>
|
127
|
-
<th>Status</th>
|
128
|
-
<th>Errors</th>
|
129
|
-
<th>Status Set At</th>
|
130
|
-
<th>Actions</th>
|
131
|
-
</tr>
|
132
|
-
</thead>
|
133
|
-
<tbody>
|
134
|
-
<% @collection_entries.each do |e| %>
|
135
|
-
<tr>
|
136
|
-
<td><%= link_to e.identifier, bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
137
|
-
<td><%= e.id %></td>
|
138
|
-
<% if e.status == "Complete" %>
|
139
|
-
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
140
|
-
<% elsif e.status == "Pending" %>
|
141
|
-
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
142
|
-
<% else %>
|
143
|
-
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
|
144
|
-
<% end %>
|
145
|
-
<% if e.last_error.present? %>
|
146
|
-
<td><%= link_to e.last_error.dig("error_class"), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
147
|
-
<% else %>
|
148
|
-
<td></td>
|
149
|
-
<% end %>
|
150
|
-
<td><%= e.status_at %></td>
|
151
|
-
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
152
|
-
</tr>
|
153
|
-
<% end %>
|
154
|
-
</tbody>
|
155
|
-
</table>
|
156
|
-
<%= page_entries_info(@collection_entries) %><br />
|
157
|
-
<%= paginate(@collection_entries, theme: 'blacklight', param_name: :collections_entries_page, params: {anchor: 'collection-entries'}) %>
|
158
|
-
</div>
|
159
|
-
<div role="tabpanel" class="tab-pane bulkrax-nav-tab-table-left-align" id="file-set-entries">
|
160
|
-
<table class='table table-striped'>
|
161
|
-
<thead>
|
162
|
-
<tr>
|
163
|
-
<th>Identifier</th>
|
164
|
-
<th>Entry ID</th>
|
165
|
-
<th>Status</th>
|
166
|
-
<th>Errors</th>
|
167
|
-
<th>Status Set At</th>
|
168
|
-
<th>Actions</th>
|
169
|
-
</tr>
|
170
|
-
</thead>
|
171
|
-
<tbody>
|
172
|
-
<% @file_set_entries.each do |e| %>
|
173
|
-
<tr>
|
174
|
-
<td><%= link_to e.identifier, bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
175
|
-
<td><%= e.id %></td>
|
176
|
-
<% if e.status == "Complete" %>
|
177
|
-
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
178
|
-
<% elsif e.status == "Pending" %>
|
179
|
-
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
180
|
-
<% else %>
|
181
|
-
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
|
182
|
-
<% end %>
|
183
|
-
<% if e.last_error.present? %>
|
184
|
-
<td><%= link_to e.last_error.dig("error_class"), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
185
|
-
<% else %>
|
186
|
-
<td></td>
|
187
|
-
<% end %>
|
188
|
-
<td><%= e.status_at %></td>
|
189
|
-
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
190
|
-
</tr>
|
191
|
-
<% end %>
|
192
|
-
</tbody>
|
193
|
-
</table>
|
194
|
-
<%= page_entries_info(@file_set_entries) %><br />
|
195
|
-
<%= paginate(@file_set_entries, theme: 'blacklight', param_name: :file_set_entries_page, params: {anchor: 'file-set-entries'}) %>
|
196
|
-
</div>
|
83
|
+
<%= render partial: 'bulkrax/shared/work_entries_tab', locals: { item: @importer, entries: @work_entries } %>
|
84
|
+
<%= render partial: 'bulkrax/shared/collection_entries_tab', locals: { item: @importer, entries: @collection_entries } %>
|
85
|
+
<%= render partial: 'bulkrax/shared/file_set_entries_tab', locals: { item: @importer, entries: @file_set_entries } %>
|
197
86
|
</div>
|
198
87
|
</div>
|
199
88
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<div role="tabpanel" class="tab-pane bulkrax-nav-tab-table-left-align" id="collection-entries">
|
2
|
+
<table class='table table-striped'>
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>Identifier</th>
|
6
|
+
<th>Entry ID</th>
|
7
|
+
<th>Status</th>
|
8
|
+
<th>Errors</th>
|
9
|
+
<th>Status Set At</th>
|
10
|
+
<th>Actions</th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% entries.each do |e| %>
|
15
|
+
<% entry_path = item.class.to_s.include?('Importer') ? bulkrax.importer_entry_path(item.id, e.id) : bulkrax.exporter_entry_path(item.id, e.id) %>
|
16
|
+
<tr>
|
17
|
+
<td><%= link_to e.identifier, entry_path %></td>
|
18
|
+
<td><%= e.id %></td>
|
19
|
+
<% if e.status == "Complete" %>
|
20
|
+
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
21
|
+
<% elsif e.status == "Pending" %>
|
22
|
+
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
23
|
+
<% else %>
|
24
|
+
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
|
25
|
+
<% end %>
|
26
|
+
<% if e.last_error.present? %>
|
27
|
+
<td><%= link_to e.last_error.dig("error_class"), entry_path %></td>
|
28
|
+
<% else %>
|
29
|
+
<td></td>
|
30
|
+
<% end %>
|
31
|
+
<td><%= e.status_at %></td>
|
32
|
+
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), entry_path %></td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
</tbody>
|
36
|
+
</table>
|
37
|
+
<%= page_entries_info(entries) %><br />
|
38
|
+
<%= paginate(entries, theme: 'blacklight', param_name: :collections_entries_page, params: { anchor: 'collection-entries' }) %>
|
39
|
+
</div>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<div role="tabpanel" class="tab-pane bulkrax-nav-tab-table-left-align" id="file-set-entries">
|
2
|
+
<table class='table table-striped'>
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>Identifier</th>
|
6
|
+
<th>Entry ID</th>
|
7
|
+
<th>Status</th>
|
8
|
+
<th>Errors</th>
|
9
|
+
<th>Status Set At</th>
|
10
|
+
<th>Actions</th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% entries.each do |e| %>
|
15
|
+
<% entry_path = item.class.to_s.include?('Importer') ? bulkrax.importer_entry_path(item.id, e.id) : bulkrax.exporter_entry_path(item.id, e.id) %>
|
16
|
+
<tr>
|
17
|
+
<td><%= link_to e.identifier, entry_path %></td>
|
18
|
+
<td><%= e.id %></td>
|
19
|
+
<% if e.status == "Complete" %>
|
20
|
+
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
21
|
+
<% elsif e.status == "Pending" %>
|
22
|
+
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
23
|
+
<% else %>
|
24
|
+
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
|
25
|
+
<% end %>
|
26
|
+
<% if e.last_error.present? %>
|
27
|
+
<td><%= link_to e.last_error.dig("error_class"), entry_path %></td>
|
28
|
+
<% else %>
|
29
|
+
<td></td>
|
30
|
+
<% end %>
|
31
|
+
<td><%= e.status_at %></td>
|
32
|
+
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), entry_path %></td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
</tbody>
|
36
|
+
</table>
|
37
|
+
<%= page_entries_info(entries) %><br />
|
38
|
+
<%= paginate(entries, theme: 'blacklight', param_name: :file_set_entries_page, params: { anchor: 'file-set-entries' }) %>
|
39
|
+
</div>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<div role="tabpanel" class="tab-pane active bulkrax-nav-tab-table-left-align" id="work-entries">
|
2
|
+
<table class='table table-striped'>
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>Identifier</th>
|
6
|
+
<th>Entry ID</th>
|
7
|
+
<th>Status</th>
|
8
|
+
<th>Errors</th>
|
9
|
+
<th>Status Set At</th>
|
10
|
+
<th>Actions</th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% entries.each do |e| %>
|
15
|
+
<% entry_path = item.class.to_s.include?('Importer') ? bulkrax.importer_entry_path(item.id, e.id) : bulkrax.exporter_entry_path(item.id, e.id) %>
|
16
|
+
<tr>
|
17
|
+
<td><%= link_to e.identifier, entry_path %></td>
|
18
|
+
<td><%= e.id %></td>
|
19
|
+
<% if e.status == "Complete" %>
|
20
|
+
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
21
|
+
<% elsif e.status == "Pending" %>
|
22
|
+
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
23
|
+
<% else %>
|
24
|
+
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
|
25
|
+
<% end %>
|
26
|
+
<% if e.last_error.present? %>
|
27
|
+
<td><%= link_to e.last_error.dig("error_class"), entry_path %></td>
|
28
|
+
<% else %>
|
29
|
+
<td></td>
|
30
|
+
<% end %>
|
31
|
+
<td><%= e.status_at %></td>
|
32
|
+
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), entry_path %></td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
</tbody>
|
36
|
+
</table>
|
37
|
+
<%= page_entries_info(entries) %><br />
|
38
|
+
<%= paginate(entries, theme: 'blacklight', param_name: :work_entries_page, params: { anchor: 'work-entries' }) %>
|
39
|
+
</div>
|
@@ -1,6 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
<% if ENV.fetch('HYKU_BULKRAX_ENABLED', 'true') == 'true' %>
|
2
|
+
<%= menu.nav_link(bulkrax.importers_path) do %>
|
3
|
+
<span class="fa fa-cloud-upload" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.importers') %></span>
|
4
|
+
<% end %>
|
5
|
+
<%= menu.nav_link(bulkrax.exporters_path) do %>
|
6
|
+
<span class="fa fa-cloud-download" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.exporters') %></span>
|
7
|
+
<% end %>
|
3
8
|
<% end %>
|
4
|
-
<%= menu.nav_link(bulkrax.exporters_path) do %>
|
5
|
-
<span class="fa fa-cloud-download" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.exporters') %></span>
|
6
|
-
<% end %>
|
@@ -1,19 +1,27 @@
|
|
1
|
-
<li class="h5"><%= t('hyrax.admin.sidebar.repository_objects') %></li>
|
1
|
+
<li class="h5 nav-item"><%= t('hyrax.admin.sidebar.repository_objects') %></li>
|
2
2
|
|
3
|
-
<%= menu.nav_link(hyrax.my_collections_path,
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
<%= menu.nav_link(hyrax.my_collections_path,
|
4
|
+
class: "nav-link",
|
5
|
+
onclick: "dontChangeAccordion(event);",
|
6
|
+
also_active_for: hyrax.dashboard_collections_path) do %>
|
7
|
+
<span class="fa fa-folder-open" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.collections') %></span>
|
8
|
+
<% end %>
|
7
9
|
|
8
|
-
<%= menu.nav_link(hyrax.my_works_path,
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
<%= menu.nav_link(hyrax.my_works_path,
|
11
|
+
class: "nav-link",
|
12
|
+
onclick: "dontChangeAccordion(event);",
|
13
|
+
also_active_for: hyrax.dashboard_works_path) do %>
|
14
|
+
<span class="fa fa-file" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.works') %></span>
|
15
|
+
<% end %>
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
<%
|
17
|
+
<% if ::Hyrax::DashboardController&.respond_to?(:sidebar_partials) %>
|
18
|
+
<%= render 'hyrax/dashboard/sidebar/menu_partials', menu: menu, section: :repository_content %>
|
19
|
+
<% else %>
|
20
|
+
<%= menu.nav_link(bulkrax.importers_path) do %>
|
21
|
+
<span class="fa fa-cloud-upload" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.importers') %></span>
|
22
|
+
<% end %>
|
16
23
|
|
17
|
-
<%= menu.nav_link(bulkrax.exporters_path) do %>
|
18
|
-
|
19
|
-
<% end %>
|
24
|
+
<%= menu.nav_link(bulkrax.exporters_path) do %>
|
25
|
+
<span class="fa fa-cloud-download" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.exporters') %></span>
|
26
|
+
<% end %>
|
27
|
+
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class RenameChildrenCountersToRelationships < ActiveRecord::Migration[5.
|
1
|
+
class RenameChildrenCountersToRelationships < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
rename_column :bulkrax_importer_runs, :processed_children, :processed_relationships unless column_exists?(:bulkrax_importer_runs, :processed_relationships)
|
4
4
|
rename_column :bulkrax_importer_runs, :failed_children, :failed_relationships unless column_exists?(:bulkrax_importer_runs, :failed_relationships)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddFileSetCountersToImporterRuns < ActiveRecord::Migration[5.
|
1
|
+
class AddFileSetCountersToImporterRuns < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :bulkrax_importer_runs, :processed_file_sets, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :processed_file_sets)
|
4
4
|
add_column :bulkrax_importer_runs, :failed_file_sets, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :failed_file_sets)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddImportAttemptsToEntries < ActiveRecord::Migration[5.
|
1
|
+
class AddImportAttemptsToEntries < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :bulkrax_entries, :import_attempts, :integer, default: 0 unless column_exists?(:bulkrax_entries, :import_attempts)
|
4
4
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddWorkCountersToImporterRuns < ActiveRecord::Migration[5.
|
1
|
+
class AddWorkCountersToImporterRuns < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :bulkrax_importer_runs, :processed_works, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :processed_works)
|
4
4
|
add_column :bulkrax_importer_runs, :failed_works, :integer, default: 0 unless column_exists?(:bulkrax_importer_runs, :failed_works)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddOrderToBulkraxPendingRelationships < ActiveRecord::Migration[5.
|
1
|
+
class AddOrderToBulkraxPendingRelationships < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :bulkrax_pending_relationships, :order, :integer, default: 0 unless column_exists?(:bulkrax_pending_relationships, :order)
|
4
4
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddIncludeThumbnailsToBulkraxExporters < ActiveRecord::Migration[5.
|
1
|
+
class AddIncludeThumbnailsToBulkraxExporters < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :bulkrax_exporters, :include_thumbnails, :boolean, default: false unless column_exists?(:bulkrax_exporters, :include_thumbnails)
|
4
4
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddGeneratedMetadataToBulkraxExporters < ActiveRecord::Migration[5.
|
1
|
+
class AddGeneratedMetadataToBulkraxExporters < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :bulkrax_exporters, :generated_metadata, :boolean, default: false unless column_exists?(:bulkrax_exporters, :generated_metadata)
|
4
4
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class RenameBulkraxImporterRunToImporterRun < ActiveRecord::Migration[5.
|
1
|
+
class RenameBulkraxImporterRunToImporterRun < ActiveRecord::Migration[5.1]
|
2
2
|
def up
|
3
3
|
if column_exists?(:bulkrax_pending_relationships, :bulkrax_importer_run_id)
|
4
4
|
remove_foreign_key :bulkrax_pending_relationships, :bulkrax_importer_runs
|
data/lib/bulkrax/version.rb
CHANGED
data/lib/bulkrax.rb
CHANGED
@@ -1,25 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "bulkrax/version"
|
3
4
|
require "bulkrax/engine"
|
4
5
|
require 'active_support/all'
|
5
6
|
|
6
7
|
module Bulkrax
|
7
8
|
class << self
|
8
|
-
mattr_accessor :
|
9
|
-
:default_work_type,
|
9
|
+
mattr_accessor :api_definition,
|
10
10
|
:default_field_mapping,
|
11
|
+
:default_work_type,
|
12
|
+
:export_path,
|
13
|
+
:field_mappings,
|
11
14
|
:fill_in_blank_source_identifiers,
|
12
15
|
:generated_metadata_mapping,
|
16
|
+
:import_path,
|
17
|
+
:multi_value_element_join_on,
|
18
|
+
:multi_value_element_split_on,
|
19
|
+
:object_factory,
|
20
|
+
:parsers,
|
21
|
+
:qa_controlled_properties,
|
13
22
|
:related_children_field_mapping,
|
14
23
|
:related_parents_field_mapping,
|
15
|
-
:reserved_properties,
|
16
|
-
:qa_controlled_properties,
|
17
|
-
:field_mappings,
|
18
|
-
:import_path,
|
19
|
-
:export_path,
|
20
24
|
:removed_image_path,
|
21
|
-
:
|
22
|
-
:
|
25
|
+
:reserved_properties,
|
26
|
+
:server_name
|
23
27
|
|
24
28
|
self.parsers = [
|
25
29
|
{ name: "OAI - Dublin Core", class_name: "Bulkrax::OaiDcParser", partial: "oai_fields" },
|
@@ -29,8 +33,8 @@ module Bulkrax
|
|
29
33
|
{ name: "XML", class_name: "Bulkrax::XmlParser", partial: "xml_fields" }
|
30
34
|
]
|
31
35
|
|
32
|
-
self.import_path = 'tmp/imports'
|
33
|
-
self.export_path = 'tmp/exports'
|
36
|
+
self.import_path = Bulkrax.import_path || 'tmp/imports'
|
37
|
+
self.export_path = Bulkrax.export_path || 'tmp/exports'
|
34
38
|
self.removed_image_path = Bulkrax::Engine.root.join('spec', 'fixtures', 'removed.png').to_s
|
35
39
|
self.server_name = 'bulkrax@example.com'
|
36
40
|
|
@@ -137,6 +141,29 @@ module Bulkrax
|
|
137
141
|
)
|
138
142
|
end
|
139
143
|
|
144
|
+
DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON = ' | '
|
145
|
+
# Specify the delimiter for joining an attribute's multi-value array into a string.
|
146
|
+
#
|
147
|
+
# @note the specific delimeter should likely be present in the multi_value_element_split_on
|
148
|
+
# expression.
|
149
|
+
def self.multi_value_element_join_on
|
150
|
+
@multi_value_element_join_on ||= DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON
|
151
|
+
end
|
152
|
+
|
153
|
+
DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON = /\s*[:;|]\s*/.freeze
|
154
|
+
# @return [RegexClass] the regular express to use to "split" an attribute's values. If set to
|
155
|
+
# `true` use the DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON.
|
156
|
+
#
|
157
|
+
# @note The "true" value is to preserve backwards compatibility.
|
158
|
+
# @see DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON
|
159
|
+
def self.multi_value_element_split_on
|
160
|
+
if @multi_value_element_join_on.is_a?(TrueClass)
|
161
|
+
DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON
|
162
|
+
else
|
163
|
+
@multi_value_element_split_on ||= DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
140
167
|
# this function maps the vars from your app into your engine
|
141
168
|
def self.setup
|
142
169
|
yield self
|
@@ -10,6 +10,9 @@ Bulkrax.setup do |config|
|
|
10
10
|
# Default is the first returned by Hyrax.config.curation_concerns
|
11
11
|
# config.default_work_type = MyWork
|
12
12
|
|
13
|
+
# Factory Class to use when generating and saving objects
|
14
|
+
config.object_factory = Bulkrax::ObjectFactory
|
15
|
+
|
13
16
|
# Path to store pending imports
|
14
17
|
# config.import_path = 'tmp/imports'
|
15
18
|
|
@@ -67,6 +70,13 @@ Bulkrax.setup do |config|
|
|
67
70
|
# is controlled by the active terms in config/authorities/rights_statements.yml
|
68
71
|
# Defaults: 'rights_statement' and 'license'
|
69
72
|
# config.qa_controlled_properties += ['my_field']
|
73
|
+
|
74
|
+
# Specify the delimiter regular expression for splitting an attribute's values into a multi-value array.
|
75
|
+
# config.multi_value_element_split_on = //\s*[:;|]\s*/.freeze
|
76
|
+
|
77
|
+
# Specify the delimiter for joining an attribute's multi-value array into a string. Note: the
|
78
|
+
# specific delimeter should likely be present in the multi_value_element_split_on expression.
|
79
|
+
# config.multi_value_element_join_on = ' | '
|
70
80
|
end
|
71
81
|
|
72
82
|
# Sidebar for hyrax 3+ support
|
@@ -3,28 +3,27 @@
|
|
3
3
|
namespace :bulkrax do
|
4
4
|
desc "Remove old exported zips and create new ones with the new file structure"
|
5
5
|
task rerun_all_exporters: :environment do
|
6
|
+
# delete the existing folders and zip files
|
7
|
+
Dir["tmp/exports/**"].each { |file| FileUtils.rm_rf(file) }
|
8
|
+
|
6
9
|
if defined?(::Hyku)
|
7
10
|
Account.find_each do |account|
|
8
|
-
puts "=============== updating #{account.name} ============"
|
9
11
|
next if account.name == "search"
|
10
12
|
switch!(account)
|
13
|
+
puts "=============== updating #{account.name} ============"
|
11
14
|
|
12
|
-
|
15
|
+
make_new_exports
|
13
16
|
|
14
17
|
puts "=============== finished updating #{account.name} ============"
|
15
18
|
end
|
16
19
|
else
|
17
|
-
|
20
|
+
make_new_exports
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
puts "(#{e.message})"
|
26
|
-
end
|
27
|
-
|
28
|
-
Dir["tmp/exports/**.zip"].each { |zip_path| FileUtils.rm_rf(zip_path) }
|
24
|
+
def make_new_exports
|
25
|
+
Bulkrax::Exporter.all.each { |e| Bulkrax::ExporterJob.perform_later(e.id) }
|
26
|
+
rescue => e
|
27
|
+
puts "(#{e.message})"
|
29
28
|
end
|
30
29
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :hyrax do
|
4
|
+
namespace :reset do
|
5
|
+
desc "Delete Bulkrax importers in addition to the reset below"
|
6
|
+
task importers_et_all: :works_and_collections do
|
7
|
+
# sometimes re-running an existing importer causes issues
|
8
|
+
# and you may need to create new ones or delete the existing ones
|
9
|
+
Bulkrax::Importer.delete_all
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'Reset fedora / solr and corresponding database tables w/o clearing other active record tables like users'
|
13
|
+
task works_and_collections: [:environment] do
|
14
|
+
confirm('You are about to delete all works and collections, this is not reversable!')
|
15
|
+
require 'active_fedora/cleaner'
|
16
|
+
ActiveFedora::Cleaner.clean!
|
17
|
+
Hyrax::PermissionTemplateAccess.delete_all
|
18
|
+
Hyrax::PermissionTemplate.delete_all
|
19
|
+
Bulkrax::PendingRelationship.delete_all
|
20
|
+
Bulkrax::Entry.delete_all
|
21
|
+
Bulkrax::ImporterRun.delete_all
|
22
|
+
Bulkrax::Status.delete_all
|
23
|
+
# Remove sipity methods, everything but sipity roles
|
24
|
+
Sipity::Workflow.delete_all
|
25
|
+
Sipity::EntitySpecificResponsibility.delete_all
|
26
|
+
Sipity::Comment.delete_all
|
27
|
+
Sipity::Entity.delete_all
|
28
|
+
Sipity::WorkflowRole.delete_all
|
29
|
+
Sipity::WorkflowResponsibility.delete_all
|
30
|
+
Sipity::Agent.delete_all
|
31
|
+
Mailboxer::Receipt.destroy_all
|
32
|
+
Mailboxer::Notification.delete_all
|
33
|
+
Mailboxer::Conversation::OptOut.delete_all
|
34
|
+
Mailboxer::Conversation.delete_all
|
35
|
+
AccountElevator.switch!('single.tenant.default')
|
36
|
+
# we need to wait till Fedora is done with its cleanup
|
37
|
+
# otherwise creating the admin set will fail
|
38
|
+
while AdminSet.exists?(AdminSet::DEFAULT_ID)
|
39
|
+
puts 'waiting for delete to finish before reinitializing Fedora'
|
40
|
+
sleep 20
|
41
|
+
end
|
42
|
+
|
43
|
+
Hyrax::CollectionType.find_or_create_default_collection_type
|
44
|
+
Hyrax::CollectionType.find_or_create_admin_set_type
|
45
|
+
AdminSet.find_or_create_default_admin_set_id
|
46
|
+
|
47
|
+
collection_types = Hyrax::CollectionType.all
|
48
|
+
collection_types.each do |c|
|
49
|
+
next unless c.title.match?(/^translation missing/)
|
50
|
+
oldtitle = c.title
|
51
|
+
c.title = I18n.t(c.title.gsub("translation missing: en.", ''))
|
52
|
+
c.save
|
53
|
+
puts "#{oldtitle} changed to #{c.title}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def confirm(action)
|
58
|
+
return if ENV['RESET_CONFIRMED'].present?
|
59
|
+
confirm_token = rand(36**6).to_s(36)
|
60
|
+
STDOUT.puts "#{action} Enter '#{confirm_token}' to confirm:"
|
61
|
+
input = STDIN.gets.chomp
|
62
|
+
raise "Aborting. You entered #{input}" unless input == confirm_token
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulkrax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Kaufman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -328,6 +328,7 @@ files:
|
|
328
328
|
- app/parsers/bulkrax/oai_dc_parser.rb
|
329
329
|
- app/parsers/bulkrax/oai_qualified_dc_parser.rb
|
330
330
|
- app/parsers/bulkrax/xml_parser.rb
|
331
|
+
- app/services/bulkrax/remove_relationships_for_importer.rb
|
331
332
|
- app/views/bulkrax/entries/_parsed_metadata.html.erb
|
332
333
|
- app/views/bulkrax/entries/_raw_metadata.html.erb
|
333
334
|
- app/views/bulkrax/entries/show.html.erb
|
@@ -351,6 +352,9 @@ files:
|
|
351
352
|
- app/views/bulkrax/importers/upload_corrected_entries.html.erb
|
352
353
|
- app/views/bulkrax/shared/_bulkrax_errors.html.erb
|
353
354
|
- app/views/bulkrax/shared/_bulkrax_field_mapping.html.erb
|
355
|
+
- app/views/bulkrax/shared/_collection_entries_tab.html.erb
|
356
|
+
- app/views/bulkrax/shared/_file_set_entries_tab.html.erb
|
357
|
+
- app/views/bulkrax/shared/_work_entries_tab.html.erb
|
354
358
|
- app/views/hyrax/dashboard/sidebar/_bulkrax_sidebar_additions.html.erb
|
355
359
|
- app/views/hyrax/dashboard/sidebar/_repository_content.html.erb
|
356
360
|
- app/views/layouts/bulkrax/application.html.erb
|
@@ -401,6 +405,7 @@ files:
|
|
401
405
|
- lib/generators/bulkrax/templates/config/bulkrax_api.yml
|
402
406
|
- lib/generators/bulkrax/templates/config/initializers/bulkrax.rb
|
403
407
|
- lib/tasks/bulkrax_tasks.rake
|
408
|
+
- lib/tasks/reset.rake
|
404
409
|
homepage: https://github.com/samvera-labs/bulkrax
|
405
410
|
licenses:
|
406
411
|
- Apache-2.0
|