API de gestion de la file des travaux

SPIP intègre nativement une interface de programmation (ou API) de gestion de file de travaux (« job queue »). Elle permet de programmer des tâches à exécuter dans le futur, ou simplement le plus tôt possible mais sans faire attendre l’utilisateur.

  • Apparu en : SPIP 3.0

Les travaux programmés sont à tout moment visualisables dans l’espace d’administration via le menu Maintenance > Liste des travaux. La page de suivi permet de forcer l’exécution immédiate d’une tâche, ou de supprimer certaines tâches.

Ajouter un travail dans la file

$id_job = job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0)

Avec les arguments :

  • $function : le nom de la fonction PHP qui doit être appelée
  • $description : une description humainement compréhensible de ce que fait la tâche (essentiellement pour l’affichage dans la page de suivi de l’espace privé)
  • $arguments (facultatif, vide par défaut) : les arguments qui seront passés à la fonction, sous forme de tableau PHP
  • $file (facultatif, vide par défaut) : nom du fichier à inclure, via include_spip($file) (exemple : 'inc/mail' : il ne faut pas indiquer .php). Si le nom finit par un / alors on considère que c’est un répertoire et SPIP fera un charger_fonction($function,$file)
  • $no_duplicate (facultatif, false par défaut)
    • si vaut true la tâche ne sera pas ajoutée si elle existe déjà en file d’attente avec la même fonction et les mêmes arguments.
    • si vaut 'function_only' la tâche ne sera pas ajoutée si elle existe déjà en file d’attente avec la même fonction indépendamment de ses arguments
  • $time (facultatif, 0 par défaut) indique la date sous forme de timestamp à laquelle la tâche doit être programmée. Si 0 ou une date passée, la tâche sera exécutée aussitôt que possible (en général en fin hit, en asynchrone).
  • $priority (facultatif, 0 par défaut) indique un niveau de priorité entre -10 et +10. Les tâches sont exécutées par ordre de priorité décroissante, une fois leur date d’exécution passée. La priorité est surtout utilisée quand une tâche cron indique qu’elle n’a pas fini et doit être relancée : dans ce cas SPIP réduit sa priorité pour être sûr que celle tâche ne monopolise pas la file d’attente.

La fonction renvoie le numéro de travail ajouté ou 0 si aucun travail n’a été ajouté.

Supprimer un travail de la file

job_queue_remove($id_job)

$id_job est le numéro du travail en attente, tel que retourné par la fonction job_queue_add

La fonction retourne true si le travail a bien été trouvé et supprimé, false sinon.

Associer un travail à un objet éditorial

job_queue_link($id_job,$objets)

Avec les arguments :

  • $id_job : le numéro de travail en attente, tel que retourné par la fonction job_queue_add
  • $objets une liste d’objets sous la forme d’un tableau d’objets array(array('objet'=>'article','id_objet'=>23),...)

Lorsque des travaux sont associés à un objet, ils apparaissent sur la page de l’espace privé de cet objet, et les auteurs qui ont le droit de modifier l’objet peuvent aussi supprimer le travail avant son exécution.

Auteur cerdic Publié le : Mis à jour : 23/07/23

Traductions : English, français