# Journal des modifications

# 2023.1 Guide de migrations

# Stack technique

Les dépendances systèmes ont été mise à jour avec les versions suivantes :

  • PHP 8.1 - 8.2
  • Postgresql 13.9, 14 et 15

# Support navigateur

Le support navigateur est toujours le suivant :

  • Chrome : deux dernières versions stables
  • Edge : deux dernières versions stables
  • Firefox : deux dernières versions stables
  • Firefox ESR : dernière version stable

Les OS supportés sont : windows, Linux et MacOs

# Migration vers PHP 8.2

La montée de version vers PHP 8.2 s’accompagne de fonctions dépréciées et de vérifications plus fortes sur les propriétés.

En particulier :

  • Les fonctions utf8_encode et utf8_decode sont dépréciées.
  • Pour utiliser une propriété d'une classe, il faut qu'elle soit obligatoirement déclarée dans la classe.

L’ensemble des modifications PHP 8.2 sont disponibles ici.

Bien qu’ils n’impactent pas l’exécution du code, il est recommandé de corriger ces avertissements de dépréciation, car ils seront considérés comme des erreurs à partir de la version 9 de PHP.

# Vue 2.7

Le support de vue passe en vue 2.7 ce qui est normalement sans impact sur les applications existantes

# Kendo 2023

Le passage en kendo 2023 est sans impact majeur si votre version précédente est une 2022. Sinon, il vous faut appliquer les méthodes de changement de la 2022.

# Sécurité et CSP

La version 2023 est la première à mettre en place une CSP contraignante. Celle-ci n'est activée que pour les nouvelles installation mais elle peut aussi manuellement être activée sur une application existante. Dans ce cas, pour la partie kendo un guide est à votre disposition.

# Outils de build

Nous recommandons maintenant d'utiliser Vite comme outil de build dans le cadre de vos applications.

# 2023.1 Nouveautés

# Extended Smart Field et extended Smart Field en édition

Les Smart Fields étendus ont été entièrement reconçu et sont maintenant animés par un système de file et de worker.
Pour plus d'information : documentation détaillée des Smart Fields étendus.

# Dashboard

Un nouveau module de dashboard est à votre disposition. Il vous permet de construire rapidement et efficacement des tableau de bord.

Celui ci est aussi animé par le système de file et de worker.

Pour plus d'information : documentation des tableaux de bord

# Sécurité

Un nouveau panneau de l'administration dédié à la sécurité fait son apparition.
Celui-ci vous permet de gérer les points suivants :

  • la liste des utilisateurs pouvant devenir super administrateur,
  • les logs de promotion en super administrateur,
  • une liste de header http permettant de durcir l'éxécution du code et l'utilisation du https.

Pour plus d'information : header de sécurité

# 2022.1 Guide de migrations

# Stack technique

Les dépendances systèmes ont été mise à jour avec les versions suivantes :

  • PHP 8 et 8.1
  • Postgresql 12.9, 13 et 14

# Support navigateur

Le support navigateur est toujours le suivant :

  • Chrome : deux dernières versions stables
  • Edge : deux dernières versions stables
  • Firefox : deux dernières versions stables
  • Firefox ESR : dernière version stable

Les OS supportés sont : windows, Linux et MacOs

# Migration vers PHP 8.1

La montée de version vers PHP 8.1 s’accompagne de fonctions dépréciées et de vérifications plus fortes au niveau de la cohérence des types manipulés.

En particulier :

  • Un argument null passé à une fonction attendant un type non nul lèvera un avertissement.
  • La surcharge d’une fonction sans type de sortie lèvera un avertissement lors de son appel.
  • Les fonctions pg_escape_string, pg_escape_identifier et pg_escape_literal demandent explicitement l’objet PgSql\Connection en premier argument. En conséquence, nous fournissons désormais les fonctions \Anakeen\Core\Utils\Postgres::escapeString, \Anakeen\Core\Utils\Postgres::escapeIdentifier et \Anakeen\Core\Utils\Postgres::escapeLiteral qui fournit le même comportement.

L’ensemble des modifications PHP 8.1 sont disponibles ici.

Bien qu’ils n’impactent pas l’execution du code, il est recommandé de corriger ces avertissements de dépréciation, car ils seront considérés comme des erreurs à partir de la version 9 de PHP.

De plus il est important de faire attention à la locale utilisée :

https://www.php.net/manual/en/migration80.incompatible.php#:~:text=The%20default%20locale,from%20the%20default.

Afin de retrouver le même comportement (utiliser la locale de l'environnement) il faut :

<?php
setlocale(LC_ALL, "");

# Migration vers Kendo UI 2022

La partie interface utilisateur a été modifiée pour prendre en compte les nouveautés de kendo 2022.
Si vous avez modifié les interfaces ou créé vos propres interfaces, vous devez vous aussi prendre en compte cette nouvelle version.

Vous avez ici un post de blog qui décrit les modifications et leur motivation.

Le guide de migration est ici.

# Migration vers Bootstrap 5

La partie utilisateur a été modifiée pour prendre en compte la nouvelle version de Bootstrap. Si vous avez modifié les interfaces ou créé vos propres interfaces, vous devez vous aussi prendre en compte cette nouvelle version.

Le guide de migration est ici

# Migration du module de Tranformation-serveur

  • Stopper le serveur de transformation
  • Désactiver son redémarrage automatique
  • Déplacer la configuration du serveur TE dans un dossier de sauvegarde

Exemple:

  mkdir /tmp/backup
  mv /opt/transformation-server/ /tmp/backup

TIP

Il est possible de voir certaines parties de la configuration propre au système d'exploitation dans le dossier de sauvegarde (dans l'exemple : /tmp/backup).

  • Une fois que le serveur de transformation fonctionne avec la nouvelle version, il reste à supprimer le dossier de sauvegarde.

