Documentation du code de SPIP et de ses plugins

SPIP

upgrade.php

Mise à jour de la base de données

Table of Contents

Constants

_TIME_OUT  = $time + _UPGRADE_TIME_OUT
Définir le timeout qui peut-être utilisé dans les fonctions de mises à jour qui durent trop longtemps
_UPGRADE_TIME_OUT  = 20
Durée en secondes pour relancer les scripts de mises à jour, x secondes avant que la durée d'exécution du script provoque un timeout

Functions

base_upgrade_dist()  : void
Programme de mise à jour des tables SQL lors d'un changement de version.
maj_base()  : array<string|int, mixed>|bool
Mise à jour de base de SPIP
maj_plugin()  : void
Mise à jour d'un plugin de SPIP
relance_maj()  : void
Relancer le hit de mise à jour avant timeout
maj_debut_page()  : void
Initialiser la page pour l'affichage des progrès de l'upgrade uniquement si la page n'a pas déjà été initilalisée
maj_while()  : array<string|int, mixed>
Gestion des mises à jour de SPIP et des plugins
serie_alter()  : int
Appliquer une serie de changements qui risquent de partir en timeout
upgrade_test()  : bool
Vérifie qu'il est possible d'ajouter une colonne à une table SQL

Constants

_TIME_OUT

Définir le timeout qui peut-être utilisé dans les fonctions de mises à jour qui durent trop longtemps

public int _TIME_OUT = $time + _UPGRADE_TIME_OUT

À utiliser tel que : if (time() >= _TIME_OUT)

_UPGRADE_TIME_OUT

Durée en secondes pour relancer les scripts de mises à jour, x secondes avant que la durée d'exécution du script provoque un timeout

public int _UPGRADE_TIME_OUT = 20

Functions

base_upgrade_dist()

Programme de mise à jour des tables SQL lors d'un changement de version.

base_upgrade_dist([string $titre = '' ][, string $reprise = '' ]) : void

L'entrée dans cette fonction est reservée aux mises à jour de SPIP coeur.

Marche aussi pour les plugins en appelant directement la fonction maj_plugin Pour que ceux-ci profitent aussi de la reprise sur interruption, ils doivent simplement indiquer leur numero de version installée dans une meta et fournir le tableau $maj à la fonction maj_plugin. La reprise sur timeout se fait alors par la page admin_plugin et jamais par ici.

Parameters
$titre : string = ''
$reprise : string = ''

Inutilisé

Tags
uses
creer_base()
uses
maj_base()
uses
auth_synchroniser_distant()

maj_base()

Mise à jour de base de SPIP

maj_base([int $version_cible = 0 ][, string $redirect = '' ][, mixed $debut_page = true ]) : array<string|int, mixed>|bool

Exécute toutes les fonctions de mises à jour de SPIP nécessaires, en fonction de la meta version_installee indiquant le numéro de schéma actuel de la base de données.

Les fonctions de mises à jour se trouvent dans ecrire/maj/

Parameters
$version_cible : int = 0
$redirect : string = ''
$debut_page : mixed = true
Tags
note

Si version nulle ou inexistante, c'est une nouvelle installation, on ne passe pas par le processus de mise à jour.

De même en cas de version supérieure: ca devait être un test, il y a eu le message d'avertissement il doit savoir ce qu'il fait

version_installee = YYYYMMDDNN; quand on a besoin de forcer une MAJ tel que 2021021800 où 00 est un incrément.

uses
upgrade_test()
uses
maj_while()
used-by
base_upgrade_dist()
Return values
array<string|int, mixed>|bool

maj_plugin()

Mise à jour d'un plugin de SPIP

maj_plugin(string $nom_meta_base_version, string $version_cible, array<string|int, mixed> $maj[, string $table_meta = 'meta' ]) : void

Fonction appelée par la fonction de mise à jour d'un plugin. On lui fournit un tableau de fonctions élementaires dont l'indice est la version.

Parameters
$nom_meta_base_version : string

Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP

$version_cible : string

Version du schéma de données dans le plugin (déclaré dans paquet.xml)

$maj : array<string|int, mixed>

