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