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@1068: luis@1068: luis@478: 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@468: render(association.to_s.singularize + "_fields", :f => builder) luis@1068: end 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@1284: ####### luis@1284: ### DELETE ME luis@1284: luis@1284: def choose_author_link(object_name, items) luis@1284: # called by autocomplete_for_author (publications' action/view) luis@1284: # creates the select list based on the results array luis@1284: # results is an array with both Users and Authorships objects luis@1284: luis@1284: @author_options = [] luis@1284: @results.each do |result| luis@1284: email_bit = result.mail.partition('@')[2] luis@1284: if email_bit != "" luis@1284: email_bit = "(@#{email_bit})" luis@1284: end luis@1284: @author_options << ["#{result.name} #{email_bit}", "#{result.class.to_s}_#{result.id.to_s}"] luis@1284: end luis@1284: luis@1284: if @results.size > 0 luis@1284: s = select_tag( form_tag_name(object_name, :author_search_results), options_for_select(@author_options), { :id => form_tag_id(object_name, :author_search_results), :size => 3} ) luis@1284: else luis@1284: s = "No Authors found that match your search… sorry!" luis@1284: end luis@1284: end luis@1284: luis@1284: luis@1284: 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 luis@1312: publication.print_entry(:ieee).html_safe 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@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@481: