class PersonalConferencesController < ApplicationController def index params = OrbitHelper.params page_data_count = OrbitHelper.page_data_count writing_conferences = WritingConference.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[ authors paper_title conference_title location paper_types paper_levels ] end else fields_to_show = %w[ year paper_title ] end if !params[:selectbox].nil? writing_conferences_temp = WritingConference.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' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words(value.paper_title, params[:keywords]) } else writing_conferences_show = writing_conferences_temp.select { |value| search_all_words(value.create_link, params[:keywords]) } end when 'paper_levels' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words(value.conference_paper_levels.collect(&:title).join(', ').to_s, params[:keywords]) } when 'paper_types' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words(value.conference_paper_types.collect(&:title).join(', ').to_s, params[:keywords]) } when 'period' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words(value.duration, params[:keywords]) } when 'publication_date' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words((value.send('publication_date').strftime('%Y/%m/%d') rescue ''), params[:keywords]) } when 'author_type' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words(value.conference_author_types.collect(&:title).join(', '), params[:keywords]) } when 'language' writing_conferences_show = writing_conferences_temp.select { |value| search_all_words((!value.language.nil? ? t(value.language.to_s) : ''), params[:keywords]) } else writing_conferences_show = writing_conferences_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 writing_conferences = writing_conferences_show[(page_to_show - 1) * page_data_count...page_to_show * page_data_count] writing_conferences_total_pages = (writing_conferences_show.length / page_data_count.to_f).ceil else writing_conferences_total_pages = writing_conferences.total_pages end writing_conference_list = [] writing_conferences.each do |writing_conference| t = [] fields_to_show.each do |fs| case fs when 'paper_title' if page.custom_string_field == 'table' t << { 'value' => "#{writing_conference.paper_title}" } else t << { 'value' => "#{writing_conference.create_link}" } end when 'paper_levels' t << { 'value' => (!writing_conference.conference_paper_levels.blank? ? "(#{writing_conference.conference_paper_levels.collect(&:title).join(', ')})" : nil) } when 'paper_types' t << { 'value' => (!writing_conference.conference_paper_types.blank? ? "(#{writing_conference.conference_paper_types.collect(&:title).join(', ')})" : nil) } when 'publication_date' t << { 'value' => (writing_conference.send(fs).strftime('%Y/%m') rescue '') } when 'author_type' t << { 'value' => (writing_conference.conference_author_types.collect(&:title).join(', ') rescue '') } when 'period' t << { 'value' => writing_conference.duration } when 'language' t << { 'value' => (!writing_conference.language.nil? ? t(writing_conference.language.to_s) : '') } else t << { 'value' => writing_conference.send(fs) } end end writing_conference_list << { 'cps' => t } end choice_show = [] headers = [] fields_to_show.each do |fs| col = 2 col = 3 if fs == 'paper_title' headers << { 'head-title' => t("personal_conference.#{fs}"), 'col' => col } choice_show << t("personal_conference.#{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_conference.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_conference.search_class') search_text = t('personal_conference.word_to_search') { 'writing_conferences' => writing_conference_list, 'extras' => { 'widget-title' => t('module_name.personal_conference'), 'url' => '/' + params[:locale] + params[:url], 'select_text' => select_text, 'search_text' => search_text, 'search_value' => params[:keywords] }, 'headers' => headers, 'total_pages' => writing_conferences_total_pages, 'choice' => choice } end def show params = OrbitHelper.params plugin = WritingConference.where(is_hidden: false).find_by(uid: params[:uid]) fields_to_show = %w[ year authors paper_title conference_title location period_start_date period_end_date period paper_type paper_level sponsor author_type number_of_authors abstract url file publication_date isbn isi_number language ] { '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 paper_title conference_title location period_start_date period_end_date period paper_type paper_level sponsor author_type number_of_authors abstract url publication_date isbn isi_number language ] @fields_to_show = @fields_to_show.map { |fs| [t("personal_conference.#{fs}"), fs] } @default_fields_to_show = %w[ authors paper_title conference_title location paper_types paper_levels ] 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