Drupal 10 : Gestion de contraintes d’unicités sur un content type pour des données utilisateurs distinctes

Introduction

Dans de nombreux projets Drupal, il est essentiel de garantir l’unicité de certaines données pour maintenir l’intégrité des informations. Par exemple, dans un système où plusieurs utilisateurs peuvent créer des contenus, il peut être nécessaire de restreindre l’ajout de titres en double pour un même utilisateur tout en permettant à d’autres utilisateurs de réutiliser ces titres. De plus, certains champs, comme une référence unique, doivent être globalement uniques, empêchant tout utilisateur de la dupliquer. Cette documentation explique comment configurer ces contraintes d’unicité sur un type de contenu en utilisant le module Field Validation.

Prérequis

Avant de commencer la configuration, vous devez disposer d’un environnement Drupal fonctionnel. Pour des instructions détaillées sur l’installation de Drupal, veuillez vous référer à Comment installer Drupal dans un conteneur docker

Use Case

Dans ce cas d’utilisation, nous allons créer un type de contenu nommé “Document” qui appliquera deux contraintes d’unicité spécifiques. Premièrement, chaque utilisateur pourra créer des documents avec un titre unique, empêchant ainsi la duplication de titres pour un même utilisateur, tout en permettant à d’autres utilisateurs d’utiliser le même titre pour leurs propres documents. Par exemple, l’utilisateur John pourra créer un document intitulé Rapport Annuel, et bien qu’il ne puisse pas créer un second document avec ce même titre, l’utilisateur Alice pourra également créer un document intitulé Rapport Annuel. Deuxièmement, nous définirons un champ “Référence” qui devra être unique au sein de l’entité “Document”, garantissant qu’aucun utilisateur, y compris Alice, ne pourra réutiliser la référence REF-1 si elle a déjà été utilisée par John.

Création d’un content type

Pour créer un type de contenu dans Drupal, accédez à /admin/structure/types dans l’interface d’administration. Cliquez sur Add content type, attribuez-lui le nom “Document” et fournissez une description si nécessaire. Notez que chaque type de contenu inclut par défaut un champ Title, qui est défini comme requis dans les paramètres du formulaire de soumission.

Après avoir enregistré ces informations, ajoutez un champ Reference, en choisissant entre Text (plain) ou Integer, selon vos besoins. Configurez les paramètres du champ et cliquez sur Save content type settings.

Pour personnaliser l’endpoint JSON:API du type de contenu, accédez à /admin/config/services/jsonapi/resource_types. Modifiez le chemin de l’endpoint par défaut de /api/node/document en /api/document.

Pour plus d’informations sur la configuration de JSON:API, veuillez consulter cet article.

Installation du module Field Validation

Le module Field Validation permet de définir des règles de validation personnalisées pour les champs des types de contenu dans Drupal. Pour l’installer, commencez par exécuter la commande suivante avec Composer :

composer require 'drupal/field_validation:^1.1'

Ensuite, accédez à l’interface d’administration de Drupal en allant dans Extend. Recherchez Field Validation dans la liste des modules disponibles, cochez la case associée pour activer le module, puis cliquez sur Install pour compléter l’installation.

Configuration

Après avoir activé le module Field Validation, vous pourrez ajouter des règles de validation personnalisées pour les champs du type de contenu “Document”. Accédez à /admin/structure/field_validation dans le menu d’administration de Drupal. Cliquez sur Add field validation rule set, puis renseignez le type de contenu concerné, dans ce cas “Document”. Cliquez ensuite sur Create field validation rule set pour commencer à ajouter les règles.

Pour configurer une règle de validation, sélectionnez la règle Unique pour gérer l’unicité des valeurs.

