luis@385: # vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb luis@385: luis@328: class PublicationsController < ApplicationController luis@425: # TODO: should be removed on production version? luis@425: unloadable luis@328: luis@404: def new luis@404: # we always try to create at least one publication luis@404: @publication = Publication.new luis@407: luis@404: # the step we're at in the form luis@404: @publication.current_step = session[:publication_step] luis@409: luis@409: @new_publications = [] luis@409: session[:publications] ||= {} luis@409: luis@393: end luis@384: luis@404: def create luis@390: @publication = Publication.new(params[:publication]) luis@391: @publication.current_step = session[:publication_step] luis@409: luis@404: # contents of the paste text area luis@404: bibtex_entry = params[:bibtex_entry] luis@384: luis@404: # method for creating "pasted" bibtex entries luis@424: if bibtex_entry luis@424: logger.error "ANTES PARSE" luis@409: parse_bibtex_list bibtex_entry luis@424: logger.error "DEPOIS PARSE" luis@404: end luis@393: luis@404: # form's flow control luis@390: if params[:back_button] luis@390: @publication.previous_step luis@390: else luis@390: @publication.next_step luis@390: end luis@393: luis@390: session[:publication_step] = @publication.current_step luis@393: luis@409: if @publication.new_record? luis@409: render "new" luis@409: else luis@409: session[:publication_step] = session[:publication_params] = nil luis@409: flash[:notice] = "New publication saved!" luis@409: redirect_to @publication luis@409: end luis@329: end luis@329: luis@329: def index luis@329: @publications = Publication.find(:all) luis@328: end luis@328: luis@328: def edit luis@384: logger.error "AAAA edit" luis@376: luis@328: end luis@328: luis@328: def update luis@384: luis@384: logger.error "AAAA update" luis@376: luis@328: end luis@329: luis@425: def show luis@425: @publication = Publication.find_by_id(params[:id]) luis@425: luis@425: if @publication.nil? luis@425: @publications = Publication.all luis@425: render "index", :alert => 'Your Publications was not found!' luis@425: else luis@425: @authors = @publication.authors luis@425: @bibtext_entry = @publication.bibtex_entry luis@425: luis@425: respond_to do |format| luis@425: format.html luis@425: format.xml {render :xml => @publication} luis@425: end luis@425: end luis@329: end luis@329: luis@406: # parse string with bibtex authors luis@406: def parse_authors(authors_entry) luis@406: # in bibtex the authors are always seperated by "and" luis@407: return authors_entry.split(" and ") luis@406: end luis@406: luis@406: # parses a list of bibtex luis@406: def parse_bibtex_list(bibtex_list) luis@406: bibliography = BibTeX.parse bibtex_list luis@406: luis@406: no_entries = bibliography.data.length luis@406: luis@406: # parses the bibtex entries luis@406: bibliography.data.map do |d| luis@407: luis@407: if d.class == BibTeX::Entry luis@407: create_bibtex_entry d luis@407: end luis@406: end luis@407: end luis@407: luis@409: def create_bibtex_entry(d) luis@407: @publication = Publication.new luis@407: @bentry = BibtexEntry.new luis@407: authors = [] luis@407: institution = "" luis@407: email = "" luis@409: luis@407: d.fields.keys.map do |field| luis@407: case field.to_s luis@407: when "author" luis@407: authors = parse_authors d[field] luis@407: when "title" luis@407: @publication.title = d[field] luis@407: when "institution" luis@407: institution = d[field] luis@407: when "email" luis@407: email = d[field] luis@407: else luis@407: @bentry[field] = d[field] luis@407: end luis@407: end luis@406: luis@406: @publication.bibtex_entry = @bentry luis@407: @publication.save luis@409: luis@424: # what is this for??? luis@424: # @created_publications << @publication.id luis@409: luis@407: # need to save all authors luis@407: # and establish the author-publication association luis@407: # via the authorships table luis@407: authors.each_with_index.map do |authorname, idx| luis@407: author = Author.new(:name => authorname) luis@407: if author.save! luis@407: puts "SAVED" luis@407: else luis@407: puts "NOT SAVED" luis@406: end luis@406: luis@407: author.authorships.create!( luis@407: :publication => @publication, luis@407: :institution => institution, luis@407: :email => email, luis@407: :order => idx) luis@409: luis@407: end luis@407: end luis@409: luis@407: # parses the bibtex file luis@407: def parse_bibtex_file luis@407: luis@406: end luis@406: luis@409: luis@409: def review_new_entries luis@409: luis@409: end luis@409: luis@409: luis@328: end