Carnet Wiki

spip_cron_ajoute

Ajouter des jobs

Ce code fonctionne pour SPIP2, mais je crois qu’il est bon aussi pour SPIP3 car job_queue n’a pas beaucoup bougé. Sinon signalez le ici !

Rq : C’est collé serré au plus près du PHP, ce qui permet de l’utiliser même dans des programmes qui n’incluent pas le noyau de SPIP, et à qui on fait bénéficier de la bibliothèque SPIP. Et donc du coup du coup ça utilise mysql_query. Si on en normalisait l’écriture, il faudrait utiliser mysql_insert ou mysql_insertq à la place du mysql_query, mais du coup ça ne serait plus utilisable en dehors du code SPIP.

  1. //
  2. // Procure un moyen de lancer des actions SPIP via la table spip_jobs, bénéficiant ainsi de ses librairies
  3. //
  4. // $inclure sert à définir quel fichier inclure avant l'appel ultérieur, si nécessaire
  5. // - soit on charge un fichier de définition de la fonction appelée seulement, et alors la fonction est surchargeable,
  6. // pour charger_fonction il faut un / à la fin
  7. // charge mesquelettes/admin/genie puis appelle admin_genie_jobtest_dist
  8. // spip_cron_ajoute ("jobtest", "spip_cron_ajoute queue jobtest avec inclure de admin/genie/", array ("hello", "new_world"), "admin/genie/");
  9. // - soit on charge un fichier de définition de plein de fonctions, et c'est tout le fichier qui est surchargeable
  10. // ça fait un include_spip du fichier du même nom, le .php est ajouté avant l'inclusion
  11. // spip_cron_ajoute ("jobtest", "spip_cron_ajoute queue jobtest dans admin/genie par cron", array ("hello", "new_world"), "admin/genie");
  12. //
  13.  
  14. function spip_cron_ajoute ($function, $description, $arguments, $delai, $inclure = "protected/jobs")
  15. {
  16.         $arguments = serialize($arguments);
  17.  
  18. static $when;
  19.         if (!isset($when))
  20.                 $when = 0;
  21.         // En cas d'appels successifs,
  22.         // si ya jamais de délai, $when reste à 0.
  23.         // Si ya un délai à un moment, when s'ancre dans le temps à partir de là
  24.         if ($delai // délai en secondes entre jobs consécutifs
  25.                 and !$when)
  26.                         $when = time();
  27.        
  28.         // cf plugins/auto/job_queue/inc function queue_add_job et queue_start_job
  29.         // 'inclure' vaut '' ou un fichier inclu avant l'appel par include_spip OU par charger_fonction si inclure se termine par '/'
  30.         $q = "INSERT INTO spip_jobs
  31.                         SET fonction = '".addslashes($function)."',
  32.                         descriptif = '".addslashes($description)."',
  33.                         args = '".addslashes($arguments)."',
  34.                         md5args = '".md5($arguments)."',
  35.                         inclure = '".addslashes($inclure)."',
  36.                         priorite = 0,
  37.                         date = '". date('Y-m-d H:i:s',$when)."',
  38.                         status = 1" // programmé, sinon en attente
  39.         ;
  40.         $r = mysql_query ($q);
  41.         if (!$r)
  42.              spip_log ("Oups pb spip_cron_ajoute avec $q ".mysql_error(), "cron_ajoute");
  43.        
  44.         $when += $delai;
  45. }

Télécharger

Exemples d’utilisation avec spip_lettres

  1. // avec plugin spip-lettres
  2.         spip_cron_ajoute ('lettres_envoyer_une_lettre_email', "1er Envoi lettre 33 à popol",
  3.                 array(33, 'popol@domaine.org'), 60, "inc/delivrer_hors_abo");
  4.  
  5. // ou, avec des champs à remplacer dans la lettre :
  6.         spip_cron_ajoute (
  7.                 'lettres_envoyer_une_lettre_email',
  8.                 "Envoi lettre 33 à $emaildest",
  9.                 array(33, $emaildest, array ('prenom'=>'Popaul', 'commande'=>'tel produit boutique')),
  10.                 60,
  11.                 "inc/delivrer_hors_abo");

Télécharger

JLuc - Mise à jour :29 mai 2014 à 19h07min