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 😉