class PersonalPatentsController < ApplicationController include Admin::PersonalPatentsHelper def index params = OrbitHelper.params page_data_count = OrbitHelper.page_data_count patents = Patent.where(is_hidden: false).sort_for_frontend.page(OrbitHelper.params[:page_no]).per(page_data_count) fields_to_show = Page.where(page_id: params[:page_id]).first.custom_array_field rescue [] if fields_to_show.blank? fields_to_show = %w[ publish_date patent_title patent_no patent_country authors ] end if !params[:selectbox].nil? patents_temp = Patent.where(is_hidden: false).sort_by { |tp| [-tp[:year].to_i, -tp[:publication_date].to_i] } case params[:selectbox] when 'patent_title', 'default' patents_show = patents_temp.select { |value| search_all_words((value.patent_title rescue ''), params[:keywords]) } when 'publish_date', 'application_date', 'end_date' patents_show = patents_temp.select { |value| search_all_words((value.send(params[:selectbox]).strftime('%Y/%m/%d') rescue ''), params[:keywords]) } when 'patent_category' patents_show = patents_temp.select { |value| search_all_words((value.patent_types.collect(&:title).join(', ').to_s rescue ''), params[:keywords]) } when 'author_type' patents_show = patents_temp.select { |value| search_all_words(value.patent_author_types.collect(&:title).join(', '), params[:keywords]) } when 'language' patents_show = patents_temp.select { |value| search_all_words((!value.language.nil? ? t(value.language.to_s) : ''), params[:keywords]) } when 'authors' patents_show = patents_temp.select { |value| search_all_words(get_authors_text(value), params[:keywords]) } when 'keywords' patents_show = patents_temp.select { |value| search_all_words(Nokogiri::HTML(value.keywords).text, params[:keywords]) } when 'note' patents_show = patents_temp.select { |value| search_all_words(Nokogiri::HTML(value.note).text, params[:keywords]) } else patents_show = patents_temp.select { |value| search_all_words((value.send(params[:selectbox]).to_s rescue ''), params[:keywords]) } end page_to_show = params[:page_no].nil? ? 1 : params[:page_no].to_i patents = patents_show[(page_to_show - 1) * page_data_count...page_to_show * page_data_count] patents_total_pages = (patents_show.length / page_data_count.to_f).ceil else patents_total_pages = patents.total_pages end patent_list = [] patents.each do |patent| t = [] fields_to_show.each do |fs| case fs when 'patent_title' t << { 'value' => "" + (patent.send(fs) rescue '') + '' } when 'publish_date' t << { 'value' => (patent.publish_date.strftime('%Y/%m/%d') rescue '') } when 'application_date' t << { 'value' => (patent.application_date.strftime('%Y/%m/%d') rescue '') } when 'end_date' t << { 'value' => (patent.end_date.strftime('%Y/%m/%d') rescue '') } when 'patent_category' t << { 'value' => (patent.patent_types.collect(&:title).join(', ') rescue '') } when 'author_type' t << { 'value' => (patent.patent_author_types.collect(&:title).join(', ') rescue '') } when 'language' t << { 'value' => (!patent.language.nil? ? t(patent.language.to_s) : '') } when 'url' t << { 'value' => patent.url.to_s.blank? ? "" : "#{patent.url}"} when 'authors' t << { 'value' => get_authors_show(patent) } else t << { 'value' => patent.send(fs) } end end patent_list << { 'patent_list' => t } end choice_show = [] headers = [] fields_to_show.each do |fs| col = 2 col = 3 if fs == 'patent_title' header = t("personal_patent.#{fs}") headers << { 'head-title' => header, 'col' => col } choice_show << header end choice_value = fields_to_show choice_value.unshift('default') choice_select = choice_value.map { |iter| iter == params[:selectbox] ? 'selected' : '' } choice_select = choice_select.map { |value| { 'choice_select' => value } } choice_value = choice_value.map { |value| { 'choice_value' => value } } choice_default = t('personal_patent.select_class') choice_show.unshift(choice_default) choice_show = choice_show.map { |value| { 'choice_show' => value } } choice = choice_value.zip(choice_show, choice_select) choice = choice.map { |value| value.inject :merge } select_text = t('personal_patent.search_class') search_text = t('personal_patent.word_to_search') { 'patents' => patent_list, 'extras' => { 'widget-title' => t('module_name.personal_patent'), 'url' => '/' + params[:locale] + params[:url], 'select_text' => select_text, 'search_text' => search_text, 'search_value' => params[:keywords] }, 'headers' => headers, 'total_pages' => patents_total_pages, 'choice' => choice } end def show params = OrbitHelper.params plugin = Patent.where(is_hidden: false).find_by(uid: params[:uid]) fields_to_show = %w[ patent_title patent_no patent_category patent_country progress_status author_type application_date publish_date end_date patent_organization year authors url language keywords note file ] { 'plugin_datas' => plugin.get_plugin_data(fields_to_show) } end def get_fields_for_index @page = Page.find(params[:page_id]) rescue nil @fields_to_show = %w[ patent_category year publish_date patent_title patent_no patent_organization progress_status application_date end_date publish_date author_type patent_country authors url language keywords note ] @fields_to_show = @fields_to_show.map { |fs| t("personal_patent.#{fs}") } @default_fields_to_show = %w[ publish_date patent_title patent_no patent_country authors ] render layout: false end def save_index_fields page = Page.find(params[:page_id]) rescue nil page.custom_array_field = params[:keys] page.save render json: { 'success' => true }.to_json end private def search_all_words(target, word) target = target.upcase words = word.upcase.split(' ') words.select { |value| target.include? value } == words end end