# 2022.1 Nouveautés

# PSALM

Toutes nos classes ont été analysées et annotées pour supporter PSALM au niveau 5.
Vous pouvez donc l'utiliser au sein de vos projets.

# Vue 3

Tous les composants de notre bibliothèque d'interface sont maintenant compilés pour vue2 et pour vue3.
Rendez vous dans le chapitre sur les composants pour en savoir plus.

# 2021.1 Modifications

# Configuration : Les profils et rôles standards

  • Afin d'ajouter de la granularité dans la gestion des droits, les profils et rôles standards de la plateforme ont été modifiés / ajoutés.
  • Le groupe Administration(gadmin) possède désormais tous les rôles de la plateforme, il n'est donc plus référencé directement dans les profils.

Dû au fait que le groupe Administration(gadmin) intègre les rôles, aucune migration n'est nécessaire.

Pour plus d'information sur les profils, se référer à : Documentation.

# Nouveaux profils et rôles standards

Titre de profil Nom logique profil Smart Structure associée Type profil Droit
Profils de création de dossier PRF_DIR_CREATION DIR PFAM
  • icreate: system_administrator
  • create: system_administrator
  • view*: system_administrator
  • edit*: system_administrator
Administration - Access all PRF_ADMIN_EDIT PDOC
  • view: system_administrator
  • edit: system_administrator
Création des comptes PRF_ACCOUNTS_CREATION IUSER, IGROUP PFAM
  • icreate: accounts_manager_role
  • create: accounts_manager_role
  • view*: accounts_manager_role, all
  • edit*: accounts_manager_role, all
User itself PRF_IUSER_OWNER IUSER PDOC
  • view: accounts_manager_role, all, field: us_meid
  • edit: accounts_manager_role, field: us_meid
  • delete: accounts_manager_role, field: us_meid
Profils de création des modèles de mails PRF_MAILTEMPLATE_CREATION MAILTEMPLATE PFAM
  • icreate: mail_template_manager_role
  • create: mail_template_manager_role
  • view*: mail_template_manager_role
  • edit*: mail_template_manager_role
Profils d'accès des modèles de mails PRF_MAILTEMPLATE_ACCESS MAILTEMPLATE PDOC
  • view: system_administrator, mail_template_manager_role, all
  • edit: system_administrator, mail_template_manager_role
  • delete: system_administrator, mail_template_manager_role
Accès des masques de saisie et des contrôles de vues PRF_RENDERUI_CREATION MASK, CVDOC PFAM
  • icreate: renderui_manager_role
  • create: renderui_manager_role
  • view*: renderui_manager_role
  • edit*: renderui_manager_role
Profils d'accès des masques de saisies PRF_MASK_ACCESS MASK PDOC
  • view: renderui_manager_role, all
  • edit: renderui_manager_role
  • delete: accounts_manager_role
Profils d'accès des contrôles de vues PRF_CVDOC_ACCESS CVDOC PDOC
  • view: renderui_manager_role, all
  • edit: renderui_manager_role
Profils de création des tâches programmées PRF_TASK_CREATION TASK PFAM
  • icreate: scheduling_manager_role
  • create: scheduling_manager_role
  • view*: scheduling_manager_role
  • edit*: scheduling_manager_role
Administration des tâches et minuteurs PRF_TASK_ACCESS TASK PDOC
  • view: scheduling_manager_role
  • edit: scheduling_manager_role
  • delete: scheduling_manager_role
Profils de création des rôles PRF_ROLE_CREATION ROLE, BASE PFAM
  • icreate: system_administrator
  • create: system_administrator
  • view*: system_administrator
  • edit*: system_administrator
Profils d'accès pour la structure BASE PRF_BASE_ACCESS BASE PDOC
  • view: system_administrator, all
  • edit: accounts_manager_role
Profils d'accès des rôles PRF_ROLE_ACCESS ROLE PDOC
  • view: system_administrator, accounts_manager_role, all
  • edit: accounts_manager_role
  • delete: accounts_manager_role
Création des descriptions de formulaire PRF_ADMIN_RENDERDESCRIPTION_CREATION RENDERDESCRIPTION PFAM
  • icreate: renderdescription_manager_role
  • create: renderdescription_manager_role
  • view*: renderdescription_manager_role
  • edit*: renderdescription_manager_role
Administration des descriptions de formulaire PRF_RENDERDESCRIPTION_ACCESS RENDERDESCRIPTION PDOC
  • view: renderdescription_manager_role, all
  • edit: renderdescription_manager_role
  • delete: renderdescription_manager_role
Profil recherche PRF_SEARCHES SEARCH, MSEARCH, DSEARCH, REPORT PFAM
  • icreate: search_manager_role, all
  • create: search_manager_role, all
  • view*: search_manager_role, all
  • edit*: search_manager_role
