Voici mon dernier plugin pour Mantis Bugtracker.
L’objectif de celui-ci est d’envoyer en début de semaine à chaque développeur un récapitulatif des bugs à traiter.
Ce module se base sur le traitement des échéances des bugs ( champ due_date )
(C’est un module très basique, il est possible d’optimiser encore pleins de points 😉 )

Nous allons l’appeller « Reminder »
Voici le mode opératoire de création de ce module.

Pour commencer nous allons créer un dossier « Reminder » dans le dossier « plugins » de mantis BugtrackerVoici le fichier de déclaration du module « Reminder.php »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
	Plugin Reminder pour Mantis BugTracker :
 
	 - Envoi d'un email récapitulatif des échéances de la semaine aux développeurs
 
	 @version 0.1.0 - 2013-07-23
	 @autor Hervé Hennes <[email protected]>
*/
 
class ReminderPlugin extends MantisPlugin {
 
	function register() {
		$this->name        = 'ReminderPlugin';
		$this->description = 'Envoi d\'un email récapitulatif des échéances de la semaine aux développeurs';
		$this->version     = '0.1.0';
		$this->requires    = array('MantisCore'       => '1.2.0',);
		$this->author      = 'Hennes Hervé';
		$this->url         = 'http://www.h-hennes.fr';
	}	
}

Nous allons ensuite créer une page qui devra être appellée via une tâche cron tous les lundi matin pour envoyer le récapitulatif à chaque développeur pour bien commencer la semaine 🙂
Nous nommerons cette page reminder-cron.php et la plaçons cette page dans le dossier « pages » du module.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
	Plugin Reminder pour Mantis BugTracker :
		Page appellée via cron de manière hebdomadaire pour envoyer un récapitulatif des bugs en attente de traitement	
	@version 0.1.0 - 2013-07-23
	@autor Hervé Hennes <[email protected]>
*/
include('../../../config_inc.php');
 
    try {
        $db = new PDO('mysql:host='.$g_hostname.';dbname='.$g_database_name,$g_db_username,$g_db_password);
    }
    catch (Exception $e) {
        die($e->getMessage());
    }
 
    #Recherche des informations sur les bugs
    $query = $db->query('SELECT b.id,b.handler_id,b.summary,b.due_date,u.enabled,u.email,t.name
                        FROM mantis_bug_table b
                        LEFT JOIN mantis_user_table u ON ( b.handler_id = u.id )
                        LEFT JOIN mantis_project_table t ON ( t.id = b.project_id)
                        WHERE b.due_date <> 1
                        AND b.status < 80');
 
    $t_results = $query->fetchAll(PDO::FETCH_ASSOC);
    $t_date_now = date('Y-m-d');
    $t_date_var = explode('-',$t_date_now);
    $t_date_7_days = date('Y-m-d',mktime($t_date_var[1], $t_date_var[2], $t_date_var[0])+ 24*3600*7);
    $t_developpers_reminder_bugs = array();
 
    #traitement des bugs
    foreach ( $t_results as $t_result ) {
 
        $t_bug_date = date('Y-m-d',$t_result['due_date']);
        $t_result['date_formated'] = $t_bug_date;
 
        #Bug avec une échéance dépassée    
        if ( $t_bug_date < $t_date_now ) {        
            #On groupe les bugs par utilisateurs uniquement si ils sont actifs
            if ( $t_result['enabled'] == 1 )
                $t_developpers_reminder_bugs[$t_result['handler_id']]['overdue'][] = $t_result;
        }
 
        #Bug avec une échéance à venir dans les 7 prochains jours
        if ( $t_bug_date >= $t_date_now  && $t_bug_date <= $t_date_7_days) {
            #On groupe les bugs par utilisateurs uniquement si ils sont actifs
            if ( $t_result['enabled'] == 1 )
                $t_developpers_reminder_bugs[$t_result['handler_id']]['to_come'][] = $t_result;
        }
 
    }
 
    #envoi des emails récapitulatifs
    #@todo : Voir pour historiser les envois dans une table sql pour éviter les envois multiples
    foreach ( $t_developpers_reminder_bugs as $t_user_id => $t_bugs_arrays ) {
 
        $message = '<html>
          <head>
           <title>Récapitulatif Hebdommadaire</title>
          </head>
          <body>Bonjour,<br /><br />
                        Voici le récapitulatif des bugs à traiter cette semaine : <br />';
 
        if ( sizeof($t_bugs_arrays['overdue']) ) {
            $message .= '<br /><strong>Bugs dont la date d\'échéance est dépassée : </strong>
                        <ul>';
            foreach ($t_bugs_arrays['overdue'] as $t_overdue_bug ) 
                $message .= '<li>'.$t_overdue_bug['id'].'('.$t_overdue_bug['name'].') '.$t_overdue_bug['summary'].' - '.$t_overdue_bug['date_formated'].'</li>';
 
            $message .= '</ul>';    
 
            $t_user_email = $t_bugs_arrays['overdue'][0]['email'];
        }
 
        if ( sizeof($t_bugs_arrays['to_come']) ) {
            $message .= '<br /><strong>Bugs dont l\'échéance est cette semaine : </strong>
                        <ul>';
            foreach ($t_bugs_arrays['to_come'] as $t_coming_bug ) 
                $message .= '<li> '.$t_coming_bug['id'].' - ('.$t_coming_bug['name'].') '.$t_coming_bug['summary'].' - '.$t_coming_bug['date_formated'].'</li>';
 
            $message .= '</ul>';    
 
            $t_user_email = $t_bugs_arrays['to_come'][0]['email'];
        }
 
        $message .= '<br />Cordialement,<br />
                         <br />
                        </body></html>';
 
    #Envoi d'un email
     $t_from_email = 'Dev Europe Internet <[email protected]>';
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     $headers .= 'From: ' .$t_from_email. "\r\n";
     mail($t_user_email, 'Récapitulatif Hebdommadaire des bugs', $message, $headers);
 
    }

Pour télécharger ce module : Reminder-0.1.0

Une fois le module installé n’oubliez pas de programmer une tâche cron hebdomadaire pour exécuter cette page 😉