enju_flower 0.1.0.pre13 → 0.1.0.pre14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +2 -2
  3. data/app/views/manifestations/_show_detail_librarian.html.erb +3 -3
  4. data/app/views/manifestations/_show_detail_user.html.erb +2 -0
  5. data/app/views/manifestations/_show_holding.html.erb +3 -0
  6. data/app/views/manifestations/_show_reservation.html.erb +27 -0
  7. data/app/views/manifestations/_show_series_detail.html.erb +12 -0
  8. data/app/views/manifestations/index.mobile.erb +1 -1
  9. data/app/views/page/_footer.html.erb +3 -3
  10. data/lib/enju_flower/version.rb +1 -1
  11. data/spec/dummy/config/initializers/devise.rb +2 -0
  12. data/spec/dummy/db/migrate/20100211105551_add_admin_networks_to_library_group.rb +9 -0
  13. data/spec/dummy/db/schema.rb +184 -188
  14. data/spec/dummy/db/test.sqlite3 +0 -0
  15. data/spec/dummy/solr/conf/schema.xml +4 -0
  16. data/spec/dummy/solr/conf/solrconfig.xml +588 -855
  17. data/spec/dummy/solr/default/data/index/_xg.fdt +0 -0
  18. data/spec/dummy/solr/default/data/index/_xg.fdx +0 -0
  19. data/spec/dummy/solr/default/data/index/_xg.fnm +0 -0
  20. data/spec/dummy/solr/default/data/index/_xg.nvd +0 -0
  21. data/spec/dummy/solr/default/data/index/_xg.nvm +0 -0
  22. data/spec/dummy/solr/default/data/index/_xg.si +0 -0
  23. data/spec/dummy/solr/default/data/index/_xg_Lucene41_0.doc +0 -0
  24. data/spec/dummy/solr/default/data/index/_xg_Lucene41_0.pos +0 -0
  25. data/spec/dummy/solr/default/data/index/_xg_Lucene41_0.tim +0 -0
  26. data/spec/dummy/solr/default/data/index/_xg_Lucene41_0.tip +0 -0
  27. data/spec/dummy/solr/default/data/index/_xh.fdt +0 -0
  28. data/spec/dummy/solr/default/data/index/_xh.fdx +0 -0
  29. data/spec/dummy/solr/default/data/index/_xh.fnm +0 -0
  30. data/spec/dummy/solr/default/data/index/_xh.nvd +0 -0
  31. data/spec/dummy/solr/default/data/index/_xh.nvm +0 -0
  32. data/spec/dummy/solr/default/data/index/_xh.si +0 -0
  33. data/spec/dummy/solr/default/data/index/_xh_Lucene41_0.doc +0 -0
  34. data/spec/dummy/solr/default/data/index/_xh_Lucene41_0.pos +0 -0
  35. data/spec/dummy/solr/default/data/index/_xh_Lucene41_0.tim +0 -0
  36. data/spec/dummy/solr/default/data/index/_xh_Lucene41_0.tip +0 -0
  37. data/spec/dummy/solr/default/data/index/_xi.fdt +0 -0
  38. data/spec/dummy/solr/default/data/index/_xi.fdx +0 -0
  39. data/spec/dummy/solr/default/data/index/_xi.fnm +0 -0
  40. data/spec/dummy/solr/default/data/index/_xi.nvd +0 -0
  41. data/spec/dummy/solr/default/data/index/_xi.nvm +0 -0
  42. data/spec/dummy/solr/default/data/index/_xi.si +0 -0
  43. data/spec/dummy/solr/default/data/index/_xi_Lucene41_0.doc +0 -0
  44. data/spec/dummy/solr/default/data/index/_xi_Lucene41_0.pos +0 -0
  45. data/spec/dummy/solr/default/data/index/_xi_Lucene41_0.tim +0 -0
  46. data/spec/dummy/solr/default/data/index/_xi_Lucene41_0.tip +0 -0
  47. data/spec/dummy/solr/default/data/index/segments.gen +0 -0
  48. data/spec/dummy/solr/default/data/index/segments_178 +0 -0
  49. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000001552 +0 -0
  50. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000001553 +0 -0
  51. data/spec/dummy/solr/default/data/tlog/tlog.0000000000000001554 +0 -0
  52. data/spec/dummy/solr/{data/test/spellchecker → development/data/index}/segments.gen +0 -0
  53. data/spec/dummy/solr/development/data/index/segments_1 +0 -0
  54. data/spec/dummy/solr/solr.xml +8 -0
  55. data/spec/dummy/solr/test/data/index/segments.gen +0 -0
  56. data/spec/dummy/solr/test/data/index/segments_1 +0 -0
  57. data/spec/dummy/tmp/cache/4F7/F90/default_role +0 -0
  58. data/spec/dummy/tmp/cache/6E4/420/search_engine_all +0 -0
  59. data/spec/factories/user.rb +1 -1
  60. data/spec/fixtures/user_groups.yml +1 -1
  61. metadata +130 -137
  62. data/app/controllers/manifestations_controller.rb +0 -771
  63. data/app/views/layouts/agents.html.erb +0 -26
  64. data/app/views/layouts/agents.mobile.erb +0 -18
  65. data/app/views/layouts/manifestations.html.erb +0 -32
  66. data/app/views/layouts/manifestations.mobile.erb +0 -18
  67. data/app/views/page/add_on.html.erb +0 -13
  68. data/app/views/page/msie_acceralator.builder +0 -15
  69. data/spec/dummy/db/development.sqlite3 +0 -0
  70. data/spec/dummy/db/migrate/20110627034940_create_series_statement_merge_lists.rb +0 -9
  71. data/spec/dummy/db/migrate/20110627035057_create_series_statement_merges.rb +0 -12
  72. data/spec/dummy/db/migrate/20130303104849_add_state_index_to_reserve.rb +0 -5
  73. data/spec/dummy/db/migrate/20130303124821_add_retained_at_to_reserve.rb +0 -5
  74. data/spec/dummy/db/migrate/20130304015019_add_postponed_at_to_reserve.rb +0 -5
  75. data/spec/dummy/db/migrate/20130519065638_add_lock_version_to_reserve.rb +0 -5
  76. data/spec/dummy/db/migrate/20130519065837_add_lock_version_to_checkin.rb +0 -5
  77. data/spec/dummy/solr/data/test/index/_20.fdt +0 -0
  78. data/spec/dummy/solr/data/test/index/_20.fdx +0 -0
  79. data/spec/dummy/solr/data/test/index/_20.fnm +0 -7
  80. data/spec/dummy/solr/data/test/index/_20.frq +0 -0
  81. data/spec/dummy/solr/data/test/index/_20.nrm +0 -1
  82. data/spec/dummy/solr/data/test/index/_20.prx +0 -0
  83. data/spec/dummy/solr/data/test/index/_20.tii +0 -0
  84. data/spec/dummy/solr/data/test/index/_20.tis +0 -0
  85. data/spec/dummy/solr/data/test/index/_21.fdt +0 -0
  86. data/spec/dummy/solr/data/test/index/_21.fdx +0 -0
  87. data/spec/dummy/solr/data/test/index/_21.fnm +0 -7
  88. data/spec/dummy/solr/data/test/index/_21.frq +0 -0
  89. data/spec/dummy/solr/data/test/index/_21.nrm +0 -1
  90. data/spec/dummy/solr/data/test/index/_21.prx +0 -0
  91. data/spec/dummy/solr/data/test/index/_21.tii +0 -0
  92. data/spec/dummy/solr/data/test/index/_21.tis +0 -0
  93. data/spec/dummy/solr/data/test/index/_22.fdt +0 -0
  94. data/spec/dummy/solr/data/test/index/_22.fdx +0 -0
  95. data/spec/dummy/solr/data/test/index/_22.fnm +0 -8
  96. data/spec/dummy/solr/data/test/index/_22.frq +0 -0
  97. data/spec/dummy/solr/data/test/index/_22.nrm +0 -1
  98. data/spec/dummy/solr/data/test/index/_22.prx +0 -0
  99. data/spec/dummy/solr/data/test/index/_22.tii +0 -0
  100. data/spec/dummy/solr/data/test/index/_22.tis +0 -0
  101. data/spec/dummy/solr/data/test/index/segments.gen +0 -0
  102. data/spec/dummy/solr/data/test/index/segments_2s +0 -0
  103. data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
  104. data/spec/fixtures/agent_import_files.yml +0 -47
  105. data/spec/fixtures/agent_import_results.yml +0 -29
  106. data/spec/fixtures/circulation_statuses.yml +0 -136
  107. data/spec/fixtures/event_categories.yml +0 -55
  108. data/spec/fixtures/events.yml +0 -142
  109. data/spec/fixtures/item_has_use_restrictions.yml +0 -61