Profils de création document recherche PRF_SSEARCH_CREATION SSEARCH PFAM
  • icreate: system_administrator, search_manager_role
  • create: system_administrator, search_manager_role
  • view*: system_administrator, search_manager_role
  • edit*: system_administrator, search_manager_role
Profils de création de profil PRF_PROFILE_CREATION PDOC, PDIR, PSEARCH, PFAM, FIELDACCESSLAYER, FIELDACCESSLAYERLIST PFAM
  • icreate: security_administrator
  • create: security_administrator
  • view*: security_administrator, all
  • edit*: security_administrator
Profils d'accès des profils PRF_PROFILE_ACCESS PDOC, PDIR, PSEARCH, PFAM, FIELDACCESSLAYER PDOC
  • view: security_administrator
  • edit: security_administrator
Profil mail PRF_MAIL MAIL PFAM
  • icreate: all
  • create: all
  • view*: all
  • edit*: all
Profil document mail PRF_DOC_MAIL MAIL PDOC
  • view: all
  • edit: all
  • delete: all
Profil sentmessage PRF_SENTMESSAGE SENTMESSAGE PFAM
  • create: all
  • view*: all
  • edit*: all
Profil document sentmessage PRF_DOC_SENTMESSAGE SENTMESSAGE PDOC
  • view: all
  • edit: all
  • delete: all
Profil Structure FILE PRF_FILE_STRUCT FILE, IMAGE PFAM
  • icreate: file_manager_role, all
  • create: file_manager_role, all
  • view*: file_manager_role, all
  • edit*: file_manager_role
Profil FILE PRF_FILE_ACCESS FILE, IMAGE PDOC
  • view: file_manager_role, all
  • edit: file_manager_role, all
  • delete: file_manager_role
Profils de création des minuteurs PRF_TIMER_CREATION TIMER PFAM
  • icreate: scheduling_manager_role
  • create: scheduling_manager_role
  • view*: scheduling_manager_role
  • edit*: scheduling_manager_role
Profils d'accès des minuteurs PRF_TIMER_ACCESS TIMER PDOC
  • view: scheduling_manager_role, all
  • edit: scheduling_manager_role
  • delete: scheduling_manager_role
Profils de création des rôles PRF_WDOC_CREATION WDOC PFAM
  • icreate: system_administrator
  • create: system_administrator
  • view*: system_administrator
  • edit*: system_administrator
Profils d'accès des cycles de vie PRF_WDOC_ACCESS WDOC PDOC
  • view: workflow_manager_role, all
  • edit: workflow_manager_role
  • delete: accounts_manager_role
Profil document recherche PRF_DOC_SEARCHES SEARCH, MSEARCH, DSEARCH, SSEARCH, REPORT PSEARCH
  • view: search_manager_role, se_author, all
  • edit: search_manager_role, se_author
  • delete: search_manager_role, se_author, se_author
  • execute: search_manager_role, se_author
Modification administrateur PRF_ADMIN_IGROUP IGROUP PDIR
  • view: accounts_manager_role
  • edit: accounts_manager_role
  • delete: accounts_manager_role
  • open: accounts_manager_role
  • modify: accounts_manager_role
Profils de création pour les groupes GROUP GROUP PDOC
  • view: system_administrator, all
  • edit: system_administrator
Profils d'accès document group PRF_GROUP_ACCESS GROUP PDOC
  • view: system_administrator, all
  • edit: system_administrator

*Droit appartenant à la Smart Structure.

# Anciens profils et rôles standards

Titre de profil Nom profil Smart Structure associée Type profil Droit
Création administrateur PRF_ADMIN_CREATION FIELDACCESSLAYER, FIELDACCESSLAYER, IGROUP, MAILTEMPLATE,
MASK, CVDOC, ROLE, TASK, DIR, BASE, SSEARCH, TIMER, WDOC
PFAM
  • icreate: system_administrator, gadmin
  • create: system_administrator, gadmin
  • view*: all
Création des descriptions de formulaire PRF_ADMIN_RENDERDESCRIPTION_CREATION RENDERDESCRIPTION PFAM
  • icreate: system_administrator, renderdescription_manager_role, gadmin
  • create: system_administrator, renderdescription_manager_role, gadmin
  • view*: all
Création des comptes PRF_ACCOUNTS_CREATION IUSER PFAM
  • icreate: system_administrator, accounts_manager_role, gadmin
  • create: system_administrator, accounts_manager_role, gadmin
  • view*: system_administrator, accounts_manager_role, all
Profil recherche PRF_SEARCHES SEARCH, MSEARCH, DSEARCH, REPORT PFAM
  • icreate: all
  • create: all
  • view*: all
  • edit*: gadmin
Profil profil PRF_PROFILE PDOC, PDIR, PSEARCH, PFAM PFAM
  • icreate: system_administrator
  • create: system_administrator
  • view*: all
  • edit*: gadmin
Profil mail PRF_MAIL MAIL PFAM
  • icreate: all
  • create: all
  • view*: all
  • edit*: gadmin
Profil sentmessage PRF_SENTMESSAGE SENTMESSAGE PFAM
  • create: all
  • view*: all
  • edit*: gadmin
Profil Structure FILE PRF_FILE_STRUCT FILE, IMAGE PFAM
  • icreate: all
  • create: all
  • view*: all
  • edit*: gadmin
