cdm_migrator 3.2.1 → 3.3.1

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +20 -20
  3. data/README.md +41 -41
  4. data/Rakefile +38 -38
  5. data/app/assets/config/cdm_migrator_manifest.js +2 -2
  6. data/app/assets/javascripts/cdm_migrator/application.js +13 -13
  7. data/app/assets/stylesheets/cdm_migrator/application.css +15 -15
  8. data/app/assets/stylesheets/cdm_migrator/csv_checker.css +36 -36
  9. data/app/controllers/cdm_migrator/application_controller.rb +10 -10
  10. data/app/controllers/cdm_migrator/cdm_controller.rb +216 -213
  11. data/app/controllers/cdm_migrator/csv_controller.rb +428 -408
  12. data/app/helpers/cdm_migrator/application_helper.rb +4 -4
  13. data/app/jobs/cdm_migrator/application_job.rb +4 -4
  14. data/app/jobs/cdm_migrator/batch_create_files_job.rb +32 -20
  15. data/app/jobs/cdm_migrator/batch_create_files_with_ordered_members_job.rb +45 -0
  16. data/app/jobs/cdm_migrator/batch_create_works_job.rb +20 -14
  17. data/app/jobs/cdm_migrator/cdm_ingest_files_job.rb +35 -35
  18. data/app/jobs/cdm_migrator/create_work_job.rb +36 -25
  19. data/app/jobs/cdm_migrator/restart_upload_from_middle_job.rb +36 -0
  20. data/app/jobs/cdm_migrator/update_object_job.rb +10 -10
  21. data/app/mailers/cdm_migrator/application_mailer.rb +6 -6
  22. data/app/models/cdm_migrator/application_record.rb +5 -5
  23. data/app/models/cdm_migrator/batch_ingest.rb +33 -33
  24. data/app/models/cdm_migrator/ingest_work.rb +7 -16
  25. data/app/views/cdm_migrator/cdm/collection.html.erb +11 -11
  26. data/app/views/cdm_migrator/cdm/mappings.html.erb +54 -53
  27. data/app/views/cdm_migrator/csv/_batches_list.html.erb +4 -4
  28. data/app/views/cdm_migrator/csv/_default_group.html.erb +17 -17
  29. data/app/views/cdm_migrator/csv/_error_list.html.erb +20 -20
  30. data/app/views/cdm_migrator/csv/_list_batches.html.erb +21 -21
  31. data/app/views/cdm_migrator/csv/_tabs.html.erb +8 -8
  32. data/app/views/cdm_migrator/csv/csv_checker.html.erb +45 -45
  33. data/app/views/cdm_migrator/csv/edit.html.erb +17 -18
  34. data/app/views/cdm_migrator/csv/index.html.erb +19 -19
  35. data/app/views/cdm_migrator/csv/upload.html.erb +18 -18
  36. data/app/views/layouts/cdm_migrator/application.html.erb +14 -14
  37. data/config/routes.rb +19 -19
  38. data/db/migrate/20191211193859_create_batch_ingests.rb +19 -19
  39. data/db/migrate/20191212192315_create_ingest_works.rb +18 -18
  40. data/lib/cdm_migrator/engine.rb +29 -29
  41. data/lib/cdm_migrator/version.rb +3 -3
  42. data/lib/cdm_migrator.rb +5 -5
  43. data/lib/generators/cdm_migrator/install/install_generator.rb +79 -79
  44. data/lib/generators/cdm_migrator/install/templates/config/cdm_migrator.yml +53 -50
  45. data/lib/generators/cdm_migrator/install/templates/presenters/hyku/menu_presenter.rb +47 -47
  46. data/lib/generators/cdm_migrator/install/templates/presenters/hyrax/menu_presenter.rb +66 -66
  47. data/lib/generators/cdm_migrator/install/templates/sidebar/_tasks.html.erb +55 -55
  48. data/lib/tasks/cdm_migrator_tasks.rake +4 -4
  49. metadata +7 -5