Tableau d'actions à faire à l'installation (clé create) et pour chaque version intermédiaire entre la version actuelle du schéma du plugin dans SPIP et la version du schéma déclaré dans le plugin (ex. clé 1.1.0).

Chaque valeur est un tableau contenant une liste de fonctions à exécuter, cette liste étant elle-même un tableau avec premier paramètre le nom de la fonction et les suivant les paramètres à lui passer

Exemple :

```
array(
    'create' => array(
        array('maj_tables', array('spip_rubriques', 'spip_articles')),
        array('creer_base)),
    '1.1.0' => array(
        array('sql_alter', 'TABLE spip_articles ADD INDEX truc (truc)'))
)
```
$table_meta : string = 'meta'

Nom de la table meta (sans le prefixe spip_) dans laquelle trouver la meta $nom_meta_base_version

Tags
uses
maj_while()

relance_maj()

Relancer le hit de mise à jour avant timeout

relance_maj(string $meta, string $table[, string $redirect = '' ]) : void

si pas de redirect fourni, on redirige vers exec=upgrade pour finir ce qui doit être une mise à jour SPIP

Parameters
$meta : string
$table : string
$redirect : string = ''
Tags
uses
redirige_formulaire()
used-by
maj_while()
used-by
serie_alter()

maj_debut_page()

Initialiser la page pour l'affichage des progrès de l'upgrade uniquement si la page n'a pas déjà été initilalisée

maj_debut_page(string $installee, string $meta, string $table) : void
Parameters
$installee : string
$meta : string
$table : string

maj_while()

Gestion des mises à jour de SPIP et des plugins

maj_while(string $installee, string $cible, array<string|int, mixed> $maj[, string $meta = '' ][, string $table = 'meta' ][, string $redirect = '' ][, bool $debut_page = false ]) : array<string|int, mixed>

À partir des versions > 1.926 (i.e SPIP > 1.9.2), cette fonction gere les MAJ.

Se relancer soi-même pour éviter l'interruption pendant une operation SQL (qu'on espère pas trop longue chacune) évidemment en ecrivant dans la meta à quel numero on en est.

Cette fonction peut servir aux plugins qui doivent donner comme arguments :

  1. le numero de version courant (numéro de version 1.2.3 ou entier)
  2. le numero de version à atteindre (numéro de version 1.2.3 ou entier)
  3. le tableau des instructions de mise à jour à exécuter Pour profiter du mécanisme de reprise sur interruption il faut de plus
  4. le nom de la meta permettant de retrouver tout ca
  5. la table des meta ou elle se trouve ($table_prefix . '_meta' par défaut) (cf début de fichier)

les fonctions sql_xx appelées lors des mises à jour sont supposées atomiques et ne sont pas relancées en cas de timeout, mais les fonctions spécifiques sont relancées jusqu'à ce qu'elles finissent. Elles doivent donc s'assurer de progresser à chaque reprise.

Parameters
$installee : string
$cible : string
$maj : array<string|int, mixed>
$meta : string = ''
$table : string = 'meta'
$redirect : string = ''
$debut_page : bool = false
Tags
uses
maj_debut_page()
uses
serie_alter()
uses
relance_maj()
used-by
maj_base()
used-by
maj_plugin()
Return values
array<string|int, mixed>
  • tableau (étape, sous-étape) en cas d'échec,
  • tableau vide sinon.

serie_alter()

Appliquer une serie de changements qui risquent de partir en timeout

serie_alter(string $serie[, array<string|int, mixed> $q = [] ][, string $meta = '' ][, string $table = 'meta' ][, string $redirect = '' ]) : int

Alter crée une copie temporaire d'une table, c'est lourd.

Parameters
$serie : string

numero de version upgrade

$q : array<string|int, mixed> = []

tableau des operations pour cette version

$meta : string = ''

nom de la meta qui contient le numero de version

$table : string = 'meta'

nom de la table meta

$redirect : string = ''

url de redirection en cas d'interruption

Tags
uses
relance_maj()
used-by
maj_while()
Return values
int

upgrade_test()

Vérifie qu'il est possible d'ajouter une colonne à une table SQL

upgrade_test() : bool
Tags
used-by
maj_base()
Return values
bool

True si possible.


        
On this page

Search results