class PersonalJournalsController < ApplicationController include Admin::JournalPapersHelper def index params = OrbitHelper.params page_data_count = OrbitHelper.page_data_count page = OrbitHelper.page custom_data_field = page.custom_data_field || {} journal_paper_query = JournalPaper.sort_for_frontend page_year = custom_data_field[:year] page_journal_type = custom_data_field[:journal_type] if (page_year.present?) journal_paper_query = journal_paper_query.where(:year.in => page_year.to_a ) end if (page_journal_type.present?) journal_paper_query = journal_paper_query.where(:journal_type_ids.in => page_journal_type.to_a ) end journal_papers = journal_paper_query.page(OrbitHelper.params[:page_no]).per(page_data_count) if params[:layout_type].start_with?('index_by_author') return index_by_author(journal_papers) end page = OrbitHelper.page 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 vol_no issue_no level_type ] end else fields_to_show = %w[ year paper_title ] end if !params[:selectbox].nil? journal_papers_temp = journal_paper_query.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]) } when 'authors' journal_papers_show = journal_papers_temp.select { |value| search_all_words(get_authors_text(value), params[:keywords]) } else if fields_to_show.include?(params[:selectbox]) journal_papers_show = journal_papers_temp.select { |value| search_all_words(value.send(params[:selectbox]).to_s, params[:keywords]) } else journal_papers_show = journal_papers_temp end 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) : '') } when 'url' t << { 'value' => journal_paper.url.to_s.blank? ? "" : "#{journal_paper.url}"} when 'authors' t << { 'value' => get_authors_show(journal_paper) } 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') @_request = OrbitHelper.request csrf_value = form_authenticity_token { 'journal_papers' => journal_paper_list, 'headers' => headers, 'extras' => { 'widget-title' => t('module_name.journal_paper'), 'url' => '/' + I18n.locale.to_s + params[:url], 'select_text' => select_text, 'search_text' => search_text, 'search_value' => params[:keywords].to_s.gsub(/\"/,''), 'csrf_value' => csrf_value }, 'total_pages' => journal_papers_total_pages, 'choice' => choice } end def index_by_author(journal_papers) journal_papers_total_pages = journal_papers.total_pages journal_papers_list = journal_papers.group_by{|jp| jp.year}.collect do |year, jps| jps_data = jps.group_by do |jp| jp.member_profiles.collect{|v| v.name}.join(', ') rescue jp.authors end.collect do |name, jps| jps_data = jps.collect do |jp| {'title' => jp.create_link_tag_for_title} end {'name' => name, 'jps' => jps_data} end {'year' => year, 'jps_list'=> jps_data} end { 'journal_papers' => journal_papers_list, 'extras' => { 'widget-title' => t('module_name.journal_paper')}, 'total_pages' => journal_papers_total_pages } end def show params = OrbitHelper.params plugin = JournalPaper.where(is_hidden: false).find_by(uid: params[:uid].to_s) fields_to_show = %w[ year authors author_type paper_title journal_title vol_no issue_no form_to 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 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