Profil document recherche PRF_DOC_SEARCHES SEARCH, MSEARCH, DSEARCH, SSEARCH, REPORT PSEARCH
  • view: all, field: se_author
  • edit: gadmin, field: se_author
  • delete: field: se_author
  • execute: all, field: se_author
Modification administrateur PRF_ADMIN_IGROUP IGROUP PDIR
  • view: system_administrator, accounts_manager_role, all
  • edit: system_administrator, accounts_manager_role, gadmin
  • delete: system_administrator, accounts_manager_role, gadmin
  • open: system_administrator, accounts_manager_role, gadmin
  • modify: system_administrator, accounts_manager_role, gadmin
Administration - Access all PRF_ADMIN_EDIT PDOC
  • view: system_administrator, all
  • edit: system_administrator, gadmin
  • delete: all
Administration PRF_ADMIN_ACCESS FIELDACCESSLAYER, MAILTEMPLATE, MASK, ROLE PDOC
  • view: system_administrator, gadmin
  • edit: system_administrator, gadmin
  • delete: system_administrator, gadmin
Administration des tâches et minuteurs PRF_TASK_ACCESS TASK, TIMER PDOC
  • view: system_administrator, scheduling_manager_role, gadmin
  • edit: system_administrator, scheduling_manager_role, gadmin
  • delete: system_administrator, gadmin
Administration des descriptions de formulaire PRF_RENDERDESCRIPTION_ACCESS RENDERDESCRIPTION PDOC
  • view: system_administrator, renderdescription_manager_role, gadmin
  • edit: system_administrator, renderdescription_manager_role, gadmin
  • delete: system_administrator, gadmin
User itself PRF_IUSER_OWNER IUSER PDOC
  • view: system_administrator, accounts_manager_role, all, gadmin, field: us_meid
  • edit: system_administrator, accounts_manager_role, gadmin, field: us_meid
  • delete: system_administrator, accounts_manager_role, gadmin
Profil document mail PRF_DOC_MAIL MAIL PDOC
  • view: all
  • edit: all
  • delete: all
Profil document sentmessage PRF_DOC_SENTMESSAGE SENTMESSAGE PDOC
  • view: all
  • edit: all
  • delete: all
Profil FILE PRF_FILE_ACCESS FILE, IMAGE PDOC
  • view: all
  • edit: all
  • delete: gadmin

*Droit appartenant à la Smart Structure.

# Configuration : Changement de procédure de génération du Etag

L'algorithme de hachage utilisé afin de générer le Etag est le md4 au lieu de sha1.

Lien vers la documentation

# Configuration : Ajout d'une balise utilisateur courant dans les modèles de mails

La balise current-user-email a été rajoutée au modèle de mail afin de pouvoir explicitement utiliser l'adresse mail de l'utilisateur connecté.

Lien vers la documentation

# Configuration : Syntaxe d'un script de migration

Il faut utiliser un NameSpace dans les balises Xml.

La balise ol devient logical-operator.

Lien vers la documentation

# Configuration : Nom des fichiers et méthodes dans un script de migration

Il est désormais possible de mettre des chiffres dans les noms des fichiers et méthodes appelés lors d'un script de migration.







 


 


 




<?xml version="1.0"?>
<migration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="migrationRules.xsd">
    <action id="migrationTest"
            label="test migration script with numbers in the class and method name">
        <condition>
            <php-assert-false label="Verify baseElem has not test tag value at true" callable="Dcp\Pu\TestMigrationScriptCallable213::returnIfFoundSE213()"/>
        </condition>
        <process>
            <php label="Set tag test value at true" callable="Dcp\Pu\TestMigrationScriptCallable213::setTag213()"/>
        </process>
        <check>
            <php-assert-true label="Verify baseElem has test tag value at true" callable="Dcp\Pu\TestMigrationScriptCallable213::returnIfFoundSE213()"/>
        </check>
    </action>
</migration>

# Configuration : Ajout d'une gestion d'erreur sur les xml de routes

Si dans les fichiers routes.xml plusieurs balises de type :

  • routes
  • accesses
  • middlewares
  • parameters

sont présentes, une erreur est levée lors de l'import.

# Interface : Nouvelle interface de gestion des groupes et des utilisateurs

Il y a désormais deux nouvelles entrées dans le centre d'administration.

# Gestion des utilisateurs

Cette entrée sert à la gestion des utilisateurs.

Il est possible d'en créer, de leur donner des rôles et de modifier les informations associées.

Pour plus d'information se référer à la documentation de l'interface utilisateur

# Gestion des groupes

Cette entrée sert à la gestion des groupes.

Il est possible d'en créer, de leur donner des rôles et de modifier les informations associées.

Pour plus d'information se référer à la documentation de l'interface des groupes

# JS : Changement de retour de la méthode AnkSmartElement.getValue() pour les Smart Field de type array

clientname society
Client 1 Entreprise 1
Client 2 Entreprise 2
Client 3 Entreprise 3
const arrayValue = controller.getValue("array_other_clients");

console.log(arrayValue);

# Nouveau retour

Le getValue retourne les valeurs du tableau par ligne.

Output :

