cdm_migrator 1.4.4 → 2.0.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 +5 -5
- data/README.md +6 -7
- data/app/controllers/cdm_migrator/cdm_controller.rb +65 -38
- data/app/controllers/cdm_migrator/csv_controller.rb +38 -4
- data/app/jobs/csv_upload_job.rb +7 -2
- data/app/views/cdm_migrator/cdm/collection.html.erb +3 -0
- data/app/views/cdm_migrator/cdm/mappings.html.erb +2 -0
- data/app/views/cdm_migrator/csv/upload.html.erb +8 -0
- data/config/routes.rb +8 -8
- data/lib/cdm_migrator/engine.rb +1 -1
- data/lib/cdm_migrator/version.rb +1 -2
- data/lib/generators/cdm_migrator/install/install_generator.rb +47 -4
- data/lib/generators/cdm_migrator/install/templates/config/cdm_migrator.yml +22 -6
- data/lib/generators/cdm_migrator/install/templates/presenters/hyku/menu_presenter.rb +47 -0
- data/lib/generators/cdm_migrator/install/templates/presenters/hyrax/menu_presenter.rb +66 -0
- data/lib/generators/cdm_migrator/install/templates/sidebar/_tasks.html.erb +43 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e8c4fdc95bd2d038a441f126555e80767c40b05a7f9ed20eb1aae116f2a66921
|
4
|
+
data.tar.gz: 1a9a1695951cbb45f6ad78855223f62900a9033ea6b749db77827b67745b5b4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f123901208397e46b758690c7de039712b0f3da5d4375e9ca8102668914994c698114f29ac964120fb69e0d88b0964b0e9a25a72dde6b1f6987826c024239e20
|
7
|
+
data.tar.gz: ca95b987182c67fdca1d21d3317658f8895b66ca74eb2eb8e57e94d501930799a700c532afc079cfc1509c00ce14ac3d3c9f9e757280d34bfa33e05b1f8bb36c
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# CdmMigrator
|
2
|
-
This migrator is designed to export individual ContentDM collections to a CSV for refining. It then allows batch importing into Hyrax via a CSV upload.
|
2
|
+
This migrator is designed to export individual ContentDM collections to a CSV for refining. It then allows batch importing into Hyku/Hyrax via a CSV upload.
|
3
3
|
|
4
4
|
## Installation
|
5
5
|
Add this line to your application's Gemfile:
|
@@ -10,7 +10,7 @@ gem 'cdm_migrator'
|
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
```bash
|
13
|
-
$ bundle
|
13
|
+
$ bundle install
|
14
14
|
```
|
15
15
|
|
16
16
|
Or install it yourself as:
|
@@ -22,19 +22,18 @@ Finally, run:
|
|
22
22
|
```bash
|
23
23
|
$ rails g cdm_migrator:install
|
24
24
|
```
|
25
|
+
to insert the yml and add a link to your Hyrax dashboard
|
25
26
|
|
26
27
|
## Usage
|
27
28
|
1. Add your ContentDM url and api port to the cdm_migrator.yml file.
|
28
|
-
2. Navigate to the *cdm_migrator/
|
29
|
+
2. Navigate to the *cdm_migrator/collection* url to select your contentdm collection and what type of work you want to export it to and click "choose mappings".
|
29
30
|
3. Map the ContentDM fields to your Hyrax work and file fields\* and click "generate CSV".
|
30
31
|
4. Refine the CSV as you see fit.
|
31
|
-
5. Navigate to the *cdm_migrator/
|
32
|
+
5. Navigate to the *cdm_migrator/upload* url; choose your multi-value seperator (default is |) and upload your CSV file.
|
32
33
|
6. Done.
|
33
34
|
|
34
|
-
\* cdm_migrator uses the generated Hyrax forms (ex. Hyrax::Forms::GenericWorkForm) in your host application to obtain it's terms for mapping. If you have added terms to your FileSet model extend the Hyrax::Forms::FileSetEditForm with FileSetForm in your host application so that the changes will be detected by the migrator.
|
35
|
+
\* cdm_migrator uses the generated Hyrax forms (ex. Hyrax::Forms::GenericWorkForm) in your host application to obtain it's terms for mapping. If you have added terms to your FileSet model extend the Hyrax::Forms::FileSetEditForm with Hyrax::FileSetForm in your host application so that the changes will be detected by the migrator. You can also add a list of fields in the yml file, under "default fields".
|
35
36
|
|
36
|
-
## Contributing
|
37
|
-
Contribution directions go here.
|
38
37
|
|
39
38
|
## License
|
40
39
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -1,17 +1,10 @@
|
|
1
1
|
module CdmMigrator
|
2
2
|
class CdmController < ApplicationController
|
3
|
-
|
3
|
+
helper_method :default_page_title, :admin_host?, :available_translations, :available_works
|
4
|
+
layout 'dashboard' if Hyrax
|
4
5
|
require 'csv'
|
5
6
|
|
6
|
-
|
7
|
-
super
|
8
|
-
@cdm_url = CdmMigrator::Engine.config["cdm_url"]
|
9
|
-
@cdm_port = CdmMigrator::Engine.config["cdm_port"]
|
10
|
-
@default_fields = CdmMigrator::Engine.config["default_fields"]
|
11
|
-
@cdm_dirs = CdmMigrator::Engine.config["cdm_dirs"] || false
|
12
|
-
@cdm_api = CdmMigrator::Engine.config["api"]
|
13
|
-
end
|
14
|
-
|
7
|
+
before_action :load_yaml
|
15
8
|
before_action :set_exclusive_fields, only: [:generate, :mappings]
|
16
9
|
skip_before_action :verify_authenticity_token
|
17
10
|
|
@@ -29,37 +22,37 @@ module CdmMigrator
|
|
29
22
|
@h_to_c[mapping['hydrac']] << mapping['cdm']
|
30
23
|
end
|
31
24
|
end
|
32
|
-
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmQuery
|
33
|
-
total_recs = json[
|
25
|
+
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmQuery#{params[:collection]}/0/0/filetype/1024/0/0/0/0/0/1/0/json")).body)
|
26
|
+
total_recs = json['pager']['total'].to_i
|
34
27
|
if total_recs > 1024
|
35
28
|
start = 1
|
36
29
|
records = []
|
37
30
|
[0..(total_recs/1024)].each do |index|
|
38
31
|
start = (index*1024) + 1
|
39
|
-
json = JSON.parse(Net::HTTP.get_response(URI.parse("http://#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmQuery
|
40
|
-
records << json[
|
32
|
+
json = JSON.parse(Net::HTTP.get_response(URI.parse("http://#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmQuery#{params[:collection]}/0/0/filetype/1024/#{start}/0/0/0/0/1/0/json")).body)
|
33
|
+
records << json['records'].map { |rec| [rec['pointer'], rec['filetype']] }
|
41
34
|
end
|
42
35
|
else
|
43
|
-
records = json[
|
36
|
+
records = json['records'].map { |rec| [rec['pointer'], rec['filetype']] }
|
44
37
|
end
|
45
38
|
headers = ::CSV.generate_line (['object_type','url']+@terms+@work_only)
|
46
39
|
csv_lines = [] << headers
|
47
40
|
records.each do |rec|
|
48
|
-
if rec.last ==
|
49
|
-
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetItemInfo
|
50
|
-
csv_lines << create_line(params[:work],
|
51
|
-
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetCompoundObjectInfo
|
41
|
+
if rec.last == 'cpd'
|
42
|
+
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetItemInfo#{params[:collection]}/#{rec.first}/json")).body)
|
43
|
+
csv_lines << create_line(params[:work],'',json)
|
44
|
+
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetCompoundObjectInfo#{params[:collection]}/#{rec.first}/json")).body)
|
52
45
|
rec_pages = json['page'] || json['node']['page']
|
53
46
|
rec_pages.each do |child|
|
54
|
-
child_json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetItemInfo
|
55
|
-
url = api_check rec
|
56
|
-
csv_lines << create_line(
|
47
|
+
child_json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetItemInfo#{params[:collection]}/#{child['pageptr']}/json")).body)
|
48
|
+
url = api_check rec, child
|
49
|
+
csv_lines << create_line('File',url,child_json)
|
57
50
|
end
|
58
51
|
else
|
59
|
-
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetItemInfo
|
60
|
-
csv_lines << create_line(params[:work],
|
52
|
+
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetItemInfo#{params[:collection]}/#{rec.first}/json")).body)
|
53
|
+
csv_lines << create_line(params[:work],'',json)
|
61
54
|
url = api_check rec
|
62
|
-
csv_lines << create_line(
|
55
|
+
csv_lines << create_line('File',url,{})
|
63
56
|
end
|
64
57
|
end
|
65
58
|
render plain: csv_lines.join, content_type: 'text/csv'
|
@@ -67,17 +60,15 @@ module CdmMigrator
|
|
67
60
|
end
|
68
61
|
|
69
62
|
def mappings
|
70
|
-
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetCollectionFieldInfo
|
63
|
+
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetCollectionFieldInfo"+params['collection']+'/json')).body)
|
71
64
|
@cdm_terms = json.collect { |c| [c['name'],c['nick']] }
|
72
|
-
if @cdm_dirs
|
73
|
-
get_dirs
|
74
|
-
end
|
65
|
+
get_dirs if @cdm_dirs
|
75
66
|
@yaml = YAML.load_file(params['template'].tempfile) if params.has_key? 'template'
|
76
67
|
end
|
77
68
|
|
78
69
|
def collection
|
79
70
|
json = JSON.parse(Net::HTTP.get_response(URI.parse("#{@cdm_url}:#{@cdm_port}/dmwebservices/index.php?q=dmGetCollectionList/json")).body)
|
80
|
-
@collections = json.collect { |c| [c['name'],c['
|
71
|
+
@collections = json.collect { |c| [c['name'],c['alias']] }
|
81
72
|
load_concerns
|
82
73
|
end
|
83
74
|
|
@@ -92,13 +83,49 @@ module CdmMigrator
|
|
92
83
|
|
93
84
|
protected
|
94
85
|
|
95
|
-
def
|
96
|
-
|
86
|
+
def available_works
|
87
|
+
@available_works ||= Hyrax::QuickClassificationQuery.new(current_user).authorized_models
|
88
|
+
end
|
89
|
+
|
90
|
+
def default_page_title
|
91
|
+
'CDM Mapping'
|
92
|
+
end
|
93
|
+
|
94
|
+
def admin_host?
|
95
|
+
false unless Settings.multitenancy.enabled rescue nil
|
96
|
+
end
|
97
|
+
|
98
|
+
def available_translations
|
99
|
+
{
|
100
|
+
'en' => 'English',
|
101
|
+
'fr' => 'French'
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
def load_yaml
|
106
|
+
stripped_url = request.base_url.dup.gsub(/https?:\/\//, '').gsub(/:[0-9]*/,'')
|
107
|
+
if CdmMigrator::Engine.config['cdm_api'].key? stripped_url
|
108
|
+
tenant = CdmMigrator::Engine.config['cdm_api'][stripped_url]
|
109
|
+
else
|
110
|
+
tenant = CdmMigrator::Engine.config['cdm_api']['default']
|
111
|
+
end
|
112
|
+
@cdm_url = tenant['url']
|
113
|
+
@cdm_port = tenant['port']
|
114
|
+
@cdm_dirs = tenant['dirs'] || false
|
115
|
+
@cdm_api = tenant['type']
|
116
|
+
@default_fields = CdmMigrator::Engine.config['default_fields']
|
117
|
+
end
|
118
|
+
|
119
|
+
def api_check rec, child=nil
|
120
|
+
cisoptr = child ? child['pageptr'] : rec.first
|
121
|
+
filename = child ? child['pagefile'] : "#{rec.first}.#{rec.last}"
|
122
|
+
|
123
|
+
if params[:file_system]=='true'
|
97
124
|
"file://#{file_path(rec.first)}"
|
98
|
-
elsif @cdm_api ==
|
99
|
-
"#{@cdm_url}:#{@cdm_port}/cgi-bin/showfile.exe?CISOROOT
|
125
|
+
elsif @cdm_api == 'server'
|
126
|
+
"#{@cdm_url}:#{@cdm_port}/cgi-bin/showfile.exe?CISOROOT=#{params[:collection]}&CISOPTR=#{cisoptr}"
|
100
127
|
else
|
101
|
-
"#{@cdm_url}/utils/getfile/collection
|
128
|
+
"#{@cdm_url}/utils/getfile/collection#{params[:collection]}/id/#{cisoptr}/filename/#{filename}"
|
102
129
|
end
|
103
130
|
end
|
104
131
|
|
@@ -117,11 +144,11 @@ module CdmMigrator
|
|
117
144
|
end
|
118
145
|
|
119
146
|
def work_form
|
120
|
-
Module.const_get("Hyrax::#{params[:work]}Form") rescue nil || Module.const_get(
|
147
|
+
Module.const_get("Hyrax::#{params[:work]}Form") rescue nil || Module.const_get('Hyrax::Forms::WorkForm')
|
121
148
|
end
|
122
149
|
|
123
150
|
def file_form
|
124
|
-
Module.const_get(
|
151
|
+
Module.const_get('Hyrax::FileSetForm') rescue nil || Module.const_get('Hyrax::Forms::FileSetEditForm')
|
125
152
|
end
|
126
153
|
|
127
154
|
def secondary_terms form_name
|
@@ -155,7 +182,7 @@ module CdmMigrator
|
|
155
182
|
content.delete_if(&:empty?)
|
156
183
|
end
|
157
184
|
if content.nil? || content.empty? || content == [{}]
|
158
|
-
line <<
|
185
|
+
line << ''
|
159
186
|
else
|
160
187
|
line << content.join('|')
|
161
188
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module CdmMigrator
|
2
2
|
class CsvController < ApplicationController
|
3
|
-
|
3
|
+
helper_method :default_page_title, :admin_host?, :available_translations, :available_works
|
4
|
+
layout 'dashboard'
|
5
|
+
|
4
6
|
def generate
|
5
7
|
headers = ['type','url']
|
6
8
|
skip = ["id", "head", "tail", "depositor", "date_uploaded", "date_modified", "import_url", "thumbnail_id", "embargo_id", "lease_id", "access_control_id", "representative_id"]
|
@@ -16,20 +18,33 @@ module CdmMigrator
|
|
16
18
|
|
17
19
|
def upload
|
18
20
|
#byebug
|
21
|
+
authorize! :create, available_works.first
|
22
|
+
@admin_sets = AdminSet.all.map { |as| [as.title.first, as.id] }
|
23
|
+
@collections = Collection.all.map { |col| [col.title.first, col.id] }
|
19
24
|
end
|
20
25
|
|
21
26
|
def create
|
22
27
|
#byebug
|
23
|
-
|
24
|
-
|
28
|
+
authorize! :create, available_works.first
|
29
|
+
dir = Rails.root.join('public', 'uploads', 'csvs')
|
30
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
31
|
+
File.open(dir.join(params[:csv_import][:csv_file].original_filename), 'wb') do |file|
|
32
|
+
file.write(params[:csv_import][:csv_file].read)
|
33
|
+
end
|
34
|
+
csv = CSV.parse(File.read(dir.join(params[:csv_import][:csv_file].original_filename)), headers: true, encoding: 'utf-8')
|
35
|
+
CsvUploadJob.perform_later(dir.join(params[:csv_import][:csv_file].original_filename).to_s, params[:csv_import][:mvs], params[:collection], params[:admin_set], current_user)
|
25
36
|
#perform(params[:csv_import][:csv_file].path, params[:csv_import][:mvs], current_user)
|
26
37
|
flash[:notice] = "csv successfully uploaded"
|
27
38
|
redirect_to csv_upload_path
|
28
39
|
end
|
40
|
+
|
41
|
+
private
|
29
42
|
|
30
43
|
def perform(csv, mvs, current_user)
|
31
44
|
@csv = CSV.parse(File.read(csv), headers: true, encoding: 'utf-8').map(&:to_hash)
|
32
45
|
@mvs = mvs
|
46
|
+
@collection = Collection.find(params[:csv_import][:collection]) rescue nil
|
47
|
+
@admin_set = AdminSet.find(params[:csv_import][:admin_set]) rescue nil
|
33
48
|
@works = []
|
34
49
|
@files = {}
|
35
50
|
@csv.each do |row|
|
@@ -47,7 +62,24 @@ module CdmMigrator
|
|
47
62
|
create_works
|
48
63
|
end
|
49
64
|
|
50
|
-
|
65
|
+
def available_works
|
66
|
+
@available_works ||= Hyrax::QuickClassificationQuery.new(current_user).authorized_models
|
67
|
+
end
|
68
|
+
|
69
|
+
def default_page_title
|
70
|
+
'CSV Batch Uploader'
|
71
|
+
end
|
72
|
+
|
73
|
+
def admin_host?
|
74
|
+
false unless Settings.multitenancy.enabled
|
75
|
+
end
|
76
|
+
|
77
|
+
def available_translations
|
78
|
+
{
|
79
|
+
'en' => 'English',
|
80
|
+
'fr' => 'French'
|
81
|
+
}
|
82
|
+
end
|
51
83
|
|
52
84
|
def work_form
|
53
85
|
Module.const_get("Hyrax::#{params[:work]}Form") rescue nil || Module.const_get("Hyrax::Forms::WorkForm")
|
@@ -112,6 +144,8 @@ module CdmMigrator
|
|
112
144
|
final_work_data = create_data work_data, work_form, work
|
113
145
|
work.apply_depositor_metadata(current_user)
|
114
146
|
work.attributes = final_work_data
|
147
|
+
work.member_of_collections = [@collection] if @collection
|
148
|
+
work.admin_set = @admin_set if @admin_set
|
115
149
|
work.save
|
116
150
|
create_files(work, index)
|
117
151
|
index+=1
|
data/app/jobs/csv_upload_job.rb
CHANGED
@@ -2,10 +2,12 @@ class CsvUploadJob < ActiveJob::Base
|
|
2
2
|
queue_as Hyrax.config.ingest_queue_name
|
3
3
|
|
4
4
|
|
5
|
-
def perform(csv, mvs, current_user)
|
5
|
+
def perform(csv, mvs, collection, admin_set, current_user)
|
6
6
|
@current_user = current_user
|
7
7
|
@csv = CSV.parse(File.read(csv), headers: true, encoding: 'utf-8').map(&:to_hash)
|
8
8
|
@mvs = mvs
|
9
|
+
@collection = Collection.find(collection) rescue nil
|
10
|
+
@admin_set = AdminSet.find(admin_set) rescue nil
|
9
11
|
@works = []
|
10
12
|
@files = {}
|
11
13
|
@csv.each do |row|
|
@@ -15,6 +17,7 @@ class CsvUploadJob < ActiveJob::Base
|
|
15
17
|
elsif(type.include? "Work")
|
16
18
|
@works << row
|
17
19
|
@files[@works.length] = []
|
20
|
+
@worktype = type.dup
|
18
21
|
elsif(type.include? "File")
|
19
22
|
row.delete("object_type")
|
20
23
|
@files[@works.length] << row
|
@@ -26,7 +29,7 @@ class CsvUploadJob < ActiveJob::Base
|
|
26
29
|
private
|
27
30
|
|
28
31
|
def work_form
|
29
|
-
Module.const_get("Hyrax::#{
|
32
|
+
Module.const_get("Hyrax::#{@worktype}Form") rescue nil || Module.const_get("Hyrax::Forms::WorkForm")
|
30
33
|
end
|
31
34
|
|
32
35
|
def file_form
|
@@ -88,6 +91,8 @@ class CsvUploadJob < ActiveJob::Base
|
|
88
91
|
final_work_data = create_data work_data, work_form, work
|
89
92
|
work.apply_depositor_metadata(@current_user)
|
90
93
|
work.attributes = final_work_data
|
94
|
+
work.member_of_collections = [@collection] if @collection
|
95
|
+
work.admin_set = @admin_set if @admin_set
|
91
96
|
work.save
|
92
97
|
create_files(work, index)
|
93
98
|
index+=1
|
@@ -1,3 +1,6 @@
|
|
1
|
+
<h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
|
2
|
+
|
3
|
+
<h5>ContentDM API address: <%= @cdm_url %></h5>
|
1
4
|
<%= form_tag cdm_mappings_path, method: "post", multipart: true do %>
|
2
5
|
<table>
|
3
6
|
<tr><td>Collection: </td><td><%= select_tag 'collection', options_for_select(@collections) %></td></tr>
|
@@ -10,6 +10,8 @@ border:1px solid black;
|
|
10
10
|
}
|
11
11
|
</style>
|
12
12
|
|
13
|
+
<h1><span class="fa fa-map"></span> <%= default_page_title %></h1>
|
14
|
+
|
13
15
|
<%= form_tag cdm_generate_path.gsub("generate","generate.csv") do %>
|
14
16
|
<%= hidden_field_tag "collection", params[:collection] %>
|
15
17
|
<%= hidden_field_tag "file_system", params[:file_system] %>
|
@@ -1,8 +1,16 @@
|
|
1
|
+
<h1><span class="fa fa-angle-double-up"></span> <%= default_page_title %></h1>
|
2
|
+
|
1
3
|
<%= form_for :csv_import, url: csv_create_path do |f| %>
|
2
4
|
<%= f.label 'Multi-value Separator:' %>
|
3
5
|
<%= f.text_field 'mvs' %>
|
4
6
|
<br />
|
5
7
|
<%= f.file_field 'csv_file' %>
|
8
|
+
<br />
|
9
|
+
<%= f.label 'Admin Set:' %>
|
10
|
+
<%= select_tag "admin_set", options_for_select(@admin_sets), :include_blank => true %>
|
11
|
+
<br />
|
12
|
+
<%= f.label 'Collection:' %>
|
13
|
+
<%= select_tag "collection", options_for_select(@collections), :include_blank => true %>
|
6
14
|
<br />
|
7
15
|
<%= f.submit 'Save' %>
|
8
16
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
2
|
-
get '/
|
3
|
-
post '/
|
4
|
-
get '/
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
get '/cdm_migrator/upload', to: 'cdm_migrator/csv#upload', as: 'csv_upload'
|
3
|
+
post '/cdm_migrator/upload', to: 'cdm_migrator/csv#create', as: 'csv_create'
|
4
|
+
get '/cdm_migrator/generate', to: 'cdm_migrator/csv#generate', as: 'csv_generate'
|
5
5
|
|
6
|
-
get '
|
7
|
-
post '
|
8
|
-
post '
|
9
|
-
post '
|
6
|
+
get '/cdm_migrator/collection', to: 'cdm_migrator/cdm#collection', as: 'cdm_start'
|
7
|
+
post '/cdm_migrator/mappings/', to: 'cdm_migrator/cdm#mappings', as: 'cdm_mappings'
|
8
|
+
post '/cdm_migrator/generate/', to: 'cdm_migrator/cdm#generate', as: 'cdm_generate'
|
9
|
+
post '/cdm_migrator/template', to: 'cdm_migrator/cdm#template', as: 'cdm_template'
|
10
10
|
end
|
data/lib/cdm_migrator/engine.rb
CHANGED
data/lib/cdm_migrator/version.rb
CHANGED
@@ -1,13 +1,56 @@
|
|
1
1
|
class CdmMigrator::InstallGenerator < Rails::Generators::Base
|
2
2
|
source_root File.expand_path('../templates', __FILE__)
|
3
|
-
|
4
|
-
def
|
5
|
-
|
6
|
-
|
3
|
+
|
4
|
+
def inject_dashboard_link
|
5
|
+
file_path = "app/views/hyrax/dashboard/sidebar/_tasks.html.erb"
|
6
|
+
if File.file?(file_path)
|
7
|
+
gsub_file file_path,/[ \t]*(<% if can\? :review, :submissions %>)\n[ \t]*(<li class="h5"><%= t\('hyrax\.admin\.sidebar\.tasks'\) %><\/li>)\n/ do |match|
|
8
|
+
match.split("\n")[1].to_s+
|
9
|
+
"\n <li>\n" \
|
10
|
+
" <%= menu.collapsable_section t('CDM Migrator'),\n" \
|
11
|
+
" icon_class: \"fa fa-map-signs\",\n" \
|
12
|
+
" id: 'collapseCdmMigrator',\n" \
|
13
|
+
" open: menu.cdm_migrator_section? do %>\n" \
|
14
|
+
" <%= menu.nav_link(main_app.csv_upload_path) do %>\n"\
|
15
|
+
" <span class=\"fa fa-angle-double-up\"></span> <span class=\"sidebar-action-text\"><%= t('CSV Batch Uploader') %></span>\n" \
|
16
|
+
" <% end %>\n" \
|
17
|
+
" <%= menu.nav_link(main_app.cdm_start_path) do %>\n" \
|
18
|
+
" <span class=\"fa fa-map\"></span> <span class=\"sidebar-action-text\"><%= t('CDM Mapping Tool') %></span>\n" \
|
19
|
+
" <% end %>\n" \
|
20
|
+
" <% end %>\n" \
|
21
|
+
" </li>\n" + match.split("\n")[0].to_s + "\n"
|
22
|
+
end
|
23
|
+
else
|
24
|
+
copy_file "sidebar/_tasks.html.erb", "app/views/hyrax/dashboard/sidebar/_tasks.html.erb"
|
7
25
|
end
|
8
26
|
end
|
27
|
+
|
28
|
+
def inject_menu_presenter
|
29
|
+
hyku_file_path = "app/presenters/hyku/menu_presenter.rb"
|
30
|
+
hyrax_file_path = "app/presenters/hyrax/menu_presenter.rb"
|
31
|
+
if File.file?(hyku_file_path)
|
32
|
+
insert_into_file hyku_file_path, :after => /def settings_section\?\n.*\(controller_name\)\n[ \t]*end/ do
|
33
|
+
"\n\n" \
|
34
|
+
" def cdm_migrator_section?\n" \
|
35
|
+
" %w[cdm csv].include?(controller_name)\n" \
|
36
|
+
" end\n"
|
37
|
+
end
|
38
|
+
elsif File.file?(hyrax_file_path)
|
39
|
+
insert_into_file hyrax_file_path, :after => /def settings_section\?\n.*\(controller_name\)\n[ \t]*end/ do
|
40
|
+
"\n\n" \
|
41
|
+
" def cdm_migrator_section?\n" \
|
42
|
+
" %w[cdm csv].include?(controller_name)\n" \
|
43
|
+
" end\n"
|
44
|
+
end
|
45
|
+
elsif Hyku
|
46
|
+
copy_file "presenters/hyku/menu_presenter.rb", "app/presenters/hyku/menu_presenter.rb"
|
47
|
+
elsif Hyrax
|
48
|
+
copy_file "presenters/hyrax/menu_presenter.rb", "app/presenters/hyrax/menu_presenter.rb"
|
49
|
+
end
|
50
|
+
end
|
9
51
|
|
10
52
|
def inject_content_dm_yml
|
11
53
|
copy_file "config/cdm_migrator.yml", "config/cdm_migrator.yml"
|
12
54
|
end
|
55
|
+
|
13
56
|
end
|
@@ -1,9 +1,25 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
cdm_api:
|
2
|
+
tenant1.institution.com:
|
3
|
+
url: 'http://your-content-dm-host'
|
4
|
+
port: 8080
|
5
|
+
type: 'front'
|
6
|
+
dirs:
|
7
|
+
dir1: '/dir1/path/goes/here'
|
8
|
+
dir2: '/dir2/path/goes/here'
|
9
|
+
tenant2.institution.com:
|
10
|
+
url: 'http://your-content-dm-host'
|
11
|
+
port: 8080
|
12
|
+
type: 'front'
|
13
|
+
dirs:
|
14
|
+
dir1: '/dir1/path/goes/here'
|
15
|
+
dir2: '/dir2/path/goes/here'
|
16
|
+
default:
|
17
|
+
url: 'http://your-content-dm-host'
|
18
|
+
port: 8080
|
19
|
+
type: 'front'
|
20
|
+
dirs:
|
21
|
+
dir1: '/dir1/path/goes/here'
|
22
|
+
dir2: '/dir2/path/goes/here'
|
7
23
|
default_fields:
|
8
24
|
- title
|
9
25
|
- creator
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Hyku
|
2
|
+
# view-model for the admin menu
|
3
|
+
class MenuPresenter < Hyrax::MenuPresenter
|
4
|
+
# Returns true if the current controller happens to be one of the controllers that deals
|
5
|
+
# with settings. This is used to keep the parent section on the sidebar open.
|
6
|
+
def settings_section?
|
7
|
+
%w[appearances content_blocks labels features pages].include?(controller_name)
|
8
|
+
end
|
9
|
+
|
10
|
+
def cdm_migrator_section?
|
11
|
+
%w[cdm csv].include?(controller_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns true if the current controller happens to be one of the controllers that deals
|
15
|
+
# with roles and permissions. This is used to keep the parent section on the sidebar open.
|
16
|
+
def roles_and_permissions_section?
|
17
|
+
# we're using a case here because we need to differentiate UsersControllers
|
18
|
+
# in different namespaces (Hyrax & Admin)
|
19
|
+
case controller
|
20
|
+
when Hyrax::Admin::UsersController, ::Admin::GroupsController
|
21
|
+
true
|
22
|
+
else
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns true if the current controller happens to be one of the controllers that deals
|
28
|
+
# with repository activity This is used to keep the parent section on the sidebar open.
|
29
|
+
def repository_activity_section?
|
30
|
+
%w[admin dashboard status].include?(controller_name)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns true if we ought to show the user the 'Configuration' section
|
34
|
+
# of the menu
|
35
|
+
def show_configuration?
|
36
|
+
super ||
|
37
|
+
can?(:manage, Site) ||
|
38
|
+
can?(:manage, User) ||
|
39
|
+
can?(:manage, Hyku::Group)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns true if we ought to show the user Admin-only areas of the menu
|
43
|
+
def show_admin_menu_items?
|
44
|
+
can?(:read, :admin_dashboard)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Hyrax
|
2
|
+
# view-model for the admin menu
|
3
|
+
class MenuPresenter
|
4
|
+
def initialize(view_context)
|
5
|
+
@view_context = view_context
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :view_context
|
9
|
+
|
10
|
+
delegate :controller, :controller_name, :action_name, :content_tag,
|
11
|
+
:current_page?, :link_to, :can?, to: :view_context
|
12
|
+
|
13
|
+
# Returns true if the current controller happens to be one of the controllers that deals
|
14
|
+
# with settings. This is used to keep the parent section on the sidebar open.
|
15
|
+
def settings_section?
|
16
|
+
%w[appearances content_blocks features pages collection_types].include?(controller_name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def cdm_migrator_section?
|
20
|
+
%w[cdm csv].include?(controller_name)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param options [Hash, String] a hash or string representing the path. Hash is prefered as it
|
24
|
+
# allows us to workaround https://github.com/rails/rails/issues/28253
|
25
|
+
# @param also_active_for [Hash, String] a hash or string with alternative paths that should be 'active'
|
26
|
+
def nav_link(options, also_active_for: nil, **link_html_options)
|
27
|
+
active_urls = [options, also_active_for].compact
|
28
|
+
list_options = active_urls.any? { |url| current_page?(url) } ? { class: 'active' } : {}
|
29
|
+
content_tag(:li, list_options) do
|
30
|
+
link_to(options, link_html_options) do
|
31
|
+
yield
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Boolean] true if the current controller happens to be one of the controllers that deals
|
37
|
+
# with user activity This is used to keep the parent section on the sidebar open.
|
38
|
+
def user_activity_section?
|
39
|
+
# we're using a case here because we need to differentiate UsersControllers
|
40
|
+
# in different namespaces (Hyrax & Admin)
|
41
|
+
case controller
|
42
|
+
when Hyrax::UsersController, Hyrax::NotificationsController, Hyrax::TransfersController, Hyrax::DepositorsController
|
43
|
+
true
|
44
|
+
else
|
45
|
+
false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Draw a collaspable menu section. The passed block should contain <li> items.
|
50
|
+
def collapsable_section(text, id:, icon_class:, open:, &block)
|
51
|
+
CollapsableSectionPresenter.new(view_context: view_context,
|
52
|
+
text: text,
|
53
|
+
id: id,
|
54
|
+
icon_class: icon_class,
|
55
|
+
open: open).render(&block)
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Boolean] will the configuration section be displayed to the user
|
59
|
+
def show_configuration?
|
60
|
+
can?(:update, :appearance) ||
|
61
|
+
can?(:manage, :collection_types) ||
|
62
|
+
can?(:manage, Sipity::WorkflowResponsibility) ||
|
63
|
+
can?(:manage, Hyrax::Feature)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<li class="h5"><%= t('hyrax.admin.sidebar.tasks') %></li>
|
2
|
+
<li>
|
3
|
+
<%= menu.collapsable_section t('CDM Migrator'),
|
4
|
+
icon_class: "fa fa-map-signs",
|
5
|
+
id: 'collapseCdmMigrator',
|
6
|
+
open: menu.cdm_migrator_section? do %>
|
7
|
+
<%= menu.nav_link(main_app.csv_upload_path) do %>
|
8
|
+
<span class="fa fa-angle-double-up"></span> <span class="sidebar-action-text"><%= t('CSV Batch Uploader') %></span>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%= menu.nav_link(main_app.cdm_start_path) do %>
|
12
|
+
<span class="fa fa-map"></span> <span class="sidebar-action-text"><%= t('CDM Mapping Tool') %></span>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
15
|
+
</li>
|
16
|
+
|
17
|
+
<% if can? :review, :submissions %>
|
18
|
+
<%= menu.nav_link(hyrax.admin_workflows_path) do %>
|
19
|
+
<span class="fa fa-flag" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.workflow_review') %></span>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<% if can? :manage, User %>
|
24
|
+
<%= menu.nav_link(hyrax.admin_users_path) do %>
|
25
|
+
<span class="fa fa-user" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.users') %></span>
|
26
|
+
<% end %>
|
27
|
+
<% end %>
|
28
|
+
|
29
|
+
<% if can? :manage, Hyku::Group %>
|
30
|
+
<%= menu.nav_link(main_app.admin_groups_path) do %>
|
31
|
+
<span class="fa fa-users"></span> <span class="sidebar-action-text"><%= t('hyrax.admin.sidebar.manage_groups') %></span>
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% if can? :read, :admin_dashboard %>
|
36
|
+
<%= menu.nav_link(hyrax.embargoes_path) do %>
|
37
|
+
<span class="fa fa-flag" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.embargoes.index.manage_embargoes') %></span>
|
38
|
+
<% end %>
|
39
|
+
|
40
|
+
<%= menu.nav_link(hyrax.leases_path) do %>
|
41
|
+
<span class="fa fa-flag" aria-hidden="true"></span> <span class="sidebar-action-text"><%= t('hyrax.leases.index.manage_leases') %></span>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cdm_migrator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sephirothkod
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -99,6 +99,9 @@ files:
|
|
99
99
|
- lib/cdm_migrator/version.rb
|
100
100
|
- lib/generators/cdm_migrator/install/install_generator.rb
|
101
101
|
- lib/generators/cdm_migrator/install/templates/config/cdm_migrator.yml
|
102
|
+
- lib/generators/cdm_migrator/install/templates/presenters/hyku/menu_presenter.rb
|
103
|
+
- lib/generators/cdm_migrator/install/templates/presenters/hyrax/menu_presenter.rb
|
104
|
+
- lib/generators/cdm_migrator/install/templates/sidebar/_tasks.html.erb
|
102
105
|
- lib/tasks/cdm_migrator_tasks.rake
|
103
106
|
homepage: https://github.com/UVicLibrary/cdm_migrator
|
104
107
|
licenses:
|
@@ -120,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
123
|
version: '0'
|
121
124
|
requirements: []
|
122
125
|
rubyforge_project:
|
123
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.7.7
|
124
127
|
signing_key:
|
125
128
|
specification_version: 4
|
126
129
|
summary: ContentDM to Hyrax migrator.
|