# 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
etutf8_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
etpg_escape_literal
demandent explicitement l’objetPgSql\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
- Réinstaller le serveur
TE
en suivant cette documentation : Documentation d'installation du serveur de transformation.
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 |
|
Administration - Access all | PRF_ADMIN_EDIT | PDOC |
| |
Création des comptes | PRF_ACCOUNTS_CREATION | IUSER, IGROUP | PFAM |
|
User itself | PRF_IUSER_OWNER | IUSER | PDOC |
|
Profils de création des modèles de mails | PRF_MAILTEMPLATE_CREATION | MAILTEMPLATE | PFAM |
|
Profils d'accès des modèles de mails | PRF_MAILTEMPLATE_ACCESS | MAILTEMPLATE | PDOC |
|
Accès des masques de saisie et des contrôles de vues | PRF_RENDERUI_CREATION | MASK, CVDOC | PFAM |
|
Profils d'accès des masques de saisies | PRF_MASK_ACCESS | MASK | PDOC |
|
Profils d'accès des contrôles de vues | PRF_CVDOC_ACCESS | CVDOC | PDOC |
|
Profils de création des tâches programmées | PRF_TASK_CREATION | TASK | PFAM |
|
Administration des tâches et minuteurs | PRF_TASK_ACCESS | TASK | PDOC |
|
Profils de création des rôles | PRF_ROLE_CREATION | ROLE, BASE | PFAM |
|
Profils d'accès pour la structure BASE | PRF_BASE_ACCESS | BASE | PDOC |
|
Profils d'accès des rôles | PRF_ROLE_ACCESS | ROLE | PDOC |
|
Création des descriptions de formulaire | PRF_ADMIN_RENDERDESCRIPTION_CREATION | RENDERDESCRIPTION | PFAM |
|
Administration des descriptions de formulaire | PRF_RENDERDESCRIPTION_ACCESS | RENDERDESCRIPTION | PDOC |
|
Profil recherche | PRF_SEARCHES | SEARCH, MSEARCH, DSEARCH, REPORT | PFAM |
|
Profils de création document recherche | PRF_SSEARCH_CREATION | SSEARCH | PFAM |
|
Profils de création de profil | PRF_PROFILE_CREATION | PDOC, PDIR, PSEARCH, PFAM, FIELDACCESSLAYER, FIELDACCESSLAYERLIST | PFAM |
|
Profils d'accès des profils | PRF_PROFILE_ACCESS | PDOC, PDIR, PSEARCH, PFAM, FIELDACCESSLAYER | PDOC |
|
Profil mail | PRF_MAIL | PFAM |
| |
Profil document mail | PRF_DOC_MAIL | PDOC |
| |
Profil sentmessage | PRF_SENTMESSAGE | SENTMESSAGE | PFAM |
|
Profil document sentmessage | PRF_DOC_SENTMESSAGE | SENTMESSAGE | PDOC |
|
Profil Structure FILE | PRF_FILE_STRUCT | FILE, IMAGE | PFAM |
|
Profil FILE | PRF_FILE_ACCESS | FILE, IMAGE | PDOC |
|
Profils de création des minuteurs | PRF_TIMER_CREATION | TIMER | PFAM |
|
Profils d'accès des minuteurs | PRF_TIMER_ACCESS | TIMER | PDOC |
|
Profils de création des rôles | PRF_WDOC_CREATION | WDOC | PFAM |
|
Profils d'accès des cycles de vie | PRF_WDOC_ACCESS | WDOC | PDOC |
|
Profil document recherche | PRF_DOC_SEARCHES | SEARCH, MSEARCH, DSEARCH, SSEARCH, REPORT | PSEARCH |
|
Modification administrateur | PRF_ADMIN_IGROUP | IGROUP | PDIR |
|
Profils de création pour les groupes | GROUP | GROUP | PDOC |
|
Profils d'accès document group | PRF_GROUP_ACCESS | GROUP | PDOC |
|
*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 |
|
Création des descriptions de formulaire | PRF_ADMIN_RENDERDESCRIPTION_CREATION | RENDERDESCRIPTION | PFAM |
|
Création des comptes | PRF_ACCOUNTS_CREATION | IUSER | PFAM |
|
Profil recherche | PRF_SEARCHES | SEARCH, MSEARCH, DSEARCH, REPORT | PFAM |
|
Profil profil | PRF_PROFILE | PDOC, PDIR, PSEARCH, PFAM | PFAM |
|
Profil mail | PRF_MAIL | PFAM |
| |
Profil sentmessage | PRF_SENTMESSAGE | SENTMESSAGE | PFAM |
|
Profil Structure FILE | PRF_FILE_STRUCT | FILE, IMAGE | PFAM |
|
Profil document recherche | PRF_DOC_SEARCHES | SEARCH, MSEARCH, DSEARCH, SSEARCH, REPORT | PSEARCH |
|
Modification administrateur | PRF_ADMIN_IGROUP | IGROUP | PDIR |
|
Administration - Access all | PRF_ADMIN_EDIT | PDOC |
| |
Administration | PRF_ADMIN_ACCESS | FIELDACCESSLAYER, MAILTEMPLATE, MASK, ROLE | PDOC |
|
Administration des tâches et minuteurs | PRF_TASK_ACCESS | TASK, TIMER | PDOC |
|
Administration des descriptions de formulaire | PRF_RENDERDESCRIPTION_ACCESS | RENDERDESCRIPTION | PDOC |
|
User itself | PRF_IUSER_OWNER | IUSER | PDOC |
|
Profil document mail | PRF_DOC_MAIL | PDOC |
| |
Profil document sentmessage | PRF_DOC_SENTMESSAGE | SENTMESSAGE | PDOC |
|
Profil FILE | PRF_FILE_ACCESS | FILE, IMAGE | PDOC |
|
*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
.
# 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é.
# Configuration : Syntaxe d'un script de migration
Il faut utiliser un NameSpace dans les balises Xml.
La balise ol
devient logical-operator
.
# 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.
# 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: ""
}
# 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
# PHP : Gestion d'erreur de la méthode Anakeen\Core\Internal\SmartElement::getFileLink()
# Nouvelle gestion d'erreur de la méthode getFileLink
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 /**
# Ancienne gestion d'erreur de la méthode getFileLink
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.
# 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
.
# 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.
# PHP : Ajout de la classe \Anakeen\Search\Filters\AndOperator
La classe AndOperator
permet d'utiliser l'opérateur logique "AND" sur plusieurs filtres.
# 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
# Ancienne représentation de la Smart Structure IUSER
# Nouvelle représentation de la Smart Structure IGROUP
# Ancienne représentation de la Smart Structure IGROUP
# 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
.
# PHP : Gestion d’erreur de la méthode Anakeen\Core\Internal\SmartElement::getFileLink()
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ôleaccounts_manager_role
) - L’accès afin de modifier un utilisateur / un groupe est devenu :
EADMIN
(Cet accès est disponible en ayant le rôleaccounts_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’
enarraycontains(%s, '%s’)
Pour voir plus d’information sur l’extension
# Mise à jour et installation des modules
Créer un projet en suivant les howto
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 leMakefile
du nouveau projet. - Le cas échéant, recopier les configurations
webpack
et ajouter aupackage.json
les modules concernés (parwebpack
ou par le code JS/TS).
Pour déployer le code, à chaque fois que nécessaire utiliser la commande :
make context-update
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.
Affiner le critère afin de mettre le critère sur le Smart Field désiré.
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 :
<?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.