Cliquez sur Add et remplissez les champs comme suit :

  • Field Validation Rule title : Donnez un titre explicite à la règle.
  • Field name : Sélectionnez le champ concerné par la validation.
  • Column of field : Choisissez la colonne du champ si applicable.
  • Scope of unique : Sélectionnez “Entity” pour appliquer l’unicité globalement sur le site, ou “Bundle” si l’unicité doit être limitée à un type de contenu spécifique.
  • Only for published entities : Cochez cette option si la validation doit s’appliquer uniquement aux entités publiées.
  • Per user : Cochez cette option si vous souhaitez que la règle d’unicité soit appliquée au niveau de chaque utilisateur. Cette option permet à chaque utilisateur d’avoir des valeurs uniques pour le champ spécifié.
  • Error message : Définissez le message d’erreur qui sera affiché en cas de violation de la règle.
  • Browse available tokens : Utilisez cette fonctionnalité pour insérer des tokens dynamiques dans le message d’erreur, permettant de personnaliser le message en fonction des données contextuelles.
  • Apply to these roles : Sélectionnez les rôles pour lesquels la règle sera applicable. Si vous souhaitez que la règle s’applique à tous les utilisateurs, ne sélectionnez aucun rôle spécifique.

Vous pouvez définir des conditions supplémentaires pour affiner l’application de la règle :
Pour cela, accédez à la section Condition :

  • Field name : Sélectionnez le champ sur lequel la condition sera appliquée. Cela peut être le champ que vous souhaitez valider ou un autre champ pertinent pour la règle.
  • Operator : Choisissez l’opérateur de comparaison approprié pour la condition. Les opérateurs disponibles peuvent inclure des options telles que “equals”, “not equals”, “greater than”, etc., en fonction du type de données du champ sélectionné.
  • Value : Spécifiez la valeur contre laquelle la condition sera comparée. Par exemple, si vous utilisez l’opérateur “equals”, vous devrez entrer la valeur exacte que le champ doit avoir pour que la condition soit vraie.

Cliquez sur Add Rule pour enregistrer les paramètres de la règle et l’appliquer à votre type de contenu “Document”.

Règle de validation pour le champ Title

Un utilisateur ne peut pas créer plusieurs documents avec le même titre, mais d’autres utilisateurs peuvent utiliser le même titre pour leurs propres documents.

Règle de validation pour le champ Reference

Un champ “Référence” doit être unique au sein de l’entité “Document”, empêchant tout utilisateur de créer un document avec une référence déjà existante. Pour garantir cette unicité globale, assurez-vous de ne pas cocher la case Per user lors de la configuration de la règle de validation, afin que la contrainte s’applique à l’ensemble des documents, indépendamment de l’utilisateur qui les crée.

Test

Voici un plan de test détaillé pour vérifier l’unicité des champs “Titre” et “Référence” dans le type de contenu “Document”, en utilisant deux utilisateurs distincts, [email protected] et [email protected], qui ont les permissions nécessaires pour créer des contenus.

Connectez-vous en tant que John et créez un document intitulé Rapport Annuel avec la référence REF-1. Ensuite, essayez de créer un second document avec le même titre “Rapport Annuel” et la même référence REF-1. La création du deuxième document doit être refusée, car le titre doit être unique par utilisateur et la référence doit être unique pour tous les utilisateurs.

Connectez-vous en tant qu’Alice et créez un document avec le titre Rapport Annuel et la référence REF-1. La création du document doit être refusée en raison de la référence, qui doit être unique pour tous les documents. En revanche, le titre Rapport Annuel peut être utilisé par Alice, car l’unicité du titre est appliquée au niveau de chaque utilisateur.

Les tests ont été réalisés en utilisant Apidog, un outil efficace pour gérer et tester les API.

Conclusion

La mise en œuvre des contraintes d’unicité pour les champs “Titre” et “Référence” dans le type de contenu “Document” a été réalisée avec le module Field Validation de Drupal. Les tests ont démontré que le module applique correctement l’unicité du titre au niveau de chaque utilisateur et assure la singularité globale des références. Cette configuration garantit l’intégrité des données et prévient les doublons, assurant ainsi une gestion efficace et cohérente des documents dans le système.

Développeuse fullstack * Plus de publications

Développeuse fullstack spécialisée en Systèmes d'Information Répartis , diplômée de la section informatique de la Faculté des Sciences et Techniques (FST) de l'UCAD. Je relève avec passion des défis complexes, avec une forte capacité d'adaptation et un engagement pour la collaboration en équipe. Toujours avide d'apprendre, je vise à créer un impact positif et à promouvoir l'excellence organisationnelle dans chaque projet.

Contributeurs

0 0 votes
Évaluation de l'article
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

Ingénierie informatique (SSII)

Applize crée des logiciels métiers pour accompagner les entreprises dans la transition vers le zéro papier.


Avez-vous un projet en tête ? Discutons-en.