annotate vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb @ 425:4ecbc22579e2 feature_36

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