忍者ブログ
想いとグチの吐き出し場

username表示をフルネーム表示に変更する@trac

2011/06/20 追記 ========

環境メモ
 ・Ubuntu 10.04.1 LTS
 ・Python 2.6.5
 ・trac-admin 0.11.7.ja1

========================

こちらも意外とwebに情報が転がってなくて苦戦したのでメモ。

tracではユーザ名がusername、つまりログイン時のユーザIDで表示される。
わかりづらい。
ユーザ設定でフルネームを設定してるんだから、それで表示してよ。
どっかフラグがあって それを変更すりゃいいんだろ、ということで始まった調査。


。。
。。。
。。。。
そんなフラグはないようです。(;´Д`)

まぁでも、情報は拾えた。
こちらにしたがってやってみると、ticketを更新するときの担当者や報告者がフルネーム表示されるようになった。

リンクをたどってこちらのプラグインをいれると、ticketのassign先を選択するところがフルネーム表示されるようになった。

さて、あとはticket新規作成時の担当者(restrict_owner = true なのよね。)だ。

これの 情報が ない。 (;´Д`)
というわけで、tracのソースにアタック。

デモ ワタシ python シラナイ。
ツイデニ Genshi モ シラナイ。
ソモソモ ニホンゴ モ アヤシイ。 (゜Д゜)

読むのは読めるけど、書くのはさすがにできない。=直せない。
苦節4日。
webのサンプルソースのコピペで、なんとか動くようになった。

ということで
思想とかスタイルとか皆無のコード。




次の2点を修正する
・/tracの/インストール/ディレクトリ/Trac-(バージョンとか).egg/trac/ticket/web_ui.py
-(before)-----

elif name == 'owner':
TicketSystem(self.env).eventually_restrict_owner(field, ticket)
type_ = field['type']
field['skip'] = True

if not ticket.exists:
field['label'] = _('Assign to')
if 'TICKET_MODIFY' in req.perm(ticket.resource):
field['skip'] = False
owner_field = field



-(after)-----

elif name == 'owner':
TicketSystem(self.env).eventually_restrict_owner(field, ticket)
type_ = field['type']
field['skip'] = True

# ADD FROM
# Get DisplayName of all known users
self.db = self.env.get_db_cnx()
name_map = {}
for username, name, email in self.env.get_known_users(self.db):
if name:
name_map[username] = name
field['name_map'] = name_map
# ADD TO

if not ticket.exists:
field['label'] = _('Assign to')
if 'TICKET_MODIFY' in req.perm(ticket.resource):
field['skip'] = False
owner_field = field



・/tracの/インストール/ディレクトリ/Trac-(バージョンとか).egg/trac/ticket/templates/ticket.html
-(before)-----
                     <option py:for="option in field.options"
selected="${value == option or None}"
py:content="option"></option>



-(after)-----

<py:if test="field.name_map">
<option py:for="option in field.options"
selected="${value == option or None}"
value="${option}"
py:content="field.name_map[option] or option"></option>
</py:if>
<py:if test="not field.name_map">
<option py:for="option in field.options"
selected="${value == option or None}"
py:content="option"></option>
</py:if>



当然のように 何の保障もいたしません。
PR