From 2119dcd48d7637772372f542358259b0cc384e35 Mon Sep 17 00:00:00 2001
From: =?utf8?q?=C5=81ukasz=20Rekucki?=
Date: Tue, 15 Sep 2009 17:13:59 +0200
Subject: [PATCH] * Poprawki w redmine. * Lepsza autokorekta. refs #127 *
Support dla kropek w id pliku.
---
app/controllers/publications_controller.rb | 85 +++++++++----------
app/views/issues/_issue_view_pub.erb | 8 ++
.../settings/_publications_settings.html.erb | 6 ++
init.rb | 2 +-
lib/issue_publication_hook.rb | 67 +++++++++------
routes.rb | 7 +-
6 files changed, 100 insertions(+), 75 deletions(-)
create mode 100644 app/views/issues/_issue_view_pub.erb
diff --git a/app/controllers/publications_controller.rb b/app/controllers/publications_controller.rb
index a9d7c15..6c1e734 100644
--- a/app/controllers/publications_controller.rb
+++ b/app/controllers/publications_controller.rb
@@ -1,64 +1,59 @@
class PublicationsController < ApplicationController
unloadable
-# before_filter :authorize, :only => [:issues]
+ # before_filter :authorize, :only => [:issues]
def index
@publications = Publication.all
- respond_to do |format|
- format.html
- format.xml { render :xml => @publications }
- format.json { render :json => @publications }
- end
+ respond_to do |format|
+ format.html
+ format.xml { render :xml => @publications }
+ format.json { render :json => @publications }
+ end
end
def refresh
- @match_status = []
+ @match_status = []
- regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
- Repository.all.each do |repo|
- repo_status = []
- repo.entries.each do |entry|
- match = entry.path.match(regexp)
- if match
- Publication.find_or_create_by_name(:name => match[1],
- :source_file => entry.path, :repository_id => repo.id)
- repo_status += [{:path => entry.path, :match => match[1], :matched => true}]
- else
- repo_status += [{:path => entry.path, :match =>nil, :matched => false}]
- end
- end
- @match_status += [{:repo => repo, :status => repo_status}]
- end
+ regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
+ Publication.delete_all()
+ repos = Repository.all
+ if repos
+ repos.each do |repo|
+ repo_status = []
+ if repo.entries
+ repo.entries.each do |entry|
+ match = entry.path.match(regexp)
+ if match
+ Publication.find_or_create_by_name(:name => match[1],
+ :source_file => entry.path, :repository_id => repo.id)
+ repo_status += [{:path => entry.path, :match => match[1], :matched => true}]
+ else
+ repo_status += [{:path => entry.path, :match =>nil, :matched => false}]
+ end
+ end
+ @match_status += [{:repo => repo, :status => repo_status}]
+ end
+ end
- respond_to do |format|
- format.html
- format.xml { render :xml => @match_status}
- format.json { render :json => @match_status }
- end
+ respond_to do |format|
+ format.html
+ format.xml { render :xml => @match_status}
+ format.json { render :json => @match_status }
+ end
+ end
end
def issues
- @publication = Publication.find_by_name(params[:pub])
-
- joins = "JOIN issue_publications ON (issues.id = issue_publications.issue_id)"
- conditions = ['issue_publications.publication_id = ? ', @publication.id ]
- @issues = Issue.all(:joins => joins, :conditions => conditions)
- respond_to do |format|
- format.html
- format.xml do
- render :xml => @issues
- end
+ @publication = Publication.find_by_name(params[:pub])
- format.json do
- headers['Content-Type'] = 'application/json'
- render :json => @issues
- end
- end
- end
+ joins = "JOIN issue_publications ON (issues.id = issue_publications.issue_id)"
+ conditions = ['issue_publications.publication_id = ? ', @publication.id ]
+ @issues = Issue.all(:joins => joins, :conditions => conditions)
- def redirect_to_platform
- render :text => ""
+ respond_to do |fmt|
+ fmt.json { render :json => @issues, :callback => params[:callback] }
+ end
end
private
diff --git a/app/views/issues/_issue_view_pub.erb b/app/views/issues/_issue_view_pub.erb
new file mode 100644
index 0000000..26ce997
--- /dev/null
+++ b/app/views/issues/_issue_view_pub.erb
@@ -0,0 +1,8 @@
+
+ Publication(s) |
+
+<% @issue.publication_names.each do |pub| %>
+ <%= pub %>
+<% end %>
+ |
+
diff --git a/app/views/settings/_publications_settings.html.erb b/app/views/settings/_publications_settings.html.erb
index 0465535..8ab2a7b 100644
--- a/app/views/settings/_publications_settings.html.erb
+++ b/app/views/settings/_publications_settings.html.erb
@@ -10,4 +10,10 @@
<%= text_field_tag 'settings[pattern]', @settings[:pattern] || '' %>
+
+
+
+ <%= text_field_tag 'settings[editorurl]', @settings[:editorurl] || '' %>
+
+
diff --git a/init.rb b/init.rb
index b1739c3..0aa6f07 100644
--- a/init.rb
+++ b/init.rb
@@ -24,7 +24,7 @@ Redmine::Plugin.register :redmine_publications do
# permission :view_issues_for_publication, :publications => :issues
settings :partial => 'settings/publications_settings',
- :default => { :tracker => '1', :pattern => '.*/[a-z_].xml'}
+ :default => { :tracker => '1', :pattern => '.*/[a-z_].xml', :editorurl => 'http://localhost/:pubid'}
menu :application_menu, :publications, { :controller => 'publications', :action => 'index' }, :caption => 'Publikacje'
diff --git a/lib/issue_publication_hook.rb b/lib/issue_publication_hook.rb
index 77fa215..6d2101c 100644
--- a/lib/issue_publication_hook.rb
+++ b/lib/issue_publication_hook.rb
@@ -1,36 +1,55 @@
# Provides a link to the document on the platform
class IssuesPublicationHook < Redmine::Hook::ViewListener
- def view_issues_show_details_bottom(context)
- # TODO: zÅapaÄ wyjÄ
tek konwersji
- if context[:issue].tracker_id == Setting.plugin_redmine_publications[:tracker].to_i
- result = "Publication(s): | "
- names = context[:issue].publication_names {|name| "" + name + ""}
- result << names.join(', ')
- result << " |
"
- end
+ def self.render_on(hook, options={})
+ define_method hook do |context|
+ if !options.include?(:if) || evaluate_if_option(options[:if], context)
+ context[:controller].send(:render_to_string, {:locals => context}.merge(options))
+ end
+ end
end
+ private
+
+ def evaluate_if_option(if_option, context)
+ case if_option
+ when Symbol
+ send(if_option, context)
+ when Method, Proc
+ if_option.call(context)
+ end
+ end
+
+ def is_pticket?(context)
+ context[:issue].tracker_id == Setting.plugin_redmine_publications[:tracker].to_i
+ end
+
+ public
+
+ render_on :view_issues_show_details_bottom, :partial => 'issue_view_pub', :if => :is_pticket?
+ render_on :view_issues_form_details_bottom, :partial => 'issue_form_pub', :if => :is_pticket?
+
+ # names = context[:issue].publication_names {|name| "" + name + ""}
+ # result << names.join(', ')
+
def controller_issues_edit_before_save(context)
- if context[:issue].tracker.id == Setting.plugin_redmine_publications[:tracker].to_i
- old_value = context[:issue].publication_names
- new_value = context[:params][:publications].split(',').map { |n| n.strip }
- context[:journal].details << JournalDetail.new(
- :property => 'attr', :prop_key => "publications",
- :old_value => old_value.join(', '),
- :value => new_value.join(', ') ) unless new_value==old_value
- context[:issue].publication_names = new_value
- end
+ if is_pticket?context
+ old_value = context[:issue].publication_names
+ new_value = context[:params][:publications].split(',').map { |n| n.strip }
+ context[:journal].details << JournalDetail.new(
+ :property => 'attr', :prop_key => "publications",
+ :old_value => old_value.join(', '),
+ :value => new_value.join(', ') ) unless new_value==old_value
+ context[:issue].publication_names = new_value
+ end
end
def controller_issues_new_after_save(context)
- if context[:issue].tracker.id == Setting.plugin_redmine_publications[:tracker].to_i
- value = context[:params][:publications].split(',').map { |n| n.strip }
- context[:issue].publication_names = value
- context[:issue].save
- end
+ if is_pticket?context
+ value = context[:params][:publications].split(',').map { |n| n.strip }
+ context[:issue].publication_names = value
+ context[:issue].save
+ end
end
-
- render_on :view_issues_form_details_bottom, :partial => 'issue_form_pub'
end
diff --git a/routes.rb b/routes.rb
index d1cf057..8752c69 100644
--- a/routes.rb
+++ b/routes.rb
@@ -6,8 +6,5 @@ connect 'publications/:action.:format',
:controller => 'publications'
connect 'publications/:action/:pub',
- :controller => 'publications',
- :format => 'html'
-
-connect 'publications/:action/:pub.:format',
- :controller => 'publications'
+ :controller => 'publications', :format => 'json',
+ :pub => /[^\/?]+/
--
2.20.1