# Changelog

Changelog de SPIP 4.4

## 4.4.9 - 2026-02-18

### Security

- !184 spip-security/securite#4871 Limiter l’usage de données sérialisées dans le filtre `table_valeur` et l’itérateur `DATA`

### Added

- !177 Option `ignore_echappe_js` à `safehtml()` + un argument `$options` à `is_html_safe()` que l'on passe à l'appel interne à `safehtml()`

### Fixed

- !177 Éviter une boucle infinie depuis `echappe_js`
- !182 Notice PHP en présence d’une erreur de squelette, mais en étant non connecté.

### Deprecated

- !184 Filtre `table_valeur` et de l’itérateur `DATA` (avec source table) : déprécier les tableaux sérialisés en entrée

## 4.4.8 - 2026-02-12

### Security

- spip-security/securite#4866 Sécuriser l'affichage des iframe eventuelles soit par echappement soit par sandboxing selon les cas
- spip-security/securite#4866 Améliorer la détection de contenus malicieux dans `echapper_html_suspect()`

### Added

- La fonction `safehtml()` accepte un tableau d'options en second argument, vide par défaut, que l'on passe à `inc_safehml_dist()` (ou fonction surchargée)
- Fonction `afficher_html_suspect()` pour assurer le rendu du html suspect échappé

### Fixed

- #110 !164 Deprecated diverses en PHP & PHP 8.5
- spip/medias#5034 Éviter une indéfinie lors de l'affectation des doublons documents
- !160 Si un pipeline corrompt args/data, le dénoncer dans les logs et en erreur_squelette
- spip/prive#114 `prepare_icone_base()` envoyait une classe erronnée depuis le passage en SVG
- #105 Inscription : ne pas générer 2 fois de suite un jeton
- #105 Inscription : rétablir les paramètres passés au modèle de notification
- #109 Authentification HTTP : Assigner l'auteur à la session uniquement si on a pu le récupérer


## 4.4.7 - 2025-12-05

### Fixed

- Deprecated usage of `_T` in `debusquer_compose_message()`
- Vider la meta 'drapeau_edition' quand on désinstalle un plugin
- Accepter PHP 8.5 à l’installation
- #98 Corriger la définition de IMAGETYPE_SVG qui existe en PHP 8.5
- la langue hazaragi se lit de droite à gauche (RTL)
- accepter "HTTP/2" ou "HTTP/3" comme réponse acceptable

## 4.4.6 - 2025-10-10

### Fixed

- !126 Balises `#URL_ARTICLE` et autres dans une boucle avec un connect externe
- spip-contrib-extensions/spip-bonux#19 warning sur `inc_importer_csv_dist()` en PHP 8.4

### Deprecated

- spip/ecrire!128 L’argument 3 des fonctions `_T` ou `_L` doit être un tableau depuis SPIP 3.0

## 4.4.5 - 2025-09-08

### Security

- spip-security/securite#4865 fix open redirect sur formulaire de login en ajax

### Fixed

- #88 Simplification dans `http_img_pack` évitant un `file_exists`
- #88 La fonction timestamp peut accepter une entrée null
- #88 La fonction `timestamp` gère le cas d'un fichier ayant déjà un timestamp
- #60 Retour correct du pipeline `cvtconf_formulaire_charger`
- #76 Éviter des erreurs sur la suppression des fichiers de cache
- !113 L'optimisation du collecteur empêchait de retrouver les balises avec une casse mixte
- !108 Correction du collecteur sur les commentaires HTML
- !114 Collecte spécifique des balises `<code>` dont le contenu est ignoré
- !107 Collecte des balises HTML en cas de balise fermante surnuméraire
- #61 utf8_noplanes n'accepte qu'une string en entrée
- spip/prive#99 Filtre `|nom_jour` sur les années négatives ou inférieures à 1901
- #73 Ne pas ajouter de lien pour confirmer l'inscription sur les visiteurs

### Deprecated

- Constante `_IS_CLI` : utiliser `PHP_SAPI === 'cli'` à la place

## 4.4.4 - 2025-06-10

### Fixed

- !74 Les urls d’actions de formulaires finissant par `/` ajoutaient inutilement une ancre

## 4.4.3 - 2025-04-08

### Fixed

- spip/prive#82 Définir l’autorisation de voir le formulaire de préférence des menus…
- #58 Ignorer les commentaires dans la création de champs SQL
- #6065 réparer la pagination ajax de la liste des admins dans la boite info d'une rubrique
- spip/tw#4883 éviter une fatale Undefined constant `_PROTOCOLES_STD` en la définissant dans `spip_initialisation_core()`

## 4.4.2 - 2025-02-18

### Fixed

- #39 Fix warning PHP (un report manquait pour #39)

## 4.4.1 - 2025-02-18

### Fixed

- #41 Utiliser `Spip\Afficher\Minipage\Admin` au lieu de `install_debut_html()` et `install_fin_html()` qui lèvent un deprecated
- #41 L’option `onload` de Minipage n’était pas appliquée…
- #39 Notifier uniquement les mises à jour de `patch` de SPIP en entête de page de l’espace privé
- #39 éviter de stocker une info erronée dans la meta `derniere_maj_notifiee`

## 4.4.0 - 2025-02-14

### Fixed

