diff --git a/app/controllers/guidance_groups_controller.rb b/app/controllers/guidance_groups_controller.rb
index e12c18c..9bbfae9 100644
--- a/app/controllers/guidance_groups_controller.rb
+++ b/app/controllers/guidance_groups_controller.rb
@@ -57,7 +57,6 @@
end
end
-# TODO: This does not have a route in config/routes.rb and is unreachable!
# PUT /guidance_groups/1
def admin_update_publish
@guidance_group = GuidanceGroup.find(params[:id])
@@ -65,13 +64,22 @@
@guidance_group.org.id = current_user.org.id
@guidance_group.published = true
- if @guidance_group.update_attributes(params[:guidance_group])
- redirect_to admin_index_guidance_path(params[:guidance_group]), notice: success_message(_('guidance group'), _('saved'))
- else
- redirect_to admin_index_guidance_path(@guidance_group), alert: failed_update_error(@guidance_group, _('guidance group'))
- end
+ @guidance_group.save
+ flash[:notice] = _('Your guidance group has been published and is now available to users.')
+ redirect_to admin_index_guidance_path
end
+ # PUT /guidance_groups/1
+ def admin_update_unpublish
+ @guidance_group = GuidanceGroup.find(params[:id])
+ authorize @guidance_group
+ @guidance_group.org.id = current_user.org.id
+ @guidance_group.published = false
+
+ @guidance_group.save
+ flash[:notice] = _('Your guidance group is no longer published and will not be available to users.')
+ redirect_to admin_index_guidance_path
+ end
# DELETE /guidance_groups/1
# DELETE /guidance_groups/1.json
diff --git a/app/controllers/guidances_controller.rb b/app/controllers/guidances_controller.rb
index 382cfbe..31036f4 100644
--- a/app/controllers/guidances_controller.rb
+++ b/app/controllers/guidances_controller.rb
@@ -78,6 +78,34 @@
end
end
+ # PUT /guidances/1
+ def admin_publish
+ @guidance = Guidance.find(params[:id])
+ authorize @guidance
+
+ @guidance.published = true
+ guidance_group = GuidanceGroup.find(@guidance.guidance_group_id)
+ if !guidance_group.published? || guidance_group.published.nil?
+ guidance_group.published = true
+ guidance_group.save
+ end
+ @guidance.save
+
+ flash[:notice] = _('Your guidance has been published and is now available to users.')
+ redirect_to admin_index_guidance_path
+ end
+
+ # PUT /guidances/1
+ def admin_unpublish
+ @guidance = Guidance.find(params[:id])
+ authorize @guidance
+
+ @guidance.published = false
+ @guidance.save
+
+ flash[:notice] = _('Your guidance is no longer published and will not be available to users.')
+ redirect_to admin_index_guidance_path
+ end
private
def guidance_params
diff --git a/app/policies/guidance_group_policy.rb b/app/policies/guidance_group_policy.rb
index bb514c3..2a66437 100644
--- a/app/policies/guidance_group_policy.rb
+++ b/app/policies/guidance_group_policy.rb
@@ -23,6 +23,10 @@
user.can_modify_guidance? && (guidance_group.org_id == user.org_id)
end
+ def admin_update_unpublish?
+ user.can_modify_guidance? && (guidance_group.org_id == user.org_id)
+ end
+
def admin_new?
user.can_modify_guidance?
end
diff --git a/app/policies/guidance_policy.rb b/app/policies/guidance_policy.rb
index 725326c..3bcc0d1 100644
--- a/app/policies/guidance_policy.rb
+++ b/app/policies/guidance_policy.rb
@@ -35,6 +35,14 @@
user.can_modify_guidance? && guidance.in_group_belonging_to?(user.org_id)
end
+ def admin_publish?
+ user.can_modify_guidance?
+ end
+
+ def admin_unpublish?
+ user.can_modify_guidance?
+ end
+
def update_phases?
user.can_modify_guidance?
end
diff --git a/app/views/guidances/admin_index.html.erb b/app/views/guidances/admin_index.html.erb
index 792c065..93139ef 100644
--- a/app/views/guidances/admin_index.html.erb
+++ b/app/views/guidances/admin_index.html.erb
@@ -27,7 +27,7 @@
<% end %>
| <%= _('Name') %> |
- <%= _('Published') %> |
+ <%= _('Status') %> |
<%= _('Optional subset') %> |
<%= _('Last updated') %> |
<%= _('Actions') %> |
@@ -41,9 +41,9 @@
<% if guidance_gr.published.nil? || guidance_gr.published == false then%>
- <%= _('No')%>
+ <%= _('Unpublished')%>
<% else %>
- <%= _('Yes')%>
+ <%= _('Published')%>
<% end %>
|
@@ -66,7 +66,12 @@
|
@@ -105,6 +110,7 @@
<%= _('Text') %> |
<%= _('Themes') %> |
<%= _('Guidance group') %> |
+ <%= _('Status') %> |
<%= _('Last updated') %> |
<%= _('Actions') %> |
@@ -136,6 +142,13 @@
-
<% end %>
+
+ <% if guidance.published.nil? || guidance.published == false then%>
+ <%= _('Unpublished')%>
+ <% else %>
+ <%= _('Published')%>
+ <% end %>
+ |
<%= l guidance.updated_at.to_date, formats: :short %>
|
@@ -149,7 +162,13 @@
diff --git a/config/routes.rb b/config/routes.rb
index c90be08..6b03151 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -111,7 +111,8 @@
delete 'admin_destroy'
post 'admin_create'
put 'admin_update'
-
+ put 'admin_publish'
+ put 'admin_unpublish'
get 'update_phases'
get 'update_versions'
get 'update_sections'
@@ -127,6 +128,8 @@
delete 'admin_destroy'
post 'admin_create'
put 'admin_update'
+ put 'admin_update_publish'
+ put 'admin_update_unpublish'
end
end
diff --git a/test/functional/guidance_groups_controller_test.rb b/test/functional/guidance_groups_controller_test.rb
index 1579400..fc49af0 100644
--- a/test/functional/guidance_groups_controller_test.rb
+++ b/test/functional/guidance_groups_controller_test.rb
@@ -107,7 +107,41 @@
assert_response :success
assert assigns(:guidance_group)
end
-
+
+ # PUT /org/admin/guidancegroup/:id/admin_update_publish (admin_update_publish_guidance_group)
+ test 'publish the guidance' do
+ @guidance_group = GuidanceGroup.first
+
+ # Should redirect user to the root path if they are not logged in!
+ put admin_update_publish_guidance_group_path(@guidance_group)
+ assert_unauthorized_redirect_to_root_path
+
+ sign_in @user
+
+ put admin_update_publish_guidance_group_path(@guidance_group)
+ assert_response :redirect
+ assert flash[:notice].include?('published')
+ assert_redirected_to "#{admin_index_guidance_path}"
+ assert assigns(:guidance_group)
+ end
+
+ # PUT /org/admin/guidancegroup/:id/admin_update_unpublish (admin_update_unpublish_guidance_group)
+ test 'unpublish the guidance' do
+ @guidance_group = GuidanceGroup.first
+
+ # Should redirect user to the root path if they are not logged in!
+ put admin_update_unpublish_guidance_group_path(@guidance_group)
+ assert_unauthorized_redirect_to_root_path
+
+ sign_in @user
+
+ put admin_update_unpublish_guidance_group_path(@guidance_group)
+ assert_response :redirect
+ assert flash[:notice].include?('no longer published')
+ assert_redirected_to "#{admin_index_guidance_path}"
+ assert assigns(:guidance_group)
+ end
+
# DELETE /org/admin/guidancegroup/:id/admin_destroy (admin_destroy_guidance_group_path)
# ----------------------------------------------------------
test 'delete the guidance_group' do
diff --git a/test/functional/guidances_controller_test.rb b/test/functional/guidances_controller_test.rb
index e16670d..692a99b 100644
--- a/test/functional/guidances_controller_test.rb
+++ b/test/functional/guidances_controller_test.rb
@@ -131,7 +131,43 @@
assert_response :success
assert assigns(:guidance)
end
-
+
+ # PUT /org/admin/guidance/:id/admin_publish (admin_publish_guidance)
+ test 'publish the guidance' do
+ @guidance = Guidance.first
+ @guidance_group = @guidance.guidance_group
+
+ # Should redirect user to the root path if they are not logged in!
+ put admin_publish_guidance_path(@guidance)
+ assert_unauthorized_redirect_to_root_path
+
+ sign_in @user
+
+ put admin_publish_guidance_path(@guidance)
+ assert_response :redirect
+ assert flash[:notice].include?('published')
+ assert_redirected_to "#{admin_index_guidance_path}"
+ assert assigns(:guidance)
+ end
+
+ # PUT /org/admin/guidance/:id/admin_unpublish (admin_unpublish_guidance)
+ test 'unpublish the guidance' do
+ @guidance = Guidance.first
+ @guidance_group = @guidance.guidance_group
+
+ # Should redirect user to the root path if they are not logged in!
+ put admin_unpublish_guidance_path(@guidance)
+ assert_unauthorized_redirect_to_root_path
+
+ sign_in @user
+
+ put admin_unpublish_guidance_path(@guidance)
+ assert_response :redirect
+ assert flash[:notice].include?('no longer published')
+ assert_redirected_to "#{admin_index_guidance_path}"
+ assert assigns(:guidance)
+ end
+
# DELETE /org/admin/guidance/:id/admin_destroy (admin_destroy_guidance_path)
# ----------------------------------------------------------
test 'delete the guidance' do