* Poprawki w redmine.
authorŁukasz Rekucki <lrekucki@gmail.com>
Tue, 15 Sep 2009 15:13:59 +0000 (17:13 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Tue, 15 Sep 2009 15:13:59 +0000 (17:13 +0200)
* Lepsza autokorekta. refs #127
* Support dla kropek w id pliku.

app/controllers/publications_controller.rb
app/views/issues/_issue_view_pub.erb [new file with mode: 0644]
app/views/settings/_publications_settings.html.erb
init.rb
lib/issue_publication_hook.rb
routes.rb

index a9d7c15..6c1e734 100644 (file)
@@ -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 (file)
index 0000000..26ce997
--- /dev/null
@@ -0,0 +1,8 @@
+<tr>
+    <td><b>Publication(s)</b></td>
+    <td>
+<% @issue.publication_names.each  do |pub| %>
+      <a href="<%= Setting.plugin_redmine_publications[:editorurl].sub(':pubid', pub) %>"><%= pub %></a><br />
+<% end %>
+    </td>
+</tr>
index 0465535..8ab2a7b 100644 (file)
   <label for="settings[pattern]">Filtr publikacji: </label>
   <%= text_field_tag 'settings[pattern]', @settings[:pattern] || '' %>
 </p>
+
+<p>
+  <label for="settings[editorurl]">Docelowy URL: </label>
+  <%= text_field_tag 'settings[editorurl]', @settings[:editorurl] || '' %>
+</p>
+
 </fieldset>
diff --git a/init.rb b/init.rb
index b1739c3..0aa6f07 100644 (file)
--- 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'
 
index 77fa215..6d2101c 100644 (file)
@@ -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 = "<tr><td><b>Publication(s):</b></td><td>"
-         names = context[:issue].publication_names {|name| "<span>" + name + "</span>"} 
-         result << names.join(', ')
-         result << "</td></tr>"
-       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| "<span>" + name + "</span>"}
+  #  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
index d1cf057..8752c69 100644 (file)
--- 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 => /[^\/?]+/