Merge pull request #8120 from artoscinote/ma_SCI_11435

Disable unpublished button if form is in use [SCI-11435]
This commit is contained in:
Martin Artnik 2025-01-08 13:53:38 +01:00 committed by GitHub
commit 6c007705b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 13 additions and 5 deletions

View file

@ -70,6 +70,8 @@ class FormsController < ApplicationController
end
def publish
render_403 and return unless can_publish_form?(@form)
ActiveRecord::Base.transaction do
@form.update!(
published_by: current_user,
@ -82,6 +84,8 @@ class FormsController < ApplicationController
end
def unpublish
render_403 and return unless can_unpublish_form?(@form)
ActiveRecord::Base.transaction do
@form.update!(
published_by: nil,
@ -208,7 +212,6 @@ class FormsController < ApplicationController
end
def check_manage_permissions
render_403 unless @form && can_manage_form?(@form)
end

View file

@ -31,7 +31,7 @@
<button v-if="form.attributes.urls.publish" class="btn btn-primary" @click="publishForm">
{{ i18n.t('forms.show.publish') }}
</button>
<button v-if="form.attributes.urls.unpublish" class="btn btn-secondary" @click="unpublishForm">
<button v-if="form.attributes.published_on" :disabled="!form.attributes.urls.unpublish" class="btn btn-secondary" @click="unpublishForm">
{{ i18n.t('forms.show.unpublish') }}
</button>
</div>

View file

@ -32,6 +32,10 @@ class Form < ApplicationRecord
enum :visibility, { hidden: 0, visible: 1 }
def unused?
form_responses.none?
end
def permission_parent
nil
end

View file

@ -40,6 +40,6 @@ Canaid::Permissions.register_for(Form) do
end
can :unpublish_form do |user, form|
form.published? && form.permission_granted?(user, FormPermissions::MANAGE)
form.published? && form.permission_granted?(user, FormPermissions::MANAGE) && form.unused?
end
end

View file

@ -9,6 +9,7 @@ describe FormsController, type: :controller do
let!(:form) { create :form, team: team, created_by: user }
let!(:form2) { create :form, team: team, created_by: user }
let!(:published_form) { create :form, team: team, created_by: user, published_by: user, published_on: DateTime.parse('1-1-2000') }
let!(:form_field) { create :form_field, form: form2, created_by: user }
describe '#index' do
@ -20,7 +21,7 @@ describe FormsController, type: :controller do
response_body = JSON.parse(response.body)
expect(response_body['data'].length).to eq 2
expect(response_body['data'].length).to eq 3
expect(response.body).to include(form.name)
expect(response.body).to include(form2.name)
expect(response.body).not_to include(form_field.name)
@ -110,7 +111,7 @@ describe FormsController, type: :controller do
let(:action) { put :unpublish, params: params, format: :json }
let(:params) do
{
id: form.id,
id: published_form.id,
}
end