bulkrax 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +205 -0
- data/README.md +202 -0
- data/Rakefile +42 -0
- data/app/assets/config/bulkrax_manifest.js +2 -0
- data/app/assets/javascripts/bulkrax/application.js +14 -0
- data/app/assets/javascripts/bulkrax/bulkrax.js +11 -0
- data/app/assets/javascripts/bulkrax/entries.js +15 -0
- data/app/assets/javascripts/bulkrax/exporters.js +60 -0
- data/app/assets/javascripts/bulkrax/importers.js.erb +166 -0
- data/app/assets/stylesheets/bulkrax/accordion.scss +40 -0
- data/app/assets/stylesheets/bulkrax/application.css +15 -0
- data/app/assets/stylesheets/bulkrax/coderay.scss +264 -0
- data/app/assets/stylesheets/bulkrax/import_export.scss +37 -0
- data/app/controllers/bulkrax/application_controller.rb +8 -0
- data/app/controllers/bulkrax/entries_controller.rb +44 -0
- data/app/controllers/bulkrax/exporters_controller.rb +125 -0
- data/app/controllers/bulkrax/importers_controller.rb +315 -0
- data/app/controllers/concerns/bulkrax/api.rb +29 -0
- data/app/factories/bulkrax/object_factory.rb +230 -0
- data/app/helpers/bulkrax/application_helper.rb +15 -0
- data/app/helpers/bulkrax/exporters_helper.rb +6 -0
- data/app/helpers/bulkrax/importers_helper.rb +13 -0
- data/app/helpers/bulkrax/validation_helper.rb +153 -0
- data/app/jobs/bulkrax/application_job.rb +6 -0
- data/app/jobs/bulkrax/child_relationships_job.rb +128 -0
- data/app/jobs/bulkrax/delete_work_job.rb +16 -0
- data/app/jobs/bulkrax/download_cloud_file_job.rb +18 -0
- data/app/jobs/bulkrax/export_work_job.rb +37 -0
- data/app/jobs/bulkrax/exporter_job.rb +14 -0
- data/app/jobs/bulkrax/import_work_collection_job.rb +41 -0
- data/app/jobs/bulkrax/import_work_job.rb +32 -0
- data/app/jobs/bulkrax/importer_job.rb +26 -0
- data/app/mailers/bulkrax/application_mailer.rb +8 -0
- data/app/matchers/bulkrax/application_matcher.rb +113 -0
- data/app/matchers/bulkrax/bagit_matcher.rb +6 -0
- data/app/matchers/bulkrax/csv_matcher.rb +6 -0
- data/app/matchers/bulkrax/oai_matcher.rb +6 -0
- data/app/models/bulkrax/application_record.rb +7 -0
- data/app/models/bulkrax/csv_collection_entry.rb +19 -0
- data/app/models/bulkrax/csv_entry.rb +163 -0
- data/app/models/bulkrax/entry.rb +104 -0
- data/app/models/bulkrax/exporter.rb +122 -0
- data/app/models/bulkrax/exporter_run.rb +7 -0
- data/app/models/bulkrax/import_failed.rb +13 -0
- data/app/models/bulkrax/importer.rb +155 -0
- data/app/models/bulkrax/importer_run.rb +8 -0
- data/app/models/bulkrax/oai_dc_entry.rb +6 -0
- data/app/models/bulkrax/oai_entry.rb +74 -0
- data/app/models/bulkrax/oai_qualified_dc_entry.rb +6 -0
- data/app/models/bulkrax/oai_set_entry.rb +19 -0
- data/app/models/bulkrax/rdf_collection_entry.rb +19 -0
- data/app/models/bulkrax/rdf_entry.rb +90 -0
- data/app/models/bulkrax/status.rb +25 -0
- data/app/models/bulkrax/xml_entry.rb +73 -0
- data/app/models/concerns/bulkrax/download_behavior.rb +61 -0
- data/app/models/concerns/bulkrax/errored_entries.rb +45 -0
- data/app/models/concerns/bulkrax/export_behavior.rb +58 -0
- data/app/models/concerns/bulkrax/file_factory.rb +140 -0
- data/app/models/concerns/bulkrax/has_local_processing.rb +7 -0
- data/app/models/concerns/bulkrax/has_matchers.rb +155 -0
- data/app/models/concerns/bulkrax/import_behavior.rb +90 -0
- data/app/models/concerns/bulkrax/importer_exporter_behavior.rb +34 -0
- data/app/models/concerns/bulkrax/status_info.rb +56 -0
- data/app/parsers/bulkrax/application_parser.rb +299 -0
- data/app/parsers/bulkrax/bagit_parser.rb +157 -0
- data/app/parsers/bulkrax/csv_parser.rb +266 -0
- data/app/parsers/bulkrax/oai_dc_parser.rb +130 -0
- data/app/parsers/bulkrax/oai_qualified_dc_parser.rb +9 -0
- data/app/parsers/bulkrax/xml_parser.rb +103 -0
- data/app/views/bulkrax/entries/_parsed_metadata.html.erb +19 -0
- data/app/views/bulkrax/entries/_raw_metadata.html.erb +19 -0
- data/app/views/bulkrax/entries/show.html.erb +63 -0
- data/app/views/bulkrax/exporters/_form.html.erb +120 -0
- data/app/views/bulkrax/exporters/edit.html.erb +23 -0
- data/app/views/bulkrax/exporters/index.html.erb +67 -0
- data/app/views/bulkrax/exporters/new.html.erb +23 -0
- data/app/views/bulkrax/exporters/show.html.erb +124 -0
- data/app/views/bulkrax/importers/_bagit_fields.html.erb +54 -0
- data/app/views/bulkrax/importers/_browse_everything.html.erb +12 -0
- data/app/views/bulkrax/importers/_csv_fields.html.erb +39 -0
- data/app/views/bulkrax/importers/_edit_form_buttons.html.erb +16 -0
- data/app/views/bulkrax/importers/_form.html.erb +35 -0
- data/app/views/bulkrax/importers/_oai_fields.html.erb +42 -0
- data/app/views/bulkrax/importers/_xml_fields.html.erb +60 -0
- data/app/views/bulkrax/importers/edit.html.erb +20 -0
- data/app/views/bulkrax/importers/index.html.erb +77 -0
- data/app/views/bulkrax/importers/new.html.erb +25 -0
- data/app/views/bulkrax/importers/show.html.erb +175 -0
- data/app/views/bulkrax/importers/upload_corrected_entries.html.erb +37 -0
- data/app/views/bulkrax/shared/_bulkrax_errors.html.erb +52 -0
- data/app/views/bulkrax/shared/_bulkrax_field_mapping.html.erb +39 -0
- data/app/views/hyrax/dashboard/sidebar/_bulkrax_sidebar_additions.html.erb +6 -0
- data/app/views/hyrax/dashboard/sidebar/_repository_content.html.erb +19 -0
- data/app/views/layouts/bulkrax/application.html.erb +14 -0
- data/config/locales/bulkrax.en.yml +36 -0
- data/config/routes.rb +18 -0
- data/db/migrate/20181011230201_create_bulkrax_importers.rb +18 -0
- data/db/migrate/20181011230228_create_bulkrax_importer_runs.rb +16 -0
- data/db/migrate/20190325183136_create_bulkrax_entries.rb +16 -0
- data/db/migrate/20190601221109_add_status_to_entry.rb +9 -0
- data/db/migrate/20190715161939_add_collections_to_importer_runs.rb +6 -0
- data/db/migrate/20190715162044_change_collection_ids_on_entries.rb +5 -0
- data/db/migrate/20190729124607_create_bulkrax_exporters.rb +19 -0
- data/db/migrate/20190729134158_create_bulkrax_exporter_runs.rb +14 -0
- data/db/migrate/20190731114016_change_importer_and_exporter_to_polymorphic.rb +12 -0
- data/db/migrate/20191203225129_add_total_collection_records_to_importer_runs.rb +5 -0
- data/db/migrate/20191204191623_add_children_to_importer_runs.rb +6 -0
- data/db/migrate/20191204223857_change_total_records_to_total_work_entries.rb +6 -0
- data/db/migrate/20191212155530_change_entry_last_error.rb +19 -0
- data/db/migrate/20200108194557_add_validate_only_to_bulkrax_importers.rb +5 -0
- data/db/migrate/20200301232856_add_status_to_importers.rb +9 -0
- data/db/migrate/20200312190638_remove_foreign_key_from_bulkrax_entries.rb +5 -0
- data/db/migrate/20200326235838_add_status_to_exporters.rb +7 -0
- data/db/migrate/20200601204556_add_invalid_record_to_importer_run.rb +5 -0
- data/db/migrate/20200818055819_create_bulkrax_statuses.rb +18 -0
- data/db/migrate/20200819054016_move_to_statuses.rb +30 -0
- data/db/migrate/20201106014204_add_date_filter_and_status_to_bulkrax_exporters.rb +7 -0
- data/db/migrate/20201117220007_add_workflow_status_to_bulkrax_exporter.rb +5 -0
- data/db/migrate/20210806044408_remove_unused_last_error.rb +7 -0
- data/db/migrate/20210806065737_increase_text_sizes.rb +12 -0
- data/lib/bulkrax.rb +161 -0
- data/lib/bulkrax/engine.rb +37 -0
- data/lib/bulkrax/version.rb +5 -0
- data/lib/generators/bulkrax/install_generator.rb +80 -0
- data/lib/generators/bulkrax/templates/README +3 -0
- data/lib/generators/bulkrax/templates/app/assets/images/bulkrax/removed.png +0 -0
- data/lib/generators/bulkrax/templates/app/models/concerns/bulkrax/has_local_processing.rb +8 -0
- data/lib/generators/bulkrax/templates/bin/importer +140 -0
- data/lib/generators/bulkrax/templates/config/bulkrax_api.yml +84 -0
- data/lib/generators/bulkrax/templates/config/initializers/bulkrax.rb +72 -0
- data/lib/tasks/bulkrax_tasks.rake +6 -0
- metadata +388 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
<% provide :page_header do %>
|
2
|
+
<h1><span class="fa fa-edit" aria-hidden="true"></span> New Importer</h1>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<div class="row">
|
6
|
+
<div class="col-md-12">
|
7
|
+
<div class="panel panel-default tabs">
|
8
|
+
<%= simple_form_for @importer, html: { multipart: true } do |form| %>
|
9
|
+
<%= render 'form', importer: @importer, form: form %>
|
10
|
+
<div class="panel-footer">
|
11
|
+
<div class='pull-right'>
|
12
|
+
<%= form.button :submit, value: 'Create and Validate', class: 'btn btn-primary' %>
|
13
|
+
|
|
14
|
+
<%= form.button :submit, value: 'Create and Import', class: 'btn btn-primary' %>
|
15
|
+
|
|
16
|
+
<%= form.button :submit, value: 'Create', class: 'btn btn-primary' %>
|
17
|
+
|
|
18
|
+
<% cancel_path = form.object.persisted? ? importer_path(form.object) : importers_path %>
|
19
|
+
<%= link_to t('.cancel'), cancel_path, class: 'btn btn-default ' %>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</div>
|
@@ -0,0 +1,175 @@
|
|
1
|
+
<div class="col-xs-12 main-header">
|
2
|
+
<h1><span class="fa fa-cloud-upload" aria-hidden="true"></span> Importer: <%= @importer.name %></h1>
|
3
|
+
<% if @importer.parser_klass == 'Bulkrax::CsvParser' && @work_entries.map { |e| e.status == 'failed' }.any? %>
|
4
|
+
<div class="pull-right">
|
5
|
+
<%= link_to 'Export Errored Entries', importer_export_errors_path(@importer.id), class: 'btn btn-primary' %>
|
6
|
+
<%= link_to 'Upload Corrected Entries', importer_upload_corrected_entries_path(@importer.id), class: 'btn btn-primary' %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
<div class="panel panel-default bulkrax-align-text">
|
11
|
+
<div class="panel-body">
|
12
|
+
<p class="bulkrax-p-align">
|
13
|
+
<strong>Name:</strong>
|
14
|
+
<%= @importer.name %>
|
15
|
+
</p>
|
16
|
+
<p class="bulkrax-p-align">
|
17
|
+
<strong>Admin set:</strong>
|
18
|
+
<%= @importer.admin_set_id %>
|
19
|
+
</p>
|
20
|
+
<p class="bulkrax-p-align">
|
21
|
+
<strong>User:</strong>
|
22
|
+
<%= @importer.user %>
|
23
|
+
</p>
|
24
|
+
<p class="bulkrax-p-align">
|
25
|
+
<strong>Frequency:</strong>
|
26
|
+
<%= @importer.frequency %>
|
27
|
+
</p>
|
28
|
+
<p class="bulkrax-p-align">
|
29
|
+
<strong>Parser klass:</strong>
|
30
|
+
<%= @importer.parser_klass %>
|
31
|
+
</p>
|
32
|
+
<p class="bulkrax-p-align">
|
33
|
+
<strong>Limit:</strong>
|
34
|
+
<%= @importer.limit %>
|
35
|
+
</p>
|
36
|
+
|
37
|
+
<%= render partial: 'bulkrax/shared/bulkrax_errors', locals: {item: @importer} %>
|
38
|
+
|
39
|
+
<div class="accordion-container">
|
40
|
+
<div class="accordion-heading" role="tab" id="parser-fields-heading">
|
41
|
+
<a class="accordion-title" role="button" data-toggle="collapse" data-target="#parser-fields-importer-show" aria-expanded="true" aria-controls="parser-fields-importer-show">
|
42
|
+
Parser fields:
|
43
|
+
</a>
|
44
|
+
<a role="button" data-toggle="collapse" data-target="#parser-fields-importer-show" aria-expanded="true" aria-controls="parser-fields-importer-show">
|
45
|
+
<div class="accordion-icon glyphicon glyphicon-remove-circle" aria-hidden="true"></div>
|
46
|
+
</a>
|
47
|
+
</div>
|
48
|
+
<div id="parser-fields-importer-show" class="accordion-collapse collapse" role="tabpanel" aria-labelledby="parser-fields-heading">
|
49
|
+
<div class="accordion-body">
|
50
|
+
<% @importer.parser_fields.each do |key,value| %>
|
51
|
+
<strong><%= key %>:</strong> <%= value %> <br />
|
52
|
+
<% end %>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<%= render partial: 'bulkrax/shared/bulkrax_field_mapping', locals: {item: @importer} %>
|
58
|
+
|
59
|
+
<p class="bulkrax-p-align">
|
60
|
+
<strong>Total Works:</strong>
|
61
|
+
<%= @importer.importer_runs.last&.total_work_entries %>
|
62
|
+
</p>
|
63
|
+
|
64
|
+
<p class="bulkrax-p-align">
|
65
|
+
<strong>Total Collections:</strong>
|
66
|
+
<%= @importer.importer_runs.last&.total_collection_entries %>
|
67
|
+
</p>
|
68
|
+
|
69
|
+
<div class="bulkrax-nav-tab-bottom-margin">
|
70
|
+
<!-- Nav tabs -->
|
71
|
+
<ul class="bulkrax-nav-tab-top-margin tab-nav nav nav-tabs" role="tablist">
|
72
|
+
<li role="presentation" class='active'><a href="#work-entries" aria-controls="work-entries" role="tab" data-toggle="tab">Work Entries</a></li>
|
73
|
+
<li role="presentation"><a href="#collection-entries" aria-controls="collection-entries" role="tab" data-toggle="tab">Collection Entries</a></li>
|
74
|
+
</ul>
|
75
|
+
<!-- Tab panes -->
|
76
|
+
<div class="tab-content outline">
|
77
|
+
<div role="tabpanel" class="tab-pane active bulkrax-nav-tab-table-left-align" id="work-entries">
|
78
|
+
<table class='table table-striped'>
|
79
|
+
<thead>
|
80
|
+
<tr>
|
81
|
+
<th>Identifier</th>
|
82
|
+
<th>Collection</th>
|
83
|
+
<th>Entry ID</th>
|
84
|
+
<th>Status</th>
|
85
|
+
<th>Errors</th>
|
86
|
+
<th>Status Set At</th>
|
87
|
+
<th>Actions</th>
|
88
|
+
</tr>
|
89
|
+
</thead>
|
90
|
+
<tbody>
|
91
|
+
<% @work_entries.each do |e| %>
|
92
|
+
<tr>
|
93
|
+
<td><%= link_to e.identifier, bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
94
|
+
<% if e.parsed_metadata.present? && e.parsed_metadata.dig("collections").present? %>
|
95
|
+
<td><%= e.parsed_metadata.dig("collections").map {|c| c['id'] }.join('; ') %></td>
|
96
|
+
<% elsif e.raw_metadata.present? %>
|
97
|
+
<td><%= Array.wrap(e.raw_metadata.dig("collection")).join(';') %></td>
|
98
|
+
<% else %>
|
99
|
+
<td></td>
|
100
|
+
<% end %>
|
101
|
+
<td><%= e.id %></td>
|
102
|
+
<% if e.status == "Complete" %>
|
103
|
+
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
104
|
+
<% else %>
|
105
|
+
<td><span class="glyphicon glyphicon-remove" style="color: 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
|
+
<% else %>
|
141
|
+
<td><span class="glyphicon glyphicon-remove" style="color: red;"></span> <%= e.status %></td>
|
142
|
+
<% end %>
|
143
|
+
<% if e.last_error.present? %>
|
144
|
+
<td><%= link_to e.last_error.dig("error_class"), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
145
|
+
<% else %>
|
146
|
+
<td></td>
|
147
|
+
<% end %>
|
148
|
+
<td><%= e.status_at %></td>
|
149
|
+
<td><%= link_to raw('<span class="glyphicon glyphicon-info-sign"></span>'), bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
150
|
+
</tr>
|
151
|
+
<% end %>
|
152
|
+
</tbody>
|
153
|
+
</table>
|
154
|
+
<%= page_entries_info(@collection_entries) %><br />
|
155
|
+
<%= paginate(@collection_entries, theme: 'blacklight', param_name: :collections_entries_page, params: {anchor: 'collection-entries'}) %>
|
156
|
+
</div>
|
157
|
+
</div>
|
158
|
+
</div>
|
159
|
+
|
160
|
+
<p class="bulkrax-p-align">
|
161
|
+
<%= link_to 'Edit', edit_importer_path(@importer) %>
|
162
|
+
|
|
163
|
+
<%= link_to 'Back', importers_path %><br /><br />
|
164
|
+
</p>
|
165
|
+
|
166
|
+
<% if @importer.validate_only == true %>
|
167
|
+
<div class='pull-left'>
|
168
|
+
<%= button_to 'Continue', importer_continue_path(@importer), method: :put, class: 'btn btn-primary' %>
|
169
|
+
</div>
|
170
|
+
<div class='pull-right'>
|
171
|
+
<%= button_to 'Discard', @importer, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-primary' %>
|
172
|
+
</div>
|
173
|
+
<% end %>
|
174
|
+
</div>
|
175
|
+
</div>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<div class='col-xs-12 main-header'>
|
2
|
+
<h1><span class='fa fa-cloud-upload' aria-hidden='true'></span> Upload Corrected Entries: <%= @importer.name %></h1>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<div class='panel panel-default'>
|
6
|
+
<div class='panel-body'>
|
7
|
+
<p>
|
8
|
+
Upload <b>only</b> the corrected entries for the <b><%= @importer.name %></b> importer. To export failed entries for correction,
|
9
|
+
<%= link_to importer_export_errors_path(@importer.id) do %>
|
10
|
+
click here <span class='glyphicon glyphicon-download-alt'></span>
|
11
|
+
<% end %>
|
12
|
+
</p>
|
13
|
+
<p>Only CSV files are allowed.</p>
|
14
|
+
|
15
|
+
<%= simple_form_for @importer, url: importer_upload_corrected_entries_file_path, method: :post, html: { multipart: true } do |f| %>
|
16
|
+
<%= f.fields_for :parser_fields do |fi| %>
|
17
|
+
<div class='parser_fields'>
|
18
|
+
<div class='fileupload-buttonbar hide-required-tag'>
|
19
|
+
<%= fi.input 'file',
|
20
|
+
as: :file,
|
21
|
+
label: "<span class='glyphicon glyphicon-plus'></span><span> Add file...</span>".html_safe,
|
22
|
+
label_html: {
|
23
|
+
class: 'btn btn-success'
|
24
|
+
},
|
25
|
+
input_html: {
|
26
|
+
style: 'display:none;',
|
27
|
+
accept: 'text/csv'
|
28
|
+
} %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
<div class='pull-right'>
|
33
|
+
<%= f.button :submit, 'Import Corrected Works', class: 'btn btn-primary' %>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
36
|
+
</div>
|
37
|
+
</div>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<% if item.failed? %>
|
2
|
+
<div class="accordion-container">
|
3
|
+
<div class="accordion-heading" role="tab" id="error-trace-heading">
|
4
|
+
<a class="accordion-title" role="button" data-toggle="collapse" data-target="#error-trace-show" aria-expanded="true" aria-controls="error-trace-show">
|
5
|
+
Errors:
|
6
|
+
</a>
|
7
|
+
<a role="button" data-toggle="collapse" data-target="#error-trace-show" aria-expanded="true" aria-controls="error-trace-show">
|
8
|
+
<div class="accordion-icon glyphicon glyphicon-remove-circle" aria-hidden="true"></div>
|
9
|
+
</a>
|
10
|
+
</div>
|
11
|
+
<div id="error-trace-show" class="accordion-collapse collapse" role="tabpanel" aria-labelledby="error-trace-show">
|
12
|
+
<div class="accordion-body">
|
13
|
+
<div class="bulkrax-nav-tab-bottom-margin">
|
14
|
+
<!-- Toggle buttons -->
|
15
|
+
<div class="btn-group pull-right" role="group" aria-label="...">
|
16
|
+
<button type="button" class="btn btn-default active"><a href="#bulkrax-full-toggle-1" aria-controls="bulkrax-full-toggle-1" role="tab" data-toggle="tab">Full</a></button>
|
17
|
+
<button type="button" class="btn btn-default"><a href="#bulkrax-raw-toggle-1" aria-controls="bulkrax-raw-toggle-1" role="tab" data-toggle="tab">Raw</a></button>
|
18
|
+
</div>
|
19
|
+
<!-- Tab panes -->
|
20
|
+
<div class="tab-content">
|
21
|
+
<div role="tabpanel" class="tab-pane active" id="bulkrax-full-toggle-1">
|
22
|
+
<strong>Errored at:</strong> <%= item.status_at %><br /><br />
|
23
|
+
<strong>Error:</strong> <%= item.current_status.error_class %> - <%= item.current_status.error_message %><br /><br />
|
24
|
+
<strong>Error Trace:</strong><br/><br />
|
25
|
+
<% item.current_status.error_backtrace.each do |v| %>
|
26
|
+
<%= coderay(v, { wrap: :page, css: :class, tab_width: 200, break_lines: true }) %>
|
27
|
+
<br>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
<div role="tabpanel" class="tab-pane" id="bulkrax-raw-toggle-1">
|
31
|
+
<strong>Errored at:</strong> <%= item.status_at %><br /><br />
|
32
|
+
<strong>Error:</strong> <%= item.current_status.error_class %> - <%= item.current_status.error_message %><br /><br />
|
33
|
+
<strong>Error Trace:</strong><br/><br />
|
34
|
+
<% item.current_status.error_backtrace.each do |v| %>
|
35
|
+
<%= coderay(v, { css: :class, tab_width: 0, break_lines: false }) %>
|
36
|
+
<br>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
<% elsif item.succeeded? %>
|
45
|
+
<p class='bulkrax-p-align'>
|
46
|
+
<strong>Succeeded At:</strong> <%= item.status_at %>
|
47
|
+
</p>
|
48
|
+
<% else %>
|
49
|
+
<p class='bulkrax-p-align'>
|
50
|
+
<strong>Succeeded At:</strong> Item has not yet been <%= @importer.present? ? 'imported' : 'exported' %> successfully
|
51
|
+
</p>
|
52
|
+
<% end %>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<% if item.field_mapping.present? %>
|
2
|
+
<div class="accordion-container">
|
3
|
+
<div class="accordion-heading" role="tab" id="field-mapping-show-heading">
|
4
|
+
<a class="accordion-title" role="button" data-toggle="collapse" data-target="#field-mapping-show" aria-expanded="true" aria-controls="field-mapping-show">
|
5
|
+
<strong>Field mapping:</strong>
|
6
|
+
</a>
|
7
|
+
<a role="button" data-toggle="collapse" data-target="#field-mapping-show" aria-expanded="true" aria-controls="field-mapping-show">
|
8
|
+
<div class="accordion-icon glyphicon glyphicon-remove-circle" aria-hidden="true"></div>
|
9
|
+
</a>
|
10
|
+
</div>
|
11
|
+
<div id="field-mapping-show" class="accordion-collapse collapse" role="tabpanel" aria-labelledby="field-mapping-show">
|
12
|
+
<div class="accordion-body">
|
13
|
+
<div class="bulkrax-nav-tab-bottom-margin">
|
14
|
+
<!-- Toggle buttons -->
|
15
|
+
<div class="btn-group pull-right" role="group" aria-label="...">
|
16
|
+
<button type="button" class="btn btn-default"><a href="#bulkrax-full-toggle-2" aria-controls="bulkrax-full-toggle-2" role="tab" data-toggle="tab">Full</a></button>
|
17
|
+
<button type="button" class="btn btn-default"><a href="#bulkrax-raw-toggle-2" aria-controls="bulkrax-raw-toggle-2" role="tab" data-toggle="tab">Raw</a></button>
|
18
|
+
</div>
|
19
|
+
<!-- Tab panes -->
|
20
|
+
<div class="tab-content">
|
21
|
+
<div id='bulkrax-full-toggle-2' role="tabpanel" class="tab-pane active bulkrax-clear-toggles">
|
22
|
+
<% item.field_mapping.each do |k, v| %>
|
23
|
+
<strong><%= k %>:</strong>
|
24
|
+
<%= coderay(v, { wrap: :page, css: :class, tab_width: 200, break_lines: true }) %>
|
25
|
+
<br>
|
26
|
+
<% end %>
|
27
|
+
</div>
|
28
|
+
<div id="bulkrax-raw-toggle-2" role="tabpanel" class="tab-pane">
|
29
|
+
<% item.field_mapping.each do |k, v| %>
|
30
|
+
<%= coderay(v, { css: :class, tab_width: 0, break_lines: false }) %>
|
31
|
+
<br>
|
32
|
+
<% end %>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= menu.nav_link(bulkrax.importers_path) do %>
|
2
|
+
<span class="fa fa-cloud-upload" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.importers') %></span>
|
3
|
+
<% 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 %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<li class="h5"><%= t('hyrax.admin.sidebar.repository_objects') %></li>
|
2
|
+
|
3
|
+
<%= menu.nav_link(hyrax.my_collections_path,
|
4
|
+
also_active_for: hyrax.dashboard_collections_path) do %>
|
5
|
+
<span class="fa fa-folder-open" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.collections') %></span>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<%= menu.nav_link(hyrax.my_works_path,
|
9
|
+
also_active_for: hyrax.dashboard_works_path) do %>
|
10
|
+
<span class="fa fa-file" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.works') %></span>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<%= menu.nav_link(bulkrax.importers_path) do %>
|
14
|
+
<span class="fa fa-cloud-upload" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.importers') %></span>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= menu.nav_link(bulkrax.exporters_path) do %>
|
18
|
+
<span class="fa fa-cloud-download" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('bulkrax.admin.sidebar.exporters') %></span>
|
19
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Bulkrax</title>
|
5
|
+
<%= stylesheet_link_tag "bulkrax/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "bulkrax/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
en:
|
2
|
+
bulkrax:
|
3
|
+
admin:
|
4
|
+
sidebar:
|
5
|
+
exporters: Exporters
|
6
|
+
importers: Importers
|
7
|
+
exporter:
|
8
|
+
labels:
|
9
|
+
collection: Collection
|
10
|
+
export_format: Export Format
|
11
|
+
export_from: Export From
|
12
|
+
export_source: Export Source
|
13
|
+
export_type: Type of Export
|
14
|
+
field_mapping: Field Mapping
|
15
|
+
filter_by_date: Filter By Date
|
16
|
+
finish_date: End Date
|
17
|
+
full: Metadata and Files
|
18
|
+
importer: Importer
|
19
|
+
limit: Limit
|
20
|
+
metadata: Metadata Only
|
21
|
+
name: Name
|
22
|
+
parser_fields: Parser Fields
|
23
|
+
parser_klass: Parser
|
24
|
+
start_date: Start Date
|
25
|
+
status: Status
|
26
|
+
total_work_entries: Total Works
|
27
|
+
user: User
|
28
|
+
worktype: Work Type
|
29
|
+
workflow_status:
|
30
|
+
approved: "Approved"
|
31
|
+
deleted: "Deleted"
|
32
|
+
in_process: "In Process"
|
33
|
+
broken_url: "Broken Url"
|
34
|
+
ingested: "Ingested"
|
35
|
+
unapproved: "Unapproved"
|
36
|
+
needs_repair: "Needs Repair"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Bulkrax::Engine.routes.draw do
|
4
|
+
resources :exporters do
|
5
|
+
get :download
|
6
|
+
resources :entries, only: %i[show]
|
7
|
+
end
|
8
|
+
resources :importers do
|
9
|
+
put :continue
|
10
|
+
get :export_errors
|
11
|
+
collection do
|
12
|
+
post :external_sets
|
13
|
+
end
|
14
|
+
resources :entries, only: %i[show]
|
15
|
+
get :upload_corrected_entries
|
16
|
+
post :upload_corrected_entries_file
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateBulkraxImporters < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
unless table_exists?(:bulkrax_importers)
|
4
|
+
create_table :bulkrax_importers do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :admin_set_id
|
7
|
+
t.references :user, foreign_key: false
|
8
|
+
t.string :frequency
|
9
|
+
t.string :parser_klass
|
10
|
+
t.integer :limit
|
11
|
+
t.text :parser_fields
|
12
|
+
t.text :field_mapping
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|