J’utilise la solution mantis depuis pas mal d’années pour suivre l’ensemble des mes projets personnels, à ce titre j’ai déjà développé quelques plugins spécifiques à mes différents besoins.
 ( La grande majorité sont disponibles sur github ou sur ce blog )

J’ai de plus en plus de plugins qui nécessitent l’exécution de tâches planifiées ( cron ), et à part ajouter manuellement les crons de chaque plugin dans la crontab du serveur je n’ai pas trouvé de solution pratique sur mantis bugtracker pour gérer ces crons.

C’est donc l’occasion de faire un nouveau plugin qui va permettre de simplifier tout cela 😀

Ce plugin nécessite les droits d’administrateur pour pouvoir visualiser et configurer les informations

Principe de fonctionnement

Ce plugin va collecter l’ensemble des tâches planifiées de l’ensemble des autres plugins via un événement personnalisé.
Il ne sera donc nécessaire que d’entrer la page de ce module dans la crontab de votre serveur
Nous verrons dans la dernière partie comment ajouter des tâches planifiées via un plugin.
Il ne gère pour l’instant pas la saisie d’url via le back-office, ce sera peut être implémenté dans une version future.


Apparence et configuration

Une fois le plugin installé un nouvel élément est visible dans le menu « Gestion des tâches planifiées »

Ajout d’un lien dans le me

En cliquant dessus la page de configuration s’affiche.

Sur cette page on peut voir les instructions pour configurer la tâche planifiée du module

On peut également activer ou non la tâche de contrôle , celle-ci permets de connaître la dernière exécution du fichier sur le serveur

Ou activer le mode debug qui va logguer les tâches planifiées et leur exécution dans un fichier de log.

Configuration des crons

Pour finir la liste des tâches planifiées à traiter sont listées avec des informations complémentaires sur leur provenance, source et fréquence

Liste des crons

Ajouter des tâches planifiées via un plugin

Voici à présent comment procéder techniquement pour ajouter des tâches planifiées dans votre plugin.
J’ai mis l’ensemble des informations directement dans le code qui est relativement parlant

 

class HhSamplePlugin extends MantisPlugin
{
 
    public function register()
    {
        $this->name = plugin_lang_get('title');
        $this->description = plugin_lang_get('description');
        $this->version = '0.1.0';
        $this->requires = array(
            'MantisCore' => '2.0.0',
        );
        #Cron Manager
        $this->uses = array(
            'HhCronManager' => '0.1.0'
        );
 
        $this->author = 'Hennes Hervé';
        $this->contact = '[email protected]';
        $this->url = 'https://www.h-hennes.fr/blog/';
    }
 
    /**
     * plugin hooks
     * @return array
     */
    function hooks()
    {
        global $g_event_cache;
        #Custom Hook from plugin HhCronManager
        if ( array_key_exists('EVENT_PLUGIN_HHCRONMANAGER_COLLECT_CRON',$g_event_cache)){
            $t_hooks['EVENT_PLUGIN_HHCRONMANAGER_COLLECT_CRON'] = 'collect_cron';
        }
 
        return $t_hooks;
    }
 
    /**
     * Executed by module HhCronManager when collecting plugins cron tasks
     * @param string $eventName
     * @return array
     */
    public function collect_cron($eventName)
    {
        $pluginName = str_replace('Plugin','',get_class($this));
        return [
            # 1 Tableau = 1 tache, il est possible d'en ajouter autant que souhaité
            [
                'plugin' => $pluginName, #Nom du plugin
                'code' => $pluginName . '_cron_reminder',#Code unique pour le cron
                'frequency' => '0 * * * * *',#cron expression
                'description' => 'description de la page',#description
                'url' => 'cron',#nom de la page du plugin à appeller , attention elle sera appellée sous la forme , www.mantisurl.com/plugin.php?page=PluginName/url
            ],
        ];
    }
 
}

Vous pouvez télécharger le plugin depuis github :https://github.com/nenes25/mantisbt_cronmanager

Attention à bien suivre les instructions d’installation, car ce plugin utilise des librairies externes installée via composer 😉

N’hésitez pas à me faire des retours ou des optimisations possibles via les commentaires ou via github