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
|