fd623b9912b5def03ced3d82ce22c29f56881853
[redakcja.git] / redmine / redmine_publications / app / controllers / publications_controller.rb
1 class PublicationsController < ApplicationController
2   unloadable
3
4   #  before_filter :authorize, :only => [:issues]
5
6   def index
7         @publications = Publication.all
8     respond_to do |format|
9       format.html
10       format.xml { render :xml => @publications }
11       format.json { render :json => @publications }
12     end
13   end
14
15   def refresh
16     regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
17     Publication.delete_all()
18
19     repo = Repository.find(:first, :conditions => ['project_id = ?', Setting.plugin_redmine_publications[:project]] )
20
21     Rails.logger.info('[INFO] Importing changes from ' << repo.url)
22     Rails.logger.info('[INFO] Change list: ' << repo.changes.find(:all).inspect )
23
24     @repo_status = []
25     repo.changes.find(:all).each do |change|
26         Rails.logger.info('[INFO] Importing change ' << change.path)
27         match = change.path.match(regexp)
28         if match
29             Publication.find_or_create_by_name(:name => match[1],
30                 :source_file => change.path, :repository_id => repo.id)
31               @repo_status += [{:path => change.path, :match => match[1], :matched => true}]
32         else
33               @repo_status += [{:path => change.path, :match => nil, :matched => false}]
34         end
35     end
36         
37     respond_to do |format|
38         format.html
39         format.xml { render :xml => @repo_status}
40         format.json { render :json => @repo_status }
41     end
42   end
43
44   def issues
45     @publication = Publication.find_by_name(params[:pub])
46
47     joins = "JOIN issue_publications ON (issues.id = issue_publications.issue_id)"
48     conditions = ['issue_publications.publication_id = ? ', @publication.id ]
49     @issues = Issue.all(:joins => joins, :conditions =>  conditions)
50
51     respond_to do |fmt| 
52       fmt.json { render :json => @issues, :callback => params[:callback] }
53     end
54   end
55
56   private
57
58   def find_project
59     @project = Project.find(params[:project_id])
60   end
61
62 end