From 4aaba21791d75b668e176c3bc999a3437a9aeb00 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Wed, 28 Jun 2023 08:33:49 +0200
Subject: [PATCH] Fix #1061

---
 .../websites/pages_controller.rb              |  5 ++
 .../website/page/accessibility.rb             | 52 ++++++++++++++++++-
 .../blocks/templates/files/_snippet.html.erb  |  1 -
 .../special_pages/_accessibility.html.erb     |  6 +++
 config/routes/admin/communication.rb          |  1 +
 5 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100644 app/views/admin/communication/websites/pages/show/special_pages/_accessibility.html.erb

diff --git a/app/controllers/admin/communication/websites/pages_controller.rb b/app/controllers/admin/communication/websites/pages_controller.rb
index 3015ca457..884bfd595 100644
--- a/app/controllers/admin/communication/websites/pages_controller.rb
+++ b/app/controllers/admin/communication/websites/pages_controller.rb
@@ -58,6 +58,11 @@ class Admin::Communication::Websites::PagesController < Admin::Communication::We
     redirect_back(fallback_location: [:admin, @object])
   end
 
+  def generate
+    @page.generate
+    redirect_back(fallback_location: [:admin, @page])
+  end
+
   def new
     @page.website = @website
     breadcrumb
diff --git a/app/models/communication/website/page/accessibility.rb b/app/models/communication/website/page/accessibility.rb
index b2a97fa5d..edc79a634 100644
--- a/app/models/communication/website/page/accessibility.rb
+++ b/app/models/communication/website/page/accessibility.rb
@@ -51,5 +51,55 @@ class Communication::Website::Page::Accessibility < Communication::Website::Page
   def is_listed_among_children?
     false
   end
-  
+
+  def generate
+    headings.destroy_all
+    blocks.destroy_all
+    heading = generate_heading 'Déclaration d\'accessibilité'
+    generate_block(heading, :files, { 
+      description: "<p>#{website} s'engage à rendre son site internet accessible conformément à l'article 47 de la loi n° 2005-102 du 11 février 2005.</p><p>Cette déclaration d'accessibilité s'applique au site #{website.url}.</p>",
+      elements: [
+        { title: "Schéma pluriannuel d’accessibilité", file: {} },
+        { title: "Plan annuel d’accessibilité", file: {} },
+      ]
+    })
+    heading = generate_heading 'Résultats des tests'
+    generate_block(heading, :key_figures, {
+      description: "<p>Le contre-audit de conformité, finalisé le 00/00/0000 par la société [nom de la société], révèle que :</p>",
+      elements:[
+        { number: nil, unit: "%", description: "de conformité au RGAA" },
+        { number: nil, unit: "",  description: "critères applicables sur un total de 106" }
+      ]
+    })
+    heading = generate_heading 'État de conformité'
+    generate_block(heading, :chapter, {
+      text: "<p>Le site #{website} (#{website.url}) est <b>[non conforme, partiellement conforme, totalement conforme]</b> avec le référentiel général d’amélioration de l’accessibilité (RGAA), version 4 en raison des non-conformités et des dérogations énumérées ci-dessous.</p>"
+    })
+    heading = generate_heading 'Contenus non accessibles'
+    generate_block(heading, :chapter, {
+      text: "<p>Les contenus listés ci-dessous ne sont pas accessibles pour les raisons suivantes.<br></p><p><b>Dérogations pour charge disproportionnée</b></p><ul><li></li></ul><p><b>Contenus non soumis à l'obligation d'accessibilité</b></p><ul><li></li></ul>"
+    })
+    heading = generate_heading 'Établissement de cette déclaration d\'accessibilité'
+    generate_block(heading, :chapter, {
+      text: "<p>Cette déclaration a été établie le <b>00/00/0000</b>.<br></p><p>Technologies utilisées pour la réalisation du site :</p><ul>\n<li>HTML5</li>\n<li>CSS</li>\n<li>Javascript</li>\n<li>Hugo</li>\n</ul><p>Agents utilisateurs et technologies d'assistance utilisés pour vérifier l'accessibilité :</p><ul>\n<li>NVDA</li>\n<li>VoiceOver</li>\n</ul><p>La vérification de l'accessibilité a été effectuée au travers de tests manuels, assistés par les outils suivants :</p><ul>\n<li>Accessibility Insights for Web</li>\n<li>ArcToolkit</li>\n<li>Assistant RGAA</li>\n<li>Axe DevTool</li>\n<li>Color Contrast Analyser</li>\n<li>eAccessibility (PDF accessibility checker)</li>\n<li>Inspecteur de composants</li>\n<li>Web Developer Toolbar</li>\n<li>WCAG Contrast checker</li>\n<li>Validateur HTML du W3C</li>\n</ul><ul>\n</ul><p>Pages du site ayant fait l'objet de la vérification de conformité</p><ul>\n<li></li>\n</ul>"
+    })
+    heading = generate_heading 'Environnement de test'
+    generate_block(heading, :chapter, {
+      text: "<p>Les vérifications de restitution de contenus ont été réalisées sur la base de la combinaison fournie par la base de référence du RGAA, avec les versions suivantes :</p><ul>\n<li>Sur ordinateur MacOS avec Google Chrome et VoiceOver</li>\n<li>Sur ordinateur MacOS avec Safari et VoiceOver</li>\n<li>Sur ordinateur Windows avec Firefox et NVDA</li>\n<li>Sur mobile Android avec Google Chrome et Talkback</li>\n</ul>"
+    })
+    heading = generate_heading 'Voies de recours'
+    generate_block(heading, :chapter, {
+      text: "<p>Si vous avez signalé au responsable du site internet un défaut d'accessibilité qui vous empêche d'accéder à un contenu ou à un des services du portail et n'avez pas obtenu de réponse satisfaisante, vous êtes en droit de :</p><p><b></b></p><ul>\n<li><p><a href=\"https://formulaire.defenseurdesdroits.fr/\" target=\"_blank\">Écrire un message au Défenseur des droits</a> (formulaire en ligne) ;</p></li>\n<li><p>Contacter le <a href=\"https://www.defenseurdesdroits.fr/saisir/delegues\" target=\"_blank\">délégué du Défenseur des droits dans votre région</a> ;</p></li>\n<li><p>Envoyer un courrier postal (gratuit, ne pas mettre de timbre) à cette adresse : Défenseur des droits - Libre réponse 71120 - 75342 Paris CEDEX 07.</p></li>\n</ul><ul>\n</ul>"
+    })
+  end
+
+  protected
+
+  def generate_heading(title)
+    headings.create(university: university, title: title)
+  end
+
+  def generate_block(heading, kind, data)
+    blocks.create(university: university, heading: heading, template_kind: kind, data: data.to_json)
+  end
 end