- charger l'autoloader dans le fichier prive.php
- spip/medias#5020 Éviter un warning PHP si le fichier du logo n'est pas présent
- spip/medias#5008 spip/medias!5034 Suivre medias sur `inc_vignette_dist` qui attend un paramètre medias

## 4.4.0-beta4 - 2025-01-29

### Fixed

- #34 Affichage des chaînes de langue en squelettes sur certains cas.
- #34 !39 Revert: transformation des idiomes en balise (sera dans SPIP 5.0 uniquement)
- !37 Si un plugin indique une icone `''` dans son `xml`, ne pas planter
- #35 Pouvoir se déconnecter
- #35 Le second paramètre de `Minipage` est un tableau

## 4.4.0-beta3 - 2025-01-17

## 4.4.0-beta2 - 2025-01-17

### Security

- spip-security/securite#4862 Sécuriser le contenu du message d'erreur affiché par l'API transmettre

### Changed

- #33 Version max PHP 8.4

### Fixed

- spip/medias#5011 utiliser pour `IMAGETYPE_SVG` une valeur qui ne risque pas une collision avec un futur ajout de format image (19 a été pris par `IMAGETYPE_AVIF` entre temps)
- #24 Correction d’une erreur fatale sur l’appel à `phraser_champs_interieurs()`
- Bonne version le dans paquet.xml

### Deprecated

- #26 Inclusion de fichier PHP via `<INCLURE(fichier.php)>` ou `<INCLURE{fond=fichier.php}>`
- #26 Balise fermante `</INCLURE>`


## 4.4.0-beta - 2024-12-03

### Added

- spip/spip#6003 Ne pas envoyer de mot de passe en clair, mais plutôt des liens pour définir son mot de passe
- spip/spip#6049 `copie_locale()` passe une clé `action` au pipeline `post_edition`
- spip/prive#35 Chaînes de langue supplémentaire pour les listes d'articles
- spip/spip#5560 Balise `#LAYOUT_PRIVE`
- spip/spip!5633 Balise `#TRAD{module:cle, #ARRAY{param, val, ..}, #ARRAY{option, val..}}`
- spip/spip#5933 Les actions `ajouter_lien` et `supprimer_lien` peuvent gérer un qualificatif
- spip/spip#5766 Pipeline `ajouter_menus_args`, en complément au pipeline `ajouter_menus`, qui transmet les arguments de `definir_barre_boutons()`
- spip/spip!6051 Purger les variables de `var_nullify` du contexte dans `traiter_appels_inclusions_ajax`
- spip/spip!6044 balise `#PARAM` pour récupérer les paramètres du container de services (Cf [UPGRADE_5.0.md](UPGRADE_5.0.md#Constantes_PHP))
- spip/spip!6034 Le filtre `|affdate` accepte un timestamp en entrée
- spip/medias#4958 Fonction `_image_extensions_logos()` et pipeline `image_extensions_logos`

### Fixed

- !8 Utiliser une variable pour l'url de l'item de langue `pass_reset_url`
- spip/spip!6100 Utiliser `fpassthru()` pour livrer directement les fichiers et eviter un memory limit plutôt que `readfile()` qui passe par un chargement en memoire du fichier
- spip/spip!5633 Possibilité de calculer dynamiquement les paramètres des chaînes de langue
- spip/spip!5633 Possibilité de calculer dynamiquement les paramètre des filtres des chaînes de langue
- spip/spip#5722 Requêter les fichiers distants avec `STREAM_CRYPTO_METHOD_TLS_CLIENT`
- spip/spip#5919 Remplacer les balises `tt` obsolètes par `code`
- spip/spip#3928 Les emails des auteurs sont masqués par défaut

### Deprecated

- spip/spip#5560 Balise `#LARGEUR_ECRAN` pour les squelettes du privé à remplacer par `#LAYOUT_PRIVE`
- spip/spip!5633 Classe interne `Idiome` depréciée, utiliser plutot `phraser_preparer_idiomes()` et la balise interne `#TRAD_IDIOME`
- spip/spip#2536 À partir de SPIP 5, l'appel des chaînes de langues en squelette sera sensible à la casse de la déclaration, il n'y aura plus de conversion automatique en minuscule
- spip/spip!5633 Fonction interne `phraser_boucle_placeholder()` à remplacer par `phraser_placeholder_memoriser_ou_reinjecter()`
- spip/spip!5633 Fonction interne `public_generer_boucle_placeholder()` à remplacer par `public_placeholder_generer()`
- spip/spip#6014 Les fichiers de langue peuplant une `$GLOBALS` sont dépréciés ; renvoyer directement un tableau
- spip/spip#4903 Constante obsolète `_DIR_IMG_PACK`
- spip/spip#5993 Globales `$traiter_math`, `$tex_server`, fonctions `produire_image_math()`, `traiter_math()`, utiliser le plugin `mathjax` à la place
- spip/spip#5992 Modifier la globale `$formats_logos` est déprécié : utiliser le pipeline `image_extensions_logos`
- spip/spip#5992 Appeler la globale `$formats_logos` est déprécié, utiliser la fonction `_images_extensions_logos()`

### Removed

- spip/spip#5505 spip/spip#5988 Fonctions `verif_butineur()`, `editer_texte_recolle()` et environnement `_texte_trop_long` des formulaires (Inutilisé — servait pour IE !)


