summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-06-03 08:13:58 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-06-03 08:13:58 +0000
commitbca6c447cb99ee8580a9237918e8c1d8d6a29cdc (patch)
tree774f0e3df9242639deb531623679bfec21092ba8
parentb230429a6190d87b1d66696842a7cf30134fa67e (diff)
downloadredmine-bca6c447cb99ee8580a9237918e8c1d8d6a29cdc.tar.gz
redmine-bca6c447cb99ee8580a9237918e8c1d8d6a29cdc.zip
Merged r9740 and r9741 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.4-stable@9754 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/timelog_controller.rb24
-rw-r--r--app/views/timelog/new.html.erb1
-rw-r--r--test/functional/timelog_controller_test.rb19
3 files changed, 33 insertions, 11 deletions
diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb
index 4ae4aa277..e0b3826e8 100644
--- a/app/controllers/timelog_controller.rb
+++ b/app/controllers/timelog_controller.rb
@@ -18,12 +18,13 @@
class TimelogController < ApplicationController
menu_item :issues
- before_filter :find_project, :only => [:create]
+ before_filter :find_project_for_new_time_entry, :only => [:create]
before_filter :find_time_entry, :only => [:show, :edit, :update]
before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy]
before_filter :authorize, :except => [:new, :index, :report]
- before_filter :find_optional_project, :only => [:new, :index, :report]
+ before_filter :find_optional_project, :only => [:index, :report]
+ before_filter :find_optional_project_for_new_time_entry, :only => [:new]
before_filter :authorize_global, :only => [:new, :index, :report]
accept_rss_auth :index
@@ -133,9 +134,13 @@ class TimelogController < ApplicationController
flash[:notice] = l(:notice_successful_create)
if params[:continue]
if params[:project_id]
- redirect_to :action => 'new', :project_id => @time_entry.project, :issue_id => @time_entry.issue, :back_url => params[:back_url]
+ redirect_to :action => 'new', :project_id => @time_entry.project, :issue_id => @time_entry.issue,
+ :time_entry => {:issue_id => @time_entry.issue_id, :activity_id => @time_entry.activity_id},
+ :back_url => params[:back_url]
else
- redirect_to :action => 'new', :back_url => params[:back_url]
+ redirect_to :action => 'new',
+ :time_entry => {:project_id => @time_entry.project_id, :issue_id => @time_entry.issue_id, :activity_id => @time_entry.activity_id},
+ :back_url => params[:back_url]
end
else
redirect_back_or_default :action => 'index', :project_id => @time_entry.project
@@ -258,7 +263,7 @@ private
end
end
- def find_project
+ def find_optional_project_for_new_time_entry
if (project_id = (params[:project_id] || params[:time_entry] && params[:time_entry][:project_id])).present?
@project = Project.find(project_id)
end
@@ -266,12 +271,15 @@ private
@issue = Issue.find(issue_id)
@project ||= @issue.project
end
+ rescue ActiveRecord::RecordNotFound
+ render_404
+ end
+
+ def find_project_for_new_time_entry
+ find_optional_project_for_new_time_entry
if @project.nil?
render_404
- return false
end
- rescue ActiveRecord::RecordNotFound
- render_404
end
def find_optional_project
diff --git a/app/views/timelog/new.html.erb b/app/views/timelog/new.html.erb
index f37574397..4f7ff53fe 100644
--- a/app/views/timelog/new.html.erb
+++ b/app/views/timelog/new.html.erb
@@ -1,6 +1,7 @@
<h2><%= l(:label_spent_time) %></h2>
<% labelled_form_for @time_entry, :url => time_entries_path do |f| %>
+ <%= hidden_field_tag 'project_id', params[:project_id] if params[:project_id] %>
<%= render :partial => 'form', :locals => {:f => f} %>
<%= submit_tag l(:button_create) %>
<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
diff --git a/test/functional/timelog_controller_test.rb b/test/functional/timelog_controller_test.rb
index d23426c52..10f5ccde0 100644
--- a/test/functional/timelog_controller_test.rb
+++ b/test/functional/timelog_controller_test.rb
@@ -44,6 +44,7 @@ class TimelogControllerTest < ActionController::TestCase
# Default activity selected
assert_tag :tag => 'option', :attributes => { :selected => 'selected' },
:content => 'Development'
+ assert_select 'input[name=project_id][value=1]'
end
def test_get_new_should_only_show_active_time_entry_activities
@@ -61,6 +62,18 @@ class TimelogControllerTest < ActionController::TestCase
assert_response :success
assert_template 'new'
assert_tag 'select', :attributes => {:name => 'time_entry[project_id]'}
+ assert_select 'input[name=project_id]', 0
+ end
+
+ def test_new_without_project_should_prefill_the_form
+ @request.session[:user_id] = 3
+ get :new, :time_entry => {:project_id => '1'}
+ assert_response :success
+ assert_template 'new'
+ assert_select 'select[name=?]', 'time_entry[project_id]' do
+ assert_select 'option[value=1][selected=selected]'
+ end
+ assert_select 'input[name=project_id]', 0
end
def test_new_without_project_should_deny_without_permission
@@ -144,7 +157,7 @@ class TimelogControllerTest < ActionController::TestCase
:spent_on => '2008-03-14',
:hours => '7.3'},
:continue => '1'
- assert_redirected_to '/projects/ecookbook/time_entries/new'
+ assert_redirected_to '/projects/ecookbook/time_entries/new?time_entry%5Bactivity_id%5D=11&time_entry%5Bissue_id%5D='
end
def test_create_and_continue_with_issue_id
@@ -155,7 +168,7 @@ class TimelogControllerTest < ActionController::TestCase
:spent_on => '2008-03-14',
:hours => '7.3'},
:continue => '1'
- assert_redirected_to '/projects/ecookbook/issues/1/time_entries/new'
+ assert_redirected_to '/projects/ecookbook/issues/1/time_entries/new?time_entry%5Bactivity_id%5D=11&time_entry%5Bissue_id%5D=1'
end
def test_create_and_continue_without_project
@@ -167,7 +180,7 @@ class TimelogControllerTest < ActionController::TestCase
:hours => '7.3'},
:continue => '1'
- assert_redirected_to '/time_entries/new'
+ assert_redirected_to '/time_entries/new?time_entry%5Bactivity_id%5D=11&time_entry%5Bissue_id%5D=&time_entry%5Bproject_id%5D=1'
end
def test_create_without_log_time_permission_should_be_denied