Skip to content

Commit 3ae6402

Browse files
authored
Retry and delete take 2 (#894)
* working single item retry, delete and retry, and just delete * remove all entries and works and then rebuild them * call the cops
1 parent 1f2cd7d commit 3ae6402

File tree

15 files changed

+126
-110
lines changed

15 files changed

+126
-110
lines changed

app/assets/javascripts/bulkrax/bulkrax.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,15 @@ $(document).on('turbolinks:load ready', function() {
88
$('button#fm_toggle').click(function() {
99
$('#field_mapping').toggle();
1010
});
11+
$('#bulkraxItemModal').on('show.bs.modal', function (event) {
12+
var button = $(event.relatedTarget) // Button that triggered the modal
13+
var recipient = button.data('entry-id') // Extract info from data-* attributes
14+
// If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
15+
// Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
16+
var modal = $(this)
17+
modal.find('a').each(function() {
18+
this.href = this.href.replace(/\d+\?/, recipient + '?')
19+
})
20+
return true
21+
})
1122
});

app/controllers/bulkrax/entries_controller.rb

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
# frozen_string_literal: true
22

3-
require_dependency "bulkrax/application_controller"
4-
require_dependency "oai"
5-
63
module Bulkrax
74
class EntriesController < ApplicationController
85
include Hyrax::ThemedLayoutController if defined?(::Hyrax)
@@ -18,6 +15,42 @@ def show
1815
end
1916
end
2017

18+
def update
19+
@entry = Entry.find(params[:id])
20+
@entry.factory&.find&.destroy if params[:destroy_first]
21+
@entry.build
22+
@entry.save
23+
item = @entry.importerexporter
24+
entry_path = item.class.to_s.include?('Importer') ? bulkrax.importer_entry_path(item.id, @entry.id) : bulkrax.exporter_entry_path(item.id, @entry.id)
25+
26+
redirect_back fallback_location: entry_path, notice: "Entry update ran, new status is #{@entry.status}"
27+
end
28+
29+
def destroy
30+
@entry = Entry.find(params[:id])
31+
@status = ""
32+
begin
33+
work = @entry.factory&.find
34+
if work.present?
35+
work.destroy
36+
@entry.destroy
37+
@status = "Entry and work deleted"
38+
else
39+
@entry.destroy
40+
@status = "Entry deleted"
41+
end
42+
rescue StandardError => e
43+
@status = "Error: #{e.message}"
44+
end
45+
46+
item = @entry.importerexporter
47+
entry_path = item.class.to_s.include?('Importer') ? bulkrax.importer_entry_path(item.id, @entry.id) : bulkrax.exporter_entry_path(item.id, @entry.id)
48+
49+
redirect_back fallback_location: entry_path, notice: @status
50+
end
51+
52+
protected
53+
2154
# GET /importers/1/entries/1
2255
def show_importer
2356
@importer = Importer.find(params[:importer_id])

app/controllers/bulkrax/exporters_controller.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# frozen_string_literal: true
22

3-
require_dependency "bulkrax/application_controller"
4-
53
module Bulkrax
64
class ExportersController < ApplicationController
75
include Hyrax::ThemedLayoutController if defined?(::Hyrax)

app/controllers/bulkrax/importers_controller.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
# frozen_string_literal: true
22

3-
require_dependency 'bulkrax/application_controller'
4-
require_dependency 'oai'
5-
63
module Bulkrax
74
# rubocop:disable Metrics/ClassLength
8-
class ImportersController < ApplicationController
5+
class ImportersController < ::Bulkrax::ApplicationController
96
include Hyrax::ThemedLayoutController if defined?(::Hyrax)
107
include Bulkrax::DownloadBehavior
118
include Bulkrax::API
@@ -310,10 +307,16 @@ def update_harvest
310307
end
311308

312309
def set_files_parser_fields
310+
@importer.parser_fields['update_files'] =
311+
@importer.parser_fields['replace_files'] =
312+
@importer.parser_fields['remove_and_rerun'] =
313+
@importer.parser_fields['metadata_only'] = false
313314
if params[:commit] == 'Update Metadata and Files'
314315
@importer.parser_fields['update_files'] = true
315316
elsif params[:commit] == ('Update and Replace Files' || 'Update and Re-Harvest All Items')
316317
@importer.parser_fields['replace_files'] = true
318+
elsif params[:commit] == 'Remove and Rerun'
319+
@importer.parser_fields['remove_and_rerun'] = true
317320
elsif params[:commit] == 'Update and Harvest Updated Items'
318321
return
319322
else

app/helpers/bulkrax/application_helper.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
# frozen_string_literal: true
2-
require 'coderay'
3-
42
module Bulkrax
53
module ApplicationHelper
6-
include ::Hyrax::HyraxHelperBehavior if defined?(::Hyrax)
4+
def item_entry_path(item, e, opts = {})
5+
an_importer?(item) ? bulkrax.importer_entry_path(item.id, e.id, opts) : bulkrax.exporter_entry_path(item.id, e.id, opts)
6+
end
7+
8+
def an_importer?(item)
9+
item.class.to_s.include?('Importer')
10+
end
711

812
def coderay(value, opts)
913
CodeRay

app/models/bulkrax/importer.rb

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
require 'iso8601'
44

55
module Bulkrax
6-
class Importer < ApplicationRecord
6+
class Importer < ApplicationRecord # rubocop:disable Metrics/ClassLength
77
include Bulkrax::ImporterExporterBehavior
88
include Bulkrax::StatusInfo
99

@@ -135,6 +135,14 @@ def update_files
135135
self.parser_fields['update_files']
136136
end
137137

138+
def remove_and_rerun
139+
self.parser_fields['remove_and_rerun']
140+
end
141+
142+
def metadata_only?
143+
parser.parser_fields['metadata_only'] == true
144+
end
145+
138146
def import_works
139147
import_objects(['work'])
140148
end
@@ -157,6 +165,12 @@ def import_objects(types_array = nil)
157165
self.only_updates ||= false
158166
self.save if self.new_record? # Object needs to be saved for statuses
159167
types = types_array || DEFAULT_OBJECT_TYPES
168+
if remove_and_rerun
169+
self.entries.find_each do |e|
170+
e.factory.find&.destroy!
171+
e.destroy!
172+
end
173+
end
160174
parser.create_objects(types)
161175
rescue StandardError => e
162176
set_status_info(e)
@@ -192,9 +206,5 @@ def path_string
192206
rescue
193207
"#{self.id}_#{self.created_at.strftime('%Y%m%d%H%M%S')}"
194208
end
195-
196-
def metadata_only?
197-
parser.parser_fields['metadata_only'] == true
198-
end
199209
end
200210
end

app/views/bulkrax/exporters/show.html.erb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,11 @@
102102
</ul>
103103
<!-- Tab panes -->
104104
<div class="tab-content outline">
105-
<%= render partial: 'bulkrax/shared/work_entries_tab', locals: { item: @exporter, entries: @work_entries } %>
106-
<%= render partial: 'bulkrax/shared/collection_entries_tab', locals: { item: @exporter, entries: @collection_entries } %>
107-
<%= render partial: 'bulkrax/shared/file_set_entries_tab', locals: { item: @exporter, entries: @file_set_entries } %>
105+
<%= render partial: 'bulkrax/shared/entries_tab', locals: { item: @exporter, entries: @work_entries, pagination_param_name: :work_entries_page, pagination_anchor: 'work-entries' } %>
106+
<%= render partial: 'bulkrax/shared/entries_tab', locals: { item: @exporter, entries: @collection_entries, pagination_param_name: :collection_entries_path, pagination_anchor: 'collection-entries' } %>
107+
<%= render partial: 'bulkrax/shared/entries_tab', locals: { item: @exporter, entries: @file_set_entries, pagination_param_name: :file_set_entries_path, pagination_anchor: 'file-set-entries' } %>
108108
</div>
109+
109110
<br>
110111
<%= link_to 'Edit', edit_exporter_path(@exporter) %>
111112
|

app/views/bulkrax/importers/_edit_form_buttons.html.erb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@
3434
<%= form.button :submit,
3535
value: 'Update and Replace Files',
3636
class: 'btn btn-primary',
37-
data: {confirm: "Are you sure? This will remove all files before adding them from the import."} %>
37+
data: {confirm: "Are you sure? This will remove all files before adding them from the import."} %>
38+
<hr />
39+
<p>Remove all works and then run the import again from a clean slate. This will remove all files and associations and any edits made since the last import will be lost.</p>
40+
<%= form.button :submit,
41+
value: 'Remove and Rerun',
42+
class: 'btn btn-primary',
43+
data: {confirm: "Are you sure? This will delete all the works and any associated files and relationships before re running."} %>
44+
3845
<% end %>
3946
<hr />
4047

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<div class="modal fade" id="bulkraxItemModal" tabindex="-1" role="dialog" aria-labelledby="bulkraxItemModalLabel">
2+
<div class="modal-dialog" role="document">
3+
<div class="modal-content">
4+
<div class="modal-body">
5+
<h5>Options for Updating an Entry</h5>
6+
<hr />
7+
<p>Rebuild metadata and files.</p>
8+
<%= link_to 'Build', item_entry_path(item, e), method: :patch, class: 'btn btn-primary' %>
9+
<hr />
10+
<p>Remove existing work and then recreate the works metadata and files.</p>
11+
<%= link_to 'Remove and then Build', item_entry_path(item, e, destroy_first: true), method: :patch, class: 'btn btn-primary' %>
12+
</div>
13+
<div class="modal-footer">
14+
<button type="button" class="btn btn-default" data-dismiss="modal"><%= t('helpers.action.cancel') %></button>
15+
</div>
16+
</div>
17+
</div>
18+
</div>

app/views/bulkrax/importers/show.html.erb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,12 @@
8282
</ul>
8383
<!-- Tab panes -->
8484
<div class="tab-content outline">
85-
<%= render partial: 'bulkrax/shared/work_entries_tab', locals: { item: @importer, entries: @work_entries } %>
86-
<%= render partial: 'bulkrax/shared/collection_entries_tab', locals: { item: @importer, entries: @collection_entries } %>
87-
<%= render partial: 'bulkrax/shared/file_set_entries_tab', locals: { item: @importer, entries: @file_set_entries } %>
85+
<%= render partial: 'bulkrax/shared/entries_tab', locals: { item: @importer, entries: @work_entries, pagination_param_name: :work_entries_page, pagination_anchor: 'work-entries' } %>
86+
<%= render partial: 'bulkrax/shared/entries_tab', locals: { item: @importer, entries: @collection_entries, pagination_param_name: :collection_entries_path, pagination_anchor: 'collection-entries' } %>
87+
<%= render partial: 'bulkrax/shared/entries_tab', locals: { item: @importer, entries: @file_set_entries, pagination_param_name: :file_set_entries_path, pagination_anchor: 'file-set-entries' } %>
8888
</div>
89+
<% all_entries = @work_entries + @collection_entries + @file_set_entries %>
90+
<%= render partial: 'bulkrax/importers/edit_item_buttons', locals: { item: @importer, e: all_entries.first } if all_entries.present? %>
8991
</div>
9092

9193
<p class="bulkrax-p-align">

app/views/bulkrax/shared/_collection_entries_tab.html.erb renamed to app/views/bulkrax/shared/_entries_tab.html.erb

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div role="tabpanel" class="tab-pane bulkrax-nav-tab-table-left-align" id="collection-entries">
1+
<div role="tabpanel" class="tab-pane bulkrax-nav-tab-table-left-align <%= pagination_anchor == 'work-entries' ? 'active' : '' %>" id="<%= pagination_anchor %>">
22
<table class='table table-striped'>
33
<thead>
44
<tr>
@@ -12,9 +12,8 @@
1212
</thead>
1313
<tbody>
1414
<% 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) %>
1615
<tr>
17-
<td><%= link_to e.identifier, entry_path %></td>
16+
<td><%= link_to e.identifier, item_entry_path(item, e) %></td>
1817
<td><%= e.id %></td>
1918
<% if e.status == "Complete" %>
2019
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
@@ -24,16 +23,22 @@
2423
<td><span class="glyphicon glyphicon-remove" style="color: <%= e.status == 'Deleted' ? 'green' : 'red' %>;"></span> <%= e.status %></td>
2524
<% end %>
2625
<% if e.last_error.present? %>
27-
<td><%= link_to e.last_error.dig("error_class"), entry_path %></td>
26+
<td><%= link_to e.last_error.dig("error_class"), item_entry_path(item, e) %></td>
2827
<% else %>
2928
<td></td>
3029
<% end %>
3130
<td><%= e.status_at %></td>
32-
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), entry_path %></td>
31+
<td>
32+
<%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), item_entry_path(item, e) %>
33+
<% if an_importer?(item) %>
34+
<a class="glyphicon glyphicon-refresh" data-toggle="modal" data-target="#bulkraxItemModal" data-entry-id="<%= e.id %>"></a>
35+
<% end %>
36+
<%= link_to raw('<span class="glyphicon glyphicon-trash"></span>'), item_entry_path(item, e), method: :delete, data: { confirm: 'This will delete the entry and any work associated with it. Are you sure?' } %>
37+
</td>
3338
</tr>
3439
<% end %>
3540
</tbody>
3641
</table>
3742
<%= page_entries_info(entries) %><br />
38-
<%= paginate(entries, theme: 'blacklight', param_name: :collections_entries_page, params: { anchor: 'collection-entries' }) %>
43+
<%= paginate(entries, theme: 'blacklight', param_name: pagination_param_name, params: { anchor: pagination_anchor }) %>
3944
</div>

app/views/bulkrax/shared/_file_set_entries_tab.html.erb

Lines changed: 0 additions & 39 deletions
This file was deleted.

app/views/bulkrax/shared/_work_entries_tab.html.erb

Lines changed: 0 additions & 39 deletions
This file was deleted.

config/routes.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
Bulkrax::Engine.routes.draw do
44
resources :exporters do
55
get :download
6-
resources :entries, only: %i[show]
6+
resources :entries, only: %i[show update destroy]
77
end
88
resources :importers do
99
put :continue
1010
get :export_errors
1111
collection do
1212
post :external_sets
1313
end
14-
resources :entries, only: %i[show]
14+
resources :entries, only: %i[show update destroy]
1515
get :upload_corrected_entries
1616
post :upload_corrected_entries_file
1717
end
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# frozen_string_literal: true
22

33
module ApplicationHelper
4+
include ::Hyrax::HyraxHelperBehavior if defined?(::Hyrax)
5+
46
end

0 commit comments

Comments
 (0)