diff --git a/app/controllers/administrateurs/procedures_controller.rb b/app/controllers/administrateurs/procedures_controller.rb
index 5f74e4b4c..39cd876ff 100644
--- a/app/controllers/administrateurs/procedures_controller.rb
+++ b/app/controllers/administrateurs/procedures_controller.rb
@@ -233,17 +233,19 @@ module Administrateurs
@procedure.assign_attributes(publish_params)
- if @procedure.draft_changed?
+ if @procedure.draft_changed? && !@procedure.close?
@procedure.publish_revision!
flash.notice = "Nouvelle version de la démarche publiée"
- redirect_to admin_procedure_path(@procedure)
+ elsif @procedure.draft_changed? && @procedure.close?
+ @procedure.publish_or_reopen!(current_administrateur)
+ @procedure.publish_revision!
+ flash.notice = "Démarche publiée"
elsif @procedure.publish_or_reopen!(current_administrateur)
flash.notice = "Démarche publiée"
- redirect_to admin_procedure_path(@procedure)
else
flash.alert = @procedure.errors.full_messages
- redirect_to admin_procedure_path(@procedure)
end
+ redirect_to admin_procedure_path(@procedure)
end
def transfert
diff --git a/app/models/procedure.rb b/app/models/procedure.rb
index 1aef4d3fa..576043da5 100644
--- a/app/models/procedure.rb
+++ b/app/models/procedure.rb
@@ -405,7 +405,7 @@ class Procedure < ApplicationRecord
end
def draft_changed?
- publiee? && published_revision.different_from?(draft_revision) && revision_changes.present?
+ !brouillon? && published_revision.different_from?(draft_revision) && revision_changes.present?
end
def revision_changes
diff --git a/app/views/administrateurs/procedures/_publication_form.html.haml b/app/views/administrateurs/procedures/_publication_form.html.haml
index 9f8792533..6b296dc88 100644
--- a/app/views/administrateurs/procedures/_publication_form.html.haml
+++ b/app/views/administrateurs/procedures/_publication_form.html.haml
@@ -8,37 +8,17 @@
- publication_errors.each do |_attribute, full_messages|
%p= full_messages.to_sentence
- - if procedure.draft_changed?
+ - if !procedure.close? && procedure.draft_changed?
%p.mb-4 Publiez une nouvelle version de votre démarche. Les modifications suivantes seront appliquées :
= render partial: 'revision_changes', locals: { changes: procedure.revision_changes }
+
+ - elsif procedure.close? && procedure.draft_changed?
+ %p.mb-4 Publiez une nouvelle version de votre démarche. Les modifications suivantes seront appliquées :
+ = render partial: 'revision_changes', locals: { changes: procedure.revision_changes }
+ = render partial: 'publication_form_inputs', locals: { procedure: procedure, closed_procedures: @closed_procedures }
+
- else
- %p.mb-4 Publiez votre démarche, et partagez la à vos usagers. Aucune modification ne sera possible.
- %p Personnalisez le lien public de la démarche pour en faciliter l’accès (obligatoire pour publier votre démarche) :
- %p.empty-text
- = commencer_url(path: '')
- = text_field_tag(:path, procedure.path,
- id: 'procedure_path',
- label: 'Adresse de diffusion',
- placeholder: 'chemin-de-la-démarche',
- required: true,
- class: 'form',
- pattern: '^[a-z0-9_-]{3,200}$',
- title: "De 3 à 200 caractères; minuscules, chiffres et tiret seulement",
- autocomplete: 'off',
- style: 'width: 300px; display: inline;')
- .text-info.mb-4
- Attention, diffusez toujours le lien complet affiché ci-dessus, et non pas un lien générique vers #{APPLICATION_NAME}. Ne dites pas non plus aux usagers de se rendre sur le site générique #{APPLICATION_NAME}, donnez-leur toujours le lien complet.
- - if @closed_procedures.present?
- %h2.card-title Cette démarche remplace une close ? Si oui, veuillez indiquer le n° de la démarche remplacée
- = select_tag :old_procedure, options_for_select(@closed_procedures), include_blank: true
- %h2.card-title Diffusion de la démarche
- %p Où les utilisateurs trouveront-ils le lien de la démarche ? Typiquement, il s’agit d’une page de votre site web.
- %p.center
- = text_field_tag(:lien_site_web, procedure.lien_site_web,
- required: true,
- class: 'form-control',
- autocomplete: 'off',
- placeholder: 'https://exemple.gouv.fr/ma_demarche')
+ = render partial: 'publication_form_inputs', locals: { procedure: procedure, closed_procedures: @closed_procedures }
.flex.justify-end
= submit_tag procedure_publish_label(procedure, :submit), { disabled: publication_errors.present?, class: "button primary", id: 'publish' }
diff --git a/app/views/administrateurs/procedures/_publication_form_inputs.html.haml b/app/views/administrateurs/procedures/_publication_form_inputs.html.haml
new file mode 100644
index 000000000..b27163ba9
--- /dev/null
+++ b/app/views/administrateurs/procedures/_publication_form_inputs.html.haml
@@ -0,0 +1,27 @@
+%p.mb-4{ :class => ("mt-4" if procedure.close? && procedure.draft_changed?) } Publiez votre démarche, et partagez la à vos usagers.
+%p Personnalisez le lien public de la démarche pour en faciliter l’accès (obligatoire pour publier votre démarche) :
+%p.empty-text
+ = commencer_url(path: '')
+ = text_field_tag(:path, procedure.path,
+ id: 'procedure_path',
+ label: 'Adresse de diffusion',
+ placeholder: 'chemin-de-la-démarche',
+ required: true,
+ class: 'form',
+ pattern: '^[a-z0-9_-]{3,200}$',
+ title: "De 3 à 200 caractères; minuscules, chiffres et tiret seulement",
+ autocomplete: 'off',
+ style: 'width: 300px; display: inline;')
+ .text-info.mb-4
+ Attention, diffusez toujours le lien complet affiché ci-dessus, et non pas un lien générique vers #{APPLICATION_NAME}. Ne dites pas non plus aux usagers de se rendre sur le site générique #{APPLICATION_NAME}, donnez-leur toujours le lien complet.
+ - if closed_procedures.present?
+ %h2.card-title Cette démarche remplace une close ? Si oui, veuillez indiquer le n° de la démarche remplacée
+ = select_tag :old_procedure, options_for_select(@closed_procedures), include_blank: true
+ %h2.card-title Diffusion de la démarche
+ %p Où les utilisateurs trouveront-ils le lien de la démarche ? Typiquement, il s’agit d’une page de votre site web.
+ %p.center
+ = text_field_tag(:lien_site_web, procedure.lien_site_web,
+ required: true,
+ class: 'form-control',
+ autocomplete: 'off',
+ placeholder: 'https://exemple.gouv.fr/ma_demarche')
diff --git a/app/views/administrateurs/procedures/show.html.haml b/app/views/administrateurs/procedures/show.html.haml
index 4716b0aa5..478ff2b2c 100644
--- a/app/views/administrateurs/procedures/show.html.haml
+++ b/app/views/administrateurs/procedures/show.html.haml
@@ -25,7 +25,7 @@
- if !@procedure.publiee? && !@procedure.close? && !@procedure.depubliee?
= link_to 'Publier', admin_procedure_publication_path(@procedure), class: 'button primary', id: 'publish-procedure-link', data: { disable_with: "Publication..." }
- - if @procedure.close? || @procedure.depubliee?
+ - if (@procedure.close? || @procedure.depubliee?) && !@procedure.draft_changed?
= link_to 'Réactiver', admin_procedure_publication_path(@procedure), class: 'button primary', id: 'publish-procedure-link', data: { disable_with: "Publication..." }
- if @procedure.locked? && !@procedure.close?
diff --git a/spec/system/administrateurs/procedure_publish_spec.rb b/spec/system/administrateurs/procedure_publish_spec.rb
index 11480f066..a58e834a2 100644
--- a/spec/system/administrateurs/procedure_publish_spec.rb
+++ b/spec/system/administrateurs/procedure_publish_spec.rb
@@ -98,10 +98,11 @@ describe 'Publishing a procedure', js: true do
end
end
- context 'when a procedure is de-published' do
+ context 'when a procedure is closed with revision changes' do
+ let!(:tdc) { { type_champ: :text, libelle: 'nouveau champ' } }
let!(:procedure) do
create(:procedure_with_dossiers,
- :unpublished,
+ :closed,
:with_path,
:with_type_de_champ,
:with_service,
@@ -109,14 +110,20 @@ describe 'Publishing a procedure', js: true do
administrateur: administrateur)
end
+ before do
+ Flipper.enable(:procedure_revisions, procedure)
+ procedure.draft_revision.add_type_de_champ(tdc)
+ end
+
scenario 'an admin can publish it again' do
visit admin_procedures_path(statut: "archivees")
click_on procedure.libelle
find('#publish-procedure-link').click
+ expect(page).to have_text('Les modifications suivantes seront appliquées')
expect(find_field('procedure_path').value).to eq procedure.path
fill_in 'lien_site_web', with: 'http://some.website'
- click_on 'Publier'
+ find('#publish').click
expect(page).to have_text('Démarche publiée')
expect(page).to have_selector('#preview-procedure')