class PersonalOtherPapersController < ApplicationController include Admin::OtherPapersHelper require 'securerandom' def index params = OrbitHelper.params other_papers = OtherPaper.sort_for_frontend page = OrbitHelper.page rescue Page.where(page_id: params[:page_id]).first title_is_paper_format = true if page.custom_string_field == 'table' title_is_paper_format = false fields_to_show = page.custom_array_field rescue [] if fields_to_show.blank? fields_to_show = ["title", "member_profile", "issue_date", "newsletter", "vol_no", "isbn", "url"] end else fields_to_show = ["issue_date", "title"] end if params[:keywords].present? other_papers = filter_keywords(other_papers,params[:selectbox],params[:keywords]) end other_papers = other_papers.page(params[:page_no]).per(OrbitHelper.page_data_count) other_papers_list = other_papers.collect do |other_paper| {'jps' => fields_to_show.map{|field| {"value"=> get_display_field(other_paper,field, title_is_paper_format)}}} end extras = {"th-title" => I18n.t("personal_other_paper.title"), "th-member_profile" => I18n.t("personal_other_paper.member_profile"), "th-issue_date" => I18n.t("personal_other_paper.issue_date"), "th-newsletter" => I18n.t("personal_other_paper.newsletter"), "th-vol_no" => I18n.t("personal_other_paper.vol_no"), "th-isbn" => I18n.t("personal_other_paper.isbn"), "th-url" => I18n.t("personal_other_paper.url")} choice_show = [] headers = [] fields_to_show.each do |fs| col = 2 col = 3 if fs == 'title' headers << { 'head-title' => t("personal_other_paper.#{fs}"), 'col' => col } choice_show << t("personal_other_paper.#{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_other_paper.extend_translate.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_other_paper.extend_translate.search_class') search_text = t('personal_other_paper.extend_translate.word_to_search') @_request = OrbitHelper.request csrf_value = form_authenticity_token extras = extras.merge({ '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 }) extras["widget-title"] = I18n.t("module_name.personal_other_paper") { "other_papers" => other_papers_list, "headers" => headers, "extras" => extras, "total_pages" => other_papers.total_pages, 'choice' => choice } end def show params = OrbitHelper.params plugin = OtherPaper.where(:is_hidden=>false).find_by(uid: params[:uid].to_s) fields_to_show = ["title", "member_profile", "issue_date", "newsletter", "vol_no", "isbn", "url", "keywords", "note"] {"plugin_datas"=>plugin.get_plugin_data(fields_to_show)} end def get_display_field(other_paper,field, title_is_paper_format=false) text_only = false value = other_paper.send(field) rescue "" if field.include?(".") value = other_paper field.split(".").each{|f| value = value.send(f) rescue nil } end file_fields = [] link_fields = [] member_fields = [] if file_fields.include?(field) files = other_paper.send(field.pluralize) value = files.map do |file| url = file.file.url title = (file.title.blank? ? File.basename(file.file.path) : file.title) "
  • #{title}
  • " end value = value.join("") elsif link_fields.include?(field) links = other_paper.send(field.pluralize) value = links.map do |link| url = link.url title = (link.title.blank? ? url : link.title) "
  • #{title}
  • " end value = value.join("") elsif member_fields.include?(field) members = other_paper.send(field.pluralize) value = members.map{|m| path = OrbitHelper.url_to_plugin_show(m.to_param, 'member') rescue '#' ((text_only rescue false) ? m.name : "#{m.name}") } join_text = (text_only rescue false) ? "," : "
    " value = value.join(join_text) elsif field == "member_profile" || field == "authors" value = get_authors_show(other_paper) end strftime_hash = {"issue_date"=>"%Y/%m"} if strftime_hash.keys.include?(field) value = value.strftime(strftime_hash[field]) rescue value end if field == "title" link = OrbitHelper.url_to_plugin_show(other_paper.to_param,'personal_other_paper') tmp_title = (title_is_paper_format ? other_paper.create_link : value) value = link == '#' ? tmp_title : "#{tmp_title}" end value return value end def get_fields_for_index @page = Page.find(params[:page_id]) rescue nil @fields_to_show = ["title", "issue_date", "newsletter", "vol_no", "isbn", "url", "other_paper_status.status", "note", "keywords"] @fields_to_show = @fields_to_show.map { |fs| [t("personal_other_paper.#{fs}"), fs] } if @page.present? && @page.custom_string_field == 'table' @default_fields_to_show = ["title", "member_profile", "issue_date", "newsletter", "vol_no", "isbn", "url"] else @default_fields_to_show = ["issue_date", "title"] end 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 def filter_keywords(other_papers,select_field,keywords) member_fields = [] file_fields = [] link_fields = [] if select_field == "default" other_papers = other_papers.where(:slug_title=>/#{gsub_invalid_character(keywords)}/) elsif select_field == "member_profile" ms = MemberProfile.all.select{|m| m.name.include?(keywords)} other_papers = other_papers.where(:member_profile_id.in=>ms.map{|m| m.id}) elsif member_fields.include?(select_field) ms = MemberProfile.all.select{|m| m.name.include?(keywords)} m_ids = ms.map{|m| m.id.to_s } tmp_other_papers = other_papers.select{|p| (p.send("#{select_field.singularize}_ids") & m_ids).count != 0} other_papers = other_papers.where(:id.in=>tmp_other_papers.map{|p| p.id}) elsif select_field.split(".").count > 1 relate_name = select_field.split(".").first field_name = select_field.split(".").last.gsub(/^\$+/, '') relate = relate_name.classify.constantize relate_ids = relate.where(field_name=>/#{gsub_invalid_character(keywords)}/).pluck(:id) other_papers = other_papers.where("#{relate_name.singularize}_id"=>{'$in'=>relate_ids}) elsif (OtherPaper.fields[select_field].options[:type] == Date rescue false) keywords = keywords.split(/[\/\-]/) if keywords.count > 1 Date.parse(keywords.join("/")) else start_time = Date.parse(keywords[0] + "/1/1") end_time = Date.parse(keywords[0] + "/12/31") other_papers = other_papers.where(select_field=>{'$gte'=>start_time,'$lte'=>end_time}) end elsif (OtherPaper.fields[select_field].options[:type] == DateTime rescue false) keywords = keywords.split(/[\/\-]/) if keywords.count > 1 DateTime.parse(keywords.join("/")) elsif keywords[0].include?(":") tmp_other_papers = other_papers.select{|p| (p.send(select_field).strftime('%Y/%m/%d %H:%M').include?(keywords[0]) rescue false)} other_papers = other_papers.where(:id.in=>tmp_other_papers.map{|p| p.id}) else start_time = DateTime.parse(keywords[0] + "/1/1 00:00") end_time = DateTime.parse(keywords[0] + "/12/31 23:59") other_papers = other_papers.where(select_field=>{'$gte'=>start_time,'$lte'=>end_time}) end elsif (OtherPaper.fields[select_field].options[:type] == Integer rescue false) tmp_other_papers = other_papers.select{|p| p.send(select_field).to_s.include?(keywords)} other_papers = other_papers.where(:id.in=>tmp_other_papers.map{|p| p.id}) elsif file_fields.include?(select_field) file_field = select_field.classify.constantize ids1 = file_field.where(:file=>/#{gsub_invalid_character(keywords)}/).pluck(:id) ids2 = file_field.where(:title=>/#{gsub_invalid_character(keywords)}/).pluck(:id) ids = ids1 + ids2 tmp_other_papers = other_papers.select{|p| (p.send("#{select_field}_ids") & ids).count != 0} other_papers = other_papers.where(:id.in=>tmp_other_papers.map{|p| p.id}) elsif link_fields.include?(select_field) link_field = select_field.classify.constantize ids1 = link_field.where(:title=>/#{gsub_invalid_character(keywords)}/).pluck(:id) ids2 = link_field.where(:url=>/#{gsub_invalid_character(keywords)}/).pluck(:id) ids = ids1 + ids2 tmp_other_papers = other_papers.select{|p| (p.send("#{select_field}_ids") & ids).count != 0} other_papers = other_papers.where(:id.in=>tmp_other_papers.map{|p| p.id}) else other_papers = other_papers.where(select_field=>/#{gsub_invalid_character(keywords)}/) end return other_papers end def gsub_invalid_character(text) text.to_s.gsub(/(\/|\*|\\|\]|\[|\(|\)|\.|\+|\?|\!)/){|ff| "\\"+ff} end end