JPlatform 10 SP7 - Les principales nouveautés
Documentation Fiches des nouveautés JPlatform 10 SP7 Présentation
Olivier Dedieu
4 mai 2023 714 vues

Nouvelles fonctionnalités

JPortal : Nouvel éditeur simplifié et Espaces collaboratifs

JPortal est le composant permettant de construire des pages dans JPlatform. Cet outil permet à la fois d’agir sur la mise en page, le style et le paramétrage des portlets.

Dans la version 8.0 du module Espaces Collaboratifs, la composition de la page d’accueil d’un espace collaboratif est désormais prise en charge par JPortal. L’objectif est à la fois d’autoriser des compositions plus libres que dans la précédente version (qui proposait uniquement une composition en colonnes) mais aussi de permettre à des animateurs de communautés de pouvoir agir sur les portlets.

JPortal nécessite d’avoir une connaissance assez fine des concepts de portail et portlets de JPlatform. Et les portlets ont de nombreuses options de paramétrage. Or, les animateurs d’espaces collaboratifs n’ont généralement pas été formé à l’utilisation de JPortal. Ils ont donc besoin d’une interface plus simple que JPortal permettant essentiellement d’agir sur les portlets qui composent la page d’accueil.

C’est pour cette raison, que JPlatform 10 SP7 introduit un nouveau mode d’édition simplifié dans JPortal. C'est un mode complémentaire du mode d'édition classique de JPortal.

L'éditeur JPortal simpifié permet de :

  • Réorganiser les portlets par glisser/déposer
  • Modifier le style des portlets (habillage, couleur, …)
  • Choisir le gabarit d’affichage
  • Modifier les paramètres essentiels de la portlet
  • Ajouter des portlets

Tout cela directement dans la page d’accueil de l’espace collaboratif, sans avoir à entrer dans le mode édition JPortal classique. 

mceclip0 - 2023-04-19 17h43m19s

 

La nouvelle modale d’édition des portlets exposes uniquement les attributs essentiels sur lesquels un animateur d'espace collaboratif peut agir.

mceclip1 - 2023-04-19 17h43m43s

mceclip2 - 2023-04-19 17h43m48s

 

L’animateur dispose aussi d’une nouvelle interface simplifiée pour ajouter des portlets dans la page d’accueil :

mceclip3 - 2023-04-19 17h43m59s

 

Pour aller au-delà et agir sur la composition avancée de la page, il est bien entendu possible de basculer en édition JPortal classique :

mceclip4 - 2023-04-19 17h44m05s

 

Dans le cas des espaces collaboratifs, les animateurs peuvent aussi agir sur les applications qui sont proposées dans les onglets de l’entête en les réorganisant par glisser/déposer, en les renommant, en les retirant et en ajoutant de nouvelles applications :

mceclip5 - 2023-04-19 17h44m12s

 

Ce mode d’édition simplifié est disponible non seulement pour les espaces collaboratifs mais pour toutes les pages construites avec JPortal. Il est possible de le déclencher via le menu « Admin » de la topbar.

Un point important est que les modifications faites sur une portlet ou une application avec l’édition simplifiée dans un espace collaboratif ne modifient pas la portlet mais sont enregistrées dans l’espace collaboratif comme une couche de surcharge. Ainsi la même portlet peut être utilisée dans plusieurs espaces collaboratifs et modifiée différemment.

La création de nouvelles portlets dans un espace collaboratif a aussi été simplifiée. L’animateur a juste à choisir le type de portlet puis à renseigner les informations. Le type de portlet est automatiquement activé et les informations spécifiques à l’usage dans un espace collaboratif (notamment l’aptitude) sont aussi positionnées.

mceclip6 - 2023-04-19 17h44m23s

Liens publics : nouvelles options pour l’envoi du message

La fonction « Lien public » permet d’envoyer à une personne externe un lien de téléchargement d’un document.

Les interfaces de création et de gestion des liens publics proposaient un bouton pour préparer un mail aux destinataires du lien public. Hélas, pour des raisons techniques, ce mail ne pouvait être qu'en version texte et le lien vers le téléchargement du document était donc représenté par l'URL. Par ailleurs, ces interfaces proposaient aussi un bouton pour copier l'URL.

A partir de JPlatform 10 SP7, le bouton "Copier" propose désormais 3 choix :

  • Copier le message (au format HTML)
  • Copier le lien HTML (ie. le titre du document avec un lien amenant vers le téléchargement)
  • Copier l'URL (même fonction que la précédente version)

On peut enchainer la copie du message, puis l'envoi par mail, en copiant le message (au format HTML) dans le mail.

mceclip0 - 2023-04-19 17h45m28s

Le texte du message a aussi été revu pour indiquer la date limite (plutôt qu'une durée de validité). Exemple :

Bonjour,

Le lien ci-dessous vous permet de télécharger le fichier jusqu'au jeudi 6 juillet 2023 :

JPlatform 10 - Installation and Operation Manual.pdf

Cordialement,

Duplication de contenu : choix de l’espace cible

Jusqu'à présent, pour dupliquer un contenu dans un autre espace il fallait avoir les droits de créer un contenu du même type que dans cet espace.

Désormais il suffit de pouvoir créer un contenu du même type dans au moins un espace. Lorsqu'on déclenche la duplication, une fenêtre modale apparait pour demande l'espace cible.

mceclip1 - 2023-04-19 17h45m55s

LDAP - Synchronisation de la langue de l'utilisateur

Lorsque les comptes utilisateurs sont synchronisés avec les données d'un annuaire LDAP, la langue des utilisateurs est désormais synchronisée en standard avec l'attribut LDAP preferredLanguage.

Si vous souhaitez permettre aux utilisateurs de modifier leur langue eux-mêmes, et ne souhaitez donc pas synchroniser la langue des utilisateurs avec les données de votre LDAP, videz ce réglage dans les propriétés du site, onglet LDAP, section Schéma, champ Langue (ce réglage correspond à la nouvelle propriété ldap.mapping.language).

Nouveautés UX

Renommage de Recommander en Partager

Le terme « Recommander » n’était pas toujours bien compris des utilisateurs. A partir de JPlatform 10 SP7, les termes "Recommander" et "Recommandation" sont remplacés par "Partager" et "Partage" dans toutes les interfaces. Le terme de recommandation ne subsiste que pour "recommander" une application ou un profil.

Unification des fonctions de partages

L'action de "Recommander" a été remplacé par "Partager". Cette action ouvre une première modale proposant différentes options de partage. Ces options varient selon la nature de l'objets partagé.

Les options possibles sont :

  • Partager à des membres et de groupes : ouvre la modale de recommandation
  • Partager à des externes (uniquement pour les documents) : ouvre la modale de création de lien public
  • Partager dans un autre espace (uniquement pour les contenus) : ouvre la modal de partage inter-espace

En plus de ces options, un bouton permet de copier le lien de la publication.

Exemple de modale de partage pour un document :

mceclip2 - 2023-04-19 17h46m11s

En conséquence :

  • Dans les actions sur une publication :
    • L'action Recommander est remplacée par Partager
    • Les actions suivantes ont été supprimées
      • Créer un lien public
      • Partager dans un autre espace
      • Permalien
    • Dans la ttCard des publications, l'action de création d'un lien public n'existe plus

Le "Traitement groupé" remplace le panier

Le terme de «panier» et son icône de caddy pouvait porter à confusion ; certains utilisateurs les associant à un site marchant.

Ce terme est désormais remplacé par le terme "Traitement groupé" ("Bulk processing"). Les icônes matérialisant les différents états ou actions sur le traitement groupé ont aussi été revues :

mceclip3 - 2023-04-19 17h46m22s

La fonction de traitement groupé n’est généralement pas destinée à tous les utilisateurs. Il est désormais possible de limiter son accès à une population donnée via l'ACL "Traitement groupé". Il s'agit d'une ACL optionnelle. Si elle n'est pas renseignée tout le monde a accès à la fonctionnalité.

Renommage du niveau d'alerte "Avertissement" en "Urgent"

Le terme "Avertissement" ("Warning" en anglais) pour le troisième niveau d'alerte (après "Information" et "Action") était mal compris, surtout en français. Il a été renommé en "Urgent" en français et en anglais pour être plus en accord avec sa fonction.

mceclip4 - 2023-04-19 17h47m14s

Document : mise en avant de l'action d'édition

Jusqu'à présent sur la page d'un document c'était le bouton "Télécharger" qui était mis en avant.

Cependant, il est en réalité assez rare que l'on veuille uniquement télécharger le document puisque l'on a la visionneuse qui l'affiche. Aussi, lorsque cela est possible, nous mettons désormais plus en avant le bouton "Ouvrir avec...". Le bouton "Télécharger" est néamoins toujours disponible.

Exemple

mceclip5 - 2023-04-19 17h47m24s

WYSIWYG & Images adaptatives (responsive images)

Les utilisateurs peuvent déposer des images à plusieurs occasions : publication de billet de blog, d’article, galerie, dans les zones de texte riches, … Parfois ces images sont de taille très importante, notamment lorsqu’il s’agit de photo prises avec un appareil photo ou un smartphone.

L’affichage de ces lourdes images dans les différentes pages du site peut occasionné des ralentissements et des consommations de ressources inutiles car elles sont généralement affichées dans une taille bien plus petite que la taille native.

Pour les interfaces où ces images sont dans des champs clairement identifiés (les cartes, le visuel d’un article, les galeries, …) une miniature de l’image est générée et utilisée à la place de l’image d’origine. Mais, jusqu’à présent, dans les zones de texte riche, les images natives étaient utilisées.

Dans JPlatform 10 SP7, les images insérées par les utilisateurs dans des zones de texte riche, et dépassant certaines résolutions, sont affichées en version miniature, afin de réduire la bande passante et le temps de chargement de la page. Par défaut les alternatives générées ont pour largeur : 640px, 1024px et 1920px

Si une image a une largeur :

  • plus petite que 640px, elle sera servie dans sa version d'origine, sans alternative
  • entre 640px et 1920px, une ou plusieurs versions alternatives seront proposées, l'image la plus grande disponible sera l'image d'origine
  • plus grande que 1920px, toutes les alternatives seront proposées, et, l'image la plus grande disponible sera la miniature en 1920px

Recherche : nouvelle interface pour le filtrage sur un type

Dans l'interface de recherche, le filtre sur les types de publication a été revu. La longue liste des types a été remplacée par un champ de sélection de type par auto-completion :

mceclip0 - 2023-04-19 18h36m03s

 

Navigation par les catégories : ouverture dans un nouvel onglet

Une option a été ajoutée sur une catégorie pour indiquer si elle devait s'ouvrir dans un nouvel onglet lorsqu'elle est utilisée pour de la navigation.

mceclip1 - 2023-04-19 18h37m50s

Les gabarits de Portlet Navigation suivant tiennent compte de cette option :

  • Arbre vertical
  • Menu Vertical
  • Menu pour la Topbar
  • Menu horizontal avec un niveau

Wysiwyg - éditeur TinyMCE 5 activé par défaut

TinyMCE 5 avait été introduit dans JPlatform 10 SP5 (juin 2021) mais il n’était pas activé par défaut. TinyMCE 5 s’est avéré stable et mature. Aussi, il est activé par défaut dans JPlatform 10 SP7.

Si vous avez des développements spécifiques autour de TinyMCE, vous devez suivre la procédure diffusée en Juin 2021 lors de la diffusion de JPlatform 10 SP5, "Editeur wysiwyg TinyMCE 5" dans la Notes d'application des Services Packs de JPlatform 10 pour les migrer vers la nouvelle version de l'éditeur.

Accessibilité

Jalios s’est inscrit dans une démarche de respect des critères d’accessibilité définie dans le RGAA 2.0. Des audits ont été conduits par Jalios et par des clients. Ils ont révélé plusieurs points à corriger.

JPlatform 10 SP7 comprend une centaine de correctifs sur l’accessibilité. Ces correctifs sont aussi étendus aux modules et une série de modules sont sortis ou vont ressortir d’ici quelques mois avec des correctifs dédiés à l’accessibilité :

  • JMag 5.4.1
  • JNote 1.2
  • JNews 2.3.1
  • JCalendar 1.4.3
  • ESN 6.7.2
  • Espace collaboratif 8.0
  • Sondage 6.1
  • Wiki 7.6
  • Visites Guidées 1.2
  • Espaces de conversation 6.1
  • Explorer 4.6
  • Favoris 6.4
  • Commentaires 6.4
  • Annuaire 8.2

Sécurité et Droits

Protection contre les attaques par force brute

Une nouvelle protection contre les attaques par force brute est désormais activée par défaut sur la base du comportement suivant : au-delà de 2 échecs d'authentification par intervalle de 3 secondes, une restriction d'authentification s'applique pendant une durée de 30 secondes pour le compte utilisateur, sur l'IP de provenance.

Ces valeurs peuvent être configurées dans les propriétés du site, section Accès :

mceclip6 - 2023-04-19 17h47m38s

La restriction consiste empêcher toute nouvelle tentative de connexion pour le même utilisateur, sur la même IP de provenance, pendant la durée spécifiée.

mceclip7 - 2023-04-19 17h47m47s

Cette restriction s'applique sur les méthodes d'authentification suivantes (les contrôles de chaque méthode étant distincts les unes des autres) : 

  • par login / mot de passe
  • par cookie
  • par authkey

Attention, pour l'utilisation de JDrive avec une authentification par navigateur, il est nécessaire d'autoriser au minimum 2 échecs d'authentification dans un intervalle de 2 à 3 secondes.

 

Relâchement de la configuration de bcrypt

Comme évoqué ci-dessus, une mécanique a été introduite pour empêcher les tentatives d'attaque par force brute. Par conséquent, il n'est plus nécessaire, pour la protection des attaques par force brute via le web, d'avoir une configuration de bcrypt trop élevée.

Ainsi, pour éviter une charge CPU liée à cette configuration de bcrypt, JPlatform 10 SP7 rétablit la configuration de bcrypt à 10 (contre 12 en SP4, SP5 et SP6)

Procédure d'oubli de mot de passe

Plus de mail envoyé pour les comptes non existants

Lors de la procédure d'oubli de mot de passe par saisie d'une adresse mail, un mail était envoyé dans toutes les circonstances, y compris lorsque l'adresse mail saisie ne correspondait à aucun compte sur le site.

Le comportement par défaut a été renforcé en termes de sécurité : un mail est envoyé uniquement lorsqu'un compte correspondant à l'adresse mail a pu être identifié.

Ceci permet d'empêcher des utilisateurs mal intentionnés d'abuser de la fonctionnalité d'oubli de mot passe pour déclencher l'envoi de mail intempestif à des adresses mail non reliées externes à la plateforme.

Le précédent comportement peut être réactivé en positionnant la propriété channel.reset-password.send-mail-to-unknown-user: true

Quelle que soit la configuration, le message affiché à l'utilisateur ayant fait la demande ne donne aucune indication de l'existence du compte ou non, afin de ne pas divulguer d'information à ce sujet.

Protection contre les tentatives de déni de service

Une nouvelle protection contre les tentatives de déni de service est désormais activée par défaut sur la base du comportement suivant :

Au-delà de 4 demandes d'oubli de mot de passe (pour des emails différents) par intervalle de 1 heure, une restriction s'applique pendant une durée de 1 heure sur l'IP de provenance.

La restriction consiste empêcher toute nouvelle demande d'oubli de mot de passe par un client avec la même IP de provenance, pendant la durée spécifiée.

Cette protection peut être configurée avec les propriétés suivantes :

#  Enable throttling or not ?
channel.reset-password.throttle.throttle-enabled: true
#  Time range in seconds during which the threshold is verified.
channel.reset-password.throttle.range-seconds: 3600
#  Number of password reset attempts permitted in the specified time range.
channel.reset-password.throttle.threshold: 4
#  Number of seconds before the blocked/throttled can be released.
channel.reset-password.throttle.throttling-duration-seconds: 3600

Option pour refuser l'authentification aux utilisateurs dont le mot de passe ne respecte plus les contraintes de sécurité de mot de passe

Des règles de validation des mots de passe peuvent être configurées dans JPlatform afin d'imposer une complexité minimum.

Si ces règles de validation sont modifiées, l'authentification est autorisée pour les comptes utilisant un mot de passe respectant l'ancienne politique de validation, mais pas la nouvelle règle en vigeur.

Une nouvelle option de configuration est disponible dans JPlatform 10 SP7 afin de refuser l'authentification des comptes ne respectant pas les nouvelles règles.

Si vous activez ce comportement, les utilisateurs ne respectant pas les contraintes en vigueur seront informés et invités à procéder à un changement de mot de passe en suivant le processus de réinitialisation de mot de passe (via la saisie de leur adresse e-mail).

mceclip8 - 2023-04-19 17h48m13s

Ce comportement est désactivé par défaut. Pour l'activer, configurez la propriété suivante :

auth-mgr.simpleauth.inform-user-of-old-password: true

Attention : avant d'activer ce comportement, vérifiez impérativement qu'au moins un administrateur utilise un mot de passe avec les règles en vigueur, sans quoi vous pourriez être dans l'impossibilité d'accéder au site avec une authentification de type identifiant/mot de passe.

Cette politique ne s'applique pas pour les comptes utilisant uniquement une authentification externe (LDAP ou autre SSO).

Option pour l'affichage d'un message aux utilisateurs en cas de changement des contraintes de sécurité BCrypt

Lorsque les réglages de sécurité de BCrypt sont modifiés, tous les mots de passe existants ne respectant plus les contraintes sont alors automatiquement inutilisables et non fonctionnels.

Une tentative de connexion avec le compte associé se solde par un échec d'authentification, sans plus d'information pour l'utilisateur.

Une nouvelle option de configuration est disponible dans JPlatform 10 SP7 afin de permettre l'affichage d'un message lors de l'échec de connexion.

Les utilisateurs sont informés et invités à procéder à un changement de mot de passe en suivant le processus de réinitialisation de mot de passe (via la saisie de leur adresse e-mail).

Ce comportement divulgue une information aux utilisateurs anonymes : l'existence d'un compte correspondant à l'identifiant saisi.

Pour cette raison, et en application de la bonne pratique "Secure by default", l'option est désactivée par défaut.

Vous pouvez l'activer avec la propriété suivante :

auth-mgr.simpleauth.inform-user-of-old-password: true

Précision : ce comportement concerne uniquement le non-respect des réglages de sécurité des hash BCrypt stockés par JPlatform.

Le mot de passe en clair étant inconnu de JPlatform, ce message ne se déclenche pas à la suite d’un éventuel changement des règles de validation des mots de passe.

Pour cela, consultez la section précédente qui propose une approche alternative.

Cette politique ne s'applique pas pour les comptes utilisant uniquement une authentification externe (LDAP ou autre SSO).

E-mail obligatoire à l'inscription

Le champ E-mail était marqué visuellement obligatoire, mais ne l'était pas. Désormais, l'E-mail est obligatoire dans le formulaire d'inscription

Paramétrage avancé

Choix du portail d'affichage d'une application

Par défaut toutes les applications disposant d'un raccourci (shortcut) sont affichées dans le portail des applications.

Il est désormais possible de forcer un portail d'affichage particulier pour une application donnée.

Pour ce faire, il faut

  1. Créer un portail (disposant d'une portlet Selection ou équivalent dans JPortal)
  2. Noter l'identifiant de ce portail
  3. Ajouter la propriété shortcut.<APP_NAME>.portal: <PORTAL_ID>
    • APP_NAME est le même nom que celui déclaré dans la propriété shortcut.<APP_NAME>.link 
    • PORTAL_ID est l'identifiant du portail à utiliser

Si on veut mettre un accès à une App depuis la navbar, après avoir fait les opérations précédentes, il faut :

  • Ajouter une catégorie dans Navbar
  • Associer le portail créé sur cette catégorie
  • Créer un portail de redirection associé à cette catégorie et redirigeant sur la même JSP que celle déclarée dans shortcut.<APP_NAME>.link

Augmentation de la durée par défaut des caches CSS et JS

Jusqu'à présent la durée des caches CSS et JS était de 10 jours. Comme il existe un moyen simple de forcer l'invalidation des caches sans jouer sur cette durée (via channel.packer.version), dans la 10 SP7 nous avons augmenté la durée à 365 jours. Celle-ci est réglable via la propriété suivante :

channel.packer.cache-expiration: 365

Mails : entêtes paramétrables

Il est possible, par simple déclaration de propriétés, d'ajouter des entêtes de mail personnalisés à tous les mail émis par la plateforme.

Ceci s'effectue via la déclaration de propriétés respectant la nomenclature mail.header.{Header-Name}: {Header-Value}

Exemples :

# Set custom header
mail.header.X-MyCustomHeader: FooBar

# Set custom return-path to handle bounce email (error message, auto replies, etc)
mail.header.Return-Path: bounced@example.com

# Set null return-path address to disable bounce email
mail.header.Return-Path: <>

Notez que cette personnalisation était déjà possible par développement spécifique en s'insérant lors de l'invocation de MailPolicyFilter.beforeSendMail(MailMessage msg, HashMap<String,Object> contextMap).

Mails envoyés indiqués comme auto-genérés

Tous les mails envoyés par la plateforme sont désormais indiqués comme auto-genérés, via l'en-tête de mail Auto-Submitted: auto-generated en application de la RFC 3834 §5.2.

Ceci permet d'indiquer aux services de messagerie distants d'éviter d'émettre des messages de retour de mail en cas d'absence du destinataire.

Ce comportement peut être désactivé globalement avec la propriété suivante :

mail.set-auto-generated: false

Ce comportement peut également être désactivé en développement spécifique, pour certains mails uniquement, en positionnant l'attribut de contexte "mail.set-auto-generated" à false lors de l'invocation de MailPolicyFilter.beforeSendMail(MailMessage, HashMap<String,Object>).

Plus de blocage de la page suite à une erreur ajax

Lorsqu’une erreur survenait lors d’une requête Ajax, l'utilisateur ne pouvait plus rien faire sur la page si ce n’est la recharger.

Dans JPlatform 10 SP7, lorsqu’une erreur survient lors d’un traitement, un toastr apparaîtra indiquant à l'utilisateur qu'il y a eu une erreur, mais il pourra continuer à cliquer sur des éléments qui déclenchent des javascripts dans la page.

Pour les développeurs, si le mode développeur est activé sur la webapp, on verra le contenu de l'erreur dans le toastr.

Traitement asynchrone des suppressions de membres

Toutes les suppressions de membres sont désormais traitées via un producteur/consommateur dans un thread dédié (pour garantir l'absence de deadlock SQL)

  • Toutes les API existantes restent synchrones (mais attendent en fait tranquillement le travail du consommateur)
  • Les suppressions effectuées depuis le traitement par lot des membres (caddy) sont désormais asynchrones
    • l'utilisateur est informé que le traitement a été soumis
    • les membres en cours de suppression ont un retour via un contrôle d'intégrité

Options de configurations disponibles :

# enable/disable this new behavior, to revert to previous behavior (default:true)
member.async-delete.enabled: true/false

# limit the wait time of the "synchronous" performDelete (defaut: 0ms ==infinite wait time)
member.async-delete.timeout: 0

Développement

Tag <jalios:dropdown>

Le tag <jalios:dropdown> produit un menu déroulant qui est typiquement utilisé pour produire des menus contextuels sur un objet (p. ex. un carte, une ligne d’un tableau, une portlet, …)

<jalios:dropdown triggerLabel="Ouvrir le menuuuu" triggerIcon="more-v" triggerCss="btn btn-default"  >
  <li><a><jalios:icon src="more-v" /> Custom Items</a></li>
  <li><a>Test 2</a></li>
  <li><a>Test 3</a></li>
  <li class="divider"></li>
  <li><a>Test after divider</a></li>
</jalios:dropdown>

Pour en savoir plus, consultez la documentation.

Tags <jalios:button>, <jalios:buttonModal> et <jalios:buttonAjax>

Ces tags génèrent un bouton qui respecte les règles d’accessibilité et qui peut être notamment utilisé pour les ouvertures de fenêtres modales ou pour déclencher des actions en Ajax.

<jalios:buttonAjax label="Ajax Refresh" confirm="true" confirmText="YOU SURE ?" css="btn btn-default"/>
<jalios:buttonAjax label="Ajax Refresh" css="btn btn-default"/>
<jalios:button css="btn btn-default" url="tesT.jsp"><jalios:icon src="share" /> Inner Content</jalios:button>
<jalios:button css="btn btn-default"><jalios:icon src="share" /> Inner Content</jalios:button>
<jalios:button label="Label with tag attr" css="btn btn-default" />
<jalios:buttonModal label="appstore.sidebar.admin.add-application" url="jcore/appstore/app/createApplicationModal.jsp" css="btn btn-default btn-add-application" icon="add"/>

Pour en savoir plus, consultez la documentation.

Tag <jalios:noResult>

Le tag <jalios:noResult> produit un message standard dans le cas où il n’y a pas de résultat. Il est possible de remplacer le visuel et le texte.

<jalios:noResults />
<jalios:noResults text="jportal.simple-edition.no-form-portlet" />

Pour en savoir plus, consultez la documentation.

Champs Recherche

Des champs de recherche sont souvent présents dans les sidebar ou les navbars des applications. Ce nouveau contrôle normalise l’UX/UI de ce type de champ.

Pour en savoir plus, consultez la documentation.

Champ Icône

Le contrôle Icon propose de sélectionner une icône dans l’ensemble des icônes vectorielles de JPlatform (WebFont Icomoon et JIcons)

mceclip0 - 2023-04-19 18h15m13s

Pour en savoir plus, consultez la documentation.

API UILinkItem

Cette API permet de faire une liste de liens à partir d'un préfixe de propriétés.

Pour en savoir plus, consultez la documentation.

Modale : étape d'aiguillage

Dans certaines interfaces, il est parfois nécessaire d’avoir une première étape qui guide l’utilisateur vers la bonne interface. On utilise ce principe dans plusieurs interfaces de JPlatform :

  • Dans JLearn : ajout d’une vidéo locale ou d’une vidéo distante
  • Dans JEvent : création d’un événement en présentiel, en visio ou hybride
  • Dans JProcess : création ou import du processus

Des classes CSS sont désormais disponibles pour homogénéiser et simplifier le développement de ces étapes d'aiguillage :

<jalios:modal title='Start a new activity'  css="modal-lg">

  <div class="modal-options-text">What do you want to do ?</div>

  <div class="modal-options">

    <div class="modal-option clickable" data-jalios-url="plugins/MyPlugin/jsp/option1.jsp" data-jalios-options='{"mode":"ajax"}'>
      <jalios:icon src="myplugin-option1"/>
      <div class="modal-option-title">Option 1</div>
      <div class="modal-option-subtitle">Option 1 subtitle</div>
    </div>

    <div class="modal-option clickable" data-jalios-url="plugins/MyPlugin/jsp/option2.jsp" data-jalios-options='{"mode":"ajax"}'>
      <jalios:icon src="myplugin-option2"/>
      <div class="modal-option-title">Option 2</div>
      <div class="modal-option-subtitle">Option 2 subtitle</div>
    </div>

    <div class="modal-option clickable" data-jalios-url="plugins/MyPlugin/jsp/option3.jsp" data-jalios-options='{"mode":"ajax"}'>
      <jalios:icon src="myplugin-option3"/>
      <div class="modal-option-title">Option 3</div>
      <div class="modal-option-subtitle">Option 3 subtitle</div>
    </div>
  </div>

</jalios:modal>

mceclip9 - 2023-04-19 17h48m39s

Lecture / écriture d'attribut dans la requête courante

Dans certains développements Java on peut avoir besoin de positionner ou de récupérer la valeur d’un attribut de la requête courante. Jusqu’à présent il fallait passait par la méthode channel.getCurrentServletRequest(), vérifier qu’elle n’était pas null et faire la lecture ou l’ajout de l’attribut.

Dans JPlatform 10 SP7,  deux méthodes utilitaires simplifient ces actions :

channel.setCurrentRequestAttribute("myAttribute", "myValue");
String myAttribute = (String)channel.getCurrentRequestAttribute("myAttribute");

Mise à jour des librairies

Plusieurs librairies Java ont été mises à jour dans JPlatform 10 SP7.

Librairie Objectif Issue JIRA
Apache Derby 10.15.2.0

Maintenance

JCMS-7484
Reload4j 1.2.24

Maintenance

JCMS-9518
Apache Commons Lang 3 - 3.12.0

Maintenance 

JCMS-7949
JSoup 1.15.4
⚠ → cf section "Migration"

Maintenance + sécurité

JCMS-9246 / JCMS-9837
Apache Commons Collections 4.4

Maintenance 

JCMS-9517
HttpClient 3.x

Maintenance + sécurité

JCMS-9522
Drew MetaData extractor 2.18.0

Maintenance + sécurité

JCMS-9515
FasterXML Jackson 2.13.4
FasterXML Jackson Databind 2.13.4.2

Maintenance + sécurité

JCMS-9516
GSON 2.8.9

Maintenance + sécurité

JCMS-9525
Google protobuf 3.19.6

Maintenance + sécurité

JCMS-9526
 Tritonus Share 0.3.7.4

Maintenance

JCMS-9530
Apache Commons FileUpload

Maintenance + sécurité

JCMS-9839

 

Migration

Java 11 requis

Java 8 a atteint sa fin de support actif depuis le 31 mars 2022 et n'est supporté que pour des correctifs de sécurité.
Java 11 est sorti depuis plus de 5 ans et sera en fin de support en septembre 2023.
cf https://endoflife.date/java

Pour cette raison, JPlatform 10 SP7 nécessite une JDK 11.

Jalios vise à terme le support de JDK 17, mais cette version n'est PAS encore certifié avec JPlatform 10 SP7

JSoup : Whitelist → Safelist

Suite à la mise à jour de la libraire JSoup en version 1.15.x (JCMS-9246), les éventuels développements spécifiques qui chargeaient/modifiaient programmatiquement les listes blanches de nettoyage HTML doivent être adaptés.

  • APIs JSoup  
    • org.jsoup.safety.Whitelist → org.jsoup.safety.Safelist

  • APIs JPlatform (dans le package com.jalios.jcms.wysiwyg) : 
    Avant (supprimé dans JPlatform 10 SP7) Après
    Whitelist WysiwygManager.getWhitelist() Safelist WysiwygManager.getSafelist()
    Whitelist WysiwygManager.loadWhitelist(JProperties) Safelist WysiwygManager.loadSafelist(JProperties)
    WysiwygManager.CLEANHTML_CTXT_WHITELIST WysiwygManager.CLEANHTML_CTXT_SAFELIST

     

Note : Seules les APIs Java ont été modifiées suite à cette mise à jour de librairie.
Le nom des propriétés permettant de configurer le nettoyage HTML n'a PAS été modifié, il s'agit toujours des propriétés wysiwyg.sanitize-html.whitelist.*

Si vous utilisez les modules suivants, les versions indiquées ou des versions plus récentes DOIVENT être installées

Les Data Source externes doivent être explicitement déclarées

Si vous utilisez des Data Source externes dans des champs de type "Enregistrement de BD (DB Record)" ou "Requête SQL (SQL Query)" vous devez :

  1. Déclarer explicitement les datasources avec la propriété channel.external-datasources
  2. Activer explicitement les fonctionnalités correspondantes :
    • channel.dbrecord.enabled: true
    • channel.sqlquery.enabled: true

Exemple :

channel.external-datasources: jdbc/myExternalDB1 jdbc/myExternalDB2
channel.dbrecord.enabled: true
channel.sqlquery.enabled: true