##// END OF EJS Templates
Displays the full form when creating a version from the issue form so that required custom fields can be filled (#7398)....
Jean-Philippe Lang -
r8725:60b9e59d1580
parent child
Show More
@@ -0,0 +1,9
1 <h3 class="title"><%=l(:label_version_new)%></h3>
2
3 <% labelled_remote_form_for @version, :url => project_versions_path(@project) do |f| %>
4 <%= render :partial => 'versions/form', :locals => { :f => f } %>
5 <p class="buttons">
6 <%= submit_tag l(:button_create), :name => nil %>
7 <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
8 </p>
9 <% end %>
@@ -75,6 +75,17 class VersionsController < ApplicationController
75
75
76 def new
76 def new
77 @version = @project.versions.build(params[:version])
77 @version = @project.versions.build(params[:version])
78
79 respond_to do |format|
80 format.html
81 format.js do
82 render :update do |page|
83 page.replace_html 'ajax-modal', :partial => 'versions/new_modal'
84 page << "showModal('ajax-modal', '600px');"
85 page << "Form.Element.focus('version_name');"
86 end
87 end
88 end
78 end
89 end
79
90
80 def create
91 def create
@@ -93,9 +104,11 class VersionsController < ApplicationController
93 redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
104 redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
94 end
105 end
95 format.js do
106 format.js do
96 # IE doesn't support the replace_html rjs method for select box options
107 render(:update) {|page|
97 render(:update) {|page| page.replace "issue_fixed_version_id",
108 page << 'hideModal();'
98 content_tag('select', '<option></option>' + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
109 # IE doesn't support the replace_html rjs method for select box options
110 page.replace "issue_fixed_version_id",
111 content_tag('select', '<option></option>' + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
99 }
112 }
100 end
113 end
101 format.api do
114 format.api do
@@ -106,7 +119,10 class VersionsController < ApplicationController
106 respond_to do |format|
119 respond_to do |format|
107 format.html { render :action => 'new' }
120 format.html { render :action => 'new' }
108 format.js do
121 format.js do
109 render(:update) {|page| page.alert(@version.errors.full_messages.join('\n')) }
122 render :update do |page|
123 page.replace_html 'ajax-modal', :partial => 'versions/new_modal'
124 page << "Form.Element.focus('version_name');"
125 end
110 end
126 end
111 format.api { render_validation_errors(@version) }
127 format.api { render_validation_errors(@version) }
112 end
128 end
@@ -27,12 +27,10
27
27
28 <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %>
28 <% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %>
29 <p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true %>
29 <p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true %>
30 <%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
30 <%= link_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
31 l(:label_version_new),
31 {:url => new_project_version_path(@issue.project), :method => 'get'},
32 'version[name]',
32 :title => l(:label_version_new),
33 {:controller => 'versions', :action => 'create', :project_id => @issue.project},
33 :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %>
34 :title => l(:label_version_new),
35 :tabindex => 200) if User.current.allowed_to?(:manage_versions, @issue.project) %>
36 </p>
34 </p>
37 <% end %>
35 <% end %>
38 </div>
36 </div>
@@ -321,7 +321,12 function showModal(id, width) {
321 }
321 }
322
322
323 function hideModal(el) {
323 function hideModal(el) {
324 var modal = Element.up(el, 'div.modal');
324 var modal;
325 if (el) {
326 modal = Element.up(el, 'div.modal');
327 } else {
328 modal = $('ajax-modal');
329 }
325 if (modal) {
330 if (modal) {
326 modal.hide();
331 modal.hide();
327 }
332 }
@@ -96,6 +96,16 class VersionsControllerTest < ActionController::TestCase
96 assert_template 'new'
96 assert_template 'new'
97 end
97 end
98
98
99 def test_new_from_issue_form
100 @request.session[:user_id] = 2
101 xhr :get, :new, :project_id => '1'
102 assert_response :success
103 assert_select_rjs :replace_html, "ajax-modal" do
104 assert_select "form[action=/projects/ecookbook/versions]"
105 assert_select "input#version_name"
106 end
107 end
108
99 def test_create
109 def test_create
100 @request.session[:user_id] = 2 # manager
110 @request.session[:user_id] = 2 # manager
101 assert_difference 'Version.count' do
111 assert_difference 'Version.count' do
@@ -108,15 +118,29 class VersionsControllerTest < ActionController::TestCase
108 end
118 end
109
119
110 def test_create_from_issue_form
120 def test_create_from_issue_form
111 @request.session[:user_id] = 2 # manager
121 @request.session[:user_id] = 2
112 assert_difference 'Version.count' do
122 assert_difference 'Version.count' do
113 xhr :post, :create, :project_id => '1', :version => {:name => 'test_add_version_from_issue_form'}
123 xhr :post, :create, :project_id => '1', :version => {:name => 'test_add_version_from_issue_form'}
114 end
124 end
115 assert_response :success
116 assert_select_rjs :replace, 'issue_fixed_version_id'
117 version = Version.find_by_name('test_add_version_from_issue_form')
125 version = Version.find_by_name('test_add_version_from_issue_form')
118 assert_not_nil version
126 assert_not_nil version
119 assert_equal 1, version.project_id
127 assert_equal 1, version.project_id
128
129 assert_response :success
130 assert_select_rjs :replace, 'issue_fixed_version_id' do
131 assert_select "option[value=#{version.id}][selected=selected]"
132 end
133 end
134
135 def test_create_from_issue_form_with_failure
136 @request.session[:user_id] = 2
137 assert_no_difference 'Version.count' do
138 xhr :post, :create, :project_id => '1', :version => {:name => ''}
139 end
140 assert_response :success
141 assert_select_rjs :replace_html, "ajax-modal" do
142 assert_select "div#errorExplanation"
143 end
120 end
144 end
121
145
122 def test_get_edit
146 def test_get_edit
General Comments 0
You need to be logged in to leave comments. Login now