annotate vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb @ 445:77f88379115a feature_36

Merged my forks. More work in the controllers and views of the publications model.
author luisf <luis.figueira@eecs.qmul.ac.uk>
date Wed, 08 Jun 2011 11:35:04 +0100
parents b461f84ed41a 948400933de8
children 995d4c99843d
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@425 4 # TODO: should be removed on production version?
luis@425 5 unloadable
luis@328 6
luis@404 7 def new
luis@444 8 @publication = Publication.new
luis@445 9
luis@445 10 # we'll always want a new publication to have its bibtex entry
luis@445 11 @publication.build_bibtex_entry
luis@445 12
luis@404 13 # the step we're at in the form
luis@404 14 @publication.current_step = session[:publication_step]
luis@409 15
luis@409 16 @new_publications = []
luis@409 17 session[:publications] ||= {}
luis@393 18 end
luis@384 19
luis@404 20 def create
luis@390 21 @publication = Publication.new(params[:publication])
luis@445 22
luis@445 23 if @publication.save
luis@445 24 flash[:notice] = "Successfully created publication."
luis@445 25 redirect_to @publication
luis@445 26 else
luis@445 27 render :action => 'new'
luis@445 28 end
luis@445 29 end
luis@445 30
luis@445 31 def index
luis@445 32 @publications = Publication.find(:all)
luis@445 33 end
luis@445 34
luis@445 35 def new_from_bibfile
luis@391 36 @publication.current_step = session[:publication_step]
luis@409 37
luis@404 38 # contents of the paste text area
luis@404 39 bibtex_entry = params[:bibtex_entry]
luis@384 40
luis@404 41 # method for creating "pasted" bibtex entries
luis@424 42 if bibtex_entry
luis@424 43 logger.error "ANTES PARSE"
luis@409 44 parse_bibtex_list bibtex_entry
luis@424 45 logger.error "DEPOIS PARSE"
luis@404 46 end
luis@393 47
luis@404 48 # form's flow control
luis@390 49 if params[:back_button]
luis@390 50 @publication.previous_step
luis@390 51 else
luis@390 52 @publication.next_step
luis@390 53 end
luis@393 54
luis@390 55 session[:publication_step] = @publication.current_step
luis@429 56
luis@329 57 end
luis@329 58
luis@328 59
luis@445 60 def edit
luis@428 61 @publication = Publication.find(params[:id])
luis@430 62 end
luis@430 63
luis@445 64 def update
luis@430 65 @publication = Publication.find(params[:id])
luis@445 66
luis@430 67 if @publication.update_attributes(params[:publication])
luis@430 68 flash[:notice] = "Successfully updated Publication."
luis@430 69 else
luis@445 70 flash[:notice] = "Could not Update Publication."
luis@430 71 end
luis@429 72
luis@328 73 end
luis@328 74
luis@425 75 def show
luis@430 76 logger.error "-------> No Show"
luis@430 77
luis@428 78 @publication = Publication.find(params[:id])
luis@425 79
luis@425 80 if @publication.nil?
luis@425 81 @publications = Publication.all
luis@425 82 render "index", :alert => 'Your Publications was not found!'
luis@425 83 else
luis@425 84 @authors = @publication.authors
luis@425 85 @bibtext_entry = @publication.bibtex_entry
luis@425 86
luis@425 87 respond_to do |format|
luis@425 88 format.html
luis@425 89 format.xml {render :xml => @publication}
luis@425 90 end
luis@425 91 end
luis@329 92 end
luis@329 93
luis@406 94 # parse string with bibtex authors
luis@406 95 def parse_authors(authors_entry)
luis@406 96 # in bibtex the authors are always seperated by "and"
luis@407 97 return authors_entry.split(" and ")
luis@406 98 end
luis@406 99
luis@406 100 # parses a list of bibtex
luis@406 101 def parse_bibtex_list(bibtex_list)
luis@406 102 bibliography = BibTeX.parse bibtex_list
luis@406 103
luis@406 104 no_entries = bibliography.data.length
luis@406 105
luis@406 106 # parses the bibtex entries
luis@406 107 bibliography.data.map do |d|
luis@407 108
luis@407 109 if d.class == BibTeX::Entry
luis@407 110 create_bibtex_entry d
luis@407 111 end
luis@406 112 end
luis@407 113 end
luis@407 114
luis@409 115 def create_bibtex_entry(d)
luis@407 116 @publication = Publication.new
luis@407 117 @bentry = BibtexEntry.new
luis@407 118 authors = []
luis@407 119 institution = ""
luis@407 120 email = ""
luis@409 121
luis@407 122 d.fields.keys.map do |field|
luis@407 123 case field.to_s
luis@407 124 when "author"
luis@407 125 authors = parse_authors d[field]
luis@407 126 when "title"
luis@407 127 @publication.title = d[field]
luis@407 128 when "institution"
luis@407 129 institution = d[field]
luis@407 130 when "email"
luis@407 131 email = d[field]
luis@407 132 else
luis@407 133 @bentry[field] = d[field]
luis@407 134 end
luis@407 135 end
luis@406 136
luis@406 137 @publication.bibtex_entry = @bentry
luis@407 138 @publication.save
luis@409 139
luis@424 140 # what is this for???
luis@424 141 # @created_publications << @publication.id
luis@409 142
luis@407 143 # need to save all authors
luis@407 144 # and establish the author-publication association
luis@407 145 # via the authorships table
luis@407 146 authors.each_with_index.map do |authorname, idx|
luis@407 147 author = Author.new(:name => authorname)
luis@407 148 if author.save!
luis@407 149 puts "SAVED"
luis@407 150 else
luis@407 151 puts "NOT SAVED"
luis@406 152 end
luis@406 153
luis@407 154 author.authorships.create!(
luis@444 155 :publication => @publication,
luis@444 156 :institution => institution,
luis@444 157 :email => email,
luis@444 158 :order => idx)
luis@409 159
luis@407 160 end
luis@407 161 end
luis@409 162
luis@407 163 # parses the bibtex file
luis@407 164 def parse_bibtex_file
luis@407 165
luis@406 166 end
luis@406 167
luis@444 168 def import
luis@444 169 @publication = Publication.new
luis@444 170
luis@444 171
luis@444 172 end
luis@409 173
luis@409 174 def review_new_entries
luis@409 175
luis@409 176 end
luis@409 177
luis@409 178
luis@328 179 end