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