hydra-head 4.0.0.rc2 → 4.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/Gemfile +8 -1
  2. data/Gemfile.lock +46 -46
  3. data/HISTORY.textile +2 -0
  4. data/app/controllers/hydra/application_controller.rb +5 -0
  5. data/app/controllers/hydra/contributors_controller.rb +2 -1
  6. data/app/controllers/hydra/permissions_controller.rb +2 -2
  7. data/app/helpers/hydra/hydra_assets_helper_behavior.rb +4 -3
  8. data/app/models/ability.rb +97 -0
  9. data/app/models/common_metadata_asset.rb +2 -2
  10. data/app/models/generic_content.rb +2 -4
  11. data/app/models/generic_image.rb +3 -3
  12. data/app/models/hydra/datastream/common_mods_index_methods.rb +45 -0
  13. data/app/models/hydra/datastream/mods_article.rb +528 -0
  14. data/app/models/hydra/datastream/mods_dataset.rb +166 -0
  15. data/app/models/hydra/datastream/mods_generic_content.rb +496 -0
  16. data/app/models/hydra/datastream/mods_image.rb +496 -0
  17. data/app/models/hydra/datastream/rights_metadata.rb +190 -0
  18. data/app/models/mods_asset.rb +4 -4
  19. data/app/models/uses_default_partials.rb +2 -2
  20. data/app/views/catalog/_edit_partials/_default.html.erb +1 -1
  21. data/app/views/catalog/show.html.erb +1 -1
  22. data/app/views/contributors/_edit_conference.html.erb +1 -1
  23. data/app/views/contributors/_edit_organization.html.erb +1 -1
  24. data/app/views/contributors/_edit_person.html.erb +1 -1
  25. data/app/views/contributors/_show_organization.html.erb +1 -1
  26. data/app/views/hydra/file_assets/_index.html.erb +1 -1
  27. data/app/views/hydra/file_assets/_result.html.erb +1 -1
  28. data/app/views/hydra/permissions/index.html.erb +1 -1
  29. data/app/views/hydra/permissions/new.html.erb +1 -1
  30. data/app/views/mods_assets/_show_permissions.html.erb +1 -1
  31. data/hydra-head.gemspec +4 -6
  32. data/lib/hydra/access_controls_enforcement.rb +10 -6
  33. data/lib/hydra/access_controls_evaluation.rb +7 -71
  34. data/lib/hydra/assets.rb +1 -4
  35. data/lib/hydra/common_mods_index_methods.rb +5 -0
  36. data/lib/hydra/controller.rb +4 -7
  37. data/lib/hydra/file_assets.rb +3 -8
  38. data/lib/hydra/model_methods.rb +3 -2
  39. data/lib/hydra/model_mixins/common_metadata.rb +2 -2
  40. data/lib/hydra/model_mixins/mods_object.rb +3 -3
  41. data/lib/hydra/models/file_asset.rb +3 -3
  42. data/lib/hydra/mods_article.rb +7 -1
  43. data/lib/hydra/mods_dataset.rb +8 -0
  44. data/lib/hydra/mods_generic_content.rb +5 -0
  45. data/lib/hydra/mods_image.rb +5 -0
  46. data/lib/hydra/repository_controller.rb +14 -15
  47. data/lib/hydra/rights_metadata.rb +5 -1
  48. data/lib/hydra/submission_workflow.rb +1 -1
  49. data/lib/hydra-head/version.rb +1 -1
  50. data/lib/hydra.rb +1 -0
  51. data/lib/mediashelf/active_fedora_helper.rb +71 -0
  52. data/lib/uva/mods_index_methods.rb +5 -0
  53. data/test_support/etc/Gemfile +3 -2
  54. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +5 -7
  55. data/test_support/spec/controllers/file_assets_controller_spec.rb +3 -14
  56. data/test_support/spec/controllers/hydra-assets_controller_spec.rb +2 -2
  57. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +14 -0
  58. data/test_support/spec/helpers/access_controls_evaluation_spec.rb +7 -16
  59. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +0 -14
  60. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +11 -11
  61. data/test_support/spec/helpers/hydra_model_methods_spec.rb +2 -2
  62. data/test_support/spec/integration/file_asset_spec.rb +0 -1
  63. data/test_support/spec/lib/common_mods_index_methods_spec.rb +1 -1
  64. data/test_support/spec/lib/hydra_submission_workflow_spec.rb +1 -1
  65. data/test_support/spec/models/ability_spec.rb +16 -0
  66. data/test_support/spec/models/file_asset_spec.rb +0 -1
  67. data/test_support/spec/models/hydra_rights_metadata_spec.rb +4 -5
  68. data/test_support/spec/models/mods_asset_spec.rb +2 -11
  69. data/vendor/cache/{active-fedora-4.0.0.rc13.gem → active-fedora-4.0.0.rc18.gem} +0 -0
  70. data/vendor/cache/blacklight-3.3.1.gem +0 -0
  71. data/vendor/cache/cancan-1.6.7.gem +0 -0
  72. data/vendor/cache/compass-0.12.1.gem +0 -0
  73. data/vendor/cache/compass-rails-1.0.1.gem +0 -0
  74. data/vendor/cache/compass-susy-plugin-0.9.gem +0 -0
  75. data/vendor/cache/factory_girl-2.6.4.gem +0 -0
  76. data/vendor/cache/gherkin-2.9.1.gem +0 -0
  77. data/vendor/cache/mail-2.4.4.gem +0 -0
  78. data/vendor/cache/nokogiri-1.5.2.gem +0 -0
  79. data/vendor/cache/om-1.6.0.rc3.gem +0 -0
  80. data/vendor/cache/orm_adapter-0.0.7.gem +0 -0
  81. data/vendor/cache/rack-cache-1.2.gem +0 -0
  82. data/vendor/cache/rspec-2.9.0.gem +0 -0
  83. data/vendor/cache/rspec-core-2.9.0.gem +0 -0
  84. data/vendor/cache/rspec-expectations-2.9.0.gem +0 -0
  85. data/vendor/cache/rspec-mocks-2.9.0.gem +0 -0
  86. data/vendor/cache/rspec-rails-2.9.0.gem +0 -0
  87. data/vendor/cache/sass-rails-3.2.5.gem +0 -0
  88. data/vendor/cache/stomp-1.2.2.gem +0 -0
  89. metadata +71 -59
  90. data/lib/hydra/image.rb +0 -178
  91. data/uninstall.rb +0 -1
  92. data/vendor/cache/compass-0.12.rc.1.gem +0 -0
  93. data/vendor/cache/factory_girl-2.6.1.gem +0 -0
  94. data/vendor/cache/gherkin-2.9.0.gem +0 -0
  95. data/vendor/cache/mail-2.4.3.gem +0 -0
  96. data/vendor/cache/nokogiri-1.5.0.gem +0 -0
  97. data/vendor/cache/om-1.5.3.gem +0 -0
  98. data/vendor/cache/orm_adapter-0.0.6.gem +0 -0
  99. data/vendor/cache/rack-cache-1.1.gem +0 -0
  100. data/vendor/cache/rspec-2.6.0.gem +0 -0
  101. data/vendor/cache/rspec-core-2.6.4.gem +0 -0
  102. data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
  103. data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
  104. data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
  105. data/vendor/cache/sass-rails-3.2.4.gem +0 -0
  106. data/vendor/cache/stomp-1.2.1.gem +0 -0
