Revision 1375:c28ce1a71a22 plugins/redmine_bibliography
| 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