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@428
|
56 @publication = Publication.find(params[:id])
|
luis@429
|
57
|
luis@328
|
58 end
|
luis@328
|
59
|
luis@328
|
60 def update
|
luis@429
|
61 @publication = Publication.find(params[:id])
|
luis@429
|
62 if @publication.update_attributes(params[:publication])
|
luis@429
|
63 flash[:notice] = "Successfully updated Publication."
|
luis@429
|
64 redirect_to @publication
|
luis@429
|
65 else
|
luis@429
|
66 render :action => 'edit'
|
luis@429
|
67 end
|
luis@328
|
68 end
|
luis@329
|
69
|
luis@425
|
70 def show
|
luis@428
|
71 @publication = Publication.find(params[:id])
|
luis@425
|
72
|
luis@425
|
73 if @publication.nil?
|
luis@425
|
74 @publications = Publication.all
|
luis@425
|
75 render "index", :alert => 'Your Publications was not found!'
|
luis@425
|
76 else
|
luis@425
|
77 @authors = @publication.authors
|
luis@425
|
78 @bibtext_entry = @publication.bibtex_entry
|
luis@425
|
79
|
luis@425
|
80 respond_to do |format|
|
luis@425
|
81 format.html
|
luis@425
|
82 format.xml {render :xml => @publication}
|
luis@425
|
83 end
|
luis@425
|
84 end
|
luis@329
|
85 end
|
luis@329
|
86
|
luis@406
|
87 # parse string with bibtex authors
|
luis@406
|
88 def parse_authors(authors_entry)
|
luis@406
|
89 # in bibtex the authors are always seperated by "and"
|
luis@407
|
90 return authors_entry.split(" and ")
|
luis@406
|
91 end
|
luis@406
|
92
|
luis@406
|
93 # parses a list of bibtex
|
luis@406
|
94 def parse_bibtex_list(bibtex_list)
|
luis@406
|
95 bibliography = BibTeX.parse bibtex_list
|
luis@406
|
96
|
luis@406
|
97 no_entries = bibliography.data.length
|
luis@406
|
98
|
luis@406
|
99 # parses the bibtex entries
|
luis@406
|
100 bibliography.data.map do |d|
|
luis@407
|
101
|
luis@407
|
102 if d.class == BibTeX::Entry
|
luis@407
|
103 create_bibtex_entry d
|
luis@407
|
104 end
|
luis@406
|
105 end
|
luis@407
|
106 end
|
luis@407
|
107
|
luis@409
|
108 def create_bibtex_entry(d)
|
luis@407
|
109 @publication = Publication.new
|
luis@407
|
110 @bentry = BibtexEntry.new
|
luis@407
|
111 authors = []
|
luis@407
|
112 institution = ""
|
luis@407
|
113 email = ""
|
luis@409
|
114
|
luis@407
|
115 d.fields.keys.map do |field|
|
luis@407
|
116 case field.to_s
|
luis@407
|
117 when "author"
|
luis@407
|
118 authors = parse_authors d[field]
|
luis@407
|
119 when "title"
|
luis@407
|
120 @publication.title = d[field]
|
luis@407
|
121 when "institution"
|
luis@407
|
122 institution = d[field]
|
luis@407
|
123 when "email"
|
luis@407
|
124 email = d[field]
|
luis@407
|
125 else
|
luis@407
|
126 @bentry[field] = d[field]
|
luis@407
|
127 end
|
luis@407
|
128 end
|
luis@406
|
129
|
luis@406
|
130 @publication.bibtex_entry = @bentry
|
luis@407
|
131 @publication.save
|
luis@409
|
132
|
luis@424
|
133 # what is this for???
|
luis@424
|
134 # @created_publications << @publication.id
|
luis@409
|
135
|
luis@407
|
136 # need to save all authors
|
luis@407
|
137 # and establish the author-publication association
|
luis@407
|
138 # via the authorships table
|
luis@407
|
139 authors.each_with_index.map do |authorname, idx|
|
luis@407
|
140 author = Author.new(:name => authorname)
|
luis@407
|
141 if author.save!
|
luis@407
|
142 puts "SAVED"
|
luis@407
|
143 else
|
luis@407
|
144 puts "NOT SAVED"
|
luis@406
|
145 end
|
luis@406
|
146
|
luis@407
|
147 author.authorships.create!(
|
luis@407
|
148 :publication => @publication,
|
luis@407
|
149 :institution => institution,
|
luis@407
|
150 :email => email,
|
luis@407
|
151 :order => idx)
|
luis@409
|
152
|
luis@407
|
153 end
|
luis@407
|
154 end
|
luis@409
|
155
|
luis@407
|
156 # parses the bibtex file
|
luis@407
|
157 def parse_bibtex_file
|
luis@407
|
158
|
luis@406
|
159 end
|
luis@406
|
160
|
luis@409
|
161
|
luis@409
|
162 def review_new_entries
|
luis@409
|
163
|
luis@409
|
164 end
|
luis@409
|
165
|
luis@409
|
166
|
luis@328
|
167 end
|