diff --git a/Makefile b/Makefile
index 157636976..b77da950c 100644
--- a/Makefile
+++ b/Makefile
@@ -18,9 +18,11 @@ shell_on_postgres_container:
populate_db:
pg_restore -d marche --if-exists --clean --no-owner --no-privileges lemarche/perimeters/management/commands/data/perimeters_20220104.sql
ls -d lemarche/fixtures/django/* | xargs django-admin loaddata
+ djan-admin create_content_pages
populate_db_container:
docker compose exec -ti app bash -c "ls -d lemarche/fixtures/django/* | xargs django-admin loaddata"
+ docker compose exec -ti app bash -c "django-admin create_content_pages"
# Deployment
# =============================================================================
diff --git a/README.md b/README.md
index 6f7a87b14..441024f04 100644
--- a/README.md
+++ b/README.md
@@ -113,12 +113,21 @@ django-admin import_departements
django-admin import_communes
```
-Des données de test peuvent être chargées ainsi (fixtures) :
+### Données de test
+- fixtures :
```bash
ls -d lemarche/fixtures/django/* | xargs django-admin loaddata
```
+- commande Django :
+```bash
+django-admin create_content_pages
+```
+
+> **Remarque** : La commande `create_content_pages` crée 6 pages de types ContentPage :
+('accessibilite', 'cgu', 'cgu-api', 'confidentialite', 'mentions-legales' et 'qui-sommes-nous').
+
## API
Il y a aussi une API, qui propose plusieurs endpoints et interfaces de documentation :
diff --git a/clevercloud/review-app-after-success.sh b/clevercloud/review-app-after-success.sh
index 79e991fba..24df8012f 100755
--- a/clevercloud/review-app-after-success.sh
+++ b/clevercloud/review-app-after-success.sh
@@ -22,3 +22,4 @@ PGPASSWORD=$POSTGRESQL_ADDON_PASSWORD pg_restore -d $POSTGRESQL_ADDON_DB -h $POS
# does not have execution rights on the $APP_HOME directory.
echo "Loading fixtures"
ls -d $APP_HOME/lemarche/fixtures/django/* | xargs django-admin loaddata
+django-admin create_content_pages
diff --git a/config/settings/base.py b/config/settings/base.py
index b15e7bace..c3de97cce 100644
--- a/config/settings/base.py
+++ b/config/settings/base.py
@@ -912,6 +912,14 @@
# Specific home and purchasing impact page is setted here to avoid queries on every page
SIAE_HOME_PAGE = env.str("SIAE_HOME_PAGE", "/accueil-structure/")
PURCHASING_IMPACT_PAGE = env.str("PURCHASING_IMPACT_PAGE", "/impact-rse/")
+# Static pages
+ABOUT = env.str("ABOUT", "/qui-sommes-nous/")
+ACCESSIBILITY = env.str("ACCESSIBILITY", "/accessibilite/")
+CGU = env.str("CGU", "/cgu/")
+CGU_API = env.str("CGU_API", "/cgu-api/")
+LEGAL_INFO = env.str("LEGAL_INFO", "/mentions-legales/")
+PRIVACY_POLICY = env.str("PRIVACY_POLICY", "/confidentialite/")
+RESSOURCES = env.str("RESSOURCES", "/ressources/")
# Increase throttling to avoid Bad request errors when saving large pages
# https://docs.djangoproject.com/en/4.2/ref/settings/#data-upload-max-number-fields
diff --git a/lemarche/cms/management/commands/create_content_pages.py b/lemarche/cms/management/commands/create_content_pages.py
new file mode 100644
index 000000000..5b4d8ce4b
--- /dev/null
+++ b/lemarche/cms/management/commands/create_content_pages.py
@@ -0,0 +1,55 @@
+import json
+
+from django.core.management.base import BaseCommand
+from wagtail.models import Site
+
+from content_manager.models import ContentPage
+
+
+class Command(BaseCommand):
+ help = """
+ Creates a series of content pages.
+ """
+
+ def handle(self, *args, **kwargs):
+ try:
+ with open("lemarche/fixtures/cms_content_pages.json") as f:
+ pages_data = json.load(f)
+ except FileNotFoundError:
+ self.stdout.write(
+ self.style.ERROR("Le fichier content_manager/fixtures/cms_content_pages.json n'existe pas.")
+ )
+ return
+ except json.JSONDecodeError:
+ self.stdout.write(
+ self.style.ERROR(
+ "Le fichier content_manager/fixtures/cms_content_pages.json n'est pas un fichier JSON valide."
+ )
+ )
+ return
+
+ home_page = Site.objects.filter(is_default_site=True).first().root_page
+
+ for page_data in pages_data:
+ slug = page_data["slug"]
+ title = page_data["title"]
+ body = page_data.get("body", [])
+
+ self.create_content_page(slug, title, body, home_page)
+
+ def create_content_page(self, slug: str, title: str, body: list, parent_page: ContentPage) -> ContentPage:
+ """
+ Creates a page for the site.
+ """
+
+ # Don't replace or duplicate an already existing page
+ already_exists = ContentPage.objects.filter(slug=slug).first()
+ if already_exists:
+ self.stdout.write(f"The {slug} page seem to already exist with id {already_exists.id}")
+ return already_exists
+
+ new_page = parent_page.add_child(instance=ContentPage(title=title, body=body, slug=slug, show_in_menus=True))
+
+ self.stdout.write(self.style.SUCCESS(f"Page {slug} created with id {new_page.id}"))
+
+ return new_page
diff --git a/lemarche/cms/migrations/0014_homepage_sub_header_custom_message.py b/lemarche/cms/migrations/0014_homepage_sub_header_custom_message.py
new file mode 100644
index 000000000..65b579edc
--- /dev/null
+++ b/lemarche/cms/migrations/0014_homepage_sub_header_custom_message.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.2.15 on 2024-10-23 10:31
+
+import wagtail.fields
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("cms", "0013_alter_articlepage_intro_alter_faqpage_intro"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="homepage",
+ name="sub_header_custom_message",
+ field=wagtail.fields.StreamField(
+ [("message", 0)],
+ blank=True,
+ block_lookup={0: ("wagtail.blocks.RichTextBlock", (), {"label": "Message personnalisé du bandeau"})},
+ help_text="Contenu affiché dans le bandeau sous l'en-tête.",
+ null=True,
+ verbose_name="Message personnalisé du bandeau",
+ ),
+ ),
+ ]
diff --git a/lemarche/cms/models.py b/lemarche/cms/models.py
index d964afd42..d96d85f53 100644
--- a/lemarche/cms/models.py
+++ b/lemarche/cms/models.py
@@ -6,6 +6,7 @@
from modelcluster.fields import ParentalManyToManyField
from wagtail import blocks as wagtail_blocks
from wagtail.admin.panels import FieldPanel, MultiFieldPanel
+from wagtail.blocks import RichTextBlock
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page
@@ -14,7 +15,6 @@
from lemarche.cms import blocks
from lemarche.cms.forms import ArticlePageForm
from lemarche.cms.snippets import ArticleCategory
-from lemarche.pages.models import PageFragment
class ArticleBase(Page):
@@ -214,7 +214,18 @@ class HomePage(Page):
use_json_field=True,
)
+ sub_header_custom_message = StreamField(
+ [
+ ("message", RichTextBlock(label="Message personnalisé du bandeau")),
+ ],
+ blank=True,
+ null=True,
+ verbose_name="Message personnalisé du bandeau",
+ help_text="Contenu affiché dans le bandeau sous l'en-tête.",
+ )
+
content_panels = Page.content_panels + [
+ FieldPanel("sub_header_custom_message"),
FieldPanel("banner_title"),
FieldPanel("banner_subtitle"),
FieldPanel("banner_arguments_list"),
@@ -227,10 +238,7 @@ class HomePage(Page):
def get_context(self, request, *args, **kwargs):
context = super().get_context(request, *args, **kwargs)
- try:
- context["sub_header_custom_message"] = PageFragment.objects.get(title="Bandeau", is_live=True).content
- except PageFragment.DoesNotExist:
- pass
+ context["sub_header_custom_message"] = self.sub_header_custom_message
return context
diff --git a/lemarche/cms/tests/__init__.py b/lemarche/cms/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/lemarche/cms/tests/test_commands.py b/lemarche/cms/tests/test_commands.py
new file mode 100644
index 000000000..4973ad17e
--- /dev/null
+++ b/lemarche/cms/tests/test_commands.py
@@ -0,0 +1,43 @@
+import json
+
+from django.core.management import call_command
+from django.test import Client, TestCase
+from wagtail.models import Site
+
+from content_manager.models import ContentPage
+
+
+class CreateContentPagesCommandTests(TestCase):
+ def test_create_content_pages_with_json(self):
+ client = Client()
+ with open("lemarche/fixtures/cms_content_pages.json") as f:
+ pages_data = json.load(f)
+
+ call_command("create_content_pages")
+
+ # Check that the pages were created
+ for page_data in pages_data:
+ slug = page_data["slug"]
+ self.assertTrue(
+ ContentPage.objects.filter(slug=slug).exists(), msg=f"La page avec le slug '{slug}' n'a pas été créée."
+ )
+
+ response = client.get(f"/{slug}/")
+ self.assertEqual(
+ response.status_code,
+ 200,
+ msg=f"La page avec le slug '{slug}' n'est pas accessible (status: {response.status_code}).",
+ )
+
+ def test_prevent_duplicate_page_creation(self):
+ """Ensure the command does not create duplicate pages"""
+ home_page = Site.objects.get(is_default_site=True).root_page
+ home_page.add_child(instance=ContentPage(slug="mentions-legales", title="Mentions légales"))
+
+ call_command("create_content_pages")
+
+ self.assertEqual(
+ ContentPage.objects.filter(slug="mentions-legales").count(),
+ 1,
+ msg="Une page en double a été créée pour le slug 'mentions-legales'.",
+ )
diff --git a/lemarche/fixtures/cms_content_pages.json b/lemarche/fixtures/cms_content_pages.json
new file mode 100644
index 000000000..3aab82175
--- /dev/null
+++ b/lemarche/fixtures/cms_content_pages.json
@@ -0,0 +1,32 @@
+[
+ {
+ "slug": "qui-sommes-nous",
+ "title": "Qui sommes-nous ?",
+ "body": "[{\"id\": \"ca07e511-7624-45f1-ae95-3e783f782843\", \"type\": \"paragraph\", \"value\": \"
Le March\\u00e9 de l'inclusion est une plateforme d'achat et de sourcing \\u00e0 destination des acheteurs priv\\u00e9s et publics engag\\u00e9s pour l'Inclusion.
\\ud83d\\udc49 Vous \\u00eates un acheteur ?
Le March\\u00e9 de l'inclusion vous permet de :
- Sourcer parmi plus de 6000 prestataires socialement responsables conventionn\\u00e9s par l'Etat
- S\\u00e9curiser vos march\\u00e9s r\\u00e9serv\\u00e9s et appels d'offres en optimisant la mise en concurrence
- Auditer vos achats socialement responsables gr\\u00e2ce au r\\u00e9f\\u00e9rentiel officiel et exhaustif des prestataires socialement responsables
- Calibrer vos futurs achats en mesurant l'offre commerciale inclusive sur vos segments d'achat
\\ud83d\\udc49 Vous \\u00eates un prestataire inclusif (SIAE, EA, ESAT, GEIQ...) ?
Le March\\u00e9 de l'inclusion vous permet de :
- Recevoir des opportunit\\u00e9s commerciales cibl\\u00e9es directement dans votre boite mail
- Visibiliser votre activit\\u00e9 commerciale aupr\\u00e8s d'acheteurs priv\\u00e9s et publics
- D\\u00e9velopper votre chiffre d'affaires
\\ud83d\\udc49 Le March\\u00e9 de l\\u2019inclusion a \\u00e9t\\u00e9 con\\u00e7ue dans le cadre du Pacte IAE, un dispositif d\\u2019\\u00c9tat pour l\\u2019inclusion par l\\u2019emploi des personnes les plus \\u00e9loign\\u00e9es de l\\u2019emploi en raison de difficult\\u00e9s sociales, professionnelles, ou de sant\\u00e9. L\\u2019enjeu de la place de march\\u00e9 est d\\u2019accompagner le d\\u00e9veloppement \\u00e9conomique des structures inclusives et lever les freins \\u00e0 l\\u2019acte d\\u2019achat inclusif.
C\\u2019est une plateforme \\u00e9volutive port\\u00e9 par :
La r\\u00e9alisation et le d\\u00e9ploiement sont assur\\u00e9s par l\\u2019\\u00e9quipe Itou, qui travaille selon l\\u2019approche \\u201cstart-up d\\u2019Etat\\u201d. En savoir plus sur les start-ups d'Etat.
\"}]"
+ },
+ {
+ "slug": "cgu",
+ "title": "Conditions générales d'utilisation du marché de l'inclusion",
+ "body": "[{\"id\": \"111b471b-7793-4068-b9a7-103c9673dea1\", \"type\": \"paragraph\", \"value\": \"Les pr\\u00e9sentes conditions g\\u00e9n\\u00e9rales d\\u2019utilisation (dites \\u00ab CGU \\u00bb) fixent le cadre juridique du march\\u00e9 de l\\u2019inclusion.
Article 1 - Objet
Le march\\u00e9 de l\\u2019inclusion permet de mettre en visibilit\\u00e9 les offres des Entreprises Sociales Inclusives afin de r\\u00e9pondre aux besoins d\\u2019acheteurs engag\\u00e9s et solidaires qui recherchent un service de qualit\\u00e9 dans le respect de leur politique RSE.
Article 2 \\u2013 Champ d\\u2019application
Le march\\u00e9 de l\\u2019inclusion est un service num\\u00e9rique ouvert \\u00e0 toute entreprise souhaitant engager son action. Il s\\u2019agit en l\\u2019occurrence d\\u2019une place de march\\u00e9 qui met en relation :
- Une offre, celle des structures inclusives en France, c\\u2019est-\\u00e0-dire des structures d\\u2019insertion par l\\u2019activit\\u00e9 \\u00e9conomique (SIAE) et du secteur du travail prot\\u00e9g\\u00e9 et adapt\\u00e9 (STPA).
- Une demande, celle de structures r\\u00e9alisant des achats responsables dans un cadre professionnel (publiques, priv\\u00e9es, associatives, de grande ou petite taille).
Article 3 \\u2013 D\\u00e9finitions
\\u00ab L'Utilisateur \\u00bb est toute entreprise s\\u2019\\u00e9tant cr\\u00e9\\u00e9 un profil pour acc\\u00e9der au march\\u00e9 de l\\u2019inclusion.
Les \\u00ab Services \\u00bb sont les moyens offerts par le site pour r\\u00e9pondre \\u00e0 ses finalit\\u00e9s d\\u00e9finies.
\\u00ab L\\u2019\\u00e9diteur \\u00bb est la personne morale qui met \\u00e0 disposition du public un service de communication avec le public, en l\\u2019occurrence le march\\u00e9 de l\\u2019inclusion.
Article 4 - Fonctionnalit\\u00e9s
4.1 Cr\\u00e9ation du profil
En cr\\u00e9ant son profil, l\\u2019Utilisateur s\\u2019engage \\u00e0 fournir des informations sinc\\u00e8res et exactes permettant de cr\\u00e9er son compte ou son profil. La cr\\u00e9ation de compte est ouverte \\u00e0 toute personne morale correctement constitu\\u00e9e.
Tout acteur de l\\u2019inclusion peut s\\u2019y inscrire en remplissant :
- Le type d\\u2019entreprise ou d\\u2019acteur (entreprise sociale inclusive, acheteur ou partenaire, c\\u2019est-\\u00e0-dire r\\u00e9seaux ou facilitateurs) ;
- Les informations relatives aux coordonn\\u00e9es d\\u2019un interlocuteur identifi\\u00e9 au sein de l\\u2019entreprise (nom, pr\\u00e9nom, num\\u00e9ro de t\\u00e9l\\u00e9phone de la personne contact au sein de la structure) ;
- Une adresse e-mail et un mot de passe ;
- Il est \\u00e9galement possible, de mani\\u00e8re optionnelle, de fournir un num\\u00e9ro de t\\u00e9l\\u00e9phone.
La cr\\u00e9ation d\\u2019un profil est soumise \\u00e0 l\\u2019acceptation des pr\\u00e9sentes CGU.
4.2 Acc\\u00e9der \\u00e0 la liste des structures d\\u2019insertion
Le march\\u00e9 de l\\u2019inclusion permet \\u00e0 toute personne d\\u2019acc\\u00e9der \\u00e0 une cartographie des structures d\\u2019insertion et des entreprises adapt\\u00e9es de France.
Le march\\u00e9 de l\\u2019inclusion met \\u00e0 disposition un moteur de recherche permettant de filtrer les informations en fonction du :
- secteur d\\u2019activit\\u00e9 (service \\u00e0 la personne, prestations intellectuelles etc.) ;
- lieu d\\u2019intervention (r\\u00e9gion, d\\u00e9partement ou code postal de l\\u2019entreprise) ;
- type de structure ;
- type de prestation.
4.3 Faire une demande \\u00e0 un prestataire
Les entreprises peuvent d\\u00e9poser une demande d\\u00e9crivant un besoin d\\u2019achat. Elles doivent pour ce faire d\\u00e9poser et remplir un questionnaire de pr\\u00e9sentation de la demande et permettant de la contacter (et notamment l\\u2019interlocuteur au sein de l\\u2019entreprise).
4.4 Offrir une prestation
Les Entreprises sociales inclusives peuvent pr\\u00e9senter leurs offres de service aux potentiels acheteurs, en \\u00ab publiant leur offre de prestation \\u00bb.
4.5 Autres fonctionnalit\\u00e9s
Le march\\u00e9 vise \\u00e9galement \\u00e0 proposer des conseils aux acheteurs pour accompagner et promouvoir les structures sociales et inclusives, notamment au travers d\\u2019une newsletter.
Article 5 - Responsabilit\\u00e9s
5.1 L\\u2019\\u00e9diteur du \\u00ab March\\u00e9 de l\\u2019inclusion \\u00bb
Les sources des informations diffus\\u00e9es sur le site \\u00ab https://lemarche.inclusion.beta.gouv.fr/fr/ \\u00bb sont r\\u00e9put\\u00e9es fiables mais le site ne garantit pas qu\\u2019il soit exempt de d\\u00e9fauts, d\\u2019erreurs ou d\\u2019omissions.
L\\u2019\\u00e9diteur s\\u2019autorise \\u00e0 suspendre ou r\\u00e9voquer n'importe quel compte et toutes les actions r\\u00e9alis\\u00e9es par ce biais, s\\u2019il estime que l\\u2019usage r\\u00e9alis\\u00e9 du service porte pr\\u00e9judice \\u00e0 son image ou ne correspond pas aux exigences de s\\u00e9curit\\u00e9. Il n\\u2019est pas responsable des propos tenus sur la plateforme.
L\\u2019\\u00e9diteur fournit les moyens n\\u00e9cessaires et raisonnables pour assurer un acc\\u00e8s continu, sans contrepartie financi\\u00e8re. Il se r\\u00e9serve la libert\\u00e9 de faire \\u00e9voluer, de modifier ou de suspendre, sans pr\\u00e9avis, le site pour des raisons de maintenance ou pour tout autre motif jug\\u00e9 n\\u00e9cessaire.
5.2 L\\u2019Utilisateur
L'Utilisateur s'assure de garder son mot de passe secret. Toute divulgation du mot de passe, quelle que soit sa forme, est interdite. Il assume les risques li\\u00e9s \\u00e0 l'utilisation de son identifiant et mot de passe.
Il s\\u2019engage \\u00e0 ne pas commercialiser les donn\\u00e9es re\\u00e7ues et \\u00e0 ne pas les communiquer \\u00e0 des tiers en dehors des cas pr\\u00e9vus par la loi.
Toute information transmise par l'Utilisateur est de sa seule responsabilit\\u00e9. L\\u2019Utilisateur communique des informations \\u00e0 jour et exactes notamment s\\u2019agissant des informations relatives au profil, sa situation personnelle et les missions propos\\u00e9es. Il veille \\u00e0 diffuser des contenus conformes \\u00e0 l\\u2019objet de la Plateforme, qui ne soient pas offensants ou inappropri\\u00e9s. Il est rappel\\u00e9 que toute personne proc\\u00e9dant \\u00e0 une fausse d\\u00e9claration pour elle-m\\u00eame ou pour autrui s\\u2019expose, notamment, aux sanctions pr\\u00e9vues \\u00e0 l\\u2019article 441-1 du code p\\u00e9nal, pr\\u00e9voyant des peines pouvant aller jusqu\\u2019\\u00e0 trois ans d\\u2019emprisonnement et 45 000 euros d\\u2019amende.
L\\u2019Utilisateur peut signaler toute description, information ou commentaire ne r\\u00e9pondant pas aux CGU. L\\u2019\\u00e9diteur se r\\u00e9serve le droit de supprimer et de mod\\u00e9rer sans pr\\u00e9avis, un Profil, une Mission ou un commentaire si les pr\\u00e9sentes r\\u00e8gles ne sont pas respect\\u00e9es.
Article 6 \\u2013 Propri\\u00e9t\\u00e9 intellectuelle
Les structures d'insertion inscrites sur le March\\u00e9 de l'inclusion renseignent sur leurs fiches commerciales des r\\u00e9f\\u00e9rences clients, notamment sous la forme d'une liste de logos.
Afin de garantir son bon fonctionnement, la plateforme du March\\u00e9 de l\\u2019inclusion, appose les logo, labels ou bien encore certifications, des entreprises inscrites, ainsi que des r\\u00e9f\\u00e9rences clients et des structures inclusives, sur tout type de support de communication pour les citer comme r\\u00e9f\\u00e9rences.
La plateforme se r\\u00e9serve \\u00e9galement le droit d\\u2019apposer les mises en relation effectu\\u00e9es entre Acheteurs et Structures inclusives, \\u00e0 titre d\\u2019exemple, sur tout type de supports de communication. L\\u2019Acheteur voulant garder la relation confidentielle doit en informer la plateforme.
Les clients, entreprises ou structures qui sont r\\u00e9f\\u00e9renc\\u00e9s gardent l\\u2019int\\u00e9gralit\\u00e9 des droits de propri\\u00e9t\\u00e9 intellectuelle.
Toutefois, toute publication des r\\u00e9f\\u00e9rences sous quelque forme que ce soit (logo, marque,\\u2026) sur le site implique la d\\u00e9l\\u00e9gation du droit non exclusif et gratuit au March\\u00e9 de l\\u2019inclusion de repr\\u00e9senter, reproduire, adapter, distribuer et diffuser la r\\u00e9f\\u00e9rence n\\u2019importe o\\u00f9 et sur n\\u2019importe quel support pour la dur\\u00e9e de la propri\\u00e9t\\u00e9 intellectuelle, notamment tous les supports de communication (site internet, post r\\u00e9seaux sociaux, newsletter ...).
La plateforme du March\\u00e9 de l\\u2019inclusion d\\u00e9cline toute responsabilit\\u00e9 quant \\u00e0 la v\\u00e9racit\\u00e9 de ces informations, seule le client, entreprise ou structure est responsable des informations qu\\u2019elle indique en acc\\u00e9dant \\u00e0 la plateforme.
Article 7 - Mise \\u00e0 jour des conditions d\\u2019utilisation
Les termes des pr\\u00e9sentes conditions d\\u2019utilisation peuvent \\u00eatre amend\\u00e9s \\u00e0 tout moment, sans pr\\u00e9avis, en fonction des modifications apport\\u00e9es au site, de l\\u2019\\u00e9volution de la l\\u00e9gislation ou pour tout autre motif jug\\u00e9 n\\u00e9cessaire.
\"}]"
+ },
+ {
+ "slug": "cgu-api",
+ "title": "Conditions générales d'utilisation de l'API du marché de l'inclusion",
+ "body": "[{\"id\": \"f66f8606-0b22-4a96-9924-63a31e41e0c6\", \"type\": \"paragraph\", \"value\": \"Les pr\\u00e9sentes conditions g\\u00e9n\\u00e9rales d\\u2019utilisation (dites \\u00ab CGU \\u00bb) fixent le cadre d\\u2019utilisation de l\\u2019interface de programmation (API) du March\\u00e9 de l\\u2019inclusion.
Article 1. Objet et champ d\\u2019application des pr\\u00e9sentes CGU
Les pr\\u00e9sentes CGU ont pour objet de d\\u00e9finir les conditions dans lesquelles le March\\u00e9 de l\\u2019Inclusion met \\u00e0 disposition son API (ci-apr\\u00e8s l\\u2019 \\u00ab API \\u00bb), ainsi que les obligations r\\u00e9ciproques de chaque partie dans le cadre de l\\u2019utilisation de ladite API.
L'API met \\u00e0 disposition le r\\u00e9pertoire qualifi\\u00e9 des structures d'insertion par l'activit\\u00e9 \\u00e9conomique.
Article 2. D\\u00e9finitions
\\u00ab API \\u00bb : Une API est une interface de programmation applicative, comprenant un ensemble de m\\u00e9thodes, fonctions et classes, mise \\u00e0 disposition par l\\u2019interm\\u00e9diaire d\\u2019une interface dont le but est d\\u2019offrir des services \\u00e0 d'autres logiciels. Il s\\u2019agit dans les pr\\u00e9sentes CGU de l\\u2019API du March\\u00e9 de l\\u2019inclusion.
\\u00ab CGU \\u00bb : Les pr\\u00e9sentes Conditions G\\u00e9n\\u00e9rales d\\u2019Utilisation de l\\u2019API d\\u00e9finissent les conditions d\\u2019acc\\u00e8s, d\\u2019usage et de fonctionnement de l\\u2019API.
\\u00ab Requ\\u00eate \\u00bb : une requ\\u00eate est une demande r\\u00e9alis\\u00e9e par un logiciel pour acc\\u00e9der aux donn\\u00e9es d'une base de donn\\u00e9es ou d'autres syst\\u00e8mes d'information et visant \\u00e0 obtenir une r\\u00e9ponse sp\\u00e9cifique.
\\u00ab Utilisateur \\u00bb : les utilisateurs de l\\u2019API comprennent les personnes physiques ou personnes morales ayant pr\\u00e9alablement accept\\u00e9 les pr\\u00e9sentes CGU avant la soumission du formulaire d\\u2019inscription.
Article 3. Acceptation des CGU et acc\\u00e8s \\u00e0 l\\u2019API
L\\u2019Utilisateur doit compl\\u00e9ter une demande d\\u2019inscription pr\\u00e9alablement \\u00e0 l\\u2019ouverture de l\\u2019acc\\u00e8s \\u00e0 l\\u2019API. La demande d\\u2019adh\\u00e9sion au dispositif emporte l\\u2019acceptation des pr\\u00e9sentes.
L\\u2019Utilisateur v\\u00e9rifie qu\\u2019il remplit les conditions d\\u2019acc\\u00e8s pr\\u00e9sent\\u00e9es par les pr\\u00e9sentes et pris connaissance de l\\u2019ensemble des CGU avant l\\u2019utilisation de l\\u2019API et les acceptent sans r\\u00e9serve avant toute soumission d\\u2019un formulaire d\\u2019inscription. La demande est instruite par les repr\\u00e9sentants du March\\u00e9 de l\\u2019inclusion, la validation de la demande se traduit par la distribution d\\u2019un jeton (token) rattach\\u00e9 \\u00e0 la demande.
L\\u2019acc\\u00e8s \\u00e0 l\\u2019API peut \\u00eatre suspendu ou r\\u00e9voqu\\u00e9 de mani\\u00e8re temporaire ou permanente \\u00e0 l\\u2019article 9 des pr\\u00e9sentes.
Article 4. Modification des CGU
Les termes des pr\\u00e9sentes conditions d\\u2019utilisation peuvent \\u00eatre amend\\u00e9s \\u00e0 tout moment, sans pr\\u00e9avis, en fonction des modifications apport\\u00e9es \\u00e0 la plateforme, de l\\u2019\\u00e9volution de la l\\u00e9gislation ou pour tout autre motif jug\\u00e9 n\\u00e9cessaire.
Article 5. Description de l\\u2019API
L\\u2019API a pour but de faciliter :
- La mise \\u00e0 disposition des tiers \\u00e0 toutes les donn\\u00e9es d'annuaire (structures, informations administratives, contact).
- La r\\u00e9utilisation de ces donn\\u00e9es gr\\u00e2ce \\u00e0 des formats adapt\\u00e9s.
L\\u2019API du March\\u00e9 de l\\u2019inclusion vous donne acc\\u00e8s \\u00e0 la liste des :
- structures de l\\u2019insertion par l\\u2019activit\\u00e9 \\u00e9conomique (ETTI, EI, ACI, AI, EITI et GEIQ) ;
- structures du secteur prot\\u00e9g\\u00e9 (ESAT, EA et EATT) ;
- services emploi p\\u00e9nitentiaires et les structures labellis\\u00e9es PEP\\u2019S.
Article 6. Conditions d\\u2019acc\\u00e8s
L\\u2019acc\\u00e8s est soumis \\u00e0 la cr\\u00e9ation d\\u2019un compte. Peuvent cr\\u00e9er un compte les repr\\u00e9sentants des personnes morales suivantes : une entreprise sociale, un acheteur, un partenaire de la plateforme de l\\u2019inclusion.
Les Utilisateurs sont responsables des identifiants utilis\\u00e9s pour acc\\u00e9der \\u00e0 leur compte puis \\u00e0 l\\u2019API du March\\u00e9 de l\\u2019inclusion. En ce sens ils doivent respecter l\\u2019\\u00e9tat de l\\u2019art en mati\\u00e8re de s\\u00e9curit\\u00e9 informatique dans l\\u2019usage de ces identifiants.
Article 7. Responsabilit\\u00e9s
7.1 L\\u2019\\u00e9diteur de la Plateforme
En tant qu\\u2019\\u00e9diteur de la Plateforme, le March\\u00e9 de l\\u2019inclusion ne saurait encourir une quelconque responsabilit\\u00e9, \\u00e0 quelque titre que ce soit, du fait des donn\\u00e9es qu\\u2019elle expose sur l\\u2019API.
L\\u2019API peut \\u00eatre indisponible, son acc\\u00e8s n\\u2019est pas garanti et il n\\u2019existe aucun niveau minimal de disponibilit\\u00e9 de celle-ci.
Le March\\u00e9 de l\\u2019inclusion ne peut \\u00eatre, \\u00e0 aucun titre, tenue pour responsable de la cr\\u00e9ation, de la modification, de la suppression des donn\\u00e9es d\\u00e9riv\\u00e9es. Le format de la donn\\u00e9e est susceptible d\\u2019\\u00e9voluer au gr\\u00e9 du d\\u00e9veloppement de l\\u2019API et des retours des consommateurs de l\\u2019API.
La March\\u00e9 de l\\u2019inclusion s\\u2019engage de prendre toute mesure n\\u00e9cessaire de nature \\u00e0 garantir la s\\u00e9curit\\u00e9 et la confidentialit\\u00e9 des informations fournies par l\\u2019usager et notamment emp\\u00eacher qu\\u2019elles soient d\\u00e9form\\u00e9es, endommag\\u00e9es ou que des tiers non autoris\\u00e9s y aient acc\\u00e8s.
7.2 L\\u2019Utilisateur
L\\u2019Utilisateur est seul responsable de l\\u2019usage qu\\u2019il fait de l\\u2019API, lequel doit \\u00eatre strictement conformes aux lois et r\\u00e9glementations en vigueur.
L\\u2019Utilisateur reconnait avoir lu les pr\\u00e9sentes CGU et s\\u2019engage \\u00e0 :
- Choisir des identifiants personnels et confidentiels ;
- Pr\\u00e9venir imm\\u00e9diatement l\\u2019\\u00e9diteur de toute utilisation non autoris\\u00e9e de son compte ou de ses informations ;
- Communiquer des informations \\u00e0 jour et exactes notamment s\\u2019agissant des informations relatives au profil, sa situation personnelle et les missions propos\\u00e9es. Il est rappel\\u00e9 que toute personne proc\\u00e9dant \\u00e0 une fausse d\\u00e9claration pour elle-m\\u00eame ou pour autrui s\\u2019expose, notamment, aux sanctions pr\\u00e9vues \\u00e0 l\\u2019article 441-1 du Code P\\u00e9nal, pr\\u00e9voyant des peines pouvant aller jusqu\\u2019\\u00e0 trois ans d\\u2019emprisonnement et 45 000 euros d\\u2019amende.
- Mettre en \\u0153uvre le service en l\\u2019int\\u00e9grant au sein de ses services num\\u00e9riques. Il est responsable des traitements qu\\u2019il op\\u00e8re sur les donn\\u00e9es re\\u00e7ues et, \\u00e0 ce titre, respecte les obligations inh\\u00e9rentes \\u00e0 ce traitement, notamment celles pr\\u00e9vues par la loi n\\u00b078-17 du 6 janvier 1978 relative \\u00e0 l\\u2019informatique, aux fichiers et aux libert\\u00e9s.
- Utiliser correctement le dispositif et s\\u2019interdire de tout usage susceptible de causer un dysfonctionnement ou une indisponibilit\\u00e9 du service.
- Avoir un usage raisonnable de l\\u2019API.
- Utiliser les donn\\u00e9es issues de l\\u2019API conform\\u00e9ment \\u00e0 l\\u2019objet de la Plateforme et aux dispositions sp\\u00e9cifiques pr\\u00e9vues \\u00e0 l\\u2019article 8.
S\\u2019agissant de l\\u2019utilisation des donn\\u00e9es mises \\u00e0 disposition, l\\u2019Utilisateur reconnait avoir lu les pr\\u00e9sentes CGU et s\\u2019engage \\u00e0 :
- partager l\\u2019objet de l\\u2019usage des donn\\u00e9es avec la Plateforme du March\\u00e9 de l\\u2019inclusion.
- partager des chiffres sur l\\u2019impact du produit ou service sur les structures du r\\u00e9pertoire.
- r\\u00e9pondre 1 fois par semestre \\u00e0 un questionnaire de satisfaction sur l\\u2019usage des donn\\u00e9es du r\\u00e9pertoire.
Article 8. Usage commercial des donn\\u00e9es et de l\\u2019API
L\\u2019Utilisateur s\\u2019engage \\u00e0 ne pas commercialiser les donn\\u00e9es re\\u00e7ues et \\u00e0 ne pas les communiquer \\u00e0 des tiers en dehors des cas pr\\u00e9vus par la loi. Tout usage des donn\\u00e9es transmises \\u00e0 des fins de prospection commerciale, ainsi que toute vente des donn\\u00e9es, est proscrite
L\\u2019Utilisateur assumera seul une action engageant sa responsabilit\\u00e9 contractuelle ou extracontractuelle li\\u00e9e directement ou indirectement \\u00e0 son utilisation de l\\u2019API.
Le March\\u00e9 de l\\u2019Inclusion ne pourra \\u00eatre tenu responsable d\\u2019un quelconque dommage subi par un Utilisateur ou un tiers utilisant une application fond\\u00e9e sur les donn\\u00e9es expos\\u00e9es par l\\u2019API.
Article 9. Propri\\u00e9t\\u00e9 intellectuelle : autorisation d\\u2019usage des logos et des r\\u00e9f\\u00e9rences des partenaires
Les Utilisateurs du March\\u00e9 de l\\u2019Inclusion autorisent express\\u00e9ment la Plateforme \\u00e0 faire usage du nom, du logo et de la d\\u00e9nomination de leur personne morale dans le cadre du service et de la communication relative \\u00e0 la Plateforme.
Article 10. Manquements aux CGU
Le March\\u00e9 de l\\u2019Inclusion se r\\u00e9serve le droit de suspendre, sans notification pr\\u00e9alable, l\\u2019acc\\u00e8s \\u00e0 son API \\u00e0 des Utilisateurs qui ne respecteraient pas les pr\\u00e9sentes CGU ou qui feraient un usage de l\\u2019API contraire aux lois et r\\u00e9glementations en vigueur.
L\\u2019Utilisateur sera malgr\\u00e9 tout notifi\\u00e9 de cette suspension dans un d\\u00e9lai raisonnable. L\\u2019Utilisateur ne pourra pr\\u00e9tendre \\u00e0 une quelconque indemnisation.
\"}]"
+ },
+ {
+ "slug": "confidentialite",
+ "title": "Politique de confidentialité du marché de l'inclusion",
+ "body": "[{\"id\": \"a4d47f83-cea4-4fa4-abc5-8242c5901ade\", \"type\": \"paragraph\", \"value\": \"
Qui est responsable du march\\u00e9 de l\\u2019inclusion ?
Le site du March\\u00e9 de l\\u2019inclusion est d\\u00e9velopp\\u00e9 au sein du GIP Plateforme de l\\u2019inclusion. Le March\\u00e9 de l\\u2019inclusion propose un service num\\u00e9rique qui rend visible les entreprises sociales inclusives.
Le responsable de l\\u2019utilisation des donn\\u00e9es est le GIP Plateforme de l\\u2019inclusion, repr\\u00e9sent\\u00e9 par Arnaud Denoix, Directeur du GIP Plateforme de l\\u2019inclusion.
Pourquoi traitons-nous ces donn\\u00e9es ?
Le March\\u00e9 de l\\u2019inclusion traite des donn\\u00e9es \\u00e0 caract\\u00e8re personnel pour les raisons suivantes :
- Contacter et \\u00eatre recontact\\u00e9 avec des structures de l\\u2019inclusion ;
- S\\u2019informer sur les acteurs de l\\u2019insertion ;
- D\\u00e9poser une demande relative \\u00e0 un besoin ;
- Proposer des services et prestations \\u00e0 des acheteurs.
- Conserver les formulaires de besoin d\\u2019achat non finalis\\u00e9s.
- Suivre les statistiques des \\u00e9changes lors des mises en relation
Quelles sont les donn\\u00e9es que nous traitons ?
Le site peut traiter les donn\\u00e9es \\u00e0 caract\\u00e8re personnel suivantes :
- Donn\\u00e9es relatives aux profils (adresse e-mail, nom, pr\\u00e9nom, num\\u00e9ro de t\\u00e9l\\u00e9phone professionnel) ;
- Donn\\u00e9es relatives \\u00e0 la demande de \\u00ab sourcing \\u00bb ;
- Donn\\u00e9es relatives \\u00e0 la newsletter (adresse e-mail).
- Donn\\u00e9es relatives aux formulaires de besoin d\\u2019achat non finalis\\u00e9s (pr\\u00e9nom, nom, entreprise, adresse e-mail professionnelle, num\\u00e9ro de t\\u00e9l\\u00e9phone professionnel).
Qu\\u2019est-ce qui nous autorise \\u00e0 traiter ces donn\\u00e9es ?
Le March\\u00e9 de l\\u2019inclusion traite des donn\\u00e9es \\u00e0 caract\\u00e8re personnel en se basant sur :
- L\\u2019ex\\u00e9cution d\\u2019une mission d\\u2019int\\u00e9r\\u00eat public ou relevant de l\\u2019exercice de l\\u2019autorit\\u00e9 publique dont est investi le responsable de traitement au sens de l\\u2019article 6-1 e) du RPGD.
Cette mission d\\u2019int\\u00e9r\\u00eat public ou relevant de l\\u2019exercice de l\\u2019autorit\\u00e9 publique est mise en \\u0153uvre par :
- L\\u2019article R. 5132-1-19 du Code du travail.
Pendant combien de temps conservons-nous ces donn\\u00e9es ?
Types de donn\\u00e9es
Dur\\u00e9e de conservation
Donn\\u00e9es relatives aux profils
Jusqu\\u2019\\u00e0 la suppression du profil ou le cas \\u00e9ch\\u00e9ant 3 ans apr\\u00e8s la derni\\u00e8re utilisation du profil.
Donn\\u00e9es relatives \\u00e0 la demande de sourcing
1 an, \\u00e0 compter de la demande ou jusqu\\u2019\\u00e0 1 an apr\\u00e8s la derni\\u00e8re utilisation du profil ayant r\\u00e9alis\\u00e9 la demande.
Donn\\u00e9es relatives \\u00e0 la newsletter
Les donn\\u00e9es sont conserv\\u00e9es jusqu\\u2019\\u00e0 d\\u00e9sinscription \\u00e0 la newsletter.
Donn\\u00e9es relatives aux formulaires de besoin d\\u2019achat non finalis\\u00e9s
Jusqu\\u2019\\u00e0 la relance des \\u00e9quipes du March\\u00e9 de l\\u2019inclusion ou le cas \\u00e9ch\\u00e9ant, 1 an apr\\u00e8s le remplissage du formulaire par l\\u2019Utilisateur.
Donn\\u00e9es statistiques des \\u00e9changes lors des mises en relation 6 mois \\u00e0 compter de la demande
Quels droits avez-vous ?
Vous disposez :
- D\\u2019un droit d\\u2019information et d\\u2019un droit d\\u2019acc\\u00e8s \\u00e0 vos donn\\u00e9es ;
- D\\u2019un droit de rectification de vos donn\\u00e9es ;
- D\\u2019un droit \\u00e0 la limitation du traitement de vos donn\\u00e9es.
Pour exercer ces droits ou pour toute question sur le traitement de vos donn\\u00e9es dans ce dispositif, vous pouvez nous contacter : dpo@numericite.eu
Vous pouvez exercer vos droits \\u00e9galement en adressant un courrier \\u00e0 l\\u2019attention du D\\u00e9l\\u00e9gu\\u00e9 \\u00e0 la protection des donn\\u00e9es du GIP de l\\u2019inclusion par courrier :
Groupement de l\\u2019inclusion
127 rue de Grenelle
75007 Paris
Puisque ce sont des droits personnels, nous ne traiterons votre demande que si nous sommes en mesure de vous identifier. Dans le cas o\\u00f9 nous ne parvenons pas \\u00e0 vous identifier, nous pouvons \\u00eatre amen\\u00e9s \\u00e0 vous demander une preuve de votre identit\\u00e9.
Pour vous aider dans votre d\\u00e9marche, vous trouverez un mod\\u00e8le de courrier \\u00e9labor\\u00e9 par la CNIL : https://www.cnil.fr/fr/modele/courrier/exercer-son-droit-dacces
Nous nous engageons \\u00e0 vous r\\u00e9pondre dans un d\\u00e9lai raisonnable qui ne saurait d\\u00e9passer 1 mois \\u00e0 compter de la r\\u00e9ception de votre demande.
Qui va avoir acc\\u00e8s \\u00e0 ces donn\\u00e9es ?
Les acc\\u00e8s aux donn\\u00e9es sont strictement encadr\\u00e9s et juridiquement justifi\\u00e9s. Les personnes suivantes vont avoir acc\\u00e8s aux donn\\u00e9es :
- Les membres du March\\u00e9 de l\\u2019inclusion qui ont besoin des donn\\u00e9es dans leurs missions ou qui y ont acc\\u00e8s de fait (d\\u00e9veloppeurs par exemple).
Quelles mesures de s\\u00e9curit\\u00e9 mettons-nous en place ?
Nous mettons en place plusieurs mesures pour s\\u00e9curiser les donn\\u00e9es :
- Stockage des donn\\u00e9es en base de donn\\u00e9es ;
- Stockage des mots de passe en base hach\\u00e9e ;
- Cloisonnement des donn\\u00e9es ;
- Mesures de tra\\u00e7abilit\\u00e9 ;
- Surveillance ;
- Protection contre les virus, malwares et logiciels espions ;
- Protection des r\\u00e9seaux ;
- Sauvegarde ;
- Mesures restrictives limitant l\\u2019acc\\u00e8s physiques aux donn\\u00e9es \\u00e0 caract\\u00e8re personnel.
Quels sont nos sous-traitants ?
Partenaire
Pays destinataire
Traitement r\\u00e9alis\\u00e9
Garanties
Clever Cloud
France
H\\u00e9bergement
https://www.clever-cloud.com/fr/conditions-generales-dutilisation/accord-de-traitement-des-donnees/
Hubspot
\\u00c9tats-Unis
Gestion de la relation client
https://legal.hubspot.com/fr/privacy-policy
Crisp
France
Support/Chat
https://storage.crisp.chat/public/documents/Crisp%20Privacy%20Policy%20FR.pdf
Matomo
Union Europ\\u00e9enne
Mesure d\\u2019audience
https://fr.matomo.org/privacy-policy/
Google Analytics
\\u00c9tats-Unis
Mesure d\\u2019audience
https://policies.google.com/privacy?hl=fr
Cookies
En application de l\\u2019article 5(3) de la directive 2002/58/CE modifi\\u00e9e concernant le traitement des donn\\u00e9es \\u00e0 caract\\u00e8re personnel et la protection de la vie priv\\u00e9e dans le secteur des communications \\u00e9lectroniques, transpos\\u00e9e \\u00e0 l\\u2019article 82 de la loi n\\u00b078-17 du 6 janvier 1978 relative \\u00e0 l\\u2019informatique, aux fichiers et aux libert\\u00e9s, les traceurs ou cookies suivent deux r\\u00e9gimes distincts.
Les cookies strictement n\\u00e9cessaires au service ou ayant pour finalit\\u00e9 exclusive de faciliter la communication par voie \\u00e9lectronique sont dispens\\u00e9s de consentement pr\\u00e9alable au titre de l\\u2019article 82 de la loi n\\u00b078-17 du 6 janvier 1978.
Les cookies n\\u2019\\u00e9tant pas strictement n\\u00e9cessaires au service ou n\\u2019ayant pas pour finalit\\u00e9 exclusive de faciliter la communication par voie \\u00e9lectronique doivent \\u00eatre consenti par l\\u2019utilisateur.
Ce consentement de la personne concern\\u00e9e pour une ou plusieurs finalit\\u00e9s sp\\u00e9cifiques constitue une base l\\u00e9gale au sens du RGPD et doit \\u00eatre entendu au sens de l'article 6-1 a) du R\\u00e8glement (UE) 2016/679 du Parlement europ\\u00e9en et du Conseil du 27 avril 2016 relatif \\u00e0 la protection des personnes physiques \\u00e0 l'\\u00e9gard du traitement des donn\\u00e9es \\u00e0 caract\\u00e8re personnel et \\u00e0 la libre circulation de ces donn\\u00e9es.
\\u00c0 tout moment, vous pouvez refuser l\\u2019utilisation des cookies et d\\u00e9sactiver le d\\u00e9p\\u00f4t sur votre ordinateur en utilisant la fonction d\\u00e9di\\u00e9e de votre navigateur (fonction disponible notamment sur Microsoft Edge, Google Chrome, Mozilla Firefox, Apple Safari et Opera). L\\u2019utilisateur peut, \\u00e0 tout moment, autoriser ou interdire le suivi des cookies gr\\u00e2ce au panneau de gestion des cookies \\u00ab tarteaucitron \\u00bb en bas de l\\u2019\\u00e9cran.
La plateforme du March\\u00e9 de l\\u2019inclusion utilise Matomo pour la mesure d\\u2019audience. La plateforme ne configure pas Matomo en mode exempt\\u00e9 et n\\u00e9cessite donc le consentement des utilisateurs conform\\u00e9ment aux recommandations de la CNIL. L\\u2019utilisateur peut refuser le suivi r\\u00e9alis\\u00e9 par Matomo gr\\u00e2ce au bandeau cookies sur la plateforme.
Il convient d'indiquer que :
- Les cookies ne permettent pas de suivre la navigation de l\\u2019internaute sur d\\u2019autres sites.
Cookies recens\\u00e9s sur le March\\u00e9 de l\\u2019inclusion :
Cookie
Pays destinataire
Traitement r\\u00e9alis\\u00e9
Base l\\u00e9gale
Dur\\u00e9e de conservation
Garanties
Matomo
France
Mesure d\\u2019audience
Consentement ou d\\u00e9rogation article 82 LIL
13 mois
https://fr.matomo.org/privacy-policy/
Google analytics
\\u00c9tats-Unis
Mesure d\\u2019audience
Consentement ou d\\u00e9rogation article 82 LIL
13 mois
https://policies.google.com/privacy?hl=fr
Crisp
Pays-Bas
Support
Consentement ou d\\u00e9rogation article 82 LIL
13 mois
https://crisp.chat/fr/privacy/
March\\u00e9 de l\\u2019inclusion (ID session)
France
Conservation des formulaires non finalis\\u00e9s
Aucune
Session
https://lemarche.inclusion.beta.gouv.fr/confidentialite/
Inbound parsingFranceSuivi statistique des \\u00e9changes lors des mises en relationAucune6 moishttps://lemarche.inclusion.beta.gouv.fr/confidentialite/
Pour aller plus loin, vous pouvez consulter les \\ufb01ches propos\\u00e9es par la Commission Nationale de l'Informatique et des Libert\\u00e9s (CNIL) :
\"}]"
+ },
+ {
+ "slug": "mentions-legales",
+ "title": "Mentions légales",
+ "body": "[{\"id\": \"80869c9e-9094-4408-81be-f1e2a90c3257\", \"type\": \"paragraph\", \"value\": \"
\\u00c9diteur du site
Le Groupement d\\u2019Int\\u00e9r\\u00eat Public \\u00ab Plateforme de l\\u2019inclusion \\u00bb
127 Rue de Grenelle
75007 Paris
France
Directeur de la publication
Monsieur Arnaud DENOIX, Directeur
H\\u00e9bergement du site
Clever Cloud SAS
5, passage de l\\u2019industrie
92130 Issy-Les-Moulineaux
France
\"}]"
+ },
+ {
+ "slug": "accessibilite",
+ "title": "Déclaration d'accessibilité",
+ "body": "[{\"id\": \"f1c037b9-6312-4779-9b77-1d597b2c58e9\", \"type\": \"paragraph\", \"value\": \"
La D\\u00e9l\\u00e9gation g\\u00e9n\\u00e9rale \\u00e0 l'Emploi et \\u00e0 la Formation professionnelle s'engage \\u00e0 rendre son service accessible, conform\\u00e9ment \\u00e0 l'article 47 de la loi n\\u00b0 2005-102 du 11 f\\u00e9vrier 2005.
- Cette d\\u00e9claration d'accessibilit\\u00e9 s'applique au site web Le march\\u00e9 de l'inclusion.
\\u00c9tat de conformit\\u00e9
Le march\\u00e9 de l'inclusion est non conforme avec le RGAA 4.1. Le site n'a pas encore \\u00e9t\\u00e9 audit\\u00e9.
\\u00c9tablissement de cette d\\u00e9claration d'accessibilit\\u00e9
Cette d\\u00e9claration a \\u00e9t\\u00e9 \\u00e9tablie le 13 janvier 2023.
Am\\u00e9lioration et contact
- Si vous n'arrivez pas \\u00e0 acc\\u00e9der \\u00e0 un contenu ou \\u00e0 un service, vous pouvez nous contacter pour \\u00eatre orient\\u00e9 vers une alternative accessible ou obtenir le contenu sous une autre forme.
- E-mail : contact@inclusion.beta.gouv.fr
- Adresse : 20 avenue de S\\u00e9gur 75007 Paris
Nous essayons de r\\u00e9pondre dans les 2 jours ouvr\\u00e9s.
Voie de recours
- Cette proc\\u00e9dure est \\u00e0 utiliser dans le cas suivant : vous avez signal\\u00e9 au responsable du site internet un d\\u00e9faut d'accessibilit\\u00e9 qui vous emp\\u00eache d'acc\\u00e9der \\u00e0 un contenu ou \\u00e0 un des services du portail et vous n'avez pas obtenu de r\\u00e9ponse satisfaisante.
Vous pouvez :
- \\u00c9crire un message au D\\u00e9fenseur des droits
- Contacter le d\\u00e9l\\u00e9gu\\u00e9 du D\\u00e9fenseur des droits dans votre r\\u00e9gion
- Envoyer un courrier par la poste (gratuit, ne pas mettre de timbre) :
D\\u00e9fenseur des droits
Libre r\\u00e9ponse 71120
75342 Paris CEDEX 07
\"}]"
+ }
+]
diff --git a/lemarche/pages/admin.py b/lemarche/pages/admin.py
deleted file mode 100644
index 97f4aed7f..000000000
--- a/lemarche/pages/admin.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from ckeditor.widgets import CKEditorWidget
-from django.contrib import admin
-from django.contrib.flatpages.admin import FlatPageAdmin
-from django.db import models
-
-from lemarche.pages.models import Page, PageFragment
-from lemarche.utils.admin.admin_site import admin_site
-
-
-@admin.register(Page, site=admin_site)
-class PageAdmin(FlatPageAdmin):
- list_display = ["url", "title", "created_at", "updated_at"]
-
- readonly_fields = ["created_at", "updated_at"]
- formfield_overrides = {models.TextField: {"widget": CKEditorWidget}}
-
- fieldsets = (
- (
- None,
- {
- "fields": ("url", "title", "content"),
- },
- ),
- ("SEO", {"fields": ("meta_title", "meta_description")}),
- ("Dates", {"fields": ("created_at", "updated_at")}),
- )
-
-
-@admin.register(PageFragment, site=admin_site)
-class PageFragmentAdmin(admin.ModelAdmin):
- list_display = ["title", "is_live", "created_at", "updated_at"]
-
- readonly_fields = ["created_at", "updated_at"]
- formfield_overrides = {models.TextField: {"widget": CKEditorWidget}}
-
- fieldsets = (
- (
- None,
- {
- "fields": ("title", "content"),
- },
- ),
- ("Affichage", {"fields": ("is_live",)}),
- ("Dates", {"fields": ("created_at", "updated_at")}),
- )
-
- def get_readonly_fields(self, request, obj=None):
- # title cannot be changed (to avoid query errors)
- if obj:
- return self.readonly_fields + ["title"]
- return self.readonly_fields
diff --git a/lemarche/pages/migrations/0003_remove_page_flatpage_ptr_delete_pagefragment_and_more.py b/lemarche/pages/migrations/0003_remove_page_flatpage_ptr_delete_pagefragment_and_more.py
new file mode 100644
index 000000000..bb3893623
--- /dev/null
+++ b/lemarche/pages/migrations/0003_remove_page_flatpage_ptr_delete_pagefragment_and_more.py
@@ -0,0 +1,22 @@
+# Generated by Django 4.2.15 on 2024-11-19 17:34
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("pages", "0002_pagefragment"),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name="page",
+ name="flatpage_ptr",
+ ),
+ migrations.DeleteModel(
+ name="PageFragment",
+ ),
+ migrations.DeleteModel(
+ name="Page",
+ ),
+ ]
diff --git a/lemarche/pages/models.py b/lemarche/pages/models.py
index c54abd92b..e69de29bb 100644
--- a/lemarche/pages/models.py
+++ b/lemarche/pages/models.py
@@ -1,54 +0,0 @@
-from django.contrib.flatpages.models import FlatPage
-from django.db import models
-from django.utils import timezone
-
-
-class Page(FlatPage):
- """
- A static page that can be created/customized in admin.
- https://docs.djangoproject.com/en/3.2/ref/contrib/flatpages/
-
- fields: title, url, content...
- """
-
- meta_title = models.CharField(
- verbose_name="Titre (balise meta)",
- max_length=100,
- blank=True,
- default="",
- help_text=(
- "Le titre qui sera affiché dans les SERPs. "
- "Il est recommandé de le garder < 60 caractères. "
- "Laissez vide pour réutiliser le titre de la page."
- ),
- )
- meta_description = models.TextField(
- verbose_name="Description (balise meta)",
- max_length=255,
- blank=True,
- default="",
- help_text="La description qui sera affichée dans les SERPs. À garder < 150 caractères.",
- )
-
- created_at = models.DateTimeField(verbose_name="Date de création", default=timezone.now)
- updated_at = models.DateTimeField(verbose_name="Date de modification", auto_now=True)
-
-
-class PageFragment(models.Model):
- title = models.CharField(verbose_name="Titre", max_length=255, unique=True)
- content = models.TextField(verbose_name="Contenu", blank=True)
-
- is_live = models.BooleanField(
- verbose_name="Visible", default=True, help_text="Laisser vide pour cacher le contenu dans l'application"
- )
-
- created_at = models.DateTimeField(verbose_name="Date de création", default=timezone.now)
- updated_at = models.DateTimeField(verbose_name="Date de modification", auto_now=True)
-
- class Meta:
- verbose_name = "Fragment de page"
- verbose_name_plural = "Fragments de page"
- ordering = ["title"]
-
- def __str__(self):
- return self.title
diff --git a/lemarche/templates/api/home.html b/lemarche/templates/api/home.html
index 0f615a792..5689b6f34 100644
--- a/lemarche/templates/api/home.html
+++ b/lemarche/templates/api/home.html
@@ -30,7 +30,7 @@ L'API met à disposition le répertoire qualifié des structures
diff --git a/lemarche/templates/auth/signup.html b/lemarche/templates/auth/signup.html
index dad15303c..9a4e5cb2c 100644
--- a/lemarche/templates/auth/signup.html
+++ b/lemarche/templates/auth/signup.html
@@ -128,7 +128,7 @@ Création du mot de passe
diff --git a/lemarche/templates/layouts/_footer.html b/lemarche/templates/layouts/_footer.html
index 8688b51f5..b0dcdd486 100644
--- a/lemarche/templates/layouts/_footer.html
+++ b/lemarche/templates/layouts/_footer.html
@@ -24,9 +24,9 @@
@@ -71,19 +71,19 @@