diff --git a/app/views/admin/communication/blocks/templates/files/_snippet.html.erb b/app/views/admin/communication/blocks/templates/files/_snippet.html.erb
index a1bbb1484..963bf1f2e 100644
--- a/app/views/admin/communication/blocks/templates/files/_snippet.html.erb
+++ b/app/views/admin/communication/blocks/templates/files/_snippet.html.erb
@@ -1,6 +1,5 @@
 <ul class="list-unstyled">
   <% block.template.elements.first(2).each do |element| %>
-    <% next unless element.blob %>
     <li><%= element.title %></li>
   <% end %>
 </ul>
\ No newline at end of file
diff --git a/app/views/admin/communication/websites/pages/show/special_pages/_accessibility.html.erb b/app/views/admin/communication/websites/pages/show/special_pages/_accessibility.html.erb
new file mode 100644
index 000000000..ec3ff2841
--- /dev/null
+++ b/app/views/admin/communication/websites/pages/show/special_pages/_accessibility.html.erb
@@ -0,0 +1,6 @@
+<% #if about.blocks.none? && about.headings.none? %>
+  <%= link_to 'Générer le modèle de déclaration', 
+              generate_admin_communication_website_page_path(about), 
+              method: :post,
+              class: button_classes %>
+<% #end %>
\ No newline at end of file
diff --git a/config/routes/admin/communication.rb b/config/routes/admin/communication.rb
index babb107ff..2bf8317ec 100644
--- a/config/routes/admin/communication.rb
+++ b/config/routes/admin/communication.rb
@@ -25,6 +25,7 @@ namespace :communication do
         post :duplicate
         post :connect
         post :disconnect
+        post :generate
       end
     end
     resources :categories, controller: 'websites/categories', path: '/:lang/categories' do
-- 
GitLab