Bienvenue
Jalios Community
Tout ce que vous souhaitez savoir sur l'écosystème Jalios
Cette page présente les principales nouveautés de JPlatform 10 SP1.
JPortal est le nouveau type de Portail intégré dans JPlatform 10 SP1.
Il propose une interface permettant de concevoir facilement vos portails, via du drag&drop, et de la prévisualisation en direct.Tous les éléments (Blocs et portlets) de ce portail sont personnalisables directement depuis l'interface.
L'outil propose aussi un système de sauvegardes qui permet de visualiser et de travailler sur la conception de votre portail sans le publier. Lorsqu'il est prêt, vous pouvez le publier pour qu'il soit visible de tous. Il est aussi possible de revenir sur une ancienne version grâce à la fonction d'historique.
Une série de vidéos présente plusieurs des fonctionnalités (pas toutes) : Découverte de JPortal
Issue : JCMS-6059
Il est désormais possible de recommander un contenu même si il n'est pas dans un état visible. On peut par exemple recommander un contenu dans un état brouillon (p. ex. une page Wiki, un article, un savoir, ...)
Issue : JCMS-6318
Dans l'interface Envoyer une alerte, il est désormais possible d'envoyer une alerte à l'ensemble des membres connectés. L'administrateur peut prévenir l'ensemble des membres connectés sur la platforme (p. ex. en cas de maintenance).
Issue : JCMS-5637
Il est possible de changer de langue depuis la topbar, dans le menu Outil (accès restreint par ACL)
Issue : JCMS-6223
Dans l'interface de construction d'une requêten dans l'onglet Rédacteur, il est maintenant. possible de choisir l'option "Membre connecté".
Ceci permetde faire une PQF/Portlet Explorer qui liste les documents créés par l'utilisateurs (eg "Mes derniers documents")
Issue : JCMS-6313
La nouvelle page de recherche propose des facette d'affinement. L'ensemble de ces affinement est fait en Ajax. L'URL de la page ne reflete donc pas le filtrage courant.
Pour envoyer l'URL d'une page de recherche en intégrant l'ensemble des affinements par facette, un nouvel item, "Obtenir l'URL de cette page" a été ajouté au menu Action de la navbar.
Issue : JCMS-6371
Un support préliminaire des fuseaux horaires fait son apparition dans JPlatform pour permettre la saisie et l'affichage des dates et heures dans le fuseaux horaire de l'utilisateur.
Pour activer cette fonctionnalité, positionner la propriété channel.timezone.enabled: true
country.{code-pays}.default-timezone
de jcms.prop
, vous pouvez surcharger ces valeurs dans votre plugin.prop
de site ou dans le fichier custom.prop
Issue : JCMS-4865
Les DBMember peuvent être définis comme administrateurs d'espace de travail.
Évolutions d'API associées à ce changement :
Workspace.getAdministrators()
effectue désormais une ou plusieurs requete en base quand des DBMember ont été spécifiés sur l'espace,Workspace.getAdministrators(boolean)
pour récupérer les administrateurs avec ou sans les membres en base.Point d'attention requis dans le code lors d'une migration (dès lors que la fonctionnalité est utilisé et que des membres en base sont défini comme administrateur d'espace) :
Workspace.getAdministrators()
ne doit pas être invoqué avant l'initialisation de la base de donnée (i.e : lors du chargement du store). Workspace.getAdministrators(false)
peut être utilisé à la place.Workspace.getAdministrators(false)
peut renvoyer une liste contenant des élément null
Issue : JCMS-6331
Les DBMember peuvent être synchronisés avec un annuaire LDAP.
Évolutions associées à ce changement :
ldap.synchronize.create-dbmbr: false
(par défaut à false
)ldap.synchronize.import-all.sync-unprocessed-dbmbr: true
(par défaut à true
) : utilisé lors du processus d'import périodique de tous les membres du LDAP; lorsque défini à true, tous les membres LDAP en bases sont itérés les DBMember qui n'ont pas été synchroniser avec le LDAP, et déclencher leur désactivation.ldap.synchronize.sync-child-dbmbr: true
(par défaut à true
): utilisé lors de la synchronisation d'un groupe LDAP; lorsque défini à true tous les membres LDAP en base du groupe en cours de synchronisation sont itérés pour être mise à jour avec les nouvelles informations.Boolean ldapSynchro
: active ou désactive la synchronisation d'un membre avec le LDAP (par défaut à true, y compris pour les précédents DBMember)Date lastLdapSynchro
: date de dernière synchronisation avec le LDAP (null par défaut)DBMember
permet d'effectuer les actions LDAP suivantes (déjà disponible pour les membres JStore):
Limites :
info
) n'est pas supporté pour les DBMembers, il n'est donc pas synchronisé avec le LDAP.Issue : JCMS-6340
Issue : JCMS-5676
Jusqu'à présent, les 3 types de notification étaient nommées ainsi :
Problème : les contenus planifiés pour être publiés automatiquement n'étaient pas considérés comme des Créations et ne remontaient pas.
Désormais, le terme "Création" a été remplacé par "Publication" :
Les contenus qui ont été publiés dans la période passée, notamment par une planification (état "Planifié" + "Date de publication" dans le futur) seront désormais remontés.
Au niveau API, la constante NotificationManager.MUTATION_CREATE
a été dépréciée et remplacée par NotificationManager.MUTATION_PUBLISH
(sa valeur reste identique à MUTATION_CREATE
et vaut 0
)
Issue : JCMS-5738
Lorsque l'utilisateur ne filtre sur aucun type, il sera notifié et sur les Contenus (existant) et sur les Contenus utilisateur (nouveau).
Issue: JCMS-5967
Lorsque l'utilisateur ne filtre sur aucun type, et qu'une whitelistnotification.followed-types
est définie, seuls les contenus compatibles avec la whitelist seront notifiés.
Issue: JCMS-6405
Tous les types de contenus (compatibles) sont proposés, même ceux qui ne sont pas forcément utilisés, etc...
Améliorations :
Issue : JCMS-5182
Ce tag permet d'insérer une barre de defilement vertical au sein d'un bloc. Pour plus de détail consultez la documentation associée.
Issue : JCMS-6273
Si la requête de filtrage filtre sur un espace donné (dernier onglet), alors ce sera cet espace qui sera utilisé pour générer le lien de contribution. (doAddIcon.jspf). Le lien de contribution fonctionne ainsi au plus "plus proche" de la façon dont la PQF filtre les résultats.
Issue : JCMS-2530
Vous pouvez utiliser la fonctionjQuery.jalios.topbar.refreshApplicationBadges()
pour mettre à jour le badge affiché dans la topbar sur le menu des applications.
Issue : JCMS-6426
Quoi : Le virtual ID loggedMember
permet d'identifier le membre loggué. Il est ainsi possible de construire des requêtes qui référence cet utilisateur dynamique.
Exemple d'usage : cette requête affiche les contenus créé par l'utilisateur loggué : https://intranet-beta.jalios.net/front/query/query.jsp?mids=loggedMember
Issue : JCMS-6313
Il est maintenant possible de définir un portail principal sur les espaces de travail. Ce portail sera forcé pour l'affichage de toutes les publications de l'espace (Sauf si le membre connecté n'a pas accès au portail défini).
Issue : JCMS-5062
La classe PDFFormGenerator
permet de générer à la volée des fichiers PDF à partir d'un fichier PDF de type "formulaire" (ie. avec des champs à remplir) et d'une map nim du champ / valeur.
Cas d'usage : génération des certificats et des attestations de suivi dans JLearn 2.1
Exemple de code :
response.setHeader("Content-Disposition", "attachment; filename=myfile.pdf");
Map<String,Object> map = new HashMap<>();
map.put("attendee.name", mbr.getFullName());
map.put("attendee.organization", mbr.getOrganization());
// ...
PDFFormGenerator pdfGenerator = new PDFFormGenerator(templateFile);
pdfGenerator.addFieldMap(map);
pdfGenerator.generatePDF(response.getOutputStream());Markup
Issue : JCMS-6291
Par défaut, si un module A dépend d'un module B, le module A sera désactivé si le module B n'est pas présent ou si il n'est pas actif. Il est maintenant possible d'affiner ce contrôle en permettant a module A de fonctionner si le module B est présent mais désactivé. Pour cela, l'attribut active
peut être ajouté dans la balise <dependency>
du fichier plugin.xml
.
...
<dependencies>
<dependency name="PluginA" active="false"/>
</dependencies>
...
Issue : https://issues.jalios.com/browse/JCMS-6233
La méthode Publication.getDataImage()
rattrape désormais sur super.getDataImage()
.
Issue : JCMS-5900
Ajout du support des virtual ID pour les DBData
Issue : JCMS-6330
JPlatform 10 SP1 lève une limite sur les DBMember : ils peuvent désormais être déclarées dans les droits d'accès des publications (authorizedMemberSet).
Issue : JCMS-2679
Le comportement de la méthode JcmsUtil.getLanguageMap(propName)
a été revu. Elle retourne une map contenant la localisation pour une propriété donnée uniquement pour les langues ayant une localisation pour cette propriété (avant ca rattrapait sur la langue par défaut et donc la map contenait des valeur erronée.). Cette méthode construit la map à partir des langues déclarées.
La méthode JcmsUtil.getJcmsLanguageMap()
a été ajoutée afin de construire la map avec toutes les langues disponibles dans JPlatform (actuellement 16 langues)
Intégration d'un nouveau mode d'authentification, par token JWT (plus d'information sur JWT : )
Le handler d'authentification attend le token dans le header Authorization
avec comme préfixe bearer
. Ce token est alors validé en utilisant la liste des clés publiques déclarées dans l'entrepôt de clés déclarées dans les propriétés.
Ainsi il est possible, si la clé publique d'une application externe est présente dans l'entrepôt, d'autoriser un token JWT non généré par la plateforme à condition que le sujet soit un login valide de la plateforme et que le champ issuer du token soit le channel name.
Le handler d'authentification gère aussi les même restrictions que pour les authkey via les claims url
, prefixLength
, methods
et ipMask
.
La page des authKey a été étendue pour générer un token JWT utilisable pour l'authentification, en plus des authKeys.
Enfin l'API interne de gestion des tokens JWT peut générer de token avec des payloads personnalisés, permettant d'être utilisé pour d'autres usages.
Pour plus de détails, consulté la documentation Configuration de l'authentification par JWT.
Note : Issue : JCMS-6336
Les balises open graph sont maintenant générées dans le header de la page si la propriété seo.opengraph.enabled
est activée (Par défaut elle l'est).
Cela génère les balises suivantes :
og:title
(Le titre du portail / catégorie / publication)og:description
(La description du portail / catégorie / publication)og:image
(L'image de la publication / du JPortal)og:site_name
(Le nom du site channel name)og:url
(L'url canonical de la page)twitter:card
(La description de la page)og:image
og:image:type
og:image:width
og:image:height
og:video
og:video:type
og:audio
og:audio:type
Issue : JCMS-6339
Ajout du support de EventSource : JCMS-6303
Il s'agit de pousser de l'information entre le serveur et un client HTTP (JS par exemple) . Une page de debug existe avec un exemple simple d'usage.
Note : il s'agit actuellement de tuyauterie et son utilisation va suivre (exemple du module JDrive)
Pour plus de détails, consultez la documentation EventSource SSE
Information sur la norme associée :
Les apercus (thumbnail) peuvent être générés au format d'image PNG. Le format JPEG reste le format standard recommandé. Le format PNG peut être spécifié :
format="png"
du tag thumbnail,tag.thumbnail.format: png
. Cette configuration, n'est PAS recommandée. En effet, si l'utilisation du format PNG peut être bénéfique pour le rendu de certaines images (e.g. graphiques, illustration), son utilisation en standard alourdirait de façon conséquente le poids d'autres images (notamment les photos).Cas particulier : les aperçus d'URL (thumbshot) utilisent toujours le format d'image générée par l'outil de thumbshoter configuré dans JCMS (cf propriétés tag.thumbnail.thumbshot.*).
Issue JCMS-4762
Les headers HTTP suivants sont désormais positionnés en standard, pour toutes les requêtes prise en charge par JCMS :
X-Content-Type-Options: nosniff
- JCMS-5509 (déjà le cas en 10.0.0, mais uniquement pour les requete de téléchargement de document) https://www.owasp.org/index.php/List_of_useful_HTTP_headers#X-Content-Type-OptionsX-XSS-Protection: 1
- JCMS-6393 https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#xxxspCes headers peuvent être modifiés avec les propriétés suivantes. Une valeur vide permet de désactiver le header.
channel.global-http-header.X-Content-Type-Options:
channel.global-http-header.X-XSS-Protection:.properties
JPlatform minifie les fichiers JS et CSS dans le dossier WEB-INF/jcmswork
.
Problème : certaines librairies livrées par des plugins peuvent ne pas passer la minification et lever des erreurs au 1er démarrage.
Exemple d'erreurs rencontrées :
14:46:34,641 ERROR [JPlatform] [JsPacker] - line 354: offset 20: l'identifiant de propriété est incorrect
[...]
14:46:35,100 ERROR [JPlatform] [JsPacker] - line 1: offset 0: Compilation produced 19 syntax errors.
14:46:52,033 INFO [JPlatform] [JsPacker] - plugins/MomindumPlugin/js/lib/clipboard.js --> WEB-INF/jcmswork/min.js/plugins/MomindumPlugin/js/lib/clipboard.js
14:46:59,999 INFO [JPlatform] [JsPacker] - total : 2 s
Cette évolution permet d'ajouter des règles d'exclusion sur les fichiers à minifier.
Auparavant, il était juste possible de définir une regexp via une propriété unique du coeur (donc non surchargeable par les plugins) : channel.packer.minify-exclusion-regex
Format :
channel.packer.minify-exclusion-regex.{custom-suffix}: {custom-regexp}
Exemples :
# Pour un fichier donné
channel.packer.minify-exclusion-regex.momindum: plugins/MomindumPlugin/js/lib/clipboard.js
# Pour 2 fichiers donnés
channel.packer.minify-exclusion-regex.momindum: plugins/MomindumPlugin/js/lib/clipboard.js|plugins/MomindumPlugin/js/lib/other-lib.js
# Pour un ensemble de fichier "*.js"
channel.packer.minify-exclusion-regex.momindum: plugins/MomindumPlugin/js/\\..*\\.js
Issue JCMS-6329
Des droits de lectures peuvent être mis en oeuvre sur les membres pour limiter leur visibilité. En raison des implications de performance des modifications associées et de la couverture fonctionelle pour l'instant limitée dans les modules, cette fonctionnalité est désactivée par défaut.
Pour évaluer cette nouvelle fonctionnalité :
Activitez la fonctionnalité avec la propriété member.read-right.enabled: true
Développez votre politique de droit via la nouvelle méthode des RightPolicyFilter
:
public boolean canBeReadBy(boolean isAuthorized, Member mbrToRead, Member mbrReading)
A noter : si une politique de droit spécifique est mis en place, les règles suivantes ne peuvent jamais être surchargées par RPF :
Issue : JCMS-4784
Ce hook permet de modifier les items de la recherche instantanée disponible dans la topbar.
Actuellement on a :
Ces items sont sous formes de propriété :
channel.topbar.search.search-component.workspace: jcore/autocomplete/acTopbarSearch_workspace.jsp
channel.topbar.search.search-component.workspace.index: 1
channel.topbar.search.search-component.publication: jcore/autocomplete/acTopbarSearch_publication.jsp
channel.topbar.search.search-component.publication.index: 2
channel.topbar.search.search-component.member: jcore/autocomplete/acTopbarSearch_member.jsp
channel.topbar.search.search-component.member.index: 3
Il est possible de surcharger une des propriétés, ou vider une des propriétés pour utiliser son propre bloc de résultats.
L'index sert à définir l'ordre d'affichage des colonnes en partant de la gauche.
Le texte recherché est disponible en récupérant le Handler via le request attribute suivant et en appelant la méthode handler.getAutocomplete()
:
TopbarSearchAutocompleteHandler handler = (TopbarSearchAutocompleteHandler) request.getAttribute("jcms.topbar.search.formHandler");
Issue : JCMS-6333
Afin d'éviter des explosions mémoire lors de la lecture de la table DBEventLog
, le nombre d'enregistrement traité à chaque passe est désormais limités. Le paramétrage est par défaut à 10000 et peut etre paramétré par la propriété dbeventlog.query-limit
.
Issue : JCMS-6374
Apache HttpComponents 4.x La librairie Apache HttpComponents est inclus dans le coeur à partir de JPlatform 10 SP1 (elle était préalablement fournir par le module Google Drive si celui était installé)
La librairie Apache Commons HttpClient 3.x est encore présente mais sera retirée dès que possible (cf JCMS-6435)
La librairie Google Protobuf a été mise à jour.
Issue : JCMS-6433
TinyMCE 4.7.4 https://www.tinymce.com/docs/changelog/
Issue : JCMS-6376
Moment 2.20.1 et Moment Timezone 0.5.14-2017c
Issue : JCMS-6425