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).

Trac et format de date avec Lighttpd

Suite au précédent billet, et poursuivant l’installation/configuration de Trac, je me suis heurté à un petit problème. Le format de date utilisé par défaut a la forme MM/JJ/AA, ce qui est assez pénible pour un usage fréquent. La plupart des documentations parlent d’Apache et de mod_python. Le changement est pourtant facile avec Lighttpd puisqu’il suffit d’ajouter une variable dans la configuration :
# /etc/lighttpd/conf-enabled/10-fastcgi.conf
server.modules += ( « mod_fastcgi » )
fastcgi.server = (
« /trac » =>
(« trac » => (
« socket » => « /tmp/trac-fastcgi.sock »,
« bin-path » => « /usr/share/pyshared/trac/web/fcgi_frontend.py »,
« check-local » => « disable »,
« bin-environment » => (
« TRAC_ENV » => « /var/lib/tracenv »,
« LC_TIME » => « fr_FR »
)
))
)

Trac c'est le bien(tm)

Comme vous le savez je suis rédacteur en chef de GLMF et à ce titre je passe pas mal de mon temps à organiser, traiter, relire, gérer les articles pour chaque numéro. Cela faisait longtemps que je cherchais un outil Web permettant de faciliter ce travail et d’avoir une vue globale mais également détaillée sur l’évolution de l’ensemble et de chaque article. J’ai finalement trouvé ma solution : Trac, le système de suivi de révisions et de gestion de projet.

Destiné, au départ, à la gestion de projet de développement, Trac s’adapte parfaitement à la gestion d’articles pour un magazine. J’avais, fut un temps, essayé DotProject sans grand succès (trop rigide, trop peu adaptable). Hop, petite procédure d’installation rapide sur Debian !

Tout d’abord l’installation du paquet :
% aptitude install trac
On passe ensuite à l’initialisation de l’environnement avec dans l’ordre le repository SVN et l’environnement de gestion de Trac :
% mkdir /var/lib/tracSVN
% svnadmin create /var/lib/tracSVN

% trac-admin /var/lib/tracenv initenv
% chown -R www-data /var/lib/tracenv

% trac-admin /var/lib/tracenv deploy /var/www/trac
Puis on configure Lighttpd :
# /etc/lighttpd/conf-enabled/10-fastcgi.conf

server.modules += ( « mod_fastcgi » )

fastcgi.server = (
« .php » =>
((
« bin-path » => « /usr/bin/php-cgi »,
« socket » => « /tmp/php.socket »,
« max-procs » => 2,
« idle-timeout » => 20,
« bin-environment » => (
« PHP_FCGI_CHILDREN » => « 4 »,
« PHP_FCGI_MAX_REQUESTS » => « 10000 »
),
« bin-copy-environment » => (
« PATH », « SHELL », « USER »
),
« broken-scriptfilename » => « enable »
)),
« /trac » =>
(« trac » => (
« socket » => « /tmp/trac-fastcgi.sock »,
« bin-path » => « /usr/share/pyshared/trac/web/fcgi_frontend.py »,
« check-local » => « disable »,
« bin-environment » => (« TRAC_ENV » => « /var/lib/tracenv »)
))
)
Ici on passe par FastCGI. La configuration intègre le support Trac/Python mais également PHP (pour dokuwiki (oui je préfère doku que le wiki de trac)). On ajoute ensuite l’authentification :
# /etc/lighttpd/conf-enabled/10-auth.conf
server.modules += ( « mod_auth » )
auth.debug = 2

$HTTP[« url »] =~ « ^/trac/ » {
auth.backend = « htpasswd »
auth.backend.htpasswd.userfile = « /var/lib/tracenv/htpasswd.htaccess »
auth.require = (« /trac/login » =>
(« method » => « basic »,
« realm » => « First project »,
« require » => « valid-user »
))
}
On oubli pas de passer le script Python en exécutable pour plaire à Lighttpd :
% chmod +x /usr/share/pyshared/trac/web/fcgi_frontend.py
On finalise l’authentification en ajoutant un utilisateur «admin» à qui on donne les droits adéquates :
% htpasswd -c /var/lib/tracenv/htpasswd.htaccess admin
% chown -R www-data /var/lib/travenv/htpasswd.htaccess
% trac-admin /var/lib/tracenv/ permission add admin TRAC_ADMIN
Ne reste plus qu’à relancer Lighttpd et à pointer le navigateur sur http://localhost/trac. On s’authentifie et bienvenue dans Trac.