diff options
author | lizconlan <liz@mysociety.org> | 2014-07-24 14:24:58 +0100 |
---|---|---|
committer | Louise Crow <louise.crow@gmail.com> | 2014-09-22 12:39:03 +0100 |
commit | 7a7a57349432d01a99d6ba96cc7a4a130411a3b8 (patch) | |
tree | f077d2f8340b690517db7b01a5b1a592a1cc401a | |
parent | cb2dfa0c464e72c4d0eb00e5381e9d24c57d63e2 (diff) |
Enable admins to link public body categories to headings
4 files changed, 51 insertions, 6 deletions
diff --git a/app/controllers/admin_public_body_category_controller.rb b/app/controllers/admin_public_body_category_controller.rb index 0fece725e..221d8e4ad 100644 --- a/app/controllers/admin_public_body_category_controller.rb +++ b/app/controllers/admin_public_body_category_controller.rb @@ -16,13 +16,22 @@ class AdminPublicBodyCategoryController < AdminController end def update - I18n.with_locale(I18n.default_locale) do - @category = PublicBodyCategory.find(params[:id]) + @category = PublicBodyCategory.find(params[:id]) + @tagged_public_bodies = PublicBody.find_by_tag(@category.category_tag) + heading_ids = [] + I18n.with_locale(I18n.default_locale) do if params[:public_body_category][:category_tag] && PublicBody.find_by_tag(@category.category_tag).count > 0 && @category.category_tag != params[:public_body_category][:category_tag] flash[:notice] = 'There are authorities associated with this category, so the tag can\'t be renamed' - elsif @category.update_attributes(params[:public_body_category]) - flash[:notice] = 'Category was successfully updated.' + else + if params[:headings] + heading_ids = params[:headings].values + end + + if @category.update_attributes(params[:public_body_category]) + @category.public_body_heading_ids = heading_ids + flash[:notice] = 'Category was successfully updated.' + end end render :action => 'edit' diff --git a/app/helpers/admin_public_body_category_helper.rb b/app/helpers/admin_public_body_category_helper.rb new file mode 100644 index 000000000..9c5e5cc5e --- /dev/null +++ b/app/helpers/admin_public_body_category_helper.rb @@ -0,0 +1,14 @@ +module AdminPublicBodyCategoryHelper + def heading_is_selected?(heading) + if params[:headings] + if params[:headings]["heading_#{heading.id}"] + return true + else + return false + end + elsif @category.public_body_headings.include?(heading) + return true + end + false + end +end diff --git a/app/views/admin_public_body_category/_form.html.erb b/app/views/admin_public_body_category/_form.html.erb index 5cda60e54..b0778d371 100644 --- a/app/views/admin_public_body_category/_form.html.erb +++ b/app/views/admin_public_body_category/_form.html.erb @@ -44,8 +44,7 @@ end </div> </div> -<% if PublicBody.find_by_tag(@category.category_tag).count == 0 %> - +<% if PublicBody.find_by_tag(@category.category_tag).count == 0 or @category.errors.messages.keys.include?(:category_tag) %> <h3>Common Fields</h3> <div class="control-group"> @@ -55,4 +54,13 @@ end </div> </div> <% end %> + +<h3>Headings</h3> +<div class="control-group"> + <% PublicBodyHeading.all.each do |heading| %> + <div class="span3"> + <%= check_box_tag "headings[heading_#{heading.id}]", heading.id, heading_is_selected?(heading) %> <label for="headings_heading_<%= heading.id %>" class="control-label"><%= heading.name %></label> + </div> + <% end %> +</div> <!--[eoform:public_body_category]--> diff --git a/spec/controllers/admin_public_body_category_controller_spec.rb b/spec/controllers/admin_public_body_category_controller_spec.rb index dbc72ac93..d13ebcaaf 100644 --- a/spec/controllers/admin_public_body_category_controller_spec.rb +++ b/spec/controllers/admin_public_body_category_controller_spec.rb @@ -85,6 +85,8 @@ describe AdminPublicBodyCategoryController do @category = PublicBodyCategory.find_by_title("Useless ministries") end + render_views + it "saves edits to a public body category" do post :update, { :id => @category.id, :public_body_category => { :title => "Renamed" } } @@ -93,6 +95,18 @@ describe AdminPublicBodyCategoryController do pbc.title.should == "Renamed" end + it "saves edits to a public body category's heading associations" do + @category.public_body_headings.count.should == 1 + @category.public_body_headings.first.name.should == "Silly ministries" + heading = PublicBodyHeading.find_by_name("Popular agencies") + post :update, { :id => @category.id, + :public_body_category => { :title => "Renamed" }, + :headings => {"heading_#{heading.id}" => heading.id} } + request.flash[:notice].should include('successful') + pbc = PublicBodyCategory.find(@category.id) + pbc.public_body_headings.should == [heading] + end + it "saves edits to a public body category in another locale" do I18n.with_locale(:es) do @category.title.should == 'Los useless ministries' |