Revision 1375:c28ce1a71a22 plugins/redmine_bibliography

View differences:

plugins/redmine_bibliography/app/controllers/authorships_controller.rb
1 1
class AuthorshipsController < ApplicationController
2
  
3
  def index
4
    
5
  end
6
  
7 2

  
8
  def update
9
  end
3
    def sort
4
        @authorships = Authorship.find(params['authorship'])
5

  
6
        @authorships.each do |authorship|
7

  
8
            # note: auth_order is usually called position (default column name in the acts_as_list plugin )
9
            authorship.auth_order = params['authorship'].index(authorship.id.to_s) + 1
10
            authorship.save
11
        end
12

  
13
        render :nothing => true, :status => 200
14
    end
10 15
end
plugins/redmine_bibliography/app/models/authorship.rb
10 10
  validates_presence_of :name_on_paper
11 11

  
12 12
  attr_accessor :search_author_class, :search_author_id, :search_name, :search_results, :identify_author
13
  before_save :associate_author_user
14 13

  
15
  acts_as_list
14
  before_create :associate_author_user
15
  before_update :delete_publication_cache
16

  
17
  # tod: review scope of ordering
18
  acts_as_list :column => 'auth_order'
16 19

  
17 20
  # todo: review usage of scope --lf.20130108
18 21
  scope :like_unique, lambda {|q|
......
44 47
  end
45 48

  
46 49
  protected
50

  
51
  def delete_publication_cache
52
    publication = Publication.find(self.publication_id)
53
    Rails.cache.delete "publication-#{publication.id}-ieee"
54
    Rails.cache.delete "publication-#{publication.id}-bibtex"
55
  end
56

  
47 57
  def associate_author_user
48 58
    case self.search_author_class
49
      when "User"
50
        author = Author.new
51
        author.save
52
        self.author_id = author.id
59
    when ""
60
      logger.debug { "Unknown Author to be added..." }
61
    when "User"
62
      author = Author.new
63
      author.save
64
      self.author_id = author.id
65

  
66
    when "Author"
67
      selected = self.search_results
68
      selected_classname = Kernel.const_get(self.search_author_class)
69
      selected_id = self.search_author_id
70
      object = selected_classname.find(selected_id)
71

  
72
      if object.respond_to? :name_on_paper
73
        # Authorship
74
        self.author_id = object.author.id
53 75
      else
54
        selected = self.search_results
55
        selected_classname = Kernel.const_get(self.search_author_class)
56
        selected_id = self.search_author_id
57
        object = selected_classname.find(selected_id)
58

  
59
        if object.respond_to? :name_on_paper
60
          # Authorship
76
        # User
77
        unless object.author.nil?
61 78
          self.author_id = object.author.id
62 79
        else
63
          # User
64
          unless object.author.nil?
65
            self.author_id = object.author.id
66
          else
67
            author = Author.new
68
            object.author = author
69
            object.save
70
            self.author_id = object.author.id
71
          end
80
          author = Author.new
81
          object.author = author
82
          object.save
83
          self.author_id = object.author.id
72 84
        end
85
      end
73 86
    end
74 87
  end
75 88
end
plugins/redmine_bibliography/app/views/publications/show.html.erb
1
<%= javascript_include_tag 'order_authorships', :plugin => 'redmine_bibliography' %>
2

  
1 3
<h2><%=l(:label_publication_show)%></h2>
2 4

  
3 5
<div class="box">
plugins/redmine_bibliography/assets/javascripts/order_authorships.js
1
$(document).ready(function(){
2

  
3
   $('#authorships').sortable({
4
       axis: 'y',
5
       dropOnEmpty: false,
6
       handle: '.handle',
7
       cursor: 'crosshair',
8
       items: 'li',
9
       opacity: 0.4,
10
       scroll: true,
11
       update: function(){
12
          $.ajax({
13
              type: 'post',
14
              data: $('#authorships').sortable('serialize'),
15
              dataType: 'script',
16
              complete: function(request){
17
                 $('#authorship').effect('highlight');
18
              },
19
                 url: '/authorships/sort'});
20
              }
21
          });
22
     });
23

  
24

  
25

  
26

  
27

  
28

  
plugins/redmine_bibliography/config/routes.rb
9 9

  
10 10
    match "publications/autocomplete_for_project", :to => 'publications#autocomplete_for_project'
11 11

  
12
    resources :authorships do
13
        collection do
14
            post 'sort', :action => 'sort'
15
        end
16
    end
12 17

  
13 18
    resources :publications
14 19
end

Also available in: Unified diff