chris@615: # -*- coding: utf-8 -*- luis@407: require 'bibtex' luis@407: luis@328: module PublicationsHelper chris@702: include AuthorshipsHelper luis@616: luis@616: def link_to_publication(publication, options={}, html_options = nil) luis@616: url = {:controller => 'publications', :action => 'show', :id => publication}.merge(options) luis@616: link_to(h(publication.title), url, html_options) luis@616: end luis@616: luis@462: def projects_check_box_tags(name, projects) luis@462: s = '' luis@462: projects.sort.each do |project| luis@1068: if User.current.allowed_to?(:edit_publication, project) luis@713: s << "\n" luis@713: s << '
' luis@713: end luis@462: end luis@712: luis@1324: s.html_safe luis@462: end luis@1068: luis@469: def link_to_remove_fields(name, f) chris@573: f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", :class => 'icon icon-del') luis@469: end luis@1068: luis@705: def link_to_add_author_fields(name, f, association, action) luis@468: new_object = f.object.class.reflect_on_association(association).klass.new luis@468: fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| luis@1388: # renders _authorship_fields.html.erb luis@468: render(association.to_s.singularize + "_fields", :f => builder) luis@1068: end luis@1388: luis@1278: link_to_function(name, "add_author_fields(this, '#{association}', '#{escape_javascript(fields)}', '#{action}')", { :class => 'icon icon-add', :id => "add_another_author" }) luis@1068: end luis@481: luis@481: def sanitized_object_name(object_name) luis@481: object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/,"_").sub(/_$/,"") luis@481: end luis@481: luis@481: def sanitized_method_name(method_name) luis@481: method_name.sub(/\?$/, "") luis@481: end luis@1068: luis@595: def form_tag_name(object_name, method_name) luis@595: str = "#{object_name.to_s}[#{sanitized_method_name(method_name.to_s)}]" luis@1068: str.to_sym luis@595: end luis@1068: luis@1068: def form_tag_id(object_name, method_name) luis@481: str = "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}" luis@481: str.to_sym luis@481: end luis@1068: luis@596: def form_object_id(object_name) luis@596: str = object_name.split("\[").last().gsub("\]","") luis@596: str.to_sym luis@596: end luis@693: luis@1068: def render_authorships_list(publication) luis@693: s = '

' luis@1068: luis@693: publication.authorships.each do |authorship| chris@702: s << link_to_authorship(authorship) luis@693: s << "
#{authorship.institution}

" luis@1068: end luis@693: luis@1307: s.html_safe luis@693: end luis@1068: luis@1068: def render_projects_list(publication, show_delete_icon) luis@691: s= "" luis@1068: luis@691: publication.projects.visible.each do |proj| luis@629: s << link_to_project(proj, {}, :class => 'publication_project') luis@1068: luis@1068: if show_delete_icon luis@691: if User.current.allowed_to?(:edit_publication, @project) luis@691: if @project == proj luis@945: # todo: move this message to yml file luis@691: confirm_msg = 'Are you sure you want to remove the current project from this publication\'s projects list?' luis@691: else luis@691: confirm_msg = false luis@1068: end luis@1068: luis@1317: 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) luis@691: end luis@629: end luis@691: luis@1068: s << "
" luis@1068: end luis@1068: luis@1307: s.html_safe luis@541: end luis@1068: luis@1068: def print_ieee_format(publication) luis@1068: Rails.cache.fetch("publication-#{publication.id}-ieee") do Chris@1497: entry = publication.print_entry(:ieee) Chris@1497: if entry Chris@1497: entry.html_safe Chris@1497: end luis@1068: end luis@946: end luis@1068: luis@1068: def print_bibtex_format(publication) luis@1068: Rails.cache.fetch("publication-#{publication.id}-bibtex") do luis@1068: publication.print_entry(:bibtex) luis@1068: end luis@945: end luis@1068: luis@544: def show_bibtex_fields(bibtex_entry) luis@544: s = "" chris@615: bibtex_entry.attributes.keys.sort.each do |key| chris@615: value = bibtex_entry.attributes[key].to_s chris@615: next if key == 'id' or key == 'publication_id' or value == "" luis@1068: s << "

" + l("field_#{key}") + "

" chris@615: s << "

" chris@615: if key == "entry_type" chris@615: s << bibtex_entry.entry_type_label chris@615: else chris@615: s << value luis@544: end chris@615: s << "

" luis@544: end luis@544: s luis@1068: end luis@328: end luis@1407: luis@1407: luis@1407: def render_authorship_link(link_class, link_id) luis@1407: luis@1407: # Renders a link for an author used when adding authors for a publication luis@1407: # link_class can be either User or Author luis@1407: # link_id will be the id of the Author/User we wish to link luis@1407: luis@1407: s= "" luis@1407: luis@1407: if link_class == "Author" luis@1416: url = {:controller => 'authors', :action => 'show', :id => link_id} luis@1416: s << link_to(h(Author.find(link_id).name), url) luis@1407: else luis@1416: url = {:controller => 'users', :action => 'show', :id => link_id} luis@1416: s << link_to(h(User.find(link_id).name), url) luis@1407: end luis@1407: luis@1407: s.html_safe luis@1407: end luis@1407: