Commit 9de0f762e26660ae2c3c5bbff83468fd12253293
1 parent
55e057ab
Exists in
master
and in
11 other branches
proposals_discussion: display an error when trying to create a proposal without a topic
Showing
4 changed files
with
56 additions
and
41 deletions
Show diff stats
controllers/myprofile/proposals_discussion_plugin_myprofile_controller.rb
1 | 1 | class ProposalsDiscussionPluginMyprofileController < MyProfileController |
2 | 2 | |
3 | 3 | before_filter :check_edit_permission_to_proposal, :only => :publish_proposal |
4 | + before_filter :set_discussion, :only => [:select_topic, :new_proposal] | |
4 | 5 | |
5 | 6 | def select_topic |
6 | - @discussion = profile.articles.find(params[:parent_id]) | |
7 | - render :file => 'select_topic' | |
8 | 7 | end |
9 | 8 | |
10 | 9 | def new_proposal |
11 | - redirect_to :controller => 'cms', :action => 'new', :type => "ProposalsDiscussionPlugin::Proposal", :parent_id => params[:discussion][:topic] | |
10 | + if params[:discussion].blank? || params[:discussion][:topic].blank? | |
11 | + session[:notice] = _('Please select a topic') | |
12 | + render :file => 'proposals_discussion_plugin_myprofile/select_topic' | |
13 | + else | |
14 | + redirect_to :controller => 'cms', :action => 'new', :type => "ProposalsDiscussionPlugin::Proposal", :parent_id => params[:discussion][:topic] | |
15 | + end | |
12 | 16 | end |
13 | 17 | |
14 | 18 | def publish_proposal |
... | ... | @@ -27,4 +31,8 @@ class ProposalsDiscussionPluginMyprofileController < MyProfileController |
27 | 31 | render_access_denied unless @proposal.allow_edit?(user) |
28 | 32 | end |
29 | 33 | |
34 | + def set_discussion | |
35 | + @discussion = profile.articles.find(params[:parent_id]) | |
36 | + end | |
37 | + | |
30 | 38 | end | ... | ... |
test/functional/proposals_discussion_plugin_myprofile_controller_test.rb
... | ... | @@ -24,7 +24,7 @@ class ProposalsDiscussionPluginMyprofileControllerTest < ActionController::TestC |
24 | 24 | end |
25 | 25 | |
26 | 26 | should 'new_proposal redirect to cms controller' do |
27 | - get :new_proposal, :profile => profile.identifier, :discussion => {:topic => topic.id} | |
27 | + get :new_proposal, :profile => profile.identifier, :discussion => {:topic => topic.id}, :parent_id => discussion.id | |
28 | 28 | assert_redirected_to :controller => 'cms', :action => 'new', :type => "ProposalsDiscussionPlugin::Proposal", :parent_id => topic.id |
29 | 29 | end |
30 | 30 | |
... | ... | @@ -41,4 +41,9 @@ class ProposalsDiscussionPluginMyprofileControllerTest < ActionController::TestC |
41 | 41 | assert !proposal.reload.published |
42 | 42 | end |
43 | 43 | |
44 | + should 'new_proposal without a topic redirect to back' do | |
45 | + get :new_proposal, :profile => profile.identifier, :parent_id => discussion.id | |
46 | + assert_template 'select_topic' | |
47 | + end | |
48 | + | |
44 | 49 | end | ... | ... |
views/proposals_discussion_plugin_myprofile/select_topic.html.erb
0 → 100644
... | ... | @@ -0,0 +1,39 @@ |
1 | +<script> | |
2 | + jQuery(document).ready(function($){ | |
3 | + $("#topics").accordion(); | |
4 | + $('#topics input[type=radio],label').on('click',function(e){e.stopPropagation();}); | |
5 | + $('#topics h4').click(function(e){ | |
6 | + e.stopPropagation(); | |
7 | + $(this).find('input:radio').prop('checked', true); | |
8 | + }); | |
9 | + }); | |
10 | +</script> | |
11 | + | |
12 | +<div class="proposals-discussion-plugin select-topic"> | |
13 | + <h1><%= @discussion.title %></h1> | |
14 | + <%= form_for :discussion, :url => {:controller => 'proposals_discussion_plugin_myprofile', :action => 'new_proposal'} do %> | |
15 | + | |
16 | + <h3><%= _('Select topic') %></h3> | |
17 | + <div id="topics"> | |
18 | + | |
19 | + <% @discussion.topics.each do |topic| %> | |
20 | + <h4> | |
21 | + <%= radio_button_tag('discussion[topic]', topic.id) %> | |
22 | + <%= topic.title %> | |
23 | + </h4> | |
24 | + <div class="content"> | |
25 | + <%= topic.body %> | |
26 | + </div> | |
27 | + <% end %> | |
28 | + | |
29 | + <div class="clear"></div> | |
30 | + </div> | |
31 | + | |
32 | + <%= hidden_field_tag :parent_id, @discussion.id %> | |
33 | + | |
34 | + <div class="actions"> | |
35 | + <%= submit_button(:next, _('Next')) %> | |
36 | + <%= button :cancel, _('Cancel'), @discussion.view_url %> | |
37 | + </div> | |
38 | + <% end %> | |
39 | +</div> | ... | ... |
views/select_topic.html.erb
... | ... | @@ -1,37 +0,0 @@ |
1 | -<script> | |
2 | - jQuery(document).ready(function($){ | |
3 | - $("#topics").accordion(); | |
4 | - $('#topics input[type=radio],label').on('click',function(e){e.stopPropagation();}); | |
5 | - $('#topics h4').click(function(e){ | |
6 | - e.stopPropagation(); | |
7 | - $(this).find('input:radio').prop('checked', true); | |
8 | - }); | |
9 | - }); | |
10 | -</script> | |
11 | - | |
12 | -<div class="proposals-discussion-plugin select-topic"> | |
13 | - <h1><%= @discussion.title %></h1> | |
14 | - <%= form_for :discussion, :url => {:controller => 'proposals_discussion_plugin_myprofile', :action => 'new_proposal'} do %> | |
15 | - | |
16 | - <h3><%= _('Select topic') %></h3> | |
17 | - <div id="topics"> | |
18 | - | |
19 | - <% @discussion.topics.each do |topic| %> | |
20 | - <h4> | |
21 | - <%= radio_button_tag('discussion[topic]', topic.id) %> | |
22 | - <%= topic.title %> | |
23 | - </h4> | |
24 | - <div class="content"> | |
25 | - <%= topic.body %> | |
26 | - </div> | |
27 | - <% end %> | |
28 | - | |
29 | - <div class="clear"></div> | |
30 | - </div> | |
31 | - | |
32 | - <div class="actions"> | |
33 | - <%= submit_button(:next, _('Next')) %> | |
34 | - <%= button :cancel, _('Cancel'), @discussion.view_url %> | |
35 | - </div> | |
36 | - <% end %> | |
37 | -</div> |