UPGRADE de SPIP 4.2 à 5.0
Préliminaires
SPIP 5.0 nécessite PHP 8.1 minimum.
Migration BDD
SPIP 5.0 ne contient pas les mises à jour de BDD antérieures à SPIP 4.0. Pour rappel, SPIP 4.x ne contient pas les mises à jour antérieures SPIP 2.0.
Dit autrement, il faut a minima partir d’un SPIP 3.2 (ou supérieur donc) pour que la migration en SPIP 5.0 de la base de données s’effectue correctement. Pour des questions de compatibilité de SPIP 5.0 avec PHP 8.1 minimum, il est conseillé (mais pas obligatoire) de partir au moins d’un SPIP 4.1.
Déplacement plugins-dist
Les plugins-dist (plugins fournis avec la distribution SPIP et toujours activés) sont maintenant installés via l’outil Composer (ou présents dans l’archive SPIP téléchargée).
Ils sont maintenant placés dans le répertoire plugins-dist/spip/
avec leur préfixe comme nom de répertoire. Ils étaient auparavant directement à la racine de plugins-dist/
.
En conséquence, et en fonction de votre méthode de migration vers SPIP 5.0,
il faudra supprimer les anciens plugins-dist/
de SPIP 4.2 à la racine s’ils sont présents.
Ainsi, par exemple, le plugin Textwheel était auparavant dans plugins-dist/textwheel
et se retrouve après mise à jour en SPIP 5.0 dans plugins-dist/spip/tw
(où tw
est le préfixe du plugin)
Webmestres
La constante _ID_WEBMESTRES
(dépréciée en SPIP 2.1) n’est plus utilisée et n’a plus d’effet.
Si vous déclariez cette constante (dans config/mes_options.php
par exemple), il convient de l’enlever et de déclarer les autrices et auteurs webmestres en conséquence depuis l’interface privée de SPIP en tant que webmestre (ou via le champ webmestre
de la table spip_auteurs
directement dans la base de données).
Suppression / déplacement de fonctionnalités
- Le surlignage des mots de recherche est déplacé dans le nouveau plugin Surligne
Squelettes
Parties optionnelles des balises
Il devient possible d’utiliser des crochets dans les parties optionnelles des balises. Ainsi :
-
[avant] (#VAL{texte})]
écritavant] texte
-
[(#VAL{texte}) [après]
écrittexte [après
-
[avant] (#VAL{texte}) [après]
écritavant] texte [après
En conséquence, certaines écritures de squelettes deviennent comprises comme des parties optionnelles, lorsque (#BALISE
est utilisé alors que la parenthèse ne désigne pas une partie optionnelle.
Ce cas peut se trouver par exemple dans des écriture pour du CSS. Il convient de lever l’ambiguité
Avant
a[href] { background-image: url(#CHEMIN_IMAGE{img.svg}); }
Après
a[href] { background-image: url\(#CHEMIN_IMAGE{img.svg}); }
ou
a[href] { background-image: url("#CHEMIN_IMAGE{img.svg}"); }
Nouvelles dépréciations
Gestion des traductions
$GLOBALS
(déprécié en 5.0)
Fichiers de langue avec Les fichiers de langue peuplant une variable globale sont dépréciés. Retourner directement le tableau PHP. Note: Cette syntaxe est valide à partir de SPIP 4.1
avant
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
'mots_description' => 'Mots et Groupes de mots',
'mots_slogan' => 'Gestion des mots et groupes de mots dans SPIP'
);
Après
<?php
return [
'mots_description' => 'Mots et Groupes de mots',
'mots_slogan' => 'Gestion des mots et groupes de mots dans SPIP'
];
Les éléments suivants sont dépréciés et seront supprimés dans une future version.
Syntaxes de squelettes
{collecte}
(déprécié en 5.0)
Critère Utiliser {collate}
Avant
<BOUCLE_a(ARTICLES) {par titre} {collecte utf8_spanish_ci} {"<br />"}>...
Après
<BOUCLE_a(ARTICLES) {par titre} {collate utf8_spanish_ci} {"<br />"}>...
{fusion}
(déprécié en 5.0)
Critères Utiliser {groupby}
Avant
<BOUCLE_extrait(ARTICLES){fusion id_rubrique}>...
Après
<BOUCLE_extrait(ARTICLES){groupby id_rubrique}>...
{fusion_supprimer}
(déprécié en 5.0)
Critères Utiliser {groupby_supprimer}
Avant
<BOUCLE_facette_annee(ARTICLES){id_mot=27}{fusion_supprimer}{fusion YEAR(date)}>
[(#DATE|annee)]<br />
</BOUCLE_facette_annee>
Après
<BOUCLE_facette_annee(ARTICLES){id_mot=27}{groupby_supprimer}{groupby YEAR(date)}>
[(#DATE|annee)]<br />
</BOUCLE_facette_annee>
Fonctions PHP
Dans certains cas parfois utilisées en filtres de squelettes également.
spip_log
Fonction La fonction très courante spip_log
est dépréciée au profit de la fonction spip_logger
,
qui retourne une instance de Psr/Log/LoggerInterface
.
Les constantes de niveau de log associées, comme _LOG_ERREUR
sont aussi dépréciées.
La constante (configuration) _LOG_FILTRE_GRAVITE
prend pour valeur un Psr\Log\LogLevel::*
Avant
spip_log('message defaut (info)');
spip_log('message d’erreur', _LOG_ERREUR);
# ensemble des hiérarchies de log
spip_log('message debug', _LOG_DEBUG);
spip_log('message info', _LOG_INFO);
spip_log('message info importante', _LOG_INFO_IMPORTANTE);
spip_log('message avertissement', _LOG_AVERTISSEMENT);
spip_log('message erreur', _LOG_ERREUR);
spip_log('message critique', _LOG_CRITIQUE);
spip_log('message alerte', _LOG_ALERTE_ROUGE);
spip_log('message hs', _LOG_HS);
# écriture dans un autre fichier de log
spip_log('message A', 'saisies');
spip_log('message B', 'saisies' . _LOG_ERREUR);
spip_log('message C', 'saisies.' . _LOG_DEBUG);
# niveau de log variable
$level = _LOG_ERREUR;
spip_log('message level variable', $level);
# niveau de gravité de logs écrits (mes_options.php)
define(`_LOG_FILTRE_GRAVITE`, _LOG_DEBUG);
Après
spip_logger()->info('message defaut (info)');
spip_logger()->error('message d’erreur');
# ensemble des hiérarchies de log
$logger = spip_logger();
$logger->debug('message debug');
$logger->info('message info');
$logger->notice('message info importante');
$logger->warning('message avertissement');
$logger->error('message erreur');
$logger->critical('message critique');
$logger->alert('message alerte');
$logger->emergency('message hs');
# écriture dans un autre fichier de log
spip_logger('saisies')->info('message A');
$logger = spip_logger('saisies');
$logger->error('message B');
$logger->debug('message C');
# niveau de log variable
$level = Psr\Log\LogLevel::ERROR;
spip_logger()->log($level, 'message level variable');
# niveau de gravité de logs écrits (mes_options.php)
define(`_LOG_FILTRE_GRAVITE`, Psr\Log\LogLevel::DEBUG);
extraire_multi
et extraire_idiome
Fonctions Le 3è paramètre $options
déprécié si booléen.
Ce paramètre $options
doit être un array
.
Avant
$multi = extraire_multi($texte, 'en', true);
$idiome = extraire_idiome($texte, 'en', true);
Après
$multi = extraire_multi($texte, 'en', ['echappe_span' => true]);
$idiome = extraire_idiome($texte, 'en', ['echappe_span' => true]);
spip_setcookie
Fonction La fonction spip_setcookie()
reprend les arguments de la fonction php setcookie
.
Les constantes _COOKIE_SECURE
et _COOKIE_SECURE_LIST
sont dépréciées au profit des options
secure
(activée par défaut en HTTPS) et httponly
de la fonction
Exemple
spip_setcookie('mon_cookie', 'ma valeur', time() + 3600, httponly: true);
spip_sha256
(dépréciée en 5.0)
Fonction Utiliser la fonction native hash
Avant
$hash = spip_sha256('mon contenu');
Après
$hash = hash('sha256', 'mon contenu');
abs_url
(dépréciée en 5.0)
Fonction Utiliser url_absolue
ou liens_absolus
selon.
Avant
$texte = abs_url($texte);
$url = abs_url($url);
[(#TEXTE|abs_url)]
[(#URL_ARTICLE|abs_url)]
Après
$texte = liens_absolus($texte);
$url = url_absolue($url);
[(#TEXTE|liens_absolus)]
[(#URL_ARTICLE|url_absolue)]
Renommage / changement de configurations
Nettoyage des paramètres d’URI
Une configuration (certainement très peu surchargée) a été modifiée et renommée :
- Introduction de la constante
_CONTEXTE_IGNORE_LISTE_VARIABLES
. - Suppression de la constante
_CONTEXTE_IGNORE_VARIABLES
.
Avant
define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
Après
define('_CONTEXTE_IGNORE_LISTE_VARIABLES', ['^var_', '^PHPSESSID$', '^fbclid$', '^utm_']);
Suppressions des éléments dépréciés
Les éléments suivants ont été supprimés et doivent être adaptés si ce n’est pas encore le cas.
Syntaxes de squelettes
#LOGO_
(dépréciés en 2.1)
Filtres de Les syntaxes des #LOGO_xx
avec de faux filtres |left
|right
|center
|bottom
, |top
, |lien
|fichier
ne sont plus prises en compte.
Avant
- [(#LOGO_ARTICLE|#URL_ARTICLE)]
- [(#LOGO_ARTICLE|fichier)]
- [(#LOGO_ARTICLE|lien)]
- [(#LOGO_ARTICLE|left)]
Après
- [(#LOGO_ARTICLE{#URL_ARTICLE})]
- [(#LOGO_ARTICLE**)]
- [(#LOGO_ARTICLE*)]
- [(#LOGO_ARTICLE{left})]
Note: les positionnements left
, right
, center
, bottom
, top
ajustent simplement une classe CSS.
#FORMULAIRE_RECHERCHE|parametre
(déprécié en 2.1)
Filtre de Avant
[(#FORMULAIRE_RECHERCHE|param)]
Après
[(#FORMULAIRE_RECHERCHE{param})]
#EXPOSER
(déprécié en 1.8.2)
Balise Avant
[(#EXPOSER|on,off)]
Après
[(#EXPOSE{on,off})]
#EMBED_DOCUMENT
(déprécié en 2.0)
Balise Avant
[(#EMBED_DOCUMENT|autostart=true)]
Après
[(#MODELE{emb, autostart=true})]
icone
Filtre Le filtre icone
est supprimé. Utiliser icone_verticale
(ou icone_horizontale
)
Avant
[(#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE}
|icone{Éditer,article-24.png,#LANG_RIGHT,edit,ajax})]
Après
[(#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE}
|icone_verticale{Éditer,article,edit,right ajax})]
foreach
Filtre Le filtre déprécié foreach
est supprimé. Utiliser une boucle DATA
.
Avant
[(#LISTE{a,b,c,d}|foreach)]
Après
<BOUCLE_liste(DATA){source tableau, #LISTE{a,b,c,d}}>
- #CLE => #VALEUR <br />
</BOUCLE_liste>
POUR
Boucle La boucle POUR
dépréciée est supprimée. Utiliser une boucle DATA
.
Avant
<BOUCLE_liste(POUR){tableau #LISTE{un,deux,trois}}>
- #CLE : #VALEUR <br />
</BOUCLE_liste>
Après
<BOUCLE_liste(DATA){source tableau, #LISTE{un,deux,trois}}>
- #CLE : #VALEUR <br />
</BOUCLE_liste>
Fonctions PHP
Dans certains cas parfois utilisées en filtres de squelettes également.
http_status
Fonction La fonction dépréciée http_status
est supprimée.
Utiliser la fonction PHP native http_response_code
Avant
http_status(404);
Après
http_response_code(404);
generer_url_ecrire_objet
Fonction La fonction dépréciée generer_url_ecrire_objet
est supprimée.
Utiliser generer_objet_url_ecrire
.
Avant
$url = generer_url_ecrire_objet(3, 'article');
[(#ID_ARTICLE|generer_url_ecrire_objet{article})]
Après
$url = generer_objet_url_ecrire(3, 'article');
[(#ID_ARTICLE|generer_objet_url_ecrire{article})]
generer_{x}_entite
Fonctions De même que generer_url_ecrire_objet
les fonctions dépréciées