Carnet Wiki

spip_cron_ajoute

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