aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlizconlan <liz@mysociety.org>2014-07-24 14:24:58 +0100
committerLouise Crow <louise.crow@gmail.com>2014-09-22 12:39:03 +0100
commit7a7a57349432d01a99d6ba96cc7a4a130411a3b8 (patch)
treef077d2f8340b690517db7b01a5b1a592a1cc401a
parentcb2dfa0c464e72c4d0eb00e5381e9d24c57d63e2 (diff)
Enable admins to link public body categories to headings
-rw-r--r--app/controllers/admin_public_body_category_controller.rb17
-rw-r--r--app/helpers/admin_public_body_category_helper.rb14
-rw-r--r--app/views/admin_public_body_category/_form.html.erb12
-rw-r--r--spec/controllers/admin_public_body_category_controller_spec.rb14
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">
+ &nbsp;<%= 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'