@@ -0,0 +1,528 @@
1
+ module Hydra
2
+ module Datastream
3
+ class ModsArticle < ActiveFedora::NokogiriDatastream
4
+ include Hydra::Datastream::CommonModsIndexMethods
5
+
6
+ set_terminology do |t|
7
+ t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
8
+
9
+
10
+ t.title_info(:path=>"titleInfo") {
11
+ t.main_title(:index_as=>[:facetable],:path=>"title", :label=>"title")
12
+ t.language(:index_as=>[:facetable],:path=>{:attribute=>"lang"})
13
+ }
14
+ t.language{
15
+ t.lang_code(:index_as=>[:facetable], :path=>"languageTerm", :attributes=>{:type=>"code"})
16
+ }
17
+ t.abstract
18
+ t.subject {
19
+ t.topic(:index_as=>[:facetable])
20
+ }
21
+ t.topic_tag(:proxy=>[:subject, :topic])
22
+ # t.topic_tag(:index_as=>[:facetable],:path=>"subject", :default_content_path=>"topic")
23
+ # This is a mods:name. The underscore is purely to avoid namespace conflicts.
24
+ t.name_ {
25
+ # this is a namepart
26
+ t.namePart(:type=>:string, :label=>"generic name")
27
+ # affiliations are great
28
+ t.affiliation
29
+ t.institution(:path=>"affiliation", :index_as=>[:facetable], :label=>"organization")
30
+ t.displayForm
31
+ t.role(:ref=>[:role])
32
+ t.description(:index_as=>[:facetable])
33
+ t.date(:path=>"namePart", :attributes=>{:type=>"date"})
34
+ t.last_name(:path=>"namePart", :attributes=>{:type=>"family"})
35
+ t.first_name(:path=>"namePart", :attributes=>{:type=>"given"}, :label=>"first name")
36
+ t.terms_of_address(:path=>"namePart", :attributes=>{:type=>"termsOfAddress"})
37
+ t.computing_id
38
+ }
39
+ # lookup :person, :first_name
40
+ t.person(:ref=>:name, :attributes=>{:type=>"personal"}, :index_as=>[:facetable])
41
+ t.department(:proxy=>[:person,:description],:index_as=>[:facetable])
42
+ t.organization(:ref=>:name, :attributes=>{:type=>"corporate"}, :index_as=>[:facetable])
43
+ t.conference(:ref=>:name, :attributes=>{:type=>"conference"}, :index_as=>[:facetable])
44
+ t.role {
45
+ t.text(:path=>"roleTerm",:attributes=>{:type=>"text"})
46
+ t.code(:path=>"roleTerm",:attributes=>{:type=>"code"})
47
+ }
48
+ t.journal(:path=>'relatedItem', :attributes=>{:type=>"host"}) {
49
+ t.title_info(:index_as=>[:facetable],:ref=>[:title_info])
50
+ t.origin_info(:path=>"originInfo") {
51
+ t.publisher
52
+ t.date_issued(:path=>"dateIssued")
53
+ t.issuance(:index_as=>[:facetable])
54
+ }
55
+ t.issn(:path=>"identifier", :attributes=>{:type=>"issn"})
56
+ t.issue(:path=>"part") {
57
+ t.volume(:path=>"detail", :attributes=>{:type=>"volume"}, :default_content_path=>"number")
58
+ t.level(:path=>"detail", :attributes=>{:type=>"number"}, :default_content_path=>"number")
59
+ t.extent
60
+ t.pages(:path=>"extent", :attributes=>{:unit=>"pages"}) {
61
+ t.start
62
+ t.end
63
+ }
64
+ t.start_page(:proxy=>[:pages, :start])
65
+ t.end_page(:proxy=>[:pages, :end])
66
+ t.publication_date(:path=>"date")
67
+ }
68
+ }
69
+ t.note
70
+ t.location(:path=>"location") {
71
+ t.url(:path=>"url")
72
+ }
73
+ t.publication_url(:proxy=>[:location,:url])
74
+ t.peer_reviewed(:proxy=>[:journal,:origin_info,:issuance], :index_as=>[:facetable])
75
+ t.title(:proxy=>[:mods,:title_info, :main_title])
76
+ end
77
+
78
+ # Generates an empty Mods Article (used when you call ModsArticle.new without passing in existing xml)
79
+ def self.xml_template
80
+ builder = Nokogiri::XML::Builder.new do |xml|
81
+ xml.mods(:version=>"3.3", "xmlns:xlink"=>"http://www.w3.org/1999/xlink",
82
+ "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
83
+ "xmlns"=>"http://www.loc.gov/mods/v3",
84
+ "xsi:schemaLocation"=>"http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-3.xsd") {
85
+ xml.titleInfo(:lang=>"") {
86
+ xml.title
87
+ }
88
+ xml.name(:type=>"personal") {
89
+ xml.namePart(:type=>"given")
90
+ xml.namePart(:type=>"family")
91
+ xml.affiliation
92
+ xml.computing_id
93
+ xml.description
94
+ xml.role {
95
+ xml.roleTerm("Author", :authority=>"marcrelator", :type=>"text")
96
+ }
97
+ }
98
+ xml.typeOfResource
99
+ xml.genre(:authority=>"marcgt")
100
+ xml.language {
101
+ xml.languageTerm(:authority=>"iso639-2b", :type=>"code")
102
+ }
103
+ xml.abstract
104
+ xml.subject {
105
+ xml.topic
106
+ }
107
+ xml.relatedItem(:type=>"host") {
108
+ xml.titleInfo {
109
+ xml.title
110
+ }
111
+ xml.identifier(:type=>"issn")
112
+ xml.originInfo {
113
+ xml.publisher
114
+ xml.dateIssued
115
+ xml.issuance
116
+ }
117
+ xml.part {
118
+ xml.detail(:type=>"volume") {
119
+ xml.number
120
+ }
121
+ xml.detail(:type=>"number") {
122
+ xml.number
123
+ }
124
+ xml.extent(:unit=>"pages") {
125
+ xml.start
126
+ xml.end
127
+ }
128
+ xml.date
129
+ }
130
+ }
131
+ xml.location {
132
+ xml.url
133
+ }
134
+ }
135
+ end
136
+ return builder.doc
137
+ end
138
+
139
+ # Generates a new Person node
140
+ def self.person_template
141
+ builder = Nokogiri::XML::Builder.new do |xml|
142
+ xml.name(:type=>"personal") {
143
+ xml.namePart(:type=>"family")
144
+ xml.namePart(:type=>"given")
145
+ xml.affiliation
146
+ xml.computing_id
147
+ xml.description
148
+ xml.role {
149
+ xml.roleTerm("Author", :type=>"text")
150
+ }
151
+ }
152
+ end
153
+ return builder.doc.root
154
+ end
155
+
156
+ def self.full_name_template
157
+ builder = Nokogiri::XML::Builder.new do |xml|
158
+ xml.full_name(:type => "personal")
159
+ end
160
+ return builder.doc.root
161
+ end
162
+
163
+ # Generates a new Organization node
164
+ # Uses mods:name[@type="corporate"]
165
+ def self.organization_template
166
+ builder = Nokogiri::XML::Builder.new do |xml|
167
+ xml.name(:type=>"corporate") {
168
+ xml.namePart
169
+ xml.role {
170
+ xml.roleTerm(:authority=>"marcrelator", :type=>"text")
171
+ }
172
+ }
173
+ end
174
+ return builder.doc.root
175
+ end
176
+
177
+ # Generates a new Conference node
178
+ def self.conference_template
179
+ builder = Nokogiri::XML::Builder.new do |xml|
180
+ xml.name(:type=>"conference") {
181
+ xml.namePart
182
+ xml.role {
183
+ xml.roleTerm(:authority=>"marcrelator", :type=>"text")
184
+ }
185
+ }
186
+ end
187
+ return builder.doc.root
188
+ end
189
+
190
+ # Inserts a new contributor (mods:name) into the mods document
191
+ # creates contributors of type :person, :organization, or :conference
192
+ def insert_contributor(type, opts={})
193
+ case type.to_sym
194
+ when :person
195
+ node = Hydra::Datastream::ModsArticle.person_template
196
+ nodeset = self.find_by_terms(:person)
197
+ when :organization
198
+ node = Hydra::Datastream::ModsArticle.organization_template
199
+ nodeset = self.find_by_terms(:organization)
200
+ when :conference
201
+ node = Hydra::Datastream::ModsArticle.conference_template
202
+ nodeset = self.find_by_terms(:conference)
203
+ else
204
+ ActiveFedora.logger.warn("#{type} is not a valid argument for Hydra::ModsArticle.insert_contributor")
205
+ node = nil
206
+ index = nil
207
+ end
208
+
209
+ unless nodeset.nil?
210
+ if nodeset.empty?
211
+ self.ng_xml.root.add_child(node)
212
+ index = 0
213
+ else
214
+ nodeset.after(node)
215
+ index = nodeset.length
216
+ end
217
+ self.dirty = true
218
+ end
219
+
220
+ return node, index
221
+ end
222
+
223
+ # Remove the contributor entry identified by @contributor_type and @index
224
+ def remove_contributor(contributor_type, index)
225
+ contributor = self.find_by_terms( {contributor_type.to_sym => index.to_i} ).first
226
+ unless contributor.nil?
227
+ contributor.remove
228
+ self.dirty = true
229
+ end
230
+ end
231
+
232
+ def self.common_relator_terms
233
+ {"aut" => "Author",
234
+ "clb" => "Collaborator",
235
+ "com" => "Compiler",
236
+ "ctb" => "Contributor",
237
+ "cre" => "Creator",
238
+ "edt" => "Editor",
239
+ "ill" => "Illustrator",
240
+ "oth" => "Other",
241
+ "trl" => "Translator",
242
+ }
243
+ end
244
+
245
+ def self.person_relator_terms
246
+ {"aut" => "Author",
247
+ "clb" => "Collaborator",
248
+ "com" => "Compiler",
249
+ "cre" => "Creator",
250
+ "ctb" => "Contributor",
251
+ "edt" => "Editor",
252
+ "ill" => "Illustrator",
253
+ "res" => "Researcher",
254
+ "rth" => "Research team head",
255
+ "rtm" => "Research team member",
256
+ "trl" => "Translator"
257
+ }
258
+ end
259
+
260
+ def self.conference_relator_terms
261
+ {
262
+ "hst" => "Host"
263
+ }
264
+ end
265
+
266
+ def self.organization_relator_terms
267
+ {
268
+ "fnd" => "Funder",
269
+ "hst" => "Host"
270
+ }
271
+ end
272
+
273
+ def self.dc_relator_terms
274
+ {"acp" => "Art copyist",
275
+ "act" => "Actor",
276
+ "adp" => "Adapter",
277
+ "aft" => "Author of afterword, colophon, etc.",
278
+ "anl" => "Analyst",
279
+ "anm" => "Animator",
280
+ "ann" => "Annotator",
281
+ "ant" => "Bibliographic antecedent",
282
+ "app" => "Applicant",
283
+ "aqt" => "Author in quotations or text abstracts",
284
+ "arc" => "Architect",
285
+ "ard" => "Artistic director ",
286
+ "arr" => "Arranger",
287
+ "art" => "Artist",
288
+ "asg" => "Assignee",
289
+ "asn" => "Associated name",
290
+ "att" => "Attributed name",
291
+ "auc" => "Auctioneer",
292
+ "aud" => "Author of dialog",
293
+ "aui" => "Author of introduction",
294
+ "aus" => "Author of screenplay",
295
+ "aut" => "Author",
296
+ "bdd" => "Binding designer",
297
+ "bjd" => "Bookjacket designer",
298
+ "bkd" => "Book designer",
299
+ "bkp" => "Book producer",
300
+ "bnd" => "Binder",
301
+ "bpd" => "Bookplate designer",
302
+ "bsl" => "Bookseller",
303
+ "ccp" => "Conceptor",
304
+ "chr" => "Choreographer",
305
+ "clb" => "Collaborator",
306
+ "cli" => "Client",
307
+ "cll" => "Calligrapher",
308
+ "clt" => "Collotyper",
309
+ "cmm" => "Commentator",
310
+ "cmp" => "Composer",
311
+ "cmt" => "Compositor",
312
+ "cng" => "Cinematographer",
313
+ "cnd" => "Conductor",
314
+ "cns" => "Censor",
315
+ "coe" => "Contestant -appellee",
316
+ "col" => "Collector",
317
+ "com" => "Compiler",
318
+ "cos" => "Contestant",
319
+ "cot" => "Contestant -appellant",
320
+ "cov" => "Cover designer",
321
+ "cpc" => "Copyright claimant",
322
+ "cpe" => "Complainant-appellee",
323
+ "cph" => "Copyright holder",
324
+ "cpl" => "Complainant",
325
+ "cpt" => "Complainant-appellant",
326
+ "cre" => "Creator",
327
+ "crp" => "Correspondent",
328
+ "crr" => "Corrector",
329
+ "csl" => "Consultant",
330
+ "csp" => "Consultant to a project",
331
+ "cst" => "Costume designer",
332
+ "ctb" => "Contributor",
333
+ "cte" => "Contestee-appellee",
334
+ "ctg" => "Cartographer",
335
+ "ctr" => "Contractor",
336
+ "cts" => "Contestee",
337
+ "ctt" => "Contestee-appellant",
338
+ "cur" => "Curator",
339
+ "cwt" => "Commentator for written text",
340
+ "dfd" => "Defendant",
341
+ "dfe" => "Defendant-appellee",
342
+ "dft" => "Defendant-appellant",
343
+ "dgg" => "Degree grantor",
344
+ "dis" => "Dissertant",
345
+ "dln" => "Delineator",
346
+ "dnc" => "Dancer",
347
+ "dnr" => "Donor",
348
+ "dpc" => "Depicted",
349
+ "dpt" => "Depositor",
350
+ "drm" => "Draftsman",
351
+ "drt" => "Director",
352
+ "dsr" => "Designer",
353
+ "dst" => "Distributor",
354
+ "dtc" => "Data contributor ",
355
+ "dte" => "Dedicatee",
356
+ "dtm" => "Data manager ",
357
+ "dto" => "Dedicator",
358
+ "dub" => "Dubious author",
359
+ "edt" => "Editor",
360
+ "egr" => "Engraver",
361
+ "elg" => "Electrician ",
362
+ "elt" => "Electrotyper",
363
+ "eng" => "Engineer",
364
+ "etr" => "Etcher",
365
+ "exp" => "Expert",
366
+ "fac" => "Facsimilist",
367
+ "fld" => "Field director ",
368
+ "flm" => "Film editor",
369
+ "fmo" => "Former owner",
370
+ "fpy" => "First party",
371
+ "fnd" => "Funder",
372
+ "frg" => "Forger",
373
+ "gis" => "Geographic information specialist ",
374
+ "grt" => "Graphic technician",
375
+ "hnr" => "Honoree",
376
+ "hst" => "Host",
377
+ "ill" => "Illustrator",
378
+ "ilu" => "Illuminator",
379
+ "ins" => "Inscriber",
380
+ "inv" => "Inventor",
381
+ "itr" => "Instrumentalist",
382
+ "ive" => "Interviewee",
383
+ "ivr" => "Interviewer",
384
+ "lbr" => "Laboratory ",
385
+ "lbt" => "Librettist",
386
+ "ldr" => "Laboratory director ",
387
+ "led" => "Lead",
388
+ "lee" => "Libelee-appellee",
389
+ "lel" => "Libelee",
390
+ "len" => "Lender",
391
+ "let" => "Libelee-appellant",
392
+ "lgd" => "Lighting designer",
393
+ "lie" => "Libelant-appellee",
394
+ "lil" => "Libelant",
395
+ "lit" => "Libelant-appellant",
396
+ "lsa" => "Landscape architect",
397
+ "lse" => "Licensee",
398
+ "lso" => "Licensor",
399
+ "ltg" => "Lithographer",
400
+ "lyr" => "Lyricist",
401
+ "mcp" => "Music copyist",
402
+ "mfr" => "Manufacturer",
403
+ "mdc" => "Metadata contact",
404
+ "mod" => "Moderator",
405
+ "mon" => "Monitor",
406
+ "mrk" => "Markup editor",
407
+ "msd" => "Musical director",
408
+ "mte" => "Metal-engraver",
409
+ "mus" => "Musician",
410
+ "nrt" => "Narrator",
411
+ "opn" => "Opponent",
412
+ "org" => "Originator",
413
+ "orm" => "Organizer of meeting",
414
+ "oth" => "Other",
415
+ "own" => "Owner",
416
+ "pat" => "Patron",
417
+ "pbd" => "Publishing director",
418
+ "pbl" => "Publisher",
419
+ "pdr" => "Project director",
420
+ "pfr" => "Proofreader",
421
+ "pht" => "Photographer",
422
+ "plt" => "Platemaker",
423
+ "pma" => "Permitting agency",
424
+ "pmn" => "Production manager",
425
+ "pop" => "Printer of plates",
426
+ "ppm" => "Papermaker",
427
+ "ppt" => "Puppeteer",
428
+ "prc" => "Process contact",
429
+ "prd" => "Production personnel",
430
+ "prf" => "Performer",
431
+ "prg" => "Programmer",
432
+ "prm" => "Printmaker",
433
+ "pro" => "Producer",
434
+ "prt" => "Printer",
435
+ "pta" => "Patent applicant",
436
+ "pte" => "Plaintiff -appellee",
437
+ "ptf" => "Plaintiff",
438
+ "pth" => "Patent holder",
439
+ "ptt" => "Plaintiff-appellant",
440
+ "rbr" => "Rubricator",
441
+ "rce" => "Recording engineer",
442
+ "rcp" => "Recipient",
443
+ "red" => "Redactor",
444
+ "ren" => "Renderer",
445
+ "res" => "Researcher",
446
+ "rev" => "Reviewer",
447
+ "rps" => "Repository",
448
+ "rpt" => "Reporter",
449
+ "rpy" => "Responsible party",
450
+ "rse" => "Respondent-appellee",
451
+ "rsg" => "Restager",
452
+ "rsp" => "Respondent",
453
+ "rst" => "Respondent-appellant",
454
+ "rth" => "Research team head",
455
+ "rtm" => "Research team member",
456
+ "sad" => "Scientific advisor",
457
+ "sce" => "Scenarist",
458
+ "scl" => "Sculptor",
459
+ "scr" => "Scribe",
460
+ "sds" => "Sound designer",
461
+ "sec" => "Secretary",
462
+ "sgn" => "Signer",
463
+ "sht" => "Supporting host",
464
+ "sng" => "Singer",
465
+ "spk" => "Speaker",
466
+ "spn" => "Sponsor",
467
+ "spy" => "Second party",
468
+ "srv" => "Surveyor",
469
+ "std" => "Set designer",
470
+ "stl" => "Storyteller",
471
+ "stm" => "Stage manager",
472
+ "stn" => "Standards body",
473
+ "str" => "Stereotyper",
474
+ "tcd" => "Technical director",
475
+ "tch" => "Teacher",
476
+ "ths" => "Thesis advisor",
477
+ "trc" => "Transcriber",
478
+ "trl" => "Translator",
479
+ "tyd" => "Type designer",
480
+ "tyg" => "Typographer",
481
+ "vdg" => "Videographer",
482
+ "voc" => "Vocalist",
483
+ "wam" => "Writer of accompanying material",
484
+ "wdc" => "Woodcutter",
485
+ "wde" => "Wood -engraver",
486
+ "wit" => "Witness"}
487
+ end
488
+
489
+ def self.valid_child_types
490
+ ["data", "supporting file", "profile", "lorem ipsum", "dolor"]
491
+ end
492
+
493
+ def to_solr(solr_doc=Hash.new)
494
+ super(solr_doc)
495
+
496
+ extract_person_full_names.each_pair {|n,v| ::Solrizer::Extractor.insert_solr_field_value(solr_doc, n, v) }
497
+ extract_person_organizations.each_pair {|n,v| ::Solrizer::Extractor.insert_solr_field_value(solr_doc, n, v) }
498
+ extract_person_full_names_and_computing_ids.each_pair {|n,v| ::Solrizer::Extractor.insert_solr_field_value(solr_doc, n, v) }
499
+
500
+ ::Solrizer::Extractor.insert_solr_field_value(solr_doc, "object_type_facet", "Article")
501
+ ::Solrizer::Extractor.insert_solr_field_value(solr_doc, "mods_journal_title_info_facet", "Unknown") if solr_doc["mods_journal_title_info_facet"].nil? || solr_doc["mods_journal_title_info_facet"].blank?
502
+
503
+ solr_doc
504
+ end
505
+
506
+ # extracts the last_name##full_name##computing_id to be used by home view
507
+ def extract_person_full_names_and_computing_ids
508
+ names = {}
509
+ self.find_by_terms(:person).each do |person|
510
+ name_parts = person.children.inject({}) do |hash,child|
511
+ hash[child.get_attribute(:type)] = child.text if ["family","given"].include? child.get_attribute(:type)
512
+ hash["computing_id"] = child.text if child.name == 'computing_id'
513
+ hash
514
+ end
515
+ if name_parts.length == 3 and person.search(:roleTerm).children.text.include?("Author")
516
+ if name_parts["family"].blank? && name_parts["given"].blank? && name_parts["computing_id"].blank?
517
+ value = "Unknown Author"
518
+ else
519
+ value = "#{name_parts["family"]}, #{name_parts["given"]} (#{name_parts["computing_id"]})"
520
+ end
521
+ ::Solrizer::Extractor.insert_solr_field_value(names, "person_full_name_cid_facet", value) if name_parts.length == 3
522
+ end
523
+ end
524
+ names
525
+ end
526
+ end
527
+ end
528
+ end