##// END OF EJS Templates
Do not run Mercurial functional tests if the test repository is not set up....
Do not run Mercurial functional tests if the test repository is not set up. git-svn-id: http://redmine.rubyforge.org/svn/trunk@1019 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r1005:a45622585279
r1006:3d5381b24bb4
Show More
issues_controller.rb
240 lines | 10.1 KiB | text/x-ruby | RubyLexer
/ app / controllers / issues_controller.rb
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006-2007 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class IssuesController < ApplicationController
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 layout 'base'
before_filter :find_project, :authorize, :except => [:index, :changes, :preview]
before_filter :find_optional_project, :only => [:index, :changes]
accept_key_auth :index, :changes
Jean-Philippe Lang
Added fragment caching for calendar and gantt views...
r512
cache_sweeper :issue_sweeper, :only => [ :edit, :change_status, :destroy ]
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Fixed version field on issue view page now links to the corresponding version in the roadmap....
r559 helper :projects
include ProjectsHelper
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 helper :custom_fields
include CustomFieldsHelper
helper :ifpdf
include IfpdfHelper
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 helper :issue_relations
include IssueRelationsHelper
Jean-Philippe Lang
Added watchers for message boards (watchers controller modified to support any watchable model)....
r527 helper :watchers
include WatchersHelper
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 helper :attachments
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 include AttachmentsHelper
helper :queries
helper :sort
include SortHelper
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 include IssuesHelper
Jean-Philippe Lang
data locking for issues...
r21
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 def index
sort_init "#{Issue.table_name}.id", "desc"
sort_update
retrieve_query
if @query.valid?
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 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']
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 @issues = Issue.find :all, :order => sort_clause,
Jean-Philippe Lang
'fixed version' field can now be displayed on the issue list....
r901 :include => [ :assigned_to, :status, :tracker, :project, :priority, :category, :fixed_version ],
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 :conditions => @query.statement,
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 :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?)
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 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"
Jean-Philippe Lang
Added atom feed on the new cross-project issue list....
r675 end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 @title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
render :layout => false, :content_type => 'application/atom+xml'
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 end
Jean-Philippe Lang
data locking for issues...
r21 def show
Jean-Philippe Lang
Custom fields can now be reordered....
r888 @custom_values = @issue.custom_values.find(:all, :include => :custom_field, :order => "#{CustomField.table_name}.position")
Jean-Philippe Lang
Issue history is now 'oldest first' sorted....
r627 @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 @status_options = @issue.status.find_new_statuses_allowed_to(User.current.role_for_project(@project), @issue.tracker)
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 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") }
Jean-Philippe Lang
Merged IssuesController#export_pdf into IssuesController#show....
r799 end
Jean-Philippe Lang
data locking for issues...
r21 end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def edit
@priorities = Enumeration::get_values('IPRI')
Jean-Philippe Lang
Fixed: 500 error when validation fails on issue edition with no custom fields....
r970 @custom_values = []
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 if request.get?
@custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| @issue.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x, :customized => @issue) }
else
begin
Jean-Philippe Lang
Add email notification to IssuesController#edit....
r1005 journal = @issue.init_journal(User.current)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # Retrieve custom fields and values
Jean-Philippe Lang
Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue....
r859 if params["custom_fields"]
@custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
@issue.custom_values = @custom_values
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue.attributes = params[:issue]
Jean-Philippe Lang
data locking for issues...
r21 if @issue.save
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 flash[:notice] = l(:notice_successful_update)
Jean-Philippe Lang
Add email notification to IssuesController#edit....
r1005 Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
Jean-Philippe Lang
Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue....
r859 redirect_to(params[:back_to] || {:action => 'show', :id => @issue})
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
rescue ActiveRecord::StaleObjectError
# Optimistic locking exception
Jean-Philippe Lang
Applied the flash notices patch by Matt Jones (slightly edited)....
r597 flash[:error] = l(:notice_locking_conflict)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
data locking for issues...
r21 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def add_note
Jean-Philippe Lang
Fixed: unable to add a file to an issue without entering a note....
r840 journal = @issue.init_journal(User.current, params[:notes])
Jean-Philippe Lang
Added ApplicationController#attach_files as a common method to attach files in all actions....
r977 attachments = attach_files(@issue, params[:attachments])
attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
Jean-Philippe Lang
Fixed: unable to add a file to an issue without entering a note....
r840 if journal.save
flash[:notice] = l(:notice_successful_update)
Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
redirect_to :action => 'show', :id => @issue
return
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
show
end
def change_status
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 @status_options = @issue.status.find_new_statuses_allowed_to(User.current.role_for_project(@project), @issue.tracker)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @new_status = IssueStatus.find(params[:new_status_id])
if params[:confirm]
begin
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 journal = @issue.init_journal(User.current, params[:notes])
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue.status = @new_status
if @issue.update_attributes(params[:issue])
Jean-Philippe Lang
Added ApplicationController#attach_files as a common method to attach files in all actions....
r977 attachments = attach_files(@issue, params[:attachments])
attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
Jean-Philippe Lang
Added the ability to log time when changing an issue status....
r583 # Log time
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 if current_role.allowed_to?(:log_time)
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today)
Jean-Philippe Lang
Added the ability to log time when changing an issue status....
r583 @time_entry.attributes = params[:time_entry]
@time_entry.save
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 flash[:notice] = l(:notice_successful_update)
Jean-Philippe Lang
Mail notification options restored (default is: issue_added and issue_updated)....
r717 Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :action => 'show', :id => @issue
end
rescue ActiveRecord::StaleObjectError
# Optimistic locking exception
Jean-Philippe Lang
Applied the flash notices patch by Matt Jones (slightly edited)....
r597 flash[:error] = l(:notice_locking_conflict)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
end
@assignable_to = @project.members.find(:all, :include => :user).collect{ |m| m.user }
Jean-Philippe Lang
Added the ability to log time when changing an issue status....
r583 @activities = Enumeration::get_values('ACTI')
Jean-Philippe Lang
data locking for issues...
r21 end
def destroy
@issue.destroy
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 redirect_to :action => 'index', :project_id => @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def destroy_attachment
Jean-Philippe Lang
Feature 9867 Allow file upload in comment and add to issue history...
r422 a = @issue.attachments.find(params[:attachment_id])
a.destroy
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 journal = @issue.init_journal(User.current)
Jean-Philippe Lang
Feature 9867 Allow file upload in comment and add to issue history...
r422 journal.details << JournalDetail.new(:property => 'attachment',
:prop_key => a.id,
:old_value => a.filename)
journal.save
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :action => 'show', :id => @issue
end
Jean-Philippe Lang
Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue....
r859
def context_menu
@priorities = Enumeration.get_values('IPRI').reverse
@statuses = IssueStatus.find(:all, :order => 'position')
@allowed_statuses = @issue.status.find_new_statuses_allowed_to(User.current.role_for_project(@project), @issue.tracker)
@assignables = @issue.assignable_users
@assignables << @issue.assigned_to if @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
@can = {:edit => User.current.allowed_to?(:edit_issues, @project),
:change_status => User.current.allowed_to?(:change_issue_status, @project),
Jean-Philippe Lang
Added the hability to copy an issue....
r860 :add => User.current.allowed_to?(:add_issues, @project),
Jean-Philippe Lang
Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue....
r859 :move => User.current.allowed_to?(:move_issues, @project),
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 :copy => (@project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
Jean-Philippe Lang
Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue....
r859 :delete => User.current.allowed_to?(:delete_issues, @project)}
render :layout => false
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Added preview on add/edit issue form....
r801 def preview
issue = Issue.find_by_id(params[:id])
@attachements = issue.attachments if issue
@text = params[:issue][:description]
render :partial => 'common/preview'
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 private
def find_project
@issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
@project = @issue.project
rescue ActiveRecord::RecordNotFound
render_404
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 def find_optional_project
return true unless params[:project_id]
@project = Project.find(params[:project_id])
authorize
rescue ActiveRecord::RecordNotFound
render_404
end
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 # Retrieve query from session or build a new query
def retrieve_query
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 if params[:query_id]
@query = Query.find(params[:query_id], :conditions => {:project_id => (@project ? @project.id : nil)})
session[:query] = @query
else
if params[:set_filter] or !session[:query] or session[:query].project != @project
# Give it a name, required to be valid
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 @query = Query.new(:name => "_")
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 @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
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 session[:query] = @query
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 else
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 @query = session[:query]
Jean-Philippe Lang
Added a cross-project issue list. It displays the issues of all the projects visible by the user....
r673 end
end
end
Jean-Philippe Lang
Initial commit...
r2 end