app/controllers/manifestations_controller.rb in enju_biblio-0.3.18 vs app/controllers/manifestations_controller.rb in enju_biblio-0.4.0.beta.1
- old
+ new
@@ -27,22 +27,33 @@
set_reservable if defined?(EnjuCirculation)
sort, @count = {}, {}
query = ""
- if request.format.text?
+ if params[:format] == 'txt'
per_page = 65534
end
- if params[:api] == 'openurl'
- openurl = Openurl.new(params)
- @manifestations = openurl.search
- query = openurl.query_text
- sort = set_search_result_order(params[:sort_by], params[:order])
+ if params[:format] == 'sru'
+ if params[:operation] == 'searchRetrieve'
+ sru = Sru.new(params)
+ query = sru.cql.to_sunspot
+ sort = sru.sort_by
+ else
+ render template: 'manifestations/explain', layout: false
+ return
+ end
else
- query = make_query(params[:query], params)
- sort = set_search_result_order(params[:sort_by], params[:order])
+ if params[:api] == 'openurl'
+ openurl = Openurl.new(params)
+ @manifestations = openurl.search
+ query = openurl.query_text
+ sort = set_search_result_order(params[:sort_by], params[:order])
+ else
+ query = make_query(params[:query], params)
+ sort = set_search_result_order(params[:sort_by], params[:order])
+ end
end
# 絞り込みを行わない状態のクエリ
@query = query.dup
query = query.gsub(' ', ' ')
@@ -178,41 +189,41 @@
if params[:per_page].to_i > 0
per_page = params[:per_page].to_i
else
per_page = Manifestation.default_per_page
end
-
- pub_dates = parse_pub_date(params)
- pub_date_range = {}
-
- if pub_dates[:from] == '*'
- pub_date_range[:from] = 0
+ if params[:format] == 'sru'
+ #search.query.start_record(params[:startRecord] || 1, params[:maximumRecords] || 200)
else
- pub_date_range[:from] = Time.zone.parse(pub_dates[:from]).year
- end
- if pub_dates[:until] == '*'
- pub_date_range[:until] = 10000
- else
- pub_date_range[:until] = Time.zone.parse(pub_dates[:until]).year
- end
+ pub_dates = parse_pub_date(params)
+ pub_date_range = {}
+ if pub_dates[:from] == '*'
+ pub_date_range[:from] = 0
+ else
+ pub_date_range[:from] = Time.zone.parse(pub_dates[:from]).year
+ end
+ if pub_dates[:until] == '*'
+ pub_date_range[:until] = 10000
+ else
+ pub_date_range[:until] = Time.zone.parse(pub_dates[:until]).year
+ end
+ if params[:pub_year_range_interval]
+ pub_year_range_interval = params[:pub_year_range_interval].to_i
+ else
+ pub_year_range_interval = @library_group.pub_year_facet_range_interval || 10
+ end
- if params[:pub_year_range_interval]
- pub_year_range_interval = params[:pub_year_range_interval].to_i
- else
- pub_year_range_interval = @library_group.pub_year_facet_range_interval || 10
+ search.build do
+ facet :reservable if defined?(EnjuCirculation)
+ facet :carrier_type
+ facet :library
+ facet :language
+ facet :pub_year, range: pub_date_range[:from]..pub_date_range[:until], range_interval: pub_year_range_interval
+ facet :subject_ids if defined?(EnjuSubject)
+ paginate page: page.to_i, per_page: per_page
+ end
end
-
- search.build do
- facet :reservable if defined?(EnjuCirculation)
- facet :carrier_type
- facet :library
- facet :language
- facet :pub_year, range: pub_date_range[:from]..pub_date_range[:until], range_interval: pub_year_range_interval
- facet :subject_ids if defined?(EnjuSubject)
- paginate page: page.to_i, per_page: per_page
- end
-
search_result = search.execute
if @count[:query_result] > @max_number_of_results
max_count = @max_number_of_results
else
max_count = @count[:query_result]
@@ -248,12 +259,13 @@
respond_to do |format|
format.html
format.html.phone
format.xml { render xml: @manifestations }
+ format.sru { render layout: false }
format.rss { render layout: false }
- format.text { render layout: false }
+ format.txt { render layout: false }
format.rdf { render layout: false }
format.atom
format.mods
format.json
format.js
@@ -318,13 +330,13 @@
render xml: @manifestation
end
}
format.rdf
format.mods
- format.json
- format.text
- format.js { render template: 'manifestations/show.js' }
+ format.json { render json: @manifestation }
+ format.txt
+ format.js
format.download {
if @manifestation.attachment.path
if ENV['ENJU_STORAGE'] == 's3'
send_data data, filename: File.basename(@manifestation.attachment_file_name), type: 'application/octet-stream'
else
@@ -341,12 +353,12 @@
# GET /manifestations/new
# GET /manifestations/new.json
def new
@manifestation = Manifestation.new
- @manifestation.language = Language.find_by(iso_639_1: @locale)
- @parent = Manifestation.find_by(id: params[:parent_id]) if params[:parent_id].present?
+ @manifestation.language = Language.where(iso_639_1: @locale).first
+ @parent = Manifestation.where(id: params[:parent_id]).first if params[:parent_id].present?
if @parent
@manifestation.parent_id = @parent.id
[ :original_title, :title_transcription,
:serial, :title_alternative, :statement_of_responsibility, :publication_place,
:height, :width, :depth, :price, :access_address, :language, :frequency, :required_role,
@@ -380,29 +392,30 @@
end
# POST /manifestations
# POST /manifestations.json
def create
- @manifestation = Manifestation.new(manifestation_params)
- parent = Manifestation.find_by(id: @manifestation.parent_id)
+ creators_params = manifestation_params[:creators_attributes]
+ @manifestation = Manifestation.new(manifestation_params.delete_if{|k, v|
+ k == 'creators_attributes'
+ })
+ parent = Manifestation.where(id: @manifestation.parent_id).first
unless @manifestation.original_title?
@manifestation.original_title = @manifestation.attachment_file_name
end
respond_to do |format|
if @manifestation.save
Manifestation.transaction do
- set_creators
-
- if parent
- parent.derived_manifestations << @manifestation
- parent.index
- @manifestation.index
- end
-
- Sunspot.commit
+ @manifestation.creators = Agent.new_agents(creators_params)
+ parent.derived_manifestations << @manifestation if parent
end
+ if parent
+ parent.index
+ @manifestation.index
+ end
+ Sunspot.commit
format.html { redirect_to @manifestation, notice: t('controller.successfully_created', model: t('activerecord.models.manifestation')) }
format.json { render json: @manifestation, status: :created, location: @manifestation }
else
prepare_options
@@ -413,16 +426,20 @@
end
# PUT /manifestations/1
# PUT /manifestations/1.json
def update
- @manifestation.assign_attributes(manifestation_params)
+ creators_params = manifestation_params[:creators_attributes]
+ Manifestation.transaction do
+ @manifestation.update(manifestation_params.delete_if{|k, v|
+ k == 'creators_attributes'
+ })
+ @manifestation.creators = Agent.new_agents(creators_params)
+ end
respond_to do |format|
- if @manifestation.save
- set_creators
-
+ if @manifestation.valid?
format.html { redirect_to @manifestation, notice: t('controller.successfully_updated', model: t('activerecord.models.manifestation')) }
format.json { head :no_content }
else
prepare_options
format.html { render action: "edit" }
@@ -470,11 +487,11 @@
:repository_content, :required_role_id, :frequency_id,
:title_alternative_transcription, :description, :abstract, :available_at,
:valid_until, :date_submitted, :date_accepted, :date_captured,
:ndl_bib_id, :pub_date, :edition_string, :volume_number, :issue_number,
:serial_number, :content_type_id, :attachment, :lock_version,
- :dimensions, :fulltext_content, :extent, :memo,
+ :dimensions, :fulltext_content, :extent,
:parent_id,
:serial, :statement_of_responsibility,
{creators_attributes: [
:id, :last_name, :middle_name, :first_name,
:last_name_transcription, :middle_name_transcription,
@@ -528,13 +545,10 @@
:_destroy
]},
{identifiers_attributes: [
:id, :body, :identifier_type_id,
:_destroy
- ]},
- {manifestation_custom_values_attributes: [
- :id, :manifestation_custom_property_id, :manifestation_id, :value,:_destroy
]}
)
end
def make_query(query, options = {})
@@ -716,16 +730,16 @@
false
end
end
def prepare_options
- @carrier_types = CarrierType.order(:position).select([:id, :display_name, :position])
- @content_types = ContentType.order(:position).select([:id, :display_name, :position])
- @roles = Role.select([:id, :display_name, :position])
- @languages = Language.order(:position).select([:id, :display_name, :position])
- @frequencies = Frequency.order(:position).select([:id, :display_name, :position])
- @identifier_types = IdentifierType.order(:position).select([:id, :display_name, :position])
+ @carrier_types = CarrierType.select([:id, :display_name_translations, :position])
+ @content_types = ContentType.select([:id, :display_name_translations, :position])
+ @roles = Role.select([:id, :display_name_translations, :position])
+ @languages = Language.select([:id, :display_name, :position])
+ @frequencies = Frequency.select([:id, :display_name_translations, :position])
+ @identifier_types = IdentifierType.select([:id, :display_name, :position])
@nii_types = NiiType.select([:id, :display_name, :position]) if defined?(EnjuNii)
if defined?(EnjuSubject)
@subject_types = SubjectType.select([:id, :display_name, :position])
@subject_heading_types = SubjectHeadingType.select([:id, :display_name, :position])
@classification_types = ClassificationType.select([:id, :display_name, :position])
@@ -761,11 +775,11 @@
def parse_pub_date(options)
pub_date = {}
if options[:pub_date_from].blank?
pub_date[:from] = "*"
else
- year = options[:pub_date_from].to_s.gsub(/\D/, '').rjust(4, "0")
+ year = options[:pub_date_from].rjust(4, "0")
if year.length == 4
pub_date[:from] = Time.zone.parse(Time.utc(year).to_s).beginning_of_year.utc.iso8601
else
pub_date[:from] = Time.zone.parse(options[:pub_date_from]).beginning_of_day.utc.iso8601 rescue nil
end
@@ -775,11 +789,11 @@
end
if options[:pub_date_until].blank?
pub_date[:until] = "*"
else
- year = options[:pub_date_until].to_s.gsub(/\D/, '').rjust(4, "0")
+ year = options[:pub_date_until].rjust(4, "0")
if year.length == 4
pub_date[:until] = Time.zone.parse(Time.utc(year).to_s).end_of_year.utc.iso8601
else
pub_date[:until] = Time.zone.parse(options[:pub_date_until]).end_of_day.utc.iso8601 rescue nil
end
@@ -790,10 +804,12 @@
pub_date
end
def set_pub_date(query, options)
unless options[:pub_date_from].blank? && options[:pub_date_until].blank?
+ options[:pub_date_from].to_s.gsub!(/\D/, '')
+ options[:pub_date_until].to_s.gsub!(/\D/, '')
pub_date = parse_pub_date(options)
query = "#{query} date_of_publication_d:[#{pub_date[:from]} TO #{pub_date[:until]}]"
end
query
end
@@ -835,22 +851,11 @@
query = "#{query} acquired_at_d:[#{acquisition_date[:from]} TO #{acquisition_date[:until]}]"
end
query
end
- def set_creators
- creators_params = manifestation_params[:creators_attributes]
- contributors_params = manifestation_params[:contributors_attributes]
- publishers_params = manifestation_params[:publishers_attributes]
-
- Manifestation.transaction do
- @manifestation.creates.destroy_all
- @manifestation.realizes.destroy_all
- @manifestation.produces.destroy_all
- @manifestation.reload
-
- @manifestation.creators = Agent.new_agents(creators_params)
- @manifestation.contributors = Agent.new_agents(contributors_params)
- @manifestation.publishers = Agent.new_agents(publishers_params)
- end
+ def filtered_params
+ params.permit([:view, :format, :library, :carrier_type, :reservable, :pub_date_from, :pub_date_until, :language, :sort_by, :per_page, :query])
end
+
+ helper_method :filtered_params
end