personal-journal/app/helpers/admin/journal_papers_helper.rb

254 lines
7.4 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module Admin::JournalPapersHelper
def get_authors_text(journal)
(journal.authors.to_s.blank? ? get_member(journal).collect(&:name).join('/') : Nokogiri::HTML(journal.authors.to_s).text rescue "")
end
def get_authors_show(journal)
begin
if journal.authors.to_s.blank?
get_member_show(journal)
else
members = get_member(journal)
if members.blank?
journal.authors.to_s
else
authors = journal.authors.to_s.split(/|,/).collect{|v| v.strip}
authors_tp = authors.clone
locales = Site.first.enable_locales rescue I18n.available_locales
members_tp = members.select do |member|
flag = true
locales.each do |locale|
name_tp = I18n.with_locale(locale) do
member.name.strip
end
author_index = authors.index(name_tp)
if !author_index.nil?
author = authors[author_index]
authors_tp[author_index] = "<a href='#{OrbitHelper.url_to_plugin_show(member.to_param,'member')}' title='#{author}'>#{author}</a>"
flag = false
break
end
end
flag
end
(get_a_tag_from_members(members_tp) + authors_tp).join('、')
end
end
rescue => e
""
end
end
def get_member(journal)
Array(MemberProfile.find(Array(journal).collect(&:member_profile_id))) rescue []
end
def get_a_tag_from_members(members)
members.collect{|member| "<a href='#{OrbitHelper.url_to_plugin_show(member.to_param,'member')}' title='#{member.name}'>#{member.name}</a>"}
end
def get_member_show(journal)
get_a_tag_from_members(get_member(journal)).join('、')
end
def get_level_type(journal)
!journal.journal_levels.blank? ? "(#{journal.journal_levels.collect(&:title).join(', ')})" : nil
end
def get_author_type(journal)
journal.journal_paper_author_types.collect(&:title).join(', ') rescue ''
end
def get_paper_type(journal)
journal.journal_paper_type.title rescue ''
end
def get_publication_date(journal)
journal.publication_date.strftime('%Y/%m/%d') rescue ''
end
def page_for_journal_paper(journal_paper_object)
journal_paper_page = nil
pages = Page.where(:module=>"journal_paper")
journal_paper_page = pages.first if journal_paper_page.nil?
request.protocol+(request.host_with_port+journal_paper_page.url+'/'+journal_paper_object.to_param).gsub('//','/') rescue "/"
end
def get_paper_list
user = current_user.nil? ? OrbitHelper.current_user : current_user
user_profile = user.member_profile
journals = JournalPaper.where(:member_profile_id => user_profile.id)
journals = journals.collect do |j|
files = j.journal_paper_files.collect do |jpf|
{
"title" => jpf.title,
"description" => jpf.description,
"link" => jpf.journal_file.url,
"extension" => (jpf.journal_file.url.split(".").last rescue "")
}
end
{
"id" => j.id.to_s,
"edit_url" => "/#{I18n.locale.to_s}/admin/members/#{user_profile.to_param}/journal_papers/#{j.to_param}/edit",
"delete_url" => "/#{I18n.locale.to_s}/admin/journal_papers/#{j.id.to_s}",
"paper_title" => j.paper_title,
"journal_title" => j.journal_title,
"keywords" => j.keywords,
"abstract" => j.abstract,
"files" => files
}
end
journals
end
def import_this_journal_paper(row,mp)
value = nil
jp = JournalPaper.new
row.cells.each_with_index do |cell,index|
next if index < 2
next if cell.nil?
val = cell.value
next if val.nil? || val == ""
case index
when 2
value = {"en" => val}
when 3
begin
value["zh_tw"] = val
rescue
value = {"zh_tw" => val}
end
jp.paper_title_translations = value
when 4
value = {"en" => val}
when 5
begin
value["zh_tw"] = val
rescue
value = {"zh_tw" => val}
end
jp.journal_title_translations = value
when 6
value = {"en" => val}
when 7
begin
value["zh_tw"] = val
rescue
value = {"zh_tw" => val}
end
jp.authors_translations = value
when 8
jp.year = val
when 9
jp.language = val
when 10
jp.vol_no = val
when 11
jp.issue_no = val
when 12
jp.form_to_start = val
when 13
jp.form_to_end = val
when 14
jp.total_pages = val
when 15
jls = JournalLevel.asc(:created_at).all.to_a
ts = val.to_s.split(",")
ts.each do |t|
jp.journal_level_ids << jls[t.to_i].id if t.to_s.is_i? && t.to_i < jls.count
end
when 16
jpts = JournalPaperType.asc(:created_at).all.to_a
jp.journal_paper_type = jpts[val.to_i] if val.to_s.is_i? && val.to_i < jpts.count
when 17
jpas = JournalPaperAuthorType.asc(:created_at).all.to_a
ts = val.to_s.split(",")
ts.each do |t|
jp.journal_paper_author_type_ids << jpas[t.to_i].id if t.to_s.is_i? && t.to_i < jpas.count
end
when 18
jp.number_of_authors = val
when 19
jp.isbn = val
when 20
jp.publication_date = val
when 21
jp.url = val
when 22
jp.keywords = val
when 23
jp.abstract = val
when 24
jp.note = val
when 25
jp.associated_project_translations = {"en" => val, "zh_tw" => val}
end
end
jp.member_profile = mp
jp.save
end
def get_data_for_excel(year_start,year_end)
data = []
roles = Role.where(:disabled => false, :title.ne => "", :title.ne => nil).asc(:key)
roles.each do |role|
d = {}
d["name"] = role.title
mps = role.member_profile_ids
d1 = DateTime.new(year_start,1,1,0,0)
d2 = DateTime.new(year_end,12,31,23,59)
d["data"] = JournalPaper.where(:publication_date.gte => d1, :publication_date.lte => d2, :member_profile_id.in => mps) rescue []
data << d
end
return data
end
def get_chart_data(year_start,year_end,role,type)
case type
when "paper_type"
jls = JournalPaperType.all
when "level_type"
jls = JournalLevel.all
when "author_type"
jls = JournalPaperAuthorType.all
end
finaldata = []
role = Role.find(role) rescue nil
mps = []
if !role.nil?
mps = role.member_profile_ids
end
jls.each do |jl|
data = {}
data["name"] = jl.title
data["data"] = {}
(year_start..year_end).each do |year|
d1 = DateTime.new(year,1,1,0,0)
d2 = DateTime.new(year,12,31,23,59)
t = jl.journal_papers.where(:publication_date.gte => d1, :publication_date.lte => d2, :member_profile_id.in => mps).count rescue 0
data["data"][year.to_s] = t
end
finaldata << data
end
data = {"name" => "N/A", "data" => {}}
(year_start..year_end).each do |year|
d1 = DateTime.new(year,1,1,0,0)
d2 = DateTime.new(year,12,31,23,59)
case type
when "paper_type"
t = JournalPaper.where(:publication_date.gte => d1, :publication_date.lte => d2, :member_profile_id.in => mps, :journal_paper_type_id => nil).count rescue 0
when "level_type"
t = JournalPaper.where(:publication_date.gte => d1, :publication_date.lte => d2, :member_profile_id.in => mps, :journal_level_ids => nil).count rescue 0
when "author_type"
t = JournalPaper.where(:publication_date.gte => d1, :publication_date.lte => d2, :member_profile_id.in => mps, :journal_paper_author_type_ids => nil).count rescue 0
end
data["data"][year.to_s] = t
end
finaldata << data
finaldata
end
end