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 1/1] * 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