[
  {
    clientname: {value: "Client 1", displayValue: "Client 1"}
    society: {value: "Entreprise 1", displayValue: "Entreprise 1"}
  },
  {
    clientname: {value: "Client 2", displayValue: "Client 2"}
    society: {value: "Entreprise 2", displayValue: "Entreprise 2"}
  },
  {
    clientname: {value: "Client 3", displayValue: "Client 3"}
    society: {value: "Entreprise 3", displayValue: "Entreprise 3"}
  }
]

# Ancien retour

Le retour du getValue retournait les valeurs du tableau par colonne.

Output :

[
  {
    bill_clientname: {value: "Client 1", displayValue: "Client 1"}
    bill_clientname: {value: "Client 2", displayValue: "Client 2"}
    bill_clientname: {value: "Client 3", displayValue: "Client 3"}
  },
  {
    bill_society: {value: "Entreprise 1", displayValue: "Entreprise 1"}
    bill_society: {value: "Entreprise 2", displayValue: "Entreprise 2"}
    bill_society: {value: "Entreprise 3", displayValue: "Entreprise 3"}
  }
]

Pour plus d'information sur le getValue, se référer à : Documentation.

# JS : Changement de fonctionnement du beforeSave

Le beforeSave enregistre toutes les données du smart element, en plus de celles modifiées.

Lien vers la documentation

# JS : Ajout d'une option au SmartElementController.hideSmartField

Il est désormais possible de cacher une cellule d'un tableau avec la méthode hideSmartField. Pour cela il suffit de rajouter en deuxième argument de la méthode l'index à cacher.

exemple:

const index = 2;

controller.hideSmartField("nom_du_field", index)

WARNING

  • Si l'index n'est pas valide ou
  • Si le nom field utilisé n'est pas un tableau,

la méthode throw une Exception

# JS : Ajout d'une option au SmartElementController.showSmartField

Il est désormais possible de ré-afficher une cellule d'un tableau avec la méthode showSmartField. Pour cela il suffit de rajouter en deuxième argument de la méthode l'index à ré-afficher.

Exemple:

const index = 2;

controller.showSmartField("nom_du_field", index)

WARNING

  • Si l'index n'est pas valide ou
  • Si le nom field utilisé n'est pas un tableau,

la méthode throw une Exception

# JS : La pop-up de confirmation dcpConfirm

Si dans la clef messages une entrée extraMessage est ajoutée, alors un troisième bouton sur mis sur la pop-up. Il deviendra alors le bouton principal et donc sera celui qui sera affiché en bleu.