@@ -1,4 +1,4 @@
1
- module CdmMigrator
2
- module ApplicationHelper
3
- end
4
- end
1
+ module CdmMigrator
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -1,4 +1,4 @@
1
- module CdmMigrator
2
- class ApplicationJob < ActiveJob::Base
3
- end
4
- end
1
+ module CdmMigrator
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -1,21 +1,33 @@
1
- module CdmMigrator
2
- class BatchCreateFilesJob < ActiveJob::Base
3
- queue_as Hyrax.config.ingest_queue_name
4
-
5
- def perform work, ingest_work, user
6
- ingest_work.files.each do |file|
7
- url = file[:url]
8
- last_file = ingest_work.files.last==file
9
- ::FileSet.new(import_url: url, label: file[:title]) do |fs|
10
- fs.save
11
- actor = Hyrax::Actors::FileSetActor.new(fs, user)
12
- actor.create_metadata#(work, visibility: work.visibility)
13
- actor.attach_file_to_work(work)
14
- fs.attributes = file[:metadata]
15
- fs.save!
16
- CdmIngestFilesJob.perform_later(fs, url, user, ingest_work, last_file)
17
- end
18
- end
19
- end
20
- end
1
+ module CdmMigrator
2
+ class BatchCreateFilesJob < ActiveJob::Base
3
+ queue_as Hyrax.config.ingest_queue_name
4
+
5
+ def perform work, ingest_work, user
6
+ unless work.ordered_members.to_a.empty?
7
+ # This only executes if the job failed before adding any file sets and is now retrying
8
+ ordered_members = work.ordered_members.to_a
9
+ # If the last file set's file was never ingested, do that now
10
+ last_file_set = ordered_members.last
11
+ if last_file_set.present? and last_file_set.files.none?
12
+ CdmMigrator::CdmIngestFilesJob.perform_later(last_file_set, last_file_set.import_url, user)
13
+ end
14
+ files = ingest_work.files[ordered_members.length..-1]
15
+ else
16
+ files = ingest_work.files
17
+ end
18
+ files.each do |file|
19
+ url = file[:url]
20
+ last_file = ingest_work.files.last==file
21
+ ::FileSet.new(import_url: url, label: file[:title]) do |fs|
22
+ fs.save
23
+ actor = Hyrax::Actors::FileSetActor.new(fs, user)
24
+ actor.create_metadata
25
+ actor.attach_file_to_work(work)
26
+ fs.attributes = file[:metadata]
27
+ fs.save!
28
+ CdmIngestFilesJob.perform_later(fs, url, user, ingest_work, last_file)
29
+ end
30
+ end
31
+ end
32
+ end
21
33
  end