@@ -1,771 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- class ManifestationsController < ApplicationController
3
- load_and_authorize_resource :except => :index
4
- authorize_resource :only => :index
5
- before_filter :authenticate_user!, :only => :edit
6
- before_filter :get_agent, :get_manifestation, :except => [:create, :update, :destroy]
7
- before_filter :get_expression, :only => :new
8
- if defined?(EnjuSubject)
9
- before_filter :get_subject, :except => [:create, :update, :destroy]
10
- end
11
- before_filter :get_series_statement, :only => [:index, :new, :edit]
12
- before_filter :get_item, :get_libraries, :only => :index
13
- before_filter :prepare_options, :only => [:new, :edit]
14
- before_filter :get_version, :only => [:show]
15
- after_filter :solr_commit, :only => :destroy
16
- after_filter :convert_charset, :only => :index
17
- cache_sweeper :manifestation_sweeper, :only => [:create, :update, :destroy]
18
- include EnjuOai::OaiController if defined?(EnjuOai)
19
- include EnjuSearchLog if defined?(EnjuSearchLog)
20
-
21
- # GET /manifestations
22
- # GET /manifestations.json
23
- def index
24
- mode = params[:mode]
25
- if mode == 'add'
26
- unless current_user.try(:has_role?, 'Librarian')
27
- access_denied; return
28
- end
29
- end
30
-
31
- @seconds = Benchmark.realtime do
32
- if defined?(EnjuOai)
33
- @oai = check_oai_params(params)
34
- next if @oai[:need_not_to_search]
35
- if params[:format] == 'oai'
36
- oai_search = true
37
- from_and_until_times = set_from_and_until(Manifestation, params[:from], params[:until])
38
- from_time = @from_time = from_and_until_times[:from]
39
- until_time = @until_time = from_and_until_times[:until]
40
- # OAI-PMHのデフォルトの件数
41
- per_page = 200
42
- if params[:resumptionToken]
43
- current_token = get_resumption_token(params[:resumptionToken])
44
- if current_token
45
- page = (current_token[:cursor].to_i + per_page).div(per_page) + 1
46
- else
47
- @oai[:errors] << 'badResumptionToken'
48
- end
49
- end
50
- page ||= 1
51
-
52
- if params[:verb] == 'GetRecord' and params[:identifier]
53
- begin
54
- @manifestation = Manifestation.find_by_oai_identifier(params[:identifier])
55
- rescue ActiveRecord::RecordNotFound
56
- @oai[:errors] << "idDoesNotExist"
57
- render :formats => :oai, :layout => false
58
- return
59
- end
60
- render :template => 'manifestations/show', :formats => :oai, :layout => false
61
- return
62
- end
63
- end
64
- end
65
-
66
- set_reservable if defined?(EnjuCirculation)
67
-
68
- manifestations, sort, @count = {}, {}, {}
69
- query = ""
70
-
71
- if params[:format] == 'csv'
72
- per_page = 65534
73
- end
74
-
75
- if params[:format] == 'sru'
76
- if params[:operation] == 'searchRetrieve'
77
- sru = Sru.new(params)
78
- query = sru.cql.to_sunspot
79
- sort = sru.sort_by
80
- else
81
- render :template => 'manifestations/explain', :layout => false
82
- return
83
- end
84
- else
85
- if params[:api] == 'openurl'
86
- openurl = Openurl.new(params)
87
- @manifestations = openurl.search
88
- query = openurl.query_text
89
- sort = set_search_result_order(params[:sort_by], params[:order])
90
- else
91
- query = make_query(params[:query], params)
92
- sort = set_search_result_order(params[:sort_by], params[:order])
93
- end
94
- end
95
-
96
- # 絞り込みを行わない状態のクエリ
97
- @query = query.dup
98
- query = query.gsub(' ', ' ')
99
-
100
- includes = [:carrier_type, :series_statements]
101
- includes << :bookmarks if defined?(EnjuBookmark)
102
- search = Manifestation.search(:include => includes)
103
- role = current_user.try(:role) || Role.default_role
104
- case @reservable
105
- when 'true'
106
- reservable = true
107
- when 'false'
108
- reservable = false
109
- else
110
- reservable = nil
111
- end
112
-
113
- agent = get_index_agent
114
- @index_agent = agent
115
- manifestation = @manifestation if @manifestation
116
- series_statement = @series_statement if @series_statement
117
- parent = @parent = Manifestation.where(:id => params[:parent_id]).first if params[:parent_id].present?
118
-
119
- if defined?(EnjuSubject)
120
- subject = @subject if @subject
121
- end
122
-
123
- unless mode == 'add'
124
- search.build do
125
- with(:creator_ids).equal_to agent[:creator].id if agent[:creator]
126
- with(:contributor_ids).equal_to agent[:contributor].id if agent[:contributor]
127
- with(:publisher_ids).equal_to agent[:publisher].id if agent[:publisher]
128
- with(:series_statement_ids).equal_to series_statement.id if series_statement
129
- with(:parent_ids).equal_to parent.id if parent
130
- end
131
- end
132
-
133
- search.build do
134
- fulltext query unless query.blank?
135
- order_by sort[:sort_by], sort[:order] unless oai_search
136
- order_by :updated_at, :desc if oai_search
137
- if defined?(EnjuSubject)
138
- with(:subject_ids).equal_to subject.id if subject
139
- end
140
- unless parent
141
- if params[:periodical].to_s.downcase == "true"
142
- with(:series_master).equal_to true unless parent
143
- with(:periodical).equal_to true
144
- #if series_statement.periodical?
145
- # if mode != 'add'
146
- # order_by :volume_number, sort[:order]
147
- # order_by :issue_number, sort[:order]
148
- # order_by :serial_number, sort[:order]
149
- # end
150
- #else
151
- # with(:periodical).equal_to false
152
- #end
153
- else
154
- if mode != 'add'
155
- with(:resource_master).equal_to true
156
- end
157
- end
158
- end
159
- order_by sort[:sort_by], sort[:order] unless oai_search
160
- facet :reservable if defined?(EnjuCirculation)
161
- end
162
- search = make_internal_query(search)
163
- search.data_accessor_for(Manifestation).select = [
164
- :id,
165
- :original_title,
166
- :title_transcription,
167
- :required_role_id,
168
- :carrier_type_id,
169
- :access_address,
170
- :volume_number_string,
171
- :issue_number_string,
172
- :serial_number_string,
173
- :date_of_publication,
174
- :pub_date,
175
- :language_id,
176
- :created_at,
177
- :updated_at,
178
- :volume_number_string,
179
- :volume_number,
180
- :issue_number_string,
181
- :issue_number,
182
- :serial_number,
183
- :edition_string,
184
- :edition,
185
- :periodical,
186
- :statement_of_responsibility
187
- ] if params[:format] == 'html' or params[:format].nil?
188
- all_result = search.execute
189
- @count[:query_result] = all_result.total
190
- @reservable_facet = all_result.facet(:reservable).rows if defined?(EnjuCirculation)
191
-
192
- if session[:search_params]
193
- unless search.query.to_params == session[:search_params]
194
- clear_search_sessions
195
- end
196
- else
197
- clear_search_sessions
198
- session[:params] = params
199
- session[:search_params] == search.query.to_params
200
- session[:query] = @query
201
- end
202
-
203
- if params[:format] == 'html' or params[:format].nil?
204
- @search_query = Digest::SHA1.hexdigest(Marshal.dump(search.query.to_params).force_encoding('UTF-8'))
205
- if flash[:search_query] == @search_query
206
- flash.keep(:search_query)
207
- else
208
- if @series_statement
209
- flash.keep(:search_query)
210
- else
211
- flash[:search_query] = @search_query
212
- @manifestation_ids = search.build do
213
- paginate :page => 1, :per_page => Setting.max_number_of_results
214
- end.execute.raw_results.collect(&:primary_key).map{|i| i.to_i}
215
- end
216
- end
217
-
218
- if defined?(EnjuBookmark)
219
- if params[:view] == 'tag_cloud'
220
- unless @manifestation_ids
221
- @manifestation_ids = search.build do
222
- paginate :page => 1, :per_page => Setting.max_number_of_results
223
- end.execute.raw_results.collect(&:primary_key).map{|i| i.to_i}
224
- end
225
- #bookmark_ids = Bookmark.where(:manifestation_id => flash[:manifestation_ids]).limit(1000).pluck(:id)
226
- bookmark_ids = Bookmark.where(:manifestation_id => @manifestation_ids).limit(1000).pluck(:id)
227
- @tags = Tag.bookmarked(bookmark_ids)
228
- render :partial => 'manifestations/tag_cloud'
229
- return
230
- end
231
- end
232
- end
233
-
234
- page ||= params[:page] || 1
235
- per_page ||= Manifestation.default_per_page
236
- if params[:format] == 'sru'
237
- search.query.start_record(params[:startRecord] || 1, params[:maximumRecords] || 200)
238
- else
239
- pub_dates = parse_pub_date(params)
240
- pub_date_range = {}
241
- if pub_dates[:from] == '*'
242
- pub_date_range[:from] = 0
243
- else
244
- pub_date_range[:from] = Time.zone.parse(pub_dates[:from]).year
245
- end
246
- if pub_dates[:to] == '*'
247
- pub_date_range[:to] = 10000
248
- else
249
- pub_date_range[:to] = Time.zone.parse(pub_dates[:to]).year
250
- end
251
- if params[:pub_year_range_interval]
252
- pub_year_range_interval = params[:pub_year_range_interval].to_i
253
- else
254
- pub_year_range_interval = Setting.manifestation.facet.pub_year_range_interval
255
- end
256
-
257
- search.build do
258
- facet :reservable if defined?(EnjuCirculation)
259
- facet :carrier_type
260
- facet :library
261
- facet :language
262
- facet :pub_year, :range => pub_date_range[:from]..pub_date_range[:to], :range_interval => pub_year_range_interval
263
- facet :subject_ids if defined?(EnjuSubject)
264
- paginate :page => page.to_i, :per_page => per_page
265
- end
266
- end
267
- search_result = search.execute
268
- if @count[:query_result] > Setting.max_number_of_results
269
- max_count = Setting.max_number_of_results
270
- else
271
- max_count = @count[:query_result]
272
- end
273
- @manifestations = Kaminari.paginate_array(
274
- search_result.results, :total_count => max_count
275
- ).page(page)
276
-
277
- if params[:format].blank? or params[:format] == 'html'
278
- @carrier_type_facet = search_result.facet(:carrier_type).rows
279
- @language_facet = search_result.facet(:language).rows
280
- @library_facet = search_result.facet(:library).rows
281
- @pub_year_facet = search_result.facet(:pub_year).rows.reverse
282
- end
283
-
284
- @search_engines = Rails.cache.fetch('search_engine_all'){SearchEngine.all}
285
-
286
- if defined?(EnjuBookmark)
287
- # TODO: 検索結果が少ない場合にも表示させる
288
- if @manifestation_ids.blank?
289
- if query.respond_to?(:suggest_tags)
290
- @suggested_tag = query.suggest_tags.first
291
- end
292
- end
293
- end
294
-
295
- if defined?(EnjuSearchLog)
296
- if current_user.try(:save_search_history)
297
- current_user.save_history(query, @manifestations.offset_value + 1, @count[:query_result], params[:format])
298
- end
299
- end
300
-
301
- if defined?(EnjuOai)
302
- if params[:format] == 'oai'
303
- unless @manifestations.empty?
304
- @resumption = set_resumption_token(
305
- params[:resumptionToken],
306
- @from_time || Manifestation.last.updated_at,
307
- @until_time || Manifestation.first.updated_at,
308
- @manifestations.limit_value
309
- )
310
- else
311
- @oai[:errors] << 'noRecordsMatch'
312
- end
313
- end
314
- end
315
- end
316
-
317
- store_location # before_filter ではファセット検索のURLを記憶してしまう
318
-
319
- respond_to do |format|
320
- format.html
321
- format.mobile
322
- format.xml { render :xml => @manifestations }
323
- format.sru { render :layout => false }
324
- format.rss { render :layout => false }
325
- format.csv { render :layout => false }
326
- format.rdf { render :layout => false }
327
- format.atom
328
- format.mods
329
- format.json { render :json => @manifestations }
330
- format.js
331
- if defined?(EnjuOai)
332
- format.oai {
333
- case params[:verb]
334
- when 'Identify'
335
- render :template => 'manifestations/identify'
336
- when 'ListMetadataFormats'
337
- render :template => 'manifestations/list_metadata_formats'
338
- when 'ListSets'
339
- @series_statements = SeriesStatement.select([:id, :original_title])
340
- render :template => 'manifestations/list_sets'
341
- when 'ListIdentifiers'
342
- render :template => 'manifestations/list_identifiers'
343
- when 'ListRecords'
344
- render :template => 'manifestations/list_records'
345
- end
346
- }
347
- end
348
- end
349
- end
350
-
351
- # GET /manifestations/1
352
- # GET /manifestations/1.json
353
- def show
354
- if @version
355
- @manifestation = @manifestation.versions.find(@version).item if @version
356
- end
357
-
358
- case params[:mode]
359
- when 'send_email'
360
- if user_signed_in?
361
- Notifier.manifestation_info(current_user.id, @manifestation.id).deliver
362
- flash[:notice] = t('page.sent_email')
363
- redirect_to @manifestation
364
- return
365
- else
366
- access_denied; return
367
- end
368
- end
369
-
370
- return if render_mode(params[:mode])
371
-
372
- flash.keep(:search_query)
373
- store_location
374
-
375
- if @manifestation.series_master?
376
- flash.keep(:notice) if flash[:notice]
377
- flash[:manifestation_id] = @manifestation.id
378
- redirect_to manifestations_url(:parent_id => @manifestation.id)
379
- return
380
- end
381
-
382
- if defined?(EnjuCirculation)
383
- @reserved_count = Reserve.waiting.where(:manifestation_id => @manifestation.id, :checked_out_at => nil).count
384
- @reserve = current_user.reserves.where(:manifestation_id => @manifestation.id).first if user_signed_in?
385
- end
386
-
387
- if defined?(EnjuQuestion)
388
- @questions = @manifestation.questions(:user => current_user, :page => params[:question_page])
389
- end
390
-
391
- if @manifestation.attachment.path
392
- if Setting.uploaded_file.storage == :s3
393
- data = open(@manifestation.attachment.url).read.force_encoding('UTF-8')
394
- else
395
- file = @manifestation.attachment.path
396
- end
397
- end
398
-
399
- respond_to do |format|
400
- format.html # show.html.erb
401
- format.mobile
402
- format.xml {
403
- case params[:mode]
404
- when 'related'
405
- render :template => 'manifestations/related'
406
- else
407
- render :xml => @manifestation
408
- end
409
- }
410
- format.rdf
411
- format.mods
412
- format.json { render :json => @manifestation }
413
- #format.atom { render :template => 'manifestations/oai_ore' }
414
- #format.js
415
- format.download {
416
- if @manifestation.attachment.path
417
- if Setting.uploaded_file.storage == :s3
418
- send_data @manifestation.attachment.data, :filename => File.basename(@manifestation.attachment_file_name), :type => 'application/octet-stream'
419
- else
420
- if File.exist?(file) and File.file?(file)
421
- send_file file, :filename => File.basename(@manifestation.attachment_file_name), :type => 'application/octet-stream'
422
- end
423
- end
424
- else
425
- render :template => 'page/404', :status => 404
426
- end
427
- }
428
- if defined?(EnjuOai)
429
- format.oai
430
- end
431
- end
432
- end
433
-
434
- # GET /manifestations/new
435
- # GET /manifestations/new.json
436
- def new
437
- @manifestation = Manifestation.new
438
- @manifestation.language = Language.where(:iso_639_1 => @locale).first
439
- parent = Manifestation.where(:id => params[:parent_id]).first if params[:parent_id].present?
440
- if parent
441
- @manifestation.parent_id = parent.id
442
- @manifestation.original_title = parent.original_title
443
- @manifestation.title_transcription = parent.title_transcription
444
- @manifestation.periodical = true if parent.periodical
445
- end
446
-
447
- respond_to do |format|
448
- format.html # new.html.erb
449
- format.json { render :json => @manifestation }
450
- end
451
- end
452
-
453
- # GET /manifestations/1/edit
454
- def edit
455
- unless current_user.has_role?('Librarian')
456
- unless params[:mode] == 'tag_edit'
457
- access_denied; return
458
- end
459
- end
460
- if defined?(EnjuBookmark)
461
- if params[:mode] == 'tag_edit'
462
- @bookmark = current_user.bookmarks.where(:manifestation_id => @manifestation.id).first if @manifestation rescue nil
463
- render :partial => 'manifestations/tag_edit', :locals => {:manifestation => @manifestation}
464
- end
465
- store_location unless params[:mode] == 'tag_edit'
466
- end
467
- end
468
-
469
- # POST /manifestations
470
- # POST /manifestations.json
471
- def create
472
- @manifestation = Manifestation.new(params[:manifestation])
473
- parent = Manifestation.where(:id => @manifestation.parent_id).first
474
- unless @manifestation.original_title?
475
- @manifestation.original_title = @manifestation.attachment_file_name
476
- end
477
-
478
- respond_to do |format|
479
- if @manifestation.save
480
- if parent
481
- parent.derived_manifestations << @manifestation
482
- parent.index
483
- @manifestation.index
484
- end
485
- Sunspot.commit
486
-
487
- format.html { redirect_to @manifestation, :notice => t('controller.successfully_created', :model => t('activerecord.models.manifestation')) }
488
- format.json { render :json => @manifestation, :status => :created, :location => @manifestation }
489
- else
490
- prepare_options
491
- format.html { render :action => "new" }
492
- format.json { render :json => @manifestation.errors, :status => :unprocessable_entity }
493
- end
494
- end
495
- end
496
-
497
- # PUT /manifestations/1
498
- # PUT /manifestations/1.json
499
- def update
500
- respond_to do |format|
501
- if @manifestation.update_attributes(params[:manifestation])
502
- Sunspot.commit
503
- format.html { redirect_to @manifestation, :notice => t('controller.successfully_updated', :model => t('activerecord.models.manifestation')) }
504
- format.json { head :no_content }
505
- else
506
- prepare_options
507
- format.html { render :action => "edit" }
508
- format.json { render :json => @manifestation.errors, :status => :unprocessable_entity }
509
- end
510
- end
511
- end
512
-
513
- # DELETE /manifestations/1
514
- # DELETE /manifestations/1.json
515
- def destroy
516
- @manifestation.destroy
517
-
518
- respond_to do |format|
519
- format.html { redirect_to manifestations_url, :notice => t('controller.successfully_deleted', :model => t('activerecord.models.manifestation')) }
520
- format.json { head :no_content }
521
- end
522
- end
523
-
524
- private
525
-
526
- def make_query(query, options = {})
527
- # TODO: integerやstringもqfに含める
528
- query = query.to_s.strip
529
-
530
- if query.size == 1
531
- query = "#{query}*"
532
- end
533
-
534
- if options[:mode] == 'recent'
535
- query = "#{query} created_at_d:[NOW-1MONTH TO NOW]"
536
- end
537
-
538
- #unless options[:carrier_type].blank?
539
- # query = "#{query} carrier_type_s:#{options[:carrier_type]}"
540
- #end
541
-
542
- #unless options[:library].blank?
543
- # library_list = options[:library].split.uniq.join(' and ')
544
- # query = "#{query} library_sm:#{library_list}"
545
- #end
546
-
547
- #unless options[:language].blank?
548
- # query = "#{query} language_sm:#{options[:language]}"
549
- #end
550
-
551
- #unless options[:subject].blank?
552
- # query = "#{query} subject_sm:#{options[:subject]}"
553
- #end
554
-
555
- if options[:tag].present?
556
- query = "#{query} tag_sm:#{options[:tag]}"
557
- end
558
-
559
- if options[:creator].present?
560
- query = "#{query} creator_text:#{options[:creator]}"
561
- end
562
-
563
- if options[:contributor].present?
564
- query = "#{query} contributor_text:#{options[:contributor]}"
565
- end
566
-
567
- if options[:isbn].present?
568
- query = "#{query} isbn_sm:#{options[:isbn].gsub('-', '')}"
569
- end
570
-
571
- if options[:issn].present?
572
- query = "#{query} issn_sm:#{options[:issn].gsub('-', '')}"
573
- end
574
-
575
- if options[:lccn].present?
576
- query = "#{query} lccn_s:#{options[:lccn]}"
577
- end
578
-
579
- if options[:jpno].present?
580
- query = "#{query} jpno_s:#{options[:jpno]}"
581
- end
582
-
583
- if options[:publisher].present?
584
- query = "#{query} publisher_text:#{options[:publisher]}"
585
- end
586
-
587
- if options[:item_identifier].present?
588
- query = "#{query} item_identifier_sm:#{options[:item_identifier]}"
589
- end
590
-
591
- unless options[:number_of_pages_at_least].blank? and options[:number_of_pages_at_most].blank?
592
- number_of_pages = {}
593
- number_of_pages[:at_least] = options[:number_of_pages_at_least].to_i
594
- number_of_pages[:at_most] = options[:number_of_pages_at_most].to_i
595
- number_of_pages[:at_least] = "*" if number_of_pages[:at_least] == 0
596
- number_of_pages[:at_most] = "*" if number_of_pages[:at_most] == 0
597
-
598
- query = "#{query} number_of_pages_i:[#{number_of_pages[:at_least]} TO #{number_of_pages[:at_most]}]"
599
- end
600
-
601
- query = set_pub_date(query, options)
602
- query = set_acquisition_date(query, options)
603
-
604
- query = query.strip
605
- if query == '[* TO *]'
606
- # unless params[:advanced_search]
607
- query = ''
608
- # end
609
- end
610
-
611
- return query
612
- end
613
-
614
- def set_search_result_order(sort_by, order)
615
- sort = {}
616
- # TODO: ページ数や大きさでの並べ替え
617
- case sort_by
618
- when 'title'
619
- sort[:sort_by] = 'sort_title'
620
- sort[:order] = 'asc'
621
- when 'pub_date'
622
- sort[:sort_by] = 'date_of_publication'
623
- sort[:order] = 'desc'
624
- else
625
- # デフォルトの並び方
626
- sort[:sort_by] = 'created_at'
627
- sort[:order] = 'desc'
628
- end
629
- if order == 'asc'
630
- sort[:order] = 'asc'
631
- elsif order == 'desc'
632
- sort[:order] = 'desc'
633
- end
634
- sort
635
- end
636
-
637
- def render_mode(mode)
638
- case mode
639
- when 'holding'
640
- render :partial => 'manifestations/show_holding', :locals => {:manifestation => @manifestation}
641
- when 'barcode'
642
- if defined?(EnjuBarcode)
643
- barcode = Barby::QrCode.new(@manifestation.id)
644
- send_data(barcode.to_svg, :disposition => 'inline', :type => 'image/svg+xml')
645
- end
646
- when 'tag_edit'
647
- if defined?(EnjuBookmark)
648
- render :partial => 'manifestations/tag_edit', :locals => {:manifestation => @manifestation}
649
- end
650
- when 'tag_list'
651
- if defined?(EnjuBookmark)
652
- render :partial => 'manifestations/tag_list', :locals => {:manifestation => @manifestation}
653
- end
654
- when 'show_index'
655
- render :partial => 'manifestations/show_index', :locals => {:manifestation => @manifestation}
656
- when 'show_creators'
657
- render :partial => 'manifestations/show_creators', :locals => {:manifestation => @manifestation}
658
- when 'show_all_creators'
659
- render :partial => 'manifestations/show_creators', :locals => {:manifestation => @manifestation}
660
- when 'pickup'
661
- render :partial => 'manifestations/pickup', :locals => {:manifestation => @manifestation}
662
- when 'calil_list'
663
- if defined?(EnjuCalil)
664
- render :partial => 'manifestations/calil_list', :locals => {:manifestation => @manifestation}
665
- end
666
- else
667
- false
668
- end
669
- end
670
-
671
- def prepare_options
672
- @carrier_types = CarrierType.select([:id, :display_name, :position])
673
- @content_types = ContentType.select([:id, :display_name, :position])
674
- @roles = Role.select([:id, :display_name, :position])
675
- @languages = Language.select([:id, :display_name, :position])
676
- @frequencies = Frequency.select([:id, :display_name, :position])
677
- @identifier_types = IdentifierType.select([:id, :display_name, :position])
678
- @nii_types = NiiType.select([:id, :display_name, :position]) if defined?(EnjuNii)
679
- if defined?(EnjuSubject)
680
- @subject_types = SubjectType.select([:id, :display_name, :position])
681
- @subject_heading_types = SubjectHeadingType.select([:id, :display_name, :position])
682
- @classification_types = ClassificationType.select([:id, :display_name, :position])
683
- end
684
- end
685
-
686
- def get_index_agent
687
- agent = {}
688
- case
689
- when params[:agent_id]
690
- agent[:agent] = Agent.find(params[:agent_id])
691
- when params[:creator_id]
692
- agent[:creator] = @creator = Agent.find(params[:creator_id])
693
- when params[:contributor_id]
694
- agent[:contributor] = @contributor = Agent.find(params[:contributor_id])
695
- when params[:publisher_id]
696
- agent[:publisher] = @publisher = Agent.find(params[:publisher_id])
697
- end
698
- agent
699
- end
700
-
701
- def set_reservable
702
- case params[:reservable].to_s
703
- when 'true'
704
- @reservable = true
705
- when 'false'
706
- @reservable = false
707
- else
708
- @reservable = nil
709
- end
710
- end
711
-
712
- def parse_pub_date(options)
713
- pub_date = {}
714
- if options[:pub_date_from].blank?
715
- pub_date[:from] = "*"
716
- else
717
- pub_date[:from] = Time.zone.parse(options[:pub_date_from]).beginning_of_day.utc.iso8601 rescue nil
718
- unless pub_date[:from]
719
- pub_date[:from] = Time.zone.parse(Time.mktime(options[:pub_date_from]).to_s).beginning_of_day.utc.iso8601
720
- end
721
- end
722
-
723
- if options[:pub_date_to].blank?
724
- pub_date[:to] = "*"
725
- else
726
- pub_date[:to] = Time.zone.parse(options[:pub_date_to]).end_of_day.utc.iso8601 rescue nil
727
- unless pub_date[:to]
728
- pub_date[:to] = Time.zone.parse(Time.mktime(options[:pub_date_to]).to_s).end_of_year.utc.iso8601
729
- end
730
- end
731
- pub_date
732
- end
733
-
734
- def set_pub_date(query, options)
735
- unless options[:pub_date_from].blank? and options[:pub_date_to].blank?
736
- options[:pub_date_from].to_s.gsub!(/\D/, '')
737
- options[:pub_date_to].to_s.gsub!(/\D/, '')
738
- pub_date = parse_pub_date(options)
739
- query = "#{query} date_of_publication_d:[#{pub_date[:from]} TO #{pub_date[:to]}]"
740
- end
741
- query
742
- end
743
-
744
- def set_acquisition_date(query, options)
745
- unless options[:acquired_from].blank? and options[:acquired_to].blank?
746
- options[:acquired_from].to_s.gsub!(/\D/, '')
747
- options[:acquired_to].to_s.gsub!(/\D/, '')
748
-
749
- acquisition_date = {}
750
- if options[:acquired_from].blank?
751
- acquisition_date[:from] = "*"
752
- else
753
- acquisition_date[:from] = Time.zone.parse(options[:acquired_from]).beginning_of_day.utc.iso8601 rescue nil
754
- unless acquisition_date[:from]
755
- acquisition_date[:from] = Time.zone.parse(Time.mktime(options[:acquired_from]).to_s).beginning_of_day.utc.iso8601
756
- end
757
- end
758
-
759
- if options[:acquired_to].blank?
760
- acquisition_date[:to] = "*"
761
- else
762
- acquisition_date[:to] = Time.zone.parse(options[:acquired_to]).end_of_day.utc.iso8601 rescue nil
763
- unless acquisition_date[:to]
764
- acquisition_date[:to] = Time.zone.parse(Time.mktime(options[:acquired_to]).to_s).end_of_year.utc.iso8601
765
- end
766
- end
767
- query = "#{query} acquired_at_d:[#{acquisition_date[:from]} TO #{acquisition_date[:to]}]"
768
- end
769
- query
770
- end
771
- end