Don't erase old publcations, so that the relations don't disappear.
[redakcja.git] / redmine / redmine_publications / app / controllers / publications_controller.rb
index c7d16e3..c7a1194 100644 (file)
@@ -1,30 +1,60 @@
-
 class PublicationsController < ApplicationController
   unloadable
 
-  @@source_file_field_id = 1
+  #  before_filter :authorize, :only => [:issues]
 
-  def issues
-       logger.info "Searching for issues with document name = " + params[:pub] + "."
-       joins = "JOIN issue_publications ON (issues.id = issue_publications.issue_id) JOIN publications ON (issue_publications.publication_id = publications.id)"
-
-       conditions = ['publications.source_file = ? ', params[:pub] ]
-       @issues = Issue.all(:joins => joins, :conditions =>  conditions)
-       respond_to do |format|
-         format.html
-          format.xml do 
-           render :xml => @issues
-          end
-
-         format.json do
-           headers['Content-Type'] = 'application/json'
-           render :json => @issues
-         end
+  def index
+       @publications = Publication.all
+    respond_to do |format|
+      format.html
+      format.xml { render :xml => @publications }
+      format.json { render :json => @publications }
+    end
+  end
+
+  def refresh
+    regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
+    repo = Repository.find(:first, :conditions => ['project_id = ?', Setting.plugin_redmine_publications[:project]] )
+
+    Rails.logger.info('[INFO] Importing changes from ' << repo.url)
+    Rails.logger.info('[INFO] Change list: ' << repo.changes.find(:all).inspect )
+
+    @repo_status = []
+    repo.changes.find(:all).each do |change|
+        Rails.logger.info('[INFO] Importing change ' << change.path)
+        match = change.path.match(regexp)
+        if match
+            Publication.find_or_create_by_name(:name => match[1],
+                :source_file => change.path, :repository_id => repo.id)
+              @repo_status += [{:path => change.path, :match => match[1], :matched => true}]
+        else
+              @repo_status += [{:path => change.path, :match => nil, :matched => false}]
         end
+    end
+       
+    respond_to do |format|
+        format.html
+        format.xml { render :xml => @repo_status}
+        format.json { render :json => @repo_status }
+    end
   end
 
-  def redirect_to_platform
-       render :text => ""
+  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 |fmt| 
+      fmt.json { render :json => @issues, :callback => params[:callback] }
+    end
+  end
+
+  private
+
+  def find_project
+    @project = Project.find(params[:project_id])
   end
 
 end