class PersonalJournalsController < ApplicationController def index params = OrbitHelper.params page_data_count = OrbitHelper.page_data_count journal_papers = JournalPaper.where(is_hidden: false).sort_for_frontend.page(OrbitHelper.params[:page_no]).per(page_data_count) page = Page.where(page_id: params[:page_id]).first rescue nil if page.custom_string_field == 'table' fields_to_show = page.custom_array_field rescue [] if fields_to_show.blank? fields_to_show = %w[ paper_title journal_title authors year issue_no vol_no level_type ] end else fields_to_show = %w[ year paper_title ] end if !params[:selectbox].nil? journal_papers_temp = JournalPaper.where(is_hidden: false).sort_by { |tp| [-tp[:year].to_i, -tp[:publication_date].to_i] } case params[:selectbox] when 'paper_title', 'default' if page.custom_string_field == 'table' journal_papers_show = journal_papers_temp.select { |value| search_all_words(value.paper_title, params[:keywords]) } else journal_papers_show = journal_papers_temp.select { |value| search_all_words(value.create_link, params[:keywords]) } end when 'level_type' journal_papers_show = journal_papers_temp.select { |value| search_all_words(value.journal_levels.collect(&:title).join(', ').to_s, params[:keywords]) } when 'publication_date' journal_papers_show = journal_papers_temp.select { |value| search_all_words((value.send('publication_date').strftime('%Y/%m/%d') rescue ''), params[:keywords]) } when 'author_type' journal_papers_show = journal_papers_temp.select { |value| search_all_words(value.journal_paper_author_types.collect(&:title).join(', '), params[:keywords]) } when 'paper_type' journal_papers_show = journal_papers_temp.select { |value| search_all_words((value.journal_paper_type.title rescue ''), params[:keywords]) } when 'language' journal_papers_show = journal_papers_temp.select { |value| search_all_words((!value.language.nil? ? t(value.language.to_s) : ''), params[:keywords]) } else journal_papers_show = journal_papers_temp.select { |value| search_all_words(value.send(params[:selectbox]).to_s, params[:keywords]) } end page_to_show = params[:page_no].nil? ? 1 : params[:page_no].to_i journal_papers = journal_papers_show[(page_to_show - 1) * page_data_count...page_to_show * page_data_count] journal_papers_total_pages = (journal_papers_show.length / page_data_count.to_f).ceil else journal_papers_total_pages = journal_papers.total_pages end journal_paper_list = [] journal_papers.each do |journal_paper| t = [] fields_to_show.each do |fs| case fs when 'paper_title' if page.custom_string_field == 'table' t << { 'value' => "#{journal_paper.paper_title}" } else t << { 'value' => "#{journal_paper.create_link}" } end when 'level_type' t << { 'value' => (!journal_paper.journal_levels.blank? ? "(#{journal_paper.journal_levels.collect(&:title).join(', ')})" : nil) } when 'publication_date' t << { 'value' => (journal_paper.send(fs).strftime('%Y/%m') rescue '') } when 'author_type' t << { 'value' => (journal_paper.journal_paper_author_types.collect(&:title).join(', ') rescue '') } when 'paper_type' t << { 'value' => (journal_paper.journal_paper_type.title rescue '') } when 'language' t << { 'value' => (!journal_paper.language.nil? ? t(journal_paper.language.to_s) : '') } else t << { 'value' => (journal_paper.send(fs) rescue '') } end end journal_paper_list << { 'jps' => t } end headers = [] choice_show = [] fields_to_show.each do |fs| col = 2 col = 3 if fs == 'paper_title' headers << { 'head-title' => t("personal_journal.#{fs}"), 'col' => col } choice_show << t("personal_journal.#{fs}") 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_journal.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_journal.search_class') search_text = t('personal_journal.word_to_search') { 'journal_papers' => journal_paper_list, 'headers' => headers, 'extras' => { 'widget-title' => t('module_name.journal_paper'), 'url' => '/' + params[:locale] + params[:url], 'select_text' => select_text, 'search_text' => search_text, 'search_value' => params[:keywords] }, 'total_pages' => journal_papers_total_pages, 'choice' => choice } end def show params = OrbitHelper.params plugin = JournalPaper.where(is_hidden: false).find_by(uid: params[:uid]) fields_to_show = %w[ year authors author_type paper_title journal_title vol_no issue_no form_to_start form_to_end level_type paper_type total_pages publication_date isbn abstract language url associated_project 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[ year authors author_type paper_title journal_title vol_no issue_no form_to_start form_to_end level_type paper_type total_pages publication_date isbn abstract language url ] @fields_to_show = @fields_to_show.map { |fs| [t("personal_journal.#{fs}"), fs] } @default_fields_to_show = %w[ paper_title journal_title authors year issue_no vol_no level_type ] 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