class PersonalProjectsController < ApplicationController include Admin::PersonalProjectsHelper def index params = OrbitHelper.params page_data_count = OrbitHelper.page_data_count projects = Project.where(:project_title.ne => nil, :project_title.ne => '').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[ project_type year project_title participator job_title period unit ] end if !params[:selectbox].nil? projects_temp = Project.where(is_hidden: false).sort_by { |tp| [-tp[:year].to_i, -tp[:publication_date].to_i] } case params[:selectbox] when 'project_type' projects_show = projects_temp.select { |value| search_all_words((value.send('project_type').title rescue ''), params[:keywords]) } when 'project_title', 'default' projects_show = projects_temp.select { |value| search_all_words(value.send('project_title').to_s, params[:keywords]) } when 'period' projects_show = projects_temp.select { |value| search_all_words(value.send('duration').to_s, params[:keywords]) } when 'language' projects_show = projects_temp.select { |value| search_all_words(t(value.send('language')), params[:keywords]) } when 'participator' projects_show = projects_temp.select { |value| search_all_words(get_authors_text(value), params[:keywords]) } when 'abstract' projects_show = projects_temp.select { |value| search_all_words(Nokogiri::HTML(value.abstract).text, params[:keywords]) } when 'note' projects_show = projects_temp.select { |value| search_all_words(Nokogiri::HTML(value.note).text, params[:keywords]) } else projects_show = projects_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 projects = projects_show[(page_to_show - 1) * page_data_count...page_to_show * page_data_count] projects_total_pages = (projects_show.length / page_data_count.to_f).ceil else projects_total_pages = projects.total_pages end project_list = [] projects.each do |project| t = [] fields_to_show.each do |fs| case fs when 'project_type' t << { 'value' => (project.send(fs).title rescue '') } when 'project_title' t << { 'value' => "" + (project.send(fs) rescue '') + '' } when 'period' t << { 'value' => (project.send('duration') rescue '') } when 'language' t << { 'value' => (t(project.send('language')) rescue '') } when 'url' t << { 'value' => project.url.to_s.blank? ? "" : "#{project.url}"} when 'participator' t << { 'value' => get_authors_show(project) } else t << { 'value' => (project.send(fs) rescue '') } end end project_list << { 'project' => t } end choice_show = [] headers = [] fields_to_show.each do |fs| col = 2 col = 3 if fs == 'project_title' headers << { 'head-title' => t("personal_project.#{fs}"), 'col' => col } choice_show << t("personal_project.#{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_project.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_project.search_class') search_text = t('personal_project.word_to_search') csrf_value = (0...46).map { ('a'..'z').to_a[rand(26)] }.join { 'projects' => project_list, 'headers' => headers, 'extras' => { 'widget-title' => t('module_name.personal_project'), 'url' => '/' + params[:locale] + params[:url], 'select_text' => select_text, 'search_text' => search_text, 'search_value' => params[:keywords], 'csrf_value' => csrf_value }, 'total_pages' => projects_total_pages, 'choice' => choice } end def show params = OrbitHelper.params plugin = Project.where(is_hidden: false).find_by(uid: params[:uid]) fields_to_show = %w[ year project_type project_title participator job_title period unit abstract note url file 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 project_type project_title participator job_title period unit abstract note url file language ] @fields_to_show = @fields_to_show.map { |fs| [t("personal_project.#{fs}"), fs] } @default_fields_to_show = %w[ project_type year project_title participator job_title period unit ] 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