Trac : coloriser les rapports en fonction du type

Comme il n’y a pas de mention ailleurs sur le web de ce type de manipulation… voici. Toujours entrain de faire mumuse avec Trac, j’ai remarqué que les rapports étaient systématiquement colorés en fonction de la priorité d’un ticket. Pour mal part j’avais plutôt besoin de repérer facilement les types de tickets.

En regardant la requête SQL de ce type de rapport on voit que la couleur est définie ainsi :
SELECT p.value AS __color__,
‘Milestone ‘||milestone AS __group__,
id AS ticket, summary, component, version, t.type AS type,
owner, keywords, reporter, status, priority,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = ‘priority’
WHERE status <> ‘closed’
ORDER BY (milestone IS NULL),milestone, component,
CAST(p.value AS int), keywords, time
La couleur découle d’une jointure entre la table enum et ticket. enum ? kesako ? Cette table contient tout ce qui est association valeur/chaîne : les conditions de résolution, les priorités et les types de tickets.

Ne reste plus qu’à regarder dans cette table avec l’outil sqlite3 :
% sqlite3 trac.db
SQLite version 3.5.9
Enter « .help » for instructions

sqlite> .schema enum
CREATE TABLE enum (
type text,
name text,
value text,
UNIQUE (type,name)
);

sqlite> select distinct(type) from enum;
priority
resolution
ticket_type

sqlite>
Et ont change la jointure dans la requête du rapport :
[…]
LEFT JOIN enum p ON p.name = t.type AND p.type = ‘ticket_type’
[…]
On peut ensuite changer, si nécessaire les couleurs elles-mêmes dans la CSS (paires color[1-6]-odd/color[1-6]-odd).