summaryrefslogtreecommitdiffstats
path: root/app/controllers/issues_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/issues_controller.rb')
-rw-r--r--app/controllers/issues_controller.rb95
1 files changed, 64 insertions, 31 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 228597931..602d551f3 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -16,9 +16,10 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class IssuesController < ApplicationController
- layout 'base', :except => :export_pdf
- before_filter :find_project, :authorize, :except => [:index, :preview]
- accept_key_auth :index
+ layout 'base'
+ before_filter :find_project, :authorize, :except => [:index, :changes, :preview]
+ before_filter :find_optional_project, :only => [:index, :changes]
+ accept_key_auth :index, :changes
cache_sweeper :issue_sweeper, :only => [ :edit, :change_status, :destroy ]
@@ -37,37 +38,54 @@ class IssuesController < ApplicationController
helper :queries
helper :sort
include SortHelper
+ include IssuesHelper
def index
sort_init "#{Issue.table_name}.id", "desc"
sort_update
retrieve_query
if @query.valid?
- @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
- @issue_pages = Paginator.new self, @issue_count, 25, params['page']
+ limit = %w(pdf csv).include?(params[:format]) ? Setting.issues_export_limit.to_i : 25
+ @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
+ @issue_pages = Paginator.new self, @issue_count, limit, params['page']
@issues = Issue.find :all, :order => sort_clause,
:include => [ :assigned_to, :status, :tracker, :project, :priority, :category ],
:conditions => @query.statement,
- :limit => @issue_pages.items_per_page,
- :offset => @issue_pages.current.offset
+ :limit => limit,
+ :offset => @issue_pages.current.offset
+ respond_to do |format|
+ format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? }
+ format.atom { render_feed(@issues, :title => l(:label_issue_plural)) }
+ format.csv { send_data(issues_to_csv(@issues, @project).read, :type => 'text/csv; header=present', :filename => 'export.csv') }
+ format.pdf { send_data(render(:template => 'issues/index.rfpdf', :layout => false), :type => 'application/pdf', :filename => 'export.pdf') }
+ end
+ else
+ # Send html if the query is not valid
+ render(:template => 'issues/index.rhtml', :layout => !request.xhr?)
end
- respond_to do |format|
- format.html { render :layout => false if request.xhr? }
- format.atom { render_feed(@issues, :title => l(:label_issue_plural)) }
+ end
+
+ def changes
+ sort_init "#{Issue.table_name}.id", "desc"
+ sort_update
+ retrieve_query
+ if @query.valid?
+ @changes = Journal.find :all, :include => [ :details, :user, {:issue => [:project, :author, :tracker, :status]} ],
+ :conditions => @query.statement,
+ :limit => 25,
+ :order => "#{Journal.table_name}.created_on DESC"
end
+ @title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
+ render :layout => false, :content_type => 'application/atom+xml'
end
def show
@custom_values = @issue.custom_values.find(:all, :include => :custom_field)
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
-
- if params[:format]=='pdf'
- @options_for_rfpdf ||= {}
- @options_for_rfpdf[:file_name] = "#{@project.identifier}-#{@issue.id}.pdf"
- render :template => 'issues/show.rfpdf', :layout => false
- else
- @status_options = @issue.status.find_new_statuses_allowed_to(logged_in_user.role_for_project(@project), @issue.tracker) if logged_in_user
- render :template => 'issues/show.rhtml'
+ @status_options = @issue.status.find_new_statuses_allowed_to(logged_in_user.role_for_project(@project), @issue.tracker) if logged_in_user
+ respond_to do |format|
+ format.html { render :template => 'issues/show.rhtml' }
+ format.pdf { send_data(render(:template => 'issues/show.rfpdf', :layout => false), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
end
end
@@ -152,7 +170,7 @@ class IssuesController < ApplicationController
def destroy
@issue.destroy
- redirect_to :controller => 'projects', :action => 'list_issues', :id => @project
+ redirect_to :action => 'index', :project_id => @project
end
def destroy_attachment
@@ -195,23 +213,38 @@ private
render_404
end
+ def find_optional_project
+ return true unless params[:project_id]
+ @project = Project.find(params[:project_id])
+ authorize
+ rescue ActiveRecord::RecordNotFound
+ render_404
+ end
+
# Retrieve query from session or build a new query
def retrieve_query
- if params[:set_filter] or !session[:query] or session[:query].project_id
- # Give it a name, required to be valid
- @query = Query.new(:name => "_", :executed_by => logged_in_user)
- if params[:fields] and params[:fields].is_a? Array
- params[:fields].each do |field|
- @query.add_filter(field, params[:operators][field], params[:values][field])
+ if params[:query_id]
+ @query = Query.find(params[:query_id], :conditions => {:project_id => (@project ? @project.id : nil)})
+ @query.executed_by = logged_in_user
+ session[:query] = @query
+ else
+ if params[:set_filter] or !session[:query] or session[:query].project != @project
+ # Give it a name, required to be valid
+ @query = Query.new(:name => "_", :executed_by => logged_in_user)
+ @query.project = @project
+ if params[:fields] and params[:fields].is_a? Array
+ params[:fields].each do |field|
+ @query.add_filter(field, params[:operators][field], params[:values][field])
+ end
+ else
+ @query.available_filters.keys.each do |field|
+ @query.add_short_filter(field, params[field]) if params[field]
+ end
end
+ session[:query] = @query
else
- @query.available_filters.keys.each do |field|
- @query.add_short_filter(field, params[field]) if params[field]
- end
+ @query = session[:query]
end
- session[:query] = @query
- else
- @query = session[:query]
end
end
end