annotate vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb @ 424:b601a9e472f3 feature_36

Fixed minor bugs with the publications controller Started creating tests and fixtures.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Wed, 25 May 2011 17:46:49 +0100
parents 50474139cad4
children 4ecbc22579e2
rev   line source
luis@385 1 # vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb
luis@385 2
luis@328 3 class PublicationsController < ApplicationController
luis@328 4
luis@404 5 def new
luis@404 6 # we always try to create at least one publication
luis@404 7 @publication = Publication.new
luis@407 8
luis@404 9 # the step we're at in the form
luis@404 10 @publication.current_step = session[:publication_step]
luis@409 11
luis@409 12 @new_publications = []
luis@409 13 session[:publications] ||= {}
luis@409 14
luis@393 15 end
luis@384 16
luis@404 17 def create
luis@390 18 @publication = Publication.new(params[:publication])
luis@391 19 @publication.current_step = session[:publication_step]
luis@409 20
luis@404 21 # contents of the paste text area
luis@404 22 bibtex_entry = params[:bibtex_entry]
luis@384 23
luis@404 24 # method for creating "pasted" bibtex entries
luis@424 25 if bibtex_entry
luis@424 26 logger.error "ANTES PARSE"
luis@409 27 parse_bibtex_list bibtex_entry
luis@424 28 logger.error "DEPOIS PARSE"
luis@404 29 end
luis@393 30
luis@404 31 # form's flow control
luis@390 32 if params[:back_button]
luis@390 33 @publication.previous_step
luis@390 34 else
luis@390 35 @publication.next_step
luis@390 36 end
luis@393 37
luis@390 38 session[:publication_step] = @publication.current_step
luis@393 39
luis@409 40 if @publication.new_record?
luis@409 41 render "new"
luis@409 42 else
luis@409 43 session[:publication_step] = session[:publication_params] = nil
luis@409 44 flash[:notice] = "New publication saved!"
luis@409 45 redirect_to @publication
luis@409 46 end
luis@329 47 end
luis@329 48
luis@329 49 def index
luis@329 50 @publications = Publication.find(:all)
luis@328 51 end
luis@328 52
luis@328 53 def edit
luis@384 54 logger.error "AAAA edit"
luis@376 55
luis@328 56 end
luis@328 57
luis@328 58 def update
luis@384 59
luis@384 60 logger.error "AAAA update"
luis@376 61
luis@328 62 end
luis@329 63
luis@329 64 def show
luis@329 65 @publication = Publication.find(params[id])
luis@329 66 @authors = @publication.authors
luis@329 67 end
luis@329 68
luis@406 69 # parse string with bibtex authors
luis@406 70 def parse_authors(authors_entry)
luis@406 71 # in bibtex the authors are always seperated by "and"
luis@407 72 return authors_entry.split(" and ")
luis@406 73 end
luis@406 74
luis@406 75 # parses a list of bibtex
luis@406 76 def parse_bibtex_list(bibtex_list)
luis@406 77 bibliography = BibTeX.parse bibtex_list
luis@406 78
luis@406 79 no_entries = bibliography.data.length
luis@406 80
luis@406 81 # parses the bibtex entries
luis@406 82 bibliography.data.map do |d|
luis@407 83
luis@407 84 if d.class == BibTeX::Entry
luis@407 85 create_bibtex_entry d
luis@407 86 end
luis@406 87 end
luis@407 88 end
luis@407 89
luis@409 90 def create_bibtex_entry(d)
luis@407 91 @publication = Publication.new
luis@407 92 @bentry = BibtexEntry.new
luis@407 93 authors = []
luis@407 94 institution = ""
luis@407 95 email = ""
luis@409 96
luis@407 97 d.fields.keys.map do |field|
luis@407 98 case field.to_s
luis@407 99 when "author"
luis@407 100 authors = parse_authors d[field]
luis@407 101 when "title"
luis@407 102 @publication.title = d[field]
luis@407 103 when "institution"
luis@407 104 institution = d[field]
luis@407 105 when "email"
luis@407 106 email = d[field]
luis@407 107 else
luis@407 108 @bentry[field] = d[field]
luis@407 109 end
luis@407 110 end
luis@406 111
luis@406 112 @publication.bibtex_entry = @bentry
luis@407 113 @publication.save
luis@409 114
luis@424 115 # what is this for???
luis@424 116 # @created_publications << @publication.id
luis@409 117
luis@407 118 # need to save all authors
luis@407 119 # and establish the author-publication association
luis@407 120 # via the authorships table
luis@407 121 authors.each_with_index.map do |authorname, idx|
luis@407 122 author = Author.new(:name => authorname)
luis@407 123 if author.save!
luis@407 124 puts "SAVED"
luis@407 125 else
luis@407 126 puts "NOT SAVED"
luis@406 127 end
luis@406 128
luis@407 129 author.authorships.create!(
luis@407 130 :publication => @publication,
luis@407 131 :institution => institution,
luis@407 132 :email => email,
luis@407 133 :order => idx)
luis@409 134
luis@407 135 end
luis@407 136 end
luis@409 137
luis@407 138 # parses the bibtex file
luis@407 139 def parse_bibtex_file
luis@407 140
luis@406 141 end
luis@406 142
luis@409 143
luis@409 144 def review_new_entries
luis@409 145
luis@409 146 end
luis@409 147
luis@409 148
luis@328 149 end