@@ -0,0 +1,45 @@
1
+ module CdmMigrator
2
+ class BatchCreateFilesWithOrderedMembersJob < ActiveJob::Base
3
+ queue_as Hyrax.config.ingest_queue_name
4
+
5
+ # From documentation at https://tinyurl.com/nh4c5e9j:
6
+ # When adding member {FileSetBehavior}s to a {WorkBehavior}, {Hyrax} saves
7
+ # and reloads the work for each new member FileSet. This can significantly
8
+ # slow down ingest for Works with many member FileSets. The saving and
9
+ # reloading happens in {FileSetActor#attach_to_work}.
10
+ # See the url for more details.
11
+
12
+ # With this job, the member association is saved once
13
+ # at the very end instead, which can speed up the upload process. This job takes
14
+ # advantage of the same strategy as Hyrax::Actors::FileSetOrderedMembersActor
15
+ # but you don't need the OrderedMembersActor constant initialized.
16
+
17
+ # This rescue is a safeguard against creating lots of orphan file sets if there
18
+ # are recurring errors (see https://tinyurl.com/nh4c5e9j). Instead, CdmMigrator
19
+ # will fall back to creating file sets one-by-one if this job fails once.
20
+ rescue_from(StandardError) do |exception|
21
+ Rails.logger.error "BatchCreateFilesWithOrderedMembersJob error: #{exception.to_s}"
22
+ RestartUploadFromMiddleJob.perform_later(arguments[0], arguments[1], arguments[2])
23
+ end
24
+
25
+ def perform work, ingest_work, user
26
+ ordered_members = []
27
+ ingest_work.files.each do |file|
28
+ url = file[:url]
29
+ last_file = ingest_work.files.last==file
30
+ ::FileSet.new(import_url: url, label: file[:title]) do |fs|
31
+ fs.attributes = file[:metadata]
32
+ fs.save!
33
+ ordered_members << fs
34
+ end
35
+ end
36
+ actor = Hyrax::Actors::OrderedMembersActor.new(ordered_members, user)
37
+ actor.attach_ordered_members_to_work(work)
38
+ work.representative = work.ordered_members.to_a.first
39
+ work.thumbnail_id = work.ordered_member_ids.first
40
+ work.save!
41
+ work.file_sets.each { |fs| CdmIngestFilesJob.perform_later(fs, fs.import_url, user, ingest_work) }
42
+ end
43
+
44
+ end
45
+ end
@@ -1,14 +1,20 @@
1
- module CdmMigrator
2
- class BatchCreateWorksJob < ActiveJob::Base
3
- queue_as Hyrax.config.ingest_queue_name
4
-
5
- def perform(ingest, user)
6
- ingest.data.each do |w|
7
- ingest_work = IngestWork.new(w, ingest.id)
8
- ingest_work.save!
9
- CreateWorkJob.perform_later ingest_work, user, ingest.admin_set_id, ingest.collection_id
10
- end
11
-
12
- end
13
- end
14
- end
1
+ module CdmMigrator
2
+ class BatchCreateWorksJob < ActiveJob::Base
3
+ queue_as Hyrax.config.ingest_queue_name
4
+
5
+ def perform(ingest, user)
6
+ ingest.data.each do |w|
7
+ ingest_work = IngestWork.new({
8
+ work_type: w[:type],
9
+ data: w[:metadata],
10
+ files: w[:files],
11
+ batch_ingest_id: ingest.id
12
+ })
13
+ ingest_work.save!
14
+ # puts ingest_work.inspect
15
+ CreateWorkJob.perform_later ingest_work, user, ingest.admin_set_id, ingest.collection_id
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -1,35 +1,35 @@
1
- module CdmMigrator
2
- class CdmIngestFilesJob < ActiveJob::Base
3
- queue_as Hyrax.config.ingest_queue_name
4
-
5
- def perform(fs, url, user, ingest_work = nil, last_file = false)
6
- if url.include?("http") && File.extname(url).include?("pdf")
7
- download = open(url)
8
- dir = Rails.root.join('public', 'uploads', 'csv_pdfs')
9
- FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
10
- filename = download.base_uri.to_s.split('/').last
11
- url = dir.join(filename)
12
- if fs.title.empty?
13
- fs.title << filename.split('.').first
14
- fs.save
15
- end
16
- IO.copy_stream(download, url)
17
- url = "file://"+url.to_s
18
- end
19
- uri = URI.parse(url.gsub(' ','%20').gsub(/[\[\]@#\$\*{}]/, ""))
20
- if uri.scheme == 'file'
21
- IngestLocalFileJob.perform_now(fs, url.gsub('file://',''), user)
22
- else
23
- URI.parse(url.gsub(' ','%20'))
24
- ImportUrlJob.perform_now(fs, log(user))
25
- end
26
- ingest_work.update_attribute('complete', true) if last_file
27
- end
28
-
29
- def log(user)
30
- Hyrax::Operation.create!(user: user,
31
- operation_type: "Attach Remote File")
32
- end
33
-
34
- end
35
- end
1
+ module CdmMigrator
2
+ class CdmIngestFilesJob < ActiveJob::Base
3
+ queue_as Hyrax.config.ingest_queue_name
4
+
5
+ def perform(fs, url, user, ingest_work = nil, last_file = false)
6
+ if url.include?("http") && File.extname(url).include?("pdf")
7
+ download = open(url)
8
+ dir = Rails.root.join('public', 'uploads', 'csv_pdfs')
9
+ FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
10
+ filename = download.base_uri.to_s.split('/').last
11
+ url = dir.join(filename)
12
+ if fs.title.empty?
13
+ fs.title << filename.split('.').first
14
+ fs.save
15
+ end
16
+ IO.copy_stream(download, url)
17
+ url = "file://"+url.to_s
18
+ end
19
+ uri = URI.parse(url.gsub(' ','%20').gsub(/[\[\]@#\$\*{}]/, ""))
20
+ if uri.scheme == 'file'
21
+ IngestLocalFileJob.perform_now(fs, url.gsub('file://',''), user)
22
+ else
23
+ URI.parse(url.gsub(' ','%20'))
24
+ ImportUrlJob.perform_now(fs, log(user))
25
+ end
26
+ ingest_work.update_attribute('complete', true) if last_file
27
+ end
28
+
29
+ def log(user)
30
+ Hyrax::Operation.create!(user: user,
31
+ operation_type: "Attach Remote File")
32
+ end
33
+
34
+ end
35
+ end
@@ -1,26 +1,37 @@
1
- module CdmMigrator
2
- class CreateWorkJob < ActiveJob::Base
3
- queue_as Hyrax.config.ingest_queue_name
4
-
5
- def perform(ingest_work, user, admin_set_id, collection_id)
6
- admin_set = ::AdminSet.find(admin_set_id) rescue nil
7
- collection = ::Collection.find(collection_id) rescue nil
8
- work = Object.const_get(ingest_work.work_type).new
9
- #status_after, embargo_date, lease_date = nil, nil, nil
10
- work.apply_depositor_metadata(user)
11
- work.attributes = ingest_work.data
12
- if ingest_work.data.has_key? 'downloadable'
13
- # Convert string to boolean
14
- work.downloadable = ActiveModel::Type::Boolean.new.cast(ingest_work.data['downloadable'])
15
- elsif work.attributes.include? 'downloadable' # Set work to downloadable by default
16
- work.downloadable = true
17
- end
18
- work.member_of_collections = [collection] if collection
19
- work.admin_set = admin_set if admin_set
20
- work.date_uploaded = DateTime.now
21
- work.save
22
- BatchCreateFilesJob.perform_later work, ingest_work, user
23
-
24
- end
25
- end
1
+ module CdmMigrator
2
+ class CreateWorkJob < ActiveJob::Base
3
+ queue_as Hyrax.config.ingest_queue_name
4
+
5
+ def perform(ingest_work, user, admin_set_id, collection_id)
6
+ admin_set = ::AdminSet.find(admin_set_id) rescue nil
7
+ collection = ::Collection.find(collection_id) rescue nil
8
+ work = Object.const_get(ingest_work.work_type).new
9
+ #status_after, embargo_date, lease_date = nil, nil, nil
10
+ work.apply_depositor_metadata(user)
11
+ work.attributes = ingest_work.data
12
+ if ingest_work.data.has_key? 'downloadable'
13
+ # Convert string to boolean
14
+ work.downloadable = ActiveModel::Type::Boolean.new.cast(ingest_work.data['downloadable'])
15
+ elsif work.attributes.include? 'downloadable' # Set work to downloadable by default
16
+ work.downloadable = true
17
+ end
18
+ work.member_of_collections = [collection] if collection
19
+ work.admin_set = admin_set if admin_set
20
+ work.date_uploaded = DateTime.now
21
+ begin
22
+ work.save!
23
+ # Weird error where descriptions with whitespace chars \n or \r don't save the 1st time
24
+ # but do on the second
25
+ rescue Ldp::BadRequest
26
+ old_descr = work.description.clone.to_a
27
+ work.description = work.description.map { |w| w.gsub("\n","").gsub("\r","") }
28
+ work.save!
29
+ work.description = old_descr
30
+ work.save!
31
+ end
32
+ # To use the BatchCreateFilesWithOrderedMembersJob instead, replace the following line
33
+ # with BatchCreateFilesWithOrderedMembersJob.perform_later(work, ingest_work, user)
34
+ BatchCreateFilesJob.perform_later(work, ingest_work, user)
35
+ end
36
+ end
26
37
  end
@@ -0,0 +1,36 @@
1
+ module CdmMigrator
2
+ class RestartUploadFromMiddleJob < ActiveJob::Base
3
+
4
+ # For restarting failed CdmMigrator::BatchCreateFilesJobs
5
+ # from the middle instead of from the beginning (default
6
+ # behaviour in Sidekiq). This prevents duplicating file
7
+ # sets within a work.
8
+ #
9
+ retry_on Net::OpenTimeout, attempts: 20
10
+ retry_on Errno::ECONNRESET, attempts: 20
11
+
12
+ def perform(work, ingest_work, user)
13
+ ordered_members = work.ordered_members.to_a
14
+ last_file_set = ordered_members.last
15
+ # If the last file set's file was never ingested, do that now
16
+ if last_file_set.present? and last_file_set.files.none?
17
+ CdmMigrator::CdmIngestFilesJob.perform_later(last_file_set, last_file_set.import_url, user)
18
+ end
19
+ files = ingest_work.files[ordered_members.length..-1]
20
+ files.each do |file|
21
+ url = file[:url]
22
+ last_file = ingest_work.files.last==file
23
+ ::FileSet.new(import_url: url, label: file[:title]) do |fs|
24
+ fs.save
25
+ actor = Hyrax::Actors::FileSetActor.new(fs, user)
26
+ actor.create_metadata
27
+ actor.attach_file_to_work(work)
28
+ fs.attributes = file[:metadata]
29
+ fs.save!
30
+ CdmMigrator::CdmIngestFilesJob.perform_later(fs, url, user, ingest_work, last_file)
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -1,10 +1,10 @@
1
- module CdmMigrator
2
- class UpdateObjectJob < ActiveJob::Base
3
-
4
-
5
- def perform(attributes)
6
- obj = ActiveFedora::Base.find
7
-
8
- end
9
- end
10
- end
1
+ module CdmMigrator
2
+ class UpdateObjectJob < ActiveJob::Base
3
+
4
+
5
+ def perform(attributes)
6
+ obj = ActiveFedora::Base.find
7
+
8
+ end
9
+ end
10
+ end
@@ -1,6 +1,6 @@
1
- module CdmMigrator
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
5
- end
6
- end
1
+ module CdmMigrator
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
- module CdmMigrator
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
5
- end
1
+ module CdmMigrator
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -1,33 +1,33 @@
1
- module CdmMigrator
2
- class BatchIngest < ActiveRecord::Base
3
- serialize :data
4
-
5
- def name
6
- csv.split('/').last.gsub(/[0-9]{10}/,"")
7
- end
8
-
9
- def progress
10
- return "Complete" if complete?
11
- completed = IngestWork.where(batch_ingest_id: id, complete: true ).length
12
- if completed==data.length
13
- complete=true
14
- save
15
- "Complete"
16
- else
17
- "#{completed.to_s}/#{size}"
18
- end
19
- end
20
-
21
- def username
22
- @username ||= User.find(user_id).name
23
- end
24
-
25
- def complete?
26
- complete
27
- end
28
-
29
- def message?
30
- not(message.nil?||message.empty?)
31
- end
32
- end
33
- end
1
+ module CdmMigrator
2
+ class BatchIngest < ActiveRecord::Base
3
+ serialize :data
4
+
5
+ def name
6
+ csv.split('/').last.gsub(/[0-9]{10}/,"")
7
+ end
8
+
9
+ def progress
10
+ return "Complete" if complete?
11
+ completed = IngestWork.where(batch_ingest_id: id, complete: true ).length
12
+ if completed==data.length
13
+ complete=true
14
+ save
15
+ "Complete"
16
+ else
17
+ "#{completed.to_s}/#{size}"
18
+ end
19
+ end
20
+
21
+ def username
22
+ @username ||= User.find(user_id).name
23
+ end
24
+
25
+ def complete?
26
+ complete
27
+ end
28
+
29
+ def message?
30
+ not(message.nil?||message.empty?)
31
+ end
32
+ end
33
+ end
@@ -1,16 +1,7 @@
1
- module CdmMigrator
2
- class IngestWork < ActiveRecord::Base
3
-
4
- def initialize(work, ingest_id)
5
- super({
6
- work_type: work[:type],
7
- data: work[:metadata],
8
- files: work[:files],
9
- batch_ingest_id: ingest_id
10
- })
11
- end
12
-
13
- serialize :data
14
- serialize :files
15
- end
16
- end
1
+ module CdmMigrator
2
+ class IngestWork < ApplicationRecord
3
+
4
+ serialize :data
5
+ serialize :files
6
+ end
7
+ end
@@ -1,12 +1,12 @@
1
- <h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
2
-
3
- <h5>ContentDM API address: <%= @cdm_url %></h5>
4
- <%= form_tag cdm_mappings_path, method: "post", multipart: true do %>
5
- <table>
6
- <tr><td>Collection: </td><td><%= select_tag 'collection', options_for_select(@collections) %></td></tr>
7
- <tr><td>Work: </td><td><%= select_tag 'work', options_for_select(@available_concerns) %></td></tr>
8
- <tr><td>Use Local File Storage: </td><td><%= check_box_tag 'file_system', 'true', false %></td></tr>
9
- <tr><td>Template to Apply: </td><td><%= file_field_tag 'template' %> (.yml file)</td></tr>
10
- </table>
11
- <%= submit_tag 'choose mappings' %>
1
+ <h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
2
+
3
+ <h5>ContentDM API address: <%= @cdm_url %></h5>
4
+ <%= form_tag cdm_mappings_path, method: "post", multipart: true do %>
5
+ <table>
6
+ <tr><td>Collection: </td><td><%= select_tag 'collection', options_for_select(@collections) %></td></tr>
7
+ <tr><td>Work: </td><td><%= select_tag 'work', options_for_select(@available_concerns) %></td></tr>
8
+ <tr><td>Use Local File Storage: </td><td><%= check_box_tag 'file_system', 'true', false %></td></tr>
9
+ <tr><td>Template to Apply: </td><td><%= file_field_tag 'template' %> (.yml file)</td></tr>
10
+ </table>
11
+ <%= submit_tag 'choose mappings' %>
12
12
  <% end %>
@@ -1,53 +1,54 @@
1
- <style type="text/css" media="screen">
2
-
3
- table{
4
- border-collapse:collapse;
5
- border:1px solid black;
6
- }
7
-
8
- table td{
9
- border:1px solid black;
10
- }
11
- </style>
12
-
13
- <h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
14
-
15
- <%= form_tag cdm_generate_path.gsub("generate","generate.csv") do %>
16
- <%= hidden_field_tag "collection", params[:collection] %>
17
- <%= hidden_field_tag "file_system", params[:file_system] %>
18
- <table>
19
- <% @cdm_terms.each_with_index do |t,i| %>
20
- <tr>
21
- <td>
22
- <%= label_tag t.first %>
23
- <%= hidden_field_tag "mappings[#{i}][cdm]", t.last %>
24
- </td>
25
- <td>
26
- <h3>Choose one</h3>
27
- <%= label_tag 'applies to boths compound objects and children:' %><%= select_tag "mappings[#{i}][hydra]", options_for_select(@terms, @yaml.nil? ? "" : @yaml[t.last]['hydra']), include_blank: true %><br>
28
- <%= label_tag 'applies only to compound objects: ' %><%= select_tag "mappings[#{i}][hydrac]", options_for_select(@work_only, @yaml.nil? ? "" : @yaml[t.last]['hydrac']), include_blank: true %>
29
- </td>
30
- </tr>
31
- <% end %>
32
- </table>
33
- <%= select_tag "mappings_url", options_for_select(@dirs.sort { |x,y| x[0].downcase <=> y[0].downcase }) if @cdm_dirs %>
34
- <%= hidden_field_tag "work", params[:work] %>
35
- <%= submit_tag 'generate csv'%>
36
- <% end %>
37
-
38
- <%= button_tag "Download Template", { "onclick" => "template()" } %>
39
-
40
- <script type="text/javascript">
41
- function template() {
42
- document.getElementsByTagName("form")[0].action = "<%= cdm_template_path.gsub("template","template.yml") %>";
43
- document.getElementsByName("commit")[0].click();
44
- document.getElementsByTagName("form")[0].action = "<%= cdm_generate_path.gsub("generate","generate.csv") %>";
45
- }
46
-
47
- inputs = document.getElementsByTagName('option');
48
- for (var i = 0; i < inputs.length; i++) {
49
- if (inputs[i].hasAttribute('selected')) {
50
- inputs[i].selected = true;
51
- }
52
- }
53
- </script>
1
+ <style type="text/css" media="screen">
2
+
3
+ table{
4
+ border-collapse:collapse;
5
+ border:1px solid black;
6
+ }
7
+
8
+ table td{
9
+ border:1px solid black;
10
+ }
11
+ </style>
12
+
13
+ <h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
14
+
15
+ <%= form_tag cdm_generate_path.gsub("generate","generate.csv") do %>
16
+ <%= hidden_field_tag "collection", params[:collection] %>
17
+ <%= hidden_field_tag "file_system", params[:file_system] %>
18
+ <table>
19
+ <% @cdm_terms.each_with_index do |t,i| %>
20
+ <tr>
21
+ <td>
22
+ <%= label_tag t.first %>
23
+ <%= hidden_field_tag "mappings[#{i}][cdm]", t.last %>
24
+ </td>
25
+ <td>
26
+ <h3>Choose one</h3>
27
+ <%= label_tag 'applies to boths compound objects and children:' %><%= select_tag "mappings[#{i}][hydra]", options_for_select(@terms, @yaml.nil? ? "" : @yaml[t.last]['hydra']), include_blank: true %><br>
28
+ <%= label_tag 'applies only to compound objects: ' %><%= select_tag "mappings[#{i}][hydrac]", options_for_select(@work_only, @yaml.nil? ? "" : @yaml[t.last]['hydrac']), include_blank: true %>
29
+ </td>
30
+ </tr>
31
+ <% end %>
32
+ </table>
33
+ <%= select_tag "mappings_url", options_for_select(@dirs.sort { |x,y| x[0].downcase <=> y[0].downcase }) if @cdm_dirs %>
34
+ <%= hidden_field_tag "work", params[:work] %>
35
+ <%= submit_tag 'generate csv'%>
36
+ <% end %>
37
+
38
+ <%= button_tag "Download Template", { "onclick" => "template()" } %>
39
+ <%= link_to "Map Another Collection", cdm_start_path, class: 'btn btn-primary' %>
40
+
41
+ <script type="text/javascript">
42
+ function template() {
43
+ document.getElementsByTagName("form")[0].action = "<%= cdm_template_path.gsub("template","template.yml") %>";
44
+ document.getElementsByName("commit")[0].click();
45
+ document.getElementsByTagName("form")[0].action = "<%= cdm_generate_path.gsub("generate","generate.csv") %>";
46
+ }
47
+
48
+ inputs = document.getElementsByTagName('option');
49
+ for (var i = 0; i < inputs.length; i++) {
50
+ if (inputs[i].hasAttribute('selected')) {
51
+ inputs[i].selected = true;
52
+ }
53
+ }
54
+ </script>
@@ -1,4 +1,4 @@
1
- <% # container for all batches in index view -%>
2
- <div class="table-responsive" id="batches">
3
- <%= render 'default_group', batches: @batches %>
4
- </div>
1
+ <% # container for all batches in index view -%>
2
+ <div class="table-responsive" id="batches">
3
+ <%= render 'default_group', batches: @batches %>
4
+ </div>
@@ -1,17 +1,17 @@
1
- <table class="table table-striped works-list">
2
- <thead>
3
- <tr>
4
- <th><%= "Name" %></th>
5
- <th><%= "Uploaded" %></th>
6
- <th><%= "User" %></th>
7
- <th><%= "Progress" %></th>
8
- <th><%= "Message" %></th>
9
- <th><%= "Actions" %></th>
10
- </tr>
11
- </thead>
12
- <tbody>
13
- <% batches.each do |batch| %>
14
- <%= render 'list_batches', batch: batch %>
15
- <% end %>
16
- </tbody>
17
- </table>
1
+ <table class="table table-striped works-list">
2
+ <thead>
3
+ <tr>
4
+ <th><%= "Name" %></th>
5
+ <th><%= "Uploaded" %></th>
6
+ <th><%= "User" %></th>
7
+ <th><%= "Progress" %></th>
8
+ <th><%= "Message" %></th>
9
+ <th><%= "Actions" %></th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
13
+ <% batches.each do |batch| %>
14
+ <%= render 'list_batches', batch: batch %>
15
+ <% end %>
16
+ </tbody>
17
+ </table>