enju_oai 0.0.4 → 0.1.0.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module EnjuOai
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0.pre"
3
3
  end
@@ -0,0 +1,17 @@
1
+ module EnjuOai
2
+ module Generators
3
+ class ViewsGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../../../../app/views', __FILE__)
5
+
6
+ def copy_files
7
+ directories = %w(
8
+ manifestations
9
+ )
10
+
11
+ directories.each do |dir|
12
+ directory dir, "app/views/#{dir}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,11 +1,154 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  class ApplicationController < ActionController::Base
2
3
  protect_from_forgery
4
+ require_dependency 'language'
3
5
 
4
- def clear_search_sessions
5
- session[:query] = nil
6
+ rescue_from CanCan::AccessDenied, :with => :render_403
7
+ rescue_from ActiveRecord::RecordNotFound, :with => :render_404
8
+ rescue_from Errno::ECONNREFUSED, :with => :render_500
9
+ rescue_from ActionView::MissingTemplate, :with => :render_404_invalid_format
10
+ #rescue_from ActionController::RoutingError, :with => :render_404
11
+
12
+ enju_biblio
13
+ enju_library
14
+ before_filter :get_library_group, :set_locale, :set_available_languages, :set_mobile_request
15
+ has_mobile_fu
16
+ before_filter :set_request_format
17
+
18
+ private
19
+ def after_sign_in_path_for(resource)
20
+ session[:locale] = nil
21
+ super
22
+ end
23
+
24
+ def render_403
25
+ return if performed?
26
+ if user_signed_in?
27
+ respond_to do |format|
28
+ format.html {render :template => 'page/403', :status => 403}
29
+ format.mobile {render :template => 'page/403', :status => 403}
30
+ format.xml {render :template => 'page/403', :status => 403}
31
+ format.json { render :text => '{"error": "forbidden"}' }
32
+ end
33
+ else
34
+ respond_to do |format|
35
+ format.html {redirect_to new_user_session_url}
36
+ format.mobile {redirect_to new_user_session_url}
37
+ format.xml {render :template => 'page/403', :status => 403}
38
+ format.json { render :text => '{"error": "forbidden"}' }
39
+ end
40
+ end
41
+ end
42
+
43
+ def render_404
44
+ return if performed?
45
+ respond_to do |format|
46
+ format.html {render :template => 'page/404', :status => 404}
47
+ format.mobile {render :template => 'page/404', :status => 404}
48
+ format.xml {render :template => 'page/404', :status => 404}
49
+ format.json { render :text => '{"error": "not_found"}' }
50
+ end
51
+ end
52
+
53
+ def render_404_invalid_format
54
+ return if performed?
55
+ render :file => "#{Rails.root}/public/404.html"
56
+ end
57
+
58
+ def render_500
59
+ Rails.logger.fatal("please confirm that the Solr is running.")
60
+ return if performed?
61
+ #flash[:notice] = t('page.connection_failed')
62
+ respond_to do |format|
63
+ format.html {render :file => "#{Rails.root.to_s}/public/500.html", :layout => false, :status => 500}
64
+ format.mobile {render :file => "#{Rails.root.to_s}/public/500.html", :layout => false, :status => 500}
65
+ format.xml {render :template => 'page/500', :status => 500}
66
+ format.json { render :text => '{"error": "server_error"}' }
67
+ end
68
+ end
69
+
70
+ def set_locale
71
+ if params[:locale]
72
+ unless I18n.available_locales.include?(params[:locale].to_s.intern)
73
+ raise InvalidLocaleError
74
+ end
75
+ end
76
+ if user_signed_in?
77
+ locale = params[:locale] || session[:locale] || current_user.locale.try(:to_sym)
78
+ else
79
+ locale = params[:locale] || session[:locale]
80
+ end
81
+ if locale
82
+ I18n.locale = @locale = session[:locale] = locale.to_sym
83
+ else
84
+ I18n.locale = @locale = session[:locale] = I18n.default_locale
85
+ end
86
+ rescue InvalidLocaleError
87
+ @locale = I18n.default_locale
88
+ end
89
+
90
+ def default_url_options(options={})
91
+ {:locale => nil}
92
+ end
93
+
94
+ def set_available_languages
95
+ if Rails.env == 'production'
96
+ @available_languages = Rails.cache.fetch('available_languages'){
97
+ Language.where(:iso_639_1 => I18n.available_locales.map{|l| l.to_s}).select([:id, :iso_639_1, :name, :native_name, :display_name, :position]).all
98
+ }
99
+ else
100
+ @available_languages = Language.where(:iso_639_1 => I18n.available_locales.map{|l| l.to_s})
101
+ end
102
+ end
103
+
104
+ def reset_params_session
6
105
  session[:params] = nil
