209 lines
9.3 KiB
Ruby
209 lines
9.3 KiB
Ruby
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)
|
|
"<li><a href='#{url}'' target='_blank'>#{title}</li>"
|
|
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)
|
|
"<li><a href='#{url}'' target='_blank'>#{title}</li>"
|
|
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 : "<a href='#{path}'>#{m.name}</a>")
|
|
}
|
|
join_text = (text_only rescue false) ? "," : "<br>"
|
|
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 : "<a href='#{link}' target='_blank' title='#{tmp_title}'>#{tmp_title}</a>"
|
|
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
|