Let user choose an issue of another project when updating a time entry (#16338).

git-svn-id: http://svn.redmine.org/redmine/trunk@12990 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2014-03-21 02:12:32 +00:00
parent 273aa42900
commit dd70327ce4
2 changed files with 32 additions and 0 deletions

View File

@ -77,6 +77,16 @@ class TimeEntry < ActiveRecord::Base
end end
end end
def safe_attributes=(attrs, user=User.current)
attrs = super
if !new_record? && issue && issue.project_id != project_id
if user.allowed_to?(:log_time, issue.project)
self.project_id = issue.project_id
end
end
attrs
end
def set_project_if_nil def set_project_if_nil
self.project = issue.project if issue && project.nil? self.project = issue.project if issue && project.nil?
end end

View File

@ -289,6 +289,28 @@ class TimelogControllerTest < ActionController::TestCase
assert_equal 2, entry.user_id assert_equal 2, entry.user_id
end end
def test_update_should_allow_to_change_issue_to_another_project
entry = TimeEntry.generate!(:issue_id => 1)
@request.session[:user_id] = 1
put :update, :id => entry.id, :time_entry => {:issue_id => '5'}
assert_response 302
entry.reload
assert_equal 5, entry.issue_id
assert_equal 3, entry.project_id
end
def test_update_should_not_allow_to_change_issue_to_an_invalid_project
entry = TimeEntry.generate!(:issue_id => 1)
Project.find(3).disable_module!(:time_tracking)
@request.session[:user_id] = 1
put :update, :id => entry.id, :time_entry => {:issue_id => '5'}
assert_response 200
assert_include "Issue is invalid", assigns(:time_entry).errors.full_messages
end
def test_get_bulk_edit def test_get_bulk_edit
@request.session[:user_id] = 2 @request.session[:user_id] = 2
get :bulk_edit, :ids => [1, 2] get :bulk_edit, :ids => [1, 2]