7
- session[:search_params] = nil
8
- session[:manifestation_ids] = nil
106
+ end
107
+
108
+ def not_found
109
+ raise ActiveRecord::RecordNotFound
110
+ end
111
+
112
+ def access_denied
113
+ raise CanCan::AccessDenied
114
+ end
115
+
116
+ def get_user
117
+ @user = User.where(:username => params[:user_id]).first if params[:user_id]
118
+ #authorize! :show, @user if @user
119
+ end
120
+
121
+ def get_user_group
122
+ @user_group = UserGroup.find(params[:user_group_id]) if params[:user_group_id]
123
+ end
124
+
125
+ def convert_charset
126
+ case params[:format]
127
+ when 'csv'
128
+ return unless configatron.csv_charset_conversion
129
+ # TODO: 他の言語
130
+ if @locale.to_sym == :ja
131
+ headers["Content-Type"] = "text/csv; charset=Shift_JIS"
132
+ response.body = NKF::nkf('-Ws', response.body)
133
+ end
134
+ when 'xml'
135
+ if @locale.to_sym == :ja
136
+ headers["Content-Type"] = "application/xml; charset=Shift_JIS"
137
+ response.body = NKF::nkf('-Ws', response.body)
138
+ end
139
+ end
140
+ end
141
+
142
+ def store_page
143
+ if request.get? and request.format.try(:html?) and !request.xhr?
144
+ flash[:page] = params[:page] if params[:page].to_i > 0
145
+ end
146
+ end
147
+
148
+ def store_location
149
+ if request.get? and request.format.try(:html?) and !request.xhr?
150
+ session[:user_return_to] = request.fullpath
151
+ end
9
152
  end
10
153
 
11
154
  def set_role_query(user, search)
@@ -62,15 +205,68 @@ class ApplicationController < ActionController::Base
62
205
  return search
63
206
  end
64
207
 
65
- def store_page
66
- if request.get? and request.format.try(:html?) and !request.xhr?
67
- flash[:page] = params[:page] if params[:page].to_i > 0
208
+ def solr_commit
209
+ Sunspot.commit
210
+ end
211
+
212
+ def get_version
213
+ @version = params[:version_id].to_i if params[:version_id]
214
+ @version = nil if @version == 0
215
+ end
216
+
217
+ def clear_search_sessions
218
+ session[:query] = nil
219
+ session[:params] = nil
220
+ session[:search_params] = nil
221
+ session[:manifestation_ids] = nil
222
+ end
223
+
224
+ def api_request?
225
+ true unless params[:format].nil? or params[:format] == 'html'
226
+ end
227
+
228
+ def current_ability
229
+ @current_ability ||= Ability.new(current_user, request.remote_ip.split('%')[0])
230
+ end
231
+
232
+ def get_top_page_content
233
+ if defined?(EnjuNews)
234
+ @news_feeds = Rails.cache.fetch('news_feed_all'){NewsFeed.all}
235
+ @news_posts = NewsPost.limit(3)
68
236
  end
237
+ @libraries = Library.real
69
238
  end
70
239
 
71
- def store_location
72
- if request.get? and request.format.try(:html?) and !request.xhr?
73
- session[:user_return_to] = request.fullpath
240
+ def set_mobile_request
241
+ if params[:mobile_view]
242
+ if params[:mobile_view] == 'false'
243
+ session[:mobile_view] = false
244
+ else
245
+ session[:mobile_view] = true
246
+ end
247
+ else
248
+ if is_mobile_device?
249
+ session[:mobile_view] = true
250
+ end
251
+ end
252
+ end
253
+
254
+ def set_request_format
255
+ if session[:mobile_view]
256
+ request.format = :mobile if is_mobile_device?
74
257
  end
75
258
  end
259
+
260
+ def move_position(resource, direction, redirect = true)
261
+ if ['higher', 'lower'].include?(direction)
262
+ resource.send("move_#{direction}")
263
+ if redirect
264
+ redirect_to url_for(:controller => resource.class.to_s.pluralize.underscore)
265
+ return
266
+ end
267
+ end
268
+ end
269
+ end
270
+
271
+ class InvalidLocaleError < StandardError
76
272
  end
