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
|