[SPIP] Proposé : SPIP 4.1 [DEV]

SPIP

Article proposé

L’article « SPIP 4.1 [DEV]
(https://www.spip.net/ecrire/?exec=article&id_article=6708) » est proposé
à la publication depuis le dimanche 16 janvier 2022.


SPIP 4.1 [DEV]

/ !\ Ne pas publier avant la sortie !

dimanche 16 janvier 2022 , par Matthieu
Marcillaud

SPIP 4.1 est avant tout une version qui suit les versions maintenues de PHP
(7.4 à 8.1) et met à jour différentes librairies utilisées en interne.

Sommaire

  • Compatibilité PHP
  • Qualité du code
  • Typage

  • Sucre syntaxique

  • Mises à jour des librairies
  • Suppression de librairies
  • Quelques adaptations

Compatibilité PHP |Retour au sommaire

SPIP 4.1 nécessite PHP 7.4 minimum, et fonctionne en PHP 8.1.

Rappel : SPIP 4.0 c’est PHP 7.3 à 8.0.

À ce titre pour PHP 8.1, nous avons du corriger / adapter de nombreuses
fonctions (autour des chaines de caractères souvent) si elles reçoivent
null :
https://php.watch/versions/8.1/internal-func-non-nullable-null-deprecation
pour éviter des deprecated.

Qualité du code |Retour au sommaire

Il y a une certaine (hum) marge de progrès sur la qualité du code PHP
de SPIP…

# Typage |Retour au sommaire

Ce faisant pour PHP 8.1, nous avons commencé à typer certains arguments
et retours de fonctions pour détecter au plus tôt certains appels
incorrects. C’est un changement potentiellement impactant : cela peut
créer des erreurs de squelettes là où l’erreur était auparavant plus
silencieuse ou tolérée. De même cela pourrait provoquer des erreurs PHP
dans des plugins ou des scripts maison sur les appels erronés à ces
fonctions.

Il est très évident que nous irons vers plus de typage le code PHP de
SPIP au fur et à mesure des évolutions et factorisations du code source.

La conséquence sera donc que les personnes développant des plugins ou des
squelettes devront être plus vigilantes sur les appels effectués d’une
part, et d’autre part que nous restreindrons très certainement les
nouvelles fonctions à des types uniques (pas de mixed), de même que
certaines fonctions déjà existantes verront probablement certains types
d’arguments mixtes réduits (éviter qu’un argument puisse recevoir un
peu tout comme int | string | array par exemple), de même pour les
retours de fonctions.

Au vu du code de SPIP historique ce n’est pas si évident.

# Sucre syntaxique |Retour au sommaire

Nous avons passé l’outil Rector (https://github.com/rectorphp/rector)
sur le code de SPIP 4.1 avec la configuration PHP 7.4. L’outil permet
de transformer la syntaxe du code source PHP en modifiant certains
éléments qui peuvent être simplifiés grâce à des écritures plus
récentes de PHP. Par exemple utiliser les opérateurs ?? ou ??=
lorsque c’est possible.

Ce n’est pas grand chose, mais c’est toujours ça :slight_smile:

Mises à jour des librairies [|Retour au

sommaire](#s-Mises-a-jour-des-librairies)

Nous avons mis à jour différentes librairies PHP ou JS utilisées par
SPIP.

  • spip/spip → Sortable 1.14.0
  • spip/spip → jquery Form 4.3.0
  • spip/spip → JS Cookie 3.0.1
  • [TODO] spip/spip → Bootstrap Dropdown ?
  • spip/compresseur → css-tidy 2.0.0
  • spip/medias → getid3 1.9.21
  • [TODO] spip/medias → Mejs 5.0.4
  • spip/medias → svg-sanitizer 0.14.1
  • spip/statistiques → d3 7.3.0
  • spip/statistiques → luxon 2.3.0
  • spip/plan → jstree 3.3.12
  • spip/organiseur → fullcalendar 5.10.1

Suppression de librairies [|Retour au

sommaire](#s-Suppression-de-librairies)

Nous avons supprimé jQuery.cookie qui est était déprécié depuis SPIP
3.2 au profit de JS Cookie.

Pour rappel si vous n’aviez pas encore adaptés vos utilisations :

$.cookie(key) devient Cookies.get(key)
$.cookie(key, value) devient Cookies.set(key, value)
$.cookie(key, value, options) devient Cookies.set(key, value, options)

Quelques adaptations |Retour au sommaire

Dans un squelette, pour avoir la liste des tables des objets éditoriaux,
préférer #NULL (qui retourne null) plutôt que #REM (qui retourne
une chaine vide)

- #REM|lister_tables_objets_sql


+ #NULL|lister_tables_objets_sql

— Envoyé par SPIP (https://www.spip.net/)

rubon155-a9eec.jpg