Mercurial > hg > soundsoftware-site
diff plugins/redmine_bibliography/app/helpers/publications_helper.rb @ 1484:51364c0cd58f redmine-2.4-integration
Merge from live branch. Still need to merge manually in files overridden by plugins.
author | Chris Cannam |
---|---|
date | Wed, 15 Jan 2014 09:59:14 +0000 |
parents | 96ffcd574b96 |
children | f86e70095184 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/redmine_bibliography/app/helpers/publications_helper.rb Wed Jan 15 09:59:14 2014 +0000 @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +require 'bibtex' + +module PublicationsHelper + include AuthorshipsHelper + + def link_to_publication(publication, options={}, html_options = nil) + url = {:controller => 'publications', :action => 'show', :id => publication}.merge(options) + link_to(h(publication.title), url, html_options) + end + + def projects_check_box_tags(name, projects) + s = '' + projects.sort.each do |project| + if User.current.allowed_to?(:edit_publication, project) + s << "<label>#{ check_box_tag name, project.id, false } #{link_to_project project}</label>\n" + s << '<br />' + end + end + + s.html_safe + end + + def link_to_remove_fields(name, f) + f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", :class => 'icon icon-del') + end + + def link_to_add_author_fields(name, f, association, action) + new_object = f.object.class.reflect_on_association(association).klass.new + fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| + # renders _authorship_fields.html.erb + render(association.to_s.singularize + "_fields", :f => builder) + end + + link_to_function(name, "add_author_fields(this, '#{association}', '#{escape_javascript(fields)}', '#{action}')", { :class => 'icon icon-add', :id => "add_another_author" }) + end + + def sanitized_object_name(object_name) + object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/,"_").sub(/_$/,"") + end + + def sanitized_method_name(method_name) + method_name.sub(/\?$/, "") + end + + def form_tag_name(object_name, method_name) + str = "#{object_name.to_s}[#{sanitized_method_name(method_name.to_s)}]" + str.to_sym + end + + def form_tag_id(object_name, method_name) + str = "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}" + str.to_sym + end + + def form_object_id(object_name) + str = object_name.split("\[").last().gsub("\]","") + str.to_sym + end + + def render_authorships_list(publication) + s = '<p>' + + publication.authorships.each do |authorship| + s << link_to_authorship(authorship) + s << "<br /><em>#{authorship.institution}</em></p>" + end + + s.html_safe + end + + def render_projects_list(publication, show_delete_icon) + s= "" + + publication.projects.visible.each do |proj| + s << link_to_project(proj, {}, :class => 'publication_project') + + if show_delete_icon + if User.current.allowed_to?(:edit_publication, @project) + if @project == proj + # todo: move this message to yml file + confirm_msg = 'Are you sure you want to remove the current project from this publication\'s projects list?' + else + confirm_msg = false + end + + s << link_to(l(:button_delete), { :url => { :controller => 'publications', :action => 'remove_project', :id => publication, :remove_project_id => proj, :project_id => @project }, :method => :post, :confirm => confirm_msg }, :class => 'icon icon-del', :remote => :true) + end + end + + s << "<br />" + end + + s.html_safe + end + + def print_ieee_format(publication) + Rails.cache.fetch("publication-#{publication.id}-ieee") do + publication.print_entry(:ieee).html_safe + end + end + + def print_bibtex_format(publication) + Rails.cache.fetch("publication-#{publication.id}-bibtex") do + publication.print_entry(:bibtex) + end + end + + def show_bibtex_fields(bibtex_entry) + s = "" + bibtex_entry.attributes.keys.sort.each do |key| + value = bibtex_entry.attributes[key].to_s + next if key == 'id' or key == 'publication_id' or value == "" + s << "<h4>" + l("field_#{key}") + "</h4>" + s << "<p>" + if key == "entry_type" + s << bibtex_entry.entry_type_label + else + s << value + end + s << "</p>" + end + s + end +end + + +def render_authorship_link(link_class, link_id) + + # Renders a link for an author used when adding authors for a publication + # link_class can be either User or Author + # link_id will be the id of the Author/User we wish to link + + s= "" + + if link_class == "Author" + url = {:controller => 'authors', :action => 'show', :id => link_id} + s << link_to(h(Author.find(link_id).name), url) + else + url = {:controller => 'users', :action => 'show', :id => link_id} + s << link_to(h(User.find(link_id).name), url) + end + + s.html_safe +end +