Revision 1036:8526d7436527 vendor/plugins/redmine_bibliography/app/controllers

View differences:

vendor/plugins/redmine_bibliography/app/controllers/publications_controller.rb
3 3

  
4 4
class PublicationsController < ApplicationController
5 5
  unloadable
6
  
6

  
7 7
  model_object Publication
8 8
  before_filter :find_model_object, :except => [:new, :create, :index, :get_bibtex_required_fields, :autocomplete_for_project, :add_author, :sort_author_order, :autocomplete_for_author, :get_user_info ]  
9 9
  before_filter :find_project_by_project_id, :authorize, :only => [ :edit, :new, :update, :create ]
10
    
10

  
11 11
  def new
12 12
    find_project_by_project_id
13 13
    @publication = Publication.new
14
    
14

  
15 15
    # we'll always want a new publication to have its bibtex entry
16 16
    @publication.build_bibtex_entry
17
    
17

  
18 18
    # and at least one author
19 19
    # @publication.authorships.build.build_author        
20 20
    @author_options = [["#{User.current.name} (@#{User.current.mail.partition('@')[2]})", "#{User.current.class.to_s}_#{User.current.id.to_s}"]]
......
29 29

  
30 30
    @publication = Publication.new(params[:publication])
31 31
    @publication.projects << @project unless @project.nil?
32
        
32

  
33 33
    if @publication.save 
34 34
      @publication.notify_authors_publication_added(@project)
35
      
35

  
36 36
      flash[:notice] = "Successfully created publication."
37 37
      redirect_to :action => :show, :id => @publication, :project_id => @project
38 38
    else
......
52 52

  
53 53
  def new_from_bibfile
54 54
    @publication.current_step = session[:publication_step]
55
    
55

  
56 56
    # contents of the paste text area
57 57
    bibtex_entry = params[:bibtex_entry]
58 58

  
......
78 78
          end
79 79
        }
80 80
      }
81
    
81

  
82 82
    end
83 83
  end
84 84

  
......
94 94

  
95 95
  def edit   
96 96
    find_project_by_project_id unless params[:project_id].nil?
97
    
97

  
98 98
    @edit_view = true;
99 99
    @publication = Publication.find(params[:id])
100 100
    @selected_bibtex_entry_type_id = @publication.bibtex_entry.entry_type
101 101

  
102 102
    @author_options = []  
103
    
103

  
104 104
    @bibtype_fields = BibtexEntryType.fields(@selected_bibtex_entry_type_id)    
105 105
  end
106 106

  
......
124 124
    end   
125 125
  end
126 126

  
127

  
127 128
  def show
128 129
    find_project_by_project_id unless params[:project_id].nil?
129
        
130

  
130 131
    if @publication.nil?
131 132
      @publications = Publication.all
132 133
      render "index", :alert => 'The publication was not found!'
......
191 192
    authors.each_with_index.map do |authorname, idx|
192 193
      author = Author.new(:name => authorname)
193 194
      if author.save!
195
        # todo: catch the errors...
194 196
        puts "SAVED"
195 197
      else
196 198
        puts "NOT SAVED"
197 199
      end
198 200

  
199 201
      author.authorships.create!(
200
        :publication => @publication,
201
        :institution => institution,
202
        :email => email,
203
        :order => idx)
202
      :publication => @publication,
203
      :institution => institution,
204
      :email => email,
205
      :order => idx)
204 206
    end
205 207
  end
206 208

  
......
211 213

  
212 214
  def import
213 215
    @publication = Publication.new
214
    
215
    
216

  
217

  
216 218
  end
217
  
219

  
218 220
  def autocomplete_for_project
219 221
    @publication = Publication.find(params[:id])
220
        
222

  
221 223
    @projects = Project.active.like(params[:q]).find(:all, :limit => 100) - @publication.projects            
222 224
    logger.debug "Query for \"#{params[:q]}\" returned \"#{@projects.size}\" results"
223 225
    render :layout => false
......
225 227

  
226 228
  def autocomplete_for_author    
227 229
    @results = []
228
    
230

  
229 231
    object_id = params[:object_id]
230 232
    @object_name = "publications[authorships_attributes][#{object_id}][search_results]"
231
        
233

  
232 234
    # cc 20110909 -- revert to like instead of like_unique -- see #289
233 235
    authorships_list = Authorship.like(params[:q]).find(:all, :limit => 100)
234 236
    users_list = User.active.like(params[:q]).find(:all, :limit => 100)
235 237

  
236 238
    logger.debug "Query for \"#{params[:q]}\" returned \"#{authorships_list.size}\" authorships and \"#{users_list.size}\" users"
237
    
239

  
238 240
    @results = users_list
239 241

  
240 242
    # TODO: can be optimized…    
241 243
    authorships_list.each do |authorship|      
242 244
      flag = true
243
      
245

  
244 246
      users_list.each do |user|
245 247
        if authorship.name == user.name && authorship.email == user.mail && authorship.institution == user.institution
246 248
          Rails.logger.debug { "Rejecting Authorship #{authorship.id}" }
......
254 256

  
255 257
    render :layout => false    
256 258
  end
257
  
258
  
259

  
259 260
  def get_user_info
260 261
    object_id = params[:object_id]
261 262
    value = params[:value]
......
266 267
    name_field = "publication_authorships_attributes_#{object_id}_name_on_paper".to_sym
267 268
    email_field = "publication_authorships_attributes_#{object_id}_email".to_sym
268 269
    institution_field = "publication_authorships_attributes_#{object_id}_institution".to_sym
269
    
270

  
270 271
    yes_radio = "publication_authorships_attributes_#{object_id}_identify_author_yes".to_sym
271
    
272

  
272 273
    respond_to do |format|
273 274
      format.js {
274 275
        render(:update) {|page| 
......
296 297
    @projects = Project.find(params[:publication][:project_ids])    
297 298
    @publication.projects << @projects
298 299
    @project = Project.find(params[:project_id])    
299
    
300

  
300 301
    # TODO luisf should also respond to HTML??? 
301 302
    respond_to do |format|
302 303
      format.html { redirect_to :back }
......
308 309
      }
309 310
    end
310 311
  end
311
  
312
  
312

  
313

  
313 314
  def remove_project
314 315
    @project = Project.find(params[:project_id])
315 316
    proj = Project.find(params[:remove_project_id])
......
321 322
    else
322 323
      logger.error { "Cannot remove project from publication list" }      
323 324
    end
324
    
325

  
325 326
    logger.error { "CURRENT project name#{proj.name} and wanna delete #{@project.name}" }
326
        
327

  
327 328
    render(:update) {|page| 
328 329
      page.replace_html "list_projects", :partial => 'list_projects', :id  => @publication
329 330
    }    
330 331
  end
331
    
332

  
332 333
  def destroy
333 334
    find_project_by_project_id
334
    
335

  
335 336
    @publication.destroy
336
        
337

  
337 338
    flash[:notice] = "Successfully deleted Publication."
338 339
    redirect_to :controller => :publications, :action => 'index', :project_id => @project
339 340
  end

Also available in: Unified diff