Bon, j'ai réussi et ce n'est finalement pas si compliqué que cela.
Ce qui est regrettable c'est de ne pas avoir un belle documentation pour comprendre le principe et l'appliquer sur ses modules. Donc je m'en occupe ici.
[h]Mise en place d'une tâche pseudocron[/h]
Une fois votre module développé, vous souhaitez peut-être mettre en place des tâches automatisées pour différentes raisons : nettoyage de données, vérification régulière, etc.
La première méthode à laquelle on pense est l'usage de tâches Cron. Ces tâches sont liées au système et pas directement au site. Ainsi en cas de changement de serveur, il se peut que les tâches cron ne soient pas répliquées... et patatra.
CMSMS a la solution : les tâches pseudocron. Ces tâches ne sont pas nécessairement exécutées à la seconde prêt (contrairement aux tâches cron), mais de manière régulière en fonction de l'activité de votre site Internet (visites).
Comment mettre en place une tâche ?
Tout d'abord je vais appeler mon module dans ce tutoriel : Test.
Ainsi pour ajouter un pseudocron à votre module Test, vous devez faire ceci :
Dans le fichier
Test.module.php, vous devez ajouter ceci :
Code :
[== PHP ==]
public function HasCapability($capability, $params = array())
{
if( $capability == 'tasks' ) return TRUE;
return FALSE;
}
public function get_tasks()
{
return new TestMaTacheTask();
}
Ça va faire en sorte de dire à CMSMS que votre module supporte les tâches pseudocron et même lui dire qu'elle est cette ou ces tâches (ici une seule).
Ensuite vous devez créer une classe dans
(site)/modules/Test/lib/ avec le nom de votre classe tel que défini ci dessus. Ici
class.TestMaTacheTask.php.
Ce qui est très important c'est la présence à la fin de votre nom de fichier du mot-clé « Task ». C'est ce qui va permettre à CMSMS de lister les tâches simplement.
Dans ce fichier vous allez y mettre ceci :
Code :
[== PHP ==]
<?php
class TestMaTacheTask implements CmsRegularTask
{
public function get_name()
{
return get_class();
}
public function get_description()
{
return 'Description de la tâche.';
}
public function test($time = '')
{
// Instantiation du module
$test = cms_utils::get_module('Test');
// Récupération de la dernière date d'exécution de la tâche
if (!$time)
{
$time = time();
}
$last_execute = $test->GetPreference('MaVariableDeTestDeDerniereExecution');
// Définition de la périodicité de la tâche (24h ici)
if ( ($time - 24*60*60 ) >= $last_execute )
{
return TRUE;
}
return FALSE;
}
public function execute($time = '')
{
if (!$time)
{
$time = time();
}
$test = cms_utils::get_module('Test');
// Ce qu'il y a à exécuter ici
return true; // Ou false si ça plante
}
public function on_success($time = '')
{
if (!$time)
{
$time = time();
}
$test = cms_utils::get_module('Test');
$test->SetPreference('MaVariableDeTestDeDerniereExecution', $time);
$test->Audit('','Test','Ce que ça vient de faire');
}
public function on_failure($time = '')
{
$test->Audit('','Test','Ca a planté');
}
}
?>
Cette classe comporte les fonctions suivantes :
- get_name : Retourne le nom de la tâche (ici c'est automatiquement le nom de la classe).
- get_description : Retourne la description de la tâche.
- test : On teste si la tâche doit être exécutée et si oui à quelle périodicité.
- execute : On exécute la tâche que l'on veut.
- on_success : Si la tâche s'est exécutée sans erreur.
- on_failure : Si la tâche a planté.
Vous aurez noté qu'il faut créer la « préférence »
MaVariableDeTestDeDerniereExecution dans le
module.install.php ou ailleurs afin que la tâche s'exécute convenablement.
Dans les
Paramètres globaux »
Paramètres avancés, on peut modifier un paramètre qui indique à quelle fréquence le système va tenter de gérer les tâches régulières. Bien entendu si vous voulez qu'une tâche s'exécute toutes les heures sur votre site et que vous avez un visiteur par jour ça ne devrait pas fonctionner. Les tâches ne s'exécutent que s'il y a de l'activité sur le site (visiteurs ou administrateurs).
Un petit vidage de cache (ça ne mange pas de pain) et tout devrait rouler.