Binary file
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enju_oai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.1.0.pre
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kosuke Tanabe
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-21 00:00:00.000000000 Z
12
+ date: 2012-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -32,17 +32,17 @@ dependencies:
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 0.1.0.pre
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 0.1.0.pre
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: mobile-fu
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -112,33 +112,33 @@ dependencies:
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 0.1.0.pre
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements:
123
- - - ! '>='
123
+ - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: '0'
125
+ version: 0.1.0.pre
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: enju_library
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
- - - ! '>='
131
+ - - ~>
132
132
  - !ruby/object:Gem::Version
133
- version: '0'
133
+ version: 0.1.0.pre
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  none: false
138
138
  requirements:
139
- - - ! '>='
139
+ - - ~>
140
140
  - !ruby/object:Gem::Version
141
- version: '0'
141
+ version: 0.1.0.pre
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: enju_manifestation_viewer
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -190,6 +190,7 @@ files:
190
190
  - lib/enju_oai/oai_model.rb
191
191
  - lib/enju_oai/version.rb
192
192
  - lib/enju_oai.rb
193
+ - lib/generators/enju_oai/views_generator.rb
193
194
  - lib/tasks/enju_oai_tasks.rake
194
195
  - MIT-LICENSE
195
196
  - Rakefile
@@ -198,7 +199,6 @@ files:
198
199
  - spec/dummy/app/assets/javascripts/application.js
199
200
  - spec/dummy/app/assets/stylesheets/application.css
200
201
  - spec/dummy/app/controllers/application_controller.rb
201
- - spec/dummy/app/controllers/manifestations_controller.rb
202
202
  - spec/dummy/app/helpers/application_helper.rb
203
203
  - spec/dummy/app/models/ability.rb
204
204
  - spec/dummy/app/models/role.rb
@@ -449,9 +449,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
449
449
  required_rubygems_version: !ruby/object:Gem::Requirement
450
450
  none: false
451
451
  requirements:
452
- - - ! '>='
452
+ - - ! '>'
453
453
  - !ruby/object:Gem::Version
454
- version: '0'
454
+ version: 1.3.1
455
455
  requirements: []
456
456
  rubyforge_project:
457
457
  rubygems_version: 1.8.23
@@ -463,7 +463,6 @@ test_files:
463
463
  - spec/dummy/app/assets/javascripts/application.js
464
464
  - spec/dummy/app/assets/stylesheets/application.css
465
465
  - spec/dummy/app/controllers/application_controller.rb
466
- - spec/dummy/app/controllers/manifestations_controller.rb
467
466
  - spec/dummy/app/helpers/application_helper.rb
468
467
  - spec/dummy/app/models/ability.rb
469
468
  - spec/dummy/app/models/role.rb
@@ -1,519 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- class ManifestationsController < ApplicationController
3
- load_and_authorize_resource :except => :index
4
- authorize_resource :only => :index
5
- include EnjuOai::OaiController if defined?(EnjuOai)
6
- include EnjuSearchLog if defined?(EnjuSearchLog)
7
-
8
- # GET /manifestations
9
- # GET /manifestations.json
10
- def index
11
- mode = params[:mode]
12
- if mode == 'add'
13
- unless current_user.try(:has_role?, 'Librarian')
14
- access_denied; return
15
- end
16
- end
17
-
18
- @seconds = Benchmark.realtime do
19
- if defined?(EnjuOai)
20
- @oai = check_oai_params(params)
21
- next if @oai[:need_not_to_search]
22
- if params[:format] == 'oai'
23
- oai_search = true
24
- from_and_until_times = set_from_and_until(Manifestation, params[:from], params[:until])
25
- from_time = @from_time = from_and_until_times[:from]
26
- until_time = @until_time = from_and_until_times[:until]
27
- # OAI-PMHのデフォルトの件数
28
- per_page = 200
29
- if params[:resumptionToken]
30
- current_token = get_resumption_token(params[:resumptionToken])
31
- if current_token
32
- page = (current_token[:cursor].to_i + per_page).div(per_page) + 1
33
- else
34
- @oai[:errors] << 'badResumptionToken'
35
- end
36
- end
37
- page ||= 1
38
-
39
- if params[:verb] == 'GetRecord' and params[:identifier]
40
- begin
41
- @manifestation = Manifestation.find_by_oai_identifier(params[:identifier])
42
- rescue ActiveRecord::RecordNotFound
43
- @oai[:errors] << "idDoesNotExist"
44
- render :formats => :oai, :layout => false
45
- return
46
- end
47
- render :template => 'manifestations/show', :formats => :oai, :layout => false
48
- return
49
- end
50
- end
51
- end
52
-
53
- set_reservable if defined?(EnjuCirculation)
54
-
55
- manifestations, sort, @count = {}, {}, {}
56
- query = ""
57
-
58
- if params[:format] == 'csv'
59
- per_page = 65534
60
- end
61
-
62
- if params[:format] == 'sru'
63
- if params[:operation] == 'searchRetrieve'
64
- sru = Sru.new(params)
65
- query = sru.cql.to_sunspot
66
- sort = sru.sort_by
67
- else
68
- render :template => 'manifestations/explain', :layout => false
69
- return
70
- end
71
- else
72
- if params[:api] == 'openurl'
73
- openurl = Openurl.new(params)
74
- @manifestations = openurl.search
75
- query = openurl.query_text
76
- sort = set_search_result_order(params[:sort_by], params[:order])
77
- else
78
- query = make_query(params[:query], params)
79
- sort = set_search_result_order(params[:sort_by], params[:order])
80
- end
81
- end
82
-
83
- # 絞り込みを行わない状態のクエリ
84
- @query = query.dup
85
- query = query.gsub(' ', ' ')
86
-
87
- includes = [:carrier_type, :required_role, :items, :creators, :contributors, :publishers]
88
- includes << :bookmarks if defined?(EnjuBookmark)
89
- search = Manifestation.search(:include => includes)
90
- role = current_user.try(:role) || Role.default_role
91
- case @reservable
92
- when 'true'
93
- reservable = true
94
- when 'false'
95
- reservable = false
96
- else
97
- reservable = nil
98
- end
99
-
100
- patron = get_index_patron
101
- @index_patron = patron
102
- manifestation = @manifestation if @manifestation
103
- series_statement = @series_statement if @series_statement
104
-
105
- if defined?(EnjuSubject)
106
- subject = @subject if @subject
107
- end
108
-
109
- unless mode == 'add'
110
- search.build do
111
- with(:creator_ids).equal_to patron[:creator].id if patron[:creator]
112
- with(:contributor_ids).equal_to patron[:contributor].id if patron[:contributor]
113
- with(:publisher_ids).equal_to patron[:publisher].id if patron[:publisher]
114
- with(:original_manifestation_ids).equal_to manifestation.id if manifestation
115
- with(:series_statement_id).equal_to series_statement.id if series_statement
116
- end
117
- end
118
-
119
- search.build do
120
- fulltext query unless query.blank?
121
- order_by sort[:sort_by], sort[:order] unless oai_search
122
- order_by :updated_at, :desc if oai_search
123
- if defined?(EnjuSubject)
124
- with(:subject_ids).equal_to subject.id if subject
125
- end
126
- if series_statement
127
- with(:periodical_master).equal_to false
128
- if mode != 'add'
129
- with(:periodical).equal_to true
130
- end
131
- else
132
- if mode != 'add'
133
- with(:periodical).equal_to false
134
- end
135
- end
136
- facet :reservable if defined?(EnjuCirculation)
137
- end
138
- search = make_internal_query(search)
139
- search.data_accessor_for(Manifestation).select = [
140
- :id,
141
- :original_title,
142
- :title_transcription,
143
- :required_role_id,
144
- :carrier_type_id,
145
- :access_address,
146
- :volume_number_string,
147
- :issue_number_string,
148
- :serial_number_string,
149
- :date_of_publication,
150
- :pub_date,
151
- :language_id,
152
- :carrier_type_id,
153
- :created_at,
154
- :updated_at,
155
- :volume_number_string,
156
- :volume_number,
157
- :issue_number_string,
158
- :issue_number,
159
- :serial_number,
160
- :edition_string,
161
- :edition
162
- ] if params[:format] == 'html' or params[:format].nil?
163
- all_result = search.execute
164
- @count[:query_result] = all_result.total
165
- @reservable_facet = all_result.facet(:reservable).rows if defined?(EnjuCirculation)
166
-
167
- if session[:search_params]
168
- unless search.query.to_params == session[:search_params]
169
- clear_search_sessions
170
- end
171
- else
172
- clear_search_sessions
173
- session[:params] = params
174
- session[:search_params] == search.query.to_params
175
- session[:query] = @query
176
- end
177
-
178
- unless session[:manifestation_ids]
179
- manifestation_ids = search.build do
180
- paginate :page => 1, :per_page => configatron.max_number_of_results
181
- end.execute.raw_results.collect(&:primary_key).map{|id| id.to_i}
182
- session[:manifestation_ids] = manifestation_ids
183
- end
184
-
185
- if defined?(EnjuBookmark)
186
- if session[:manifestation_ids]
187
- if params[:view] == 'tag_cloud'
188
- bookmark_ids = Bookmark.where(:manifestation_id => session[:manifestation_ids]).limit(1000).select(:id).collect(&:id)
189
- @tags = Tag.bookmarked(bookmark_ids)
190
- render :partial => 'manifestations/tag_cloud'
191
- #session[:manifestation_ids] = nil
192
- return
193
- end
194
- end
195
- end
196
-
197
- page ||= params[:page] || 1
198
- per_page ||= Manifestation.per_page
199
- if params[:format] == 'sru'
200
- search.query.start_record(params[:startRecord] || 1, params[:maximumRecords] || 200)
201
- else
202
- search.build do
203
- facet :reservable if defined?(EnjuCirculation)
204
- facet :carrier_type
205
- facet :library
206
- facet :language
207
- facet :subject_ids if defined?(EnjuSubject)
208
- paginate :page => page.to_i, :per_page => per_page
209
- end
210
- end
211
- search_result = search.execute
212
- if @count[:query_result] > configatron.max_number_of_results
213
- max_count = configatron.max_number_of_results
214
- else
215
- max_count = @count[:query_result]
216
- end
217
- @manifestations = WillPaginate::Collection.create(page, per_page, max_count) do |pager|
218
- pager.replace(search_result.results)
219
- end
220
-
221
- if params[:format].blank? or params[:format] == 'html'
222
- @carrier_type_facet = search_result.facet(:carrier_type).rows
223
- @language_facet = search_result.facet(:language).rows
224
- @library_facet = search_result.facet(:library).rows
225
- end
226
-
227
- @search_engines = Rails.cache.fetch('search_engine_all'){SearchEngine.all}
228
-
229
- if defined?(EnjuBookmark)
230
- # TODO: 検索結果が少ない場合にも表示させる
231
- if manifestation_ids.blank?
232
- if query.respond_to?(:suggest_tags)
233
- @suggested_tag = query.suggest_tags.first
234
- end
235
- end
236
- end
237
-
238
- if defined?(EnjuSearchLog)
239
- save_search_history(query, @manifestations.offset, @count[:query_result], current_user)
240
- end
241
-
242
- if defined?(EnjuOai)
243
- if params[:format] == 'oai'
244
- unless @manifestations.empty?
245
- @resumption = set_resumption_token(
246
- params[:resumptionToken],
247
- @from_time || Manifestation.last.updated_at,
248
- @until_time || Manifestation.first.updated_at,
249
- @manifestations.per_page
250
- )
251
- else
252
- @oai[:errors] << 'noRecordsMatch'
253
- end
254
- end
255
- end
256
- end
257
-
258
- store_location # before_filter ではファセット検索のURLを記憶してしまう
259
-
260
- respond_to do |format|
261
- format.html
262
- format.mobile
263
- format.xml { render :xml => @manifestations }
264
- format.sru { render :layout => false }
265
- format.rss { render :layout => false }
266
- format.csv { render :layout => false }
267
- format.rdf { render :layout => false }
268
- format.atom
269
- format.oai {
270
- case params[:verb]
271
- when 'Identify'
272
- render :template => 'manifestations/identify'
273
- when 'ListMetadataFormats'
274
- render :template => 'manifestations/list_metadata_formats'
275
- when 'ListSets'
276
- @series_statements = SeriesStatement.select([:id, :original_title])
277
- render :template => 'manifestations/list_sets'
278
- when 'ListIdentifiers'
279
- render :template => 'manifestations/list_identifiers'
280
- when 'ListRecords'
281
- render :template => 'manifestations/list_records'
282
- end
283
- }
284
- format.mods
285
- format.json { render :json => @manifestations }
286
- format.js
287
- end
288
- end
289
-
290
- private
291
-
292
- def make_query(query, options = {})
293
- # TODO: integerやstringもqfに含める
294
- query = query.to_s.strip
295
-
296
- if query.size == 1
297
- query = "#{query}*"
298
- end
299
-
300
- if options[:mode] == 'recent'
301
- query = "#{query} created_at_d:[NOW-1MONTH TO NOW]"
302
- end
303
-
304
- unless options[:tag].blank?
305
- query = "#{query} tag_sm:#{options[:tag]}"
306
- end
307
-
308
- unless options[:creator].blank?
309
- query = "#{query} creator_text:#{options[:creator]}"
310
- end
311
-
312
- unless options[:contributor].blank?
313
- query = "#{query} contributor_text:#{options[:contributor]}"
314
- end
315
-
316
- unless options[:isbn].blank?
317
- query = "#{query} isbn_sm:#{options[:isbn].gsub('-', '')}"
318
- end
319
-
320
- unless options[:issn].blank?
321
- query = "#{query} issn_s:#{options[:issn].gsub('-', '')}"
322
- end
323
-
324
- unless options[:lccn].blank?
325
- query = "#{query} lccn_s:#{options[:lccn]}"
326
- end
327
-
328
- unless options[:nbn].blank?
329
- query = "#{query} nbn_s:#{options[:nbn]}"
330
- end
331
-
332
- unless options[:publisher].blank?
333
- query = "#{query} publisher_text:#{options[:publisher]}"
334
- end
335
-
336
- unless options[:item_identifier].blank?
337
- query = "#{query} item_identifier_sm:#{options[:item_identifier]}"
338
- end
339
-
340
- unless options[:number_of_pages_at_least].blank? and options[:number_of_pages_at_most].blank?
341
- number_of_pages = {}
342
- number_of_pages[:at_least] = options[:number_of_pages_at_least].to_i
343
- number_of_pages[:at_most] = options[:number_of_pages_at_most].to_i
344
- number_of_pages[:at_least] = "*" if number_of_pages[:at_least] == 0
345
- number_of_pages[:at_most] = "*" if number_of_pages[:at_most] == 0
346
-
347
- query = "#{query} number_of_pages_i:[#{number_of_pages[:at_least]} TO #{number_of_pages[:at_most]}]"
348
- end
349
-
350
- query = set_pub_date(query, options)
351
- query = set_acquisition_date(query, options)
352
-
353
- query = query.strip
354
- if query == '[* TO *]'
355
- # unless params[:advanced_search]
356
- query = ''
357
- # end
358
- end
359
-
360
- return query
361
- end
362
-
363
- def set_search_result_order(sort_by, order)
364
- sort = {}
365
- # TODO: ページ数や大きさでの並べ替え
366
- case sort_by
367
- when 'title'
368
- sort[:sort_by] = 'sort_title'
369
- sort[:order] = 'asc'
370
- when 'pub_date'
371
- sort[:sort_by] = 'date_of_publication'
372
- sort[:order] = 'desc'
373
- else
374
- # デフォルトの並び方
375
- sort[:sort_by] = 'created_at'
376
- sort[:order] = 'desc'
377
- end
378
- if order == 'asc'
379
- sort[:order] = 'asc'
380
- elsif order == 'desc'
381
- sort[:order] = 'desc'
382
- end
383
- sort
384
- end
385
-
386
- def render_mode(mode)
387
- case mode
388
- when 'holding'
389
- render :partial => 'manifestations/show_holding', :locals => {:manifestation => @manifestation}
390
- when 'barcode'
391
- if defined?(EnjuBarcode)
392
- barcode = Barby::QrCode.new(@manifestation.id)
393
- send_data(barcode.to_svg, :disposition => 'inline', :type => 'image/svg+xml')
394
- end
395
- when 'tag_edit'
396
- if defined?(EnjuBookmark)
397
- render :partial => 'manifestations/tag_edit', :locals => {:manifestation => @manifestation}
398
- end
399
- when 'tag_list'
400
- if defined?(EnjuBookmark)
401
- render :partial => 'manifestations/tag_list', :locals => {:manifestation => @manifestation}
402
- end
403
- when 'show_index'
404
- render :partial => 'manifestations/show_index', :locals => {:manifestation => @manifestation}
405
- when 'show_creators'
406
- render :partial => 'manifestations/show_creators', :locals => {:manifestation => @manifestation}
407
- when 'show_all_creators'
408
- render :partial => 'manifestations/show_creators', :locals => {:manifestation => @manifestation}
409
- when 'pickup'
410
- render :partial => 'manifestations/pickup', :locals => {:manifestation => @manifestation}
411
- when 'calil_list'
412
- if defined?(EnjuCalil)
413
- render :partial => 'manifestations/calil_list', :locals => {:manifestation => @manifestation}
414
- end
415
- else
416
- false
417
- end
418
- end
419
-
420
- def prepare_options
421
- @carrier_types = CarrierType.all
422
- @content_types = ContentType.all
423
- @roles = Role.all
424
- @languages = Language.all_cache
425
- @frequencies = Frequency.all
426
- @nii_types = NiiType.all if defined?(NiiType)
427
- end
428
-
429
- def get_index_patron
430
- patron = {}
431
- case
432
- when params[:patron_id]
433
- patron[:patron] = Patron.find(params[:patron_id])
434
- when params[:creator_id]
435
- patron[:creator] = Patron.find(params[:creator_id])
436
- when params[:contributor_id]
437
- patron[:contributor] = Patron.find(params[:contributor_id])
438
- when params[:publisher_id]
439
- patron[:publisher] = Patron.find(params[:publisher_id])
440
- end
441
- patron
442
- end
443
-
444
- def set_reservable
445
- case params[:reservable].to_s
446
- when 'true'
447
- @reservable = true
448
- when 'false'
449
- @reservable = false
450
- else
451
- @reservable = nil
452
- end
453
- end
454
-
455
- def set_pub_date(query, options)
456
- unless options[:pub_date_from].blank? and options[:pub_date_to].blank?
457
- options[:pub_date_from].to_s.gsub!(/\D/, '')
458
- options[:pub_date_to].to_s.gsub!(/\D/, '')
459
-
460
- pub_date = {}
461
- if options[:pub_date_from].blank?
462
- pub_date[:from] = "*"
463
- else
464
- pub_date[:from] = Time.zone.parse(options[:pub_date_from]).beginning_of_day.utc.iso8601 rescue nil
465
- unless pub_date[:from]
466
- pub_date[:from] = Time.zone.parse(Time.mktime(options[:pub_date_from]).to_s).beginning_of_day.utc.iso8601
467
- end
468
- end
469
-
470
- if options[:pub_date_to].blank?
471
- pub_date[:to] = "*"
472
- else
473
- pub_date[:to] = Time.zone.parse(options[:pub_date_to]).end_of_day.utc.iso8601 rescue nil
474
- unless pub_date[:to]
475
- pub_date[:to] = Time.zone.parse(Time.mktime(options[:pub_date_to]).to_s).end_of_year.utc.iso8601
476
- end
477
- end
478
- query = "#{query} date_of_publication_d:[#{pub_date[:from]} TO #{pub_date[:to]}]"
479
- end
480
- query
481
- end
482
-
483
- def set_acquisition_date(query, options)
484
- unless options[:acquired_from].blank? and options[:acquired_to].blank?
485
- options[:acquired_from].to_s.gsub!(/\D/, '')
486
- options[:acquired_to].to_s.gsub!(/\D/, '')
487
-
488
- acquisition_date = {}
489
- if options[:acquired_from].blank?
490
- acquisition_date[:from] = "*"
491
- else
492
- acquisition_date[:from] = Time.zone.parse(options[:acquired_from]).beginning_of_day.utc.iso8601 rescue nil
493
- unless acquisition_date[:from]
494
- acquisition_date[:from] = Time.zone.parse(Time.mktime(options[:acquired_from]).to_s).beginning_of_day.utc.iso8601
495
- end
496
- end
497
-
498
- if options[:acquired_to].blank?
499
- acquisition_date[:to] = "*"
500
- else
501
- acquisition_date[:to] = Time.zone.parse(options[:acquired_to]).end_of_day.utc.iso8601 rescue nil
502
- unless acquisition_date[:to]
503
- acquisition_date[:to] = Time.zone.parse(Time.mktime(options[:acquired_to]).to_s).end_of_year.utc.iso8601
504
- end
505
- end
506
- query = "#{query} acquired_at_d:[#{acquisition_date[:from]} TO #{acquisition_date[:to]}]"
507
- end
508
- query
509
- end
510
-
511
- def set_title
512
- if @series_statement
513
- @manifestation.set_series_statement(@series_statement)
514
- elsif @original_manifestation
515
- @manifestation.original_title = @original_manifestation.original_title
516
- @manifestation.title_transcription = @original_manifestation.title_transcription
517
- end
518
- end
519
- end