confirmWindow = $("body").dcpConfirm({
  title: i18n.___("Confirm close document", "ddui"),
  width: "65rem",
  height: "20rem",
  maxWidth: $(window).width(),
  messages: {
    okMessage: "Poursuivre les modifications",
    cancelMessage: "Abandonner les modifications et fermer",
    extraMessage: "Enregistrer et fermer",
    htmlMessage: "Vous avez effectué une ou plusieurs modifications sur le formulaire `Titre du formulaire`",
    textMessage: ""
  }

ImgDcpConfirm

# JS : Ajout de la modification d'un field-enum dynamiquement

Il est possible de modifier dynamiquement les choix disponibles sur un field-enum par rapport aux valeurs des autres fields sur la même structure.

Evènement smartFieldEnumResponse
Evènement smartFieldEnumSearch
Évènement smartFieldEnumSelect
Méthode permettant de définir une nouvelle liste d'énuméré sur le Smart Field Enum

# Typescript

Amélioration du support TypeScript.refs #666, #667, #1089

# JS : Ajout d'un switch pour les smart field de type enum

Une option de rendu a été ajouté permettant de représenter un énumeré simple a l'aide d'un bouton switch.

Pour plus d'information se référer a la Documentation

Quand $attrid ne désigne pas un smart field ou que le smart field n'est pas de type fichier (file ou image) la fonction est interrompue et une exception est levée.



 

$se = SEManager::getDocument()
$link = $se->getFileLink('smart_field_vide'); //link vaut ""
$link = $se->getFileLink('smart_field_non_existant'); //une exception de type … est levée    /**

Quand $attrid ne désigne pas un smart field ou que le smart field n'est pas de type fichier (file ou image) la fonction continuait son exécution et retournait une chaine de caractère vide.



 

$se = SEManager::getDocument()
$link = $se->getFileLink('smart_field_vide'); //link vaut ""
$link = $se->getFileLink('smart_field_non_existant'); //link valait ""

# PHP : Changement de signature de la méthode Anakeen\Core\Account::updateUser()

Les paramètres concernant la durée de validité des mots de passe ont été supprimés.

La méthode Anakeen\Core\Account::updateUser() a 2 arguments en moins, l'expiration et le nombre de jours de validité du mot de passe. Il faut corriger les appels a cette méthode.

# Nouvelle signature

   /**
     * update user from IUSER document
     *
     * @param int $fid document id
     * @param string $lname last name
     * @param string $fname first name
     * @param string $login login
     * @param string $status 'A' (Activate) , 'D' (Desactivated)
     * @param string $pwd1 password one
     * @param string $pwd2 password two
     * @param string $extmail mail address
     * @param array $roles
     * @param int $substitute system substitute id
     *
     * @return string error message
     */
    public function updateUser(
        $fid,
        $lname,
        $fname,
        $login,
        $status,
        $pwd1,
        $pwd2,
        $extmail = '',
        array $roles = [-1],
        $substitute = -1
    )

# Ancienne signature







 
 














 
 









    /**
     * update user from IUSER document
     *
     * @param int $fid document id
     * @param string $lname last name
     * @param string $fname first name
     * @param string $deprecatedExpires expiration date
     * @param int $deprecatedPassdelay password delay
     * @param string $login login
     * @param string $status 'A' (Activate) , 'D' (Desactivated)
     * @param string $pwd1 password one
     * @param string $pwd2 password two
     * @param string $extmail mail address
     * @param array $roles
     * @param int $substitute system substitute id
     *
     * @return string error message
     */
    public function updateUser(
        $fid,
        $lname,
        $fname,
        $deprecatedExpires,
        $deprecatedPassdelay,
        $login,
        $status,
        $pwd1,
        $pwd2,
        $extmail = '',
        array $roles = [-1],
        $substitute = -1
    )

# PHP : Ajout de la méthode \Anakeen\Ui\BaseRenderOptions::addHtmlClass

Cette option permet de rajouter des classes HTML personnalisées à la racine de la DOM du Smart Field ou du Smart Element.

Lien vers la documentation

# PHP : Ajout de la méthode \Anakeen\Ui\BaseRenderOptions::removeHtmlClass

Cette option permet de retirer une classe HTML personnalisées préalablement ajoutées par la méthode \Anakeen\Ui\BaseRenderOptions::addHtmlClass.

Lien vers la documentation

# PHP : Ajout de la méthode \Anakeen\Ui\BaseRenderOptions::setHtmlAttribute

Cette option permet de définir un attribut HTML personnalisé à la racine de la DOM du Smart Element ou du Smart Field.

Lien vers la documentation

# PHP : Ajout de la classe \Anakeen\Search\Filters\AndOperator

La classe AndOperator permet d'utiliser l'opérateur logique "AND" sur plusieurs filtres.

Lien vers la documentation

# PHP : Ajout d'un filtre de type file

Lorsqu'une grille filtrable présente une colonne sur un champ de type file, il est désormais possible de filtrer les résultats par rapport au fichier.

# Librairie externe : Versions de PostgreSQL supportées

Les versions de PostgreSQL supportées sont : 11 ≤ version ≤ 13.

# Ajout de l'extension intarray dans PostgreSQL

Ajout de cette extension pour des améliorations de performance

# Ajustement des filtres de tableau de type int

Utilisation des fonctions internes de PostgreSQL pour les filtres sur le int[].

L'extension intarray ajoute des opérateurs sur les int[] qui ne sont pas compatibles avec des tableaux d'entier contenant des valeurs nulles.

Il est donc nécessaire dans certain cas, notamment les tableaux d'entier, de ne pas utiliser ces opérateurs spécifiques, mais les opérateurs génériques qui acceptent de traiter les valeurs nulles.

# Librairie externe : Versions de PHP supportées

Les versions de PHP supportées sont : 7.4 ≤ version ≤ 8.0.

Lien vers le journal de modification de PHP

# Librairie externe : Version de Kendo UI utilisée

La version de Kendo UI sur la plateforme est montée en version 2021.2.616.

Lien vers le journal de modification de kendo UI

# Librairie externe : Version de JQuery utilisée

La version de JQuery sur la plateforme est montée en version 3.5.

Lien vers le journal de modification de JQuery

# Configuration : Nouvelle représentation des groupes et utilisateurs

Les représentations des formulaires des Smart Structures IUSER et IGROUP ont été modifiées.

# Nouvelle représentation de la Smart Structure IUSER

Img

# Ancienne représentation de la Smart Structure IUSER

Img

# Nouvelle représentation de la Smart Structure IGROUP

Img

# Ancienne représentation de la Smart Structure IGROUP

Img

# Module test-tools

Suppression du module test-tools.

# Configuration : Installation et mise à jour de modules

La meta-commande @anakeen/anakeen-cli compose a été dépréciée. Ainsi les commandes @anakeen/anakeen-cli install et @anakeen/anakeen-cli upgrade ont été remplacées respectivement par les commandes @anakeen/anakeen-platform install et @anakeen/anakeen-platform update.

Pour plus de détails, vous pouvez consulter la documentation de l'outil en ligne de command Anakeen-Platform.

# Ajout d'une option autoScrollTop

Une option qui permet de définir si l'on défile automatiquement en haut d'une SmartGrid lors de tout changement sur celle-ci.

Pour plus d'information se référer à la Documentation

# 2021.1 Guide de migrations

# Configuration : Les profils et rôles standards

# Suppression de droits sur les profils de Smart Structure

Les rôles / groupes suivants ont été supprimés sur les profils des Smart Structure:

PRF_WDOC_CREATION PRF_SENTMESSAGE PRF_TIMER_CREATION PRF_ADMIN_RENDERDESCRIPTION_CREATION PRF_ACCOUNTS_CREATION PRF_DIR_CREATION
view all all all all system_administrator all
create system_administrator system_administrator
icreate system_administrator system_administrator

# Suppression de droits sur les profils de Smart Element

Les rôles / groupes suivants qui ont été supprimés sur les profils des Smart élément:

PRF_TASK_ACCESS PRF_RENDERDESCRIPTION_ACCESS PRF_IUSER_OWNER PRF_ADMIN_IGROUP PRF_FILE_ACCESS PRF_DOC_SENTMESSAGE
view system_administrator system_administrator system_administrator system_administrator all
edit system_administrator system_administrator system_administrator system_administrator system_administrator all
delete system_administrator system_administrator system_administrator system_administrator all
open system_administrator
modify system_administrator

Pour plus d’informations sur la modification liée aux rôles et aux profils, se référer à : Journal de modification.

# Composant VueJS SmartElementGrid : Modification de l’exportation au format XLSX

L’exportation de données de la grille de Smart Element a été remaniée et a vu l’apparition d’une nouvelle propriété exportOptions. En retour l’ancienne propriété defaultExportButton a été dépréciée au profit de exportOptions.

Enfin, la signature de la méthode export a été modifiée et prend en entrée un objet d’options et une fonction qui détermine le nom du fichier. Pour plus d’informations, se référer à la documentation de la propriété exportOptions et de la méthode export de la grille.

# Représentation des Smart Fields : Changement des règles CSS entourant les champs portant des descriptions

Afin de respecter le positionnement de chaque option, les règles CSS des descriptions détaillées ont été retravaillées. Ainsi la balise englobant une description a été passée en flex.

# JS : Changement de retour de la méthode AnkSmartElement.getValue()

Le retour de la méthode ne se parcourt plus de la même manière.

Pour plus d’information sur le getValue, se référer à : Journal de modification.

# JS : Changement de signature de la méthode AnkSmartElement.setValue()

La méthode du contrôleur de Smart Element setValue a été remaniée afin de pouvoir modifier les valeurs pour des colonnes de tableaux qui ont l’option "multiple". En conséquence, la méthode a vu l’ajout d’un objet options dans sa signature. De plus, l’utilisation interne d’un index a été dépréciée au profit de l’utilisation du nouvel objet options. Enfin, une vérification sur la cohérence des options d’index a été rajoutée.

Nous vous conseillons donc de privilégier des appels utilisant l’objet options. Par exemple :

Utilisation de la méthode setValue en version 2020

scopedController.setValue("myColumn", { value: "my value on the third row", index: 2 });

Utilisation de la méthode setValue en version 2021

scopedController.setValue("myColumn", { value: "my value on the third row" }, { index: 2 });

Pour plus d’informations, vous pouvez vous référer à la documentation de la méthode setValue.

Vous devez modifier la gestion d’erreur de cette fonction. En effet, il faut entourer l’appel de cette fonction avec un "try" "catch".

En cas d’erreur, la fonction déclenche une exception Anakeen.



 

 


 

    $se = SEManager::getDocument()

    try {
        $imgUrl = $doc->getFileLink("field_not_Exist");
    } catch (\Anakeen\Exception $err) {
      // Dans ce cas le smart field n’existe pas, mais d’autre exception peuvent être levée.
        error_log(sprintf("Une exception a été levée. (Le field recherché n’existe pas)\n Erreur : %s"), $err->getMessage();
    }

Pour plus d’information sur la modification liée au getFileLink, se référer à : Journal de modification.

# PHP : Changement de signature de la méthode Anakeen\Core\Account::updateUser()

La signature de la méthode Anakeen\Core\Account::updateUser() a changé, elle a deux arguments en moins, l’expiration et le nombre de jours de validité du mot de passe. Il faut enlever les paramètres $expires et $passdelay.

# Ancienne signature






 
 









$user = $this->getAccount();
$err = $user->updateUser(
  $fid,
  $lname,
  $fname,
  $expires,
  $passdelay,
  $login,
  $status,
  $pwd1,
  $pwd2,
  $extmail,
  $roleIds,
  $substituteAccountId
);

# Nouvelle signature

$user = $this->getAccount();
$err = $user->updateUser($fid, $lname, $fname, $login, $status, $pwd1, $pwd2, $extmail, $roleIds, $substituteAccountId);

Pour plus d’information sur la modification liée au updateUser, se référer à : Journal de modification.

# Bibliothèque externe : Version de JQuery utilisée

Le principal changement se situe dans les menus. En effet, les balises ne doivent plus être auto-fermantes.

Par exemple :





 




$menu = new BarMenu();

$myItem = new ItemMenu("myItem", "my item");
$myItem->setHtmlAttribute("class", "menu--my--item menu--left");
$myItem->setBeforeContent(sprintf('<div style="color:%s" class="fa fa-square" />', "#157EFB"));

$menu->appendElement($myItem);
return $menu;

La ligne surlignée ci-dessus doit être changée comme la ligne surlignée ci-dessous :





 




$menu = new BarMenu();

$myItem = new ItemMenu("myItem", "my item");
$myItem->setHtmlAttribute("class", "menu--my--item menu--left");
$myItem->setBeforeContent(sprintf('<div style="color:%s" class="fa fa-square"></div>', "#157EFB"));

$menu->appendElement($myItem);
return $menu;

Pour plus d’information sur la version de JQuery utilisée, se référer à : Journal de modification.

# Configuration : Nouvelle représentation des groupes et utilisateurs

# Contrôle de vue

Les représentations des formulaires des Smart Structures IUSER et IGROUP ont été modifiées. Ce sont maintenant des représentations spécifiques. Si vous héritez ou avez modifié ces Smart Structures, les nouveaux cadres ajoutés sont affichés par défaut. Si vous avez ajouté des champs dans les cadres, ils ne seront pas affichés.

Le contrôle de vue des IGROUP et IUSER a été modifié pour prendre en compte ces nouvelles représentations.

Pour des exemples de représentations sur les Smart Structures, se référer à : Journal de modification.

  • L’accès afin de modifier le suppléant d’un utilisateur est : ESUBSTITUTE (Pas de changement)

# Anciens noms d’accès aux contrôles de vues

  • L’accès afin de consulter / modifier un utilisateur était : EUSER
  • L’accès afin de consulter / modifier un groupe était : EGROUP

# Nouveaux noms d’accès aux contrôles de vues

  • L’accès afin de consulter un utilisateur / un groupe est devenu : VADMIN (Cet accès est disponible en ayant le rôle accounts_manager_role)
  • L’accès afin de modifier un utilisateur / un groupe est devenu : EADMIN (Cet accès est disponible en ayant le rôle accounts_manager_role)

Dans le cas ou vous avez ajouté des nouveaux champs dans les cadres d’origine, il faudra les déplacer dans un nouveau cadre dédié.

# Changement de groupe

Maintenant le changement de groupe peut s’effectuer uniquement dans le centre d’administration.

# Ajustement des filtres de tableau de type int

  • Ajouter l’extension intArray (si l’utilisateur posgresql n’a pas les droits afin de l’ajouter automatiquement lors de la phase de migration)

  • Si vous avez défini des requêtes spécifiques sur des filtres de tableau d’entier ( int[] ), modifier la requête les %s @> '%s’ en arraycontains(%s, '%s’)

Pour voir plus d’information sur l’extension

# Mise à jour et installation des modules

  1. Créer un projet en suivant les howto

  2. Merger le projet principal avec le nouveau projet

    • Recopier les fichiers sources de l’ancien projet dans le nouveau.
    • Recopier les cibles additionnelles du Makefile de l’ancien projet dans le Makefile du nouveau projet.
    • Le cas échéant, recopier les configurations webpack et ajouter au package.json les modules concernés (par webpack ou par le code JS/TS).
  3. Pour déployer le code, à chaque fois que nécessaire utiliser la commande :

    • make context-update
  4. Voir les BC dans le guide de migration pour changer dans le code certains appels (correction de code)

# Migration du critère "Une des valeurs" dans les Smart Structures "Rapport" (REPORT)

Il était possible en version 3.2 de créer un critère de recherche portant sur l’ensemble des valeurs du Smart Element (option Une des valeurs). La valeur de recherche s’appliquait alors sur tous les Smart Fields du Smart Element qui ne portaient pas l’option searchcriteria à hidden.

Cette fonctionnalité n’a pas été reportée sur la version 4.

Néanmoins, deux solutions sont proposées.

  1. Affiner le critère afin de mettre le critère sur le Smart Field désiré.

  2. Ajouter un Smart Field calculé qui porte la concaténation des valeurs textuelles des Smart Fields concernés par la recherche. Ce Smart Field doit être caché.

Performance

Ce processus impacte le temps d’enregistrement du formulaire.

Il faut ajouter une méthode qui est déclenchée dans le "hook" postStore. Cette méthode calcule la concaténation des valeurs de tous les champs sur lesquels il est possible d’effectuer une recherche.

Exemple de code pour cette procédure :

  • Méthode à ajouter au Post Store des Smart Structures souhaitées :

Documentation du Post Store

<?php
namespace My;
use SmartStructure\Fields\MySmartStructure as MyAttributes;
use Anakeen\SmartHooks;

class MySmartStructure extends \Anakeen\SmartElement
{

    public function calculateFieldHidden()
    {
            // Récupération des champs du Smart Element
            $allSEField = $this->getNormalAttributes();

            $concatValue = "";
            foreach ($allSEField as $t) {
                // On ne prend pas en compte les Smart Fields exclus de la recherche
                if ($t->getOption("searchCriteria") !== "hidden") {
                    $concatValue = $concatValue . " " . $t->getTextualValue($this);
            }

            // my_field_hidden est un champ texte caché à définir dans la Smart Structure, il est alors possible de l’utiliser dans le rapport.
            $this->setAttributeValue(MyAttributes::my_field_hidden, $concatValue);
        }
    }

    public function registerHooks()
    {
        parent::registerHooks();
        $this->getHooks()->addListener(SmartHooks::POSTSTORE, function () {
          $this->calculateFieldWithAllValuesSearchable();
    }
}

# 2021.1 Nouveautés

# Smart Field étendus

Les Smart Fields étendus permettent de synchroniser les Smarts Fields d'un Smart Element avec un autre.

Au cours du développement d'une application, il arrive souvent que la valeur d'un Smart Element doive être recopiée dynamiquement dans un autre Smart Element pour présenter cette valeur dans l'interface ou pour faciliter des calculs internes à l'application. Jusqu'à aujourd'hui ces synchronisations nécessitaient l'ajout de code spécifique ce qui entraînait un code plus complexe et moins maintenable. Les Smart Fields étendus permettent de configurer automatiquement une synchronisation d'un Smart Field à un autre, sans ajout de code spécifique.

Pour plus d'informations, vous pouvez vous référer à la documentation détaillée des Smart Fields étendus.