« カスタムクエリのページング機能の不具合 | Main | チケット更新時のsubmitをフックする »

2008.10.13

カスタムクエリ画面で更新日を条件に抽出したい

 最近、かなりTracのソースをいじっているなぁ・・・。プラグインだけで完結して本体に手を加えずに済む場合もありますが、場合によってはTrac本体に手を加える場合も(まぁ、頑張ればプラグインだけで完結するものもあるとは思いますが)。

 ってことで、カスタムクエリの画面で、各Ticketの最終更新日を条件に抽出することができる機能の追加に挑戦。編集対象となるソースは、ticket/query.py

__init__関数内の

self.fields = TicketSystem(self.env).get_ticket_fields()

の次の行に
self.fields.append( { 'type':'text', 'name':'changetime', 'label':u'更新日', 'value': u'' } )

を追加。これにより、Queryページの条件指定コンボボックスに更新日の項目が追加されます。

リクエストを処理する(リクエストURLを構築する)_get_constraints(self, req)関数内の

ticket_fields.append('id')

の次の行に
ticket_fields.append('changetime')

を追加。この部分を忘れると、リクエストURLに含まれていてもサクッと無視されてしまいます(ここにたどり着くのに時間がかかりました・・・)。

 あとは、抽出するSQLを構築するためのget_constraint_sql(name, value, mode, neg)関数の

if name not in custom_fields:

の部分を、
if name == 'changetime':
    name = 'date(t.changetime,\'unixepoch\',\'localtime\')'
elif name not in custom_fields:

に置き換えればOK。

 もっとも、抽出条件の指定に関してデフォルトの動きを利用しているため、「に次が含まれる」「は次と等しい」などの選択肢が表示されてしまうのが難点ですが。日付で抽出となると、理想は「日付が一致」「日付が指定された範囲に含まれている」といった感じですかねぇ・・・。

#なお、日付のフォーマットはyyyy-MM-dd形式で行うこととなります。

name = 'strftime(\'%%Y/%%m/%%d\', date(t.changetime, \'unixepoch\', \'localtime\'))'

のような感じで書くと、SQLとしてはyyyy/MM/dd形式に直しているようなのですが、何故かヒットしてくれない・・・(SQLiteから直接実行した場合は期待通りの動きをしてくれるんですけどねぇ・・・)。内部で、バリデーションの対象になってしまっているのかも知れません。


※補足※
nameの処理を行った後、

value = re.sub('/','-',value)
で検索文字列内の"/"を"-"に置き換えるという方法もありますね。

|

« カスタムクエリのページング機能の不具合 | Main | チケット更新時のsubmitをフックする »

Subversion・Trac・etc.」カテゴリの記事

Comments

ピンポイントで欲しかった機能でした。
ありがとうございます。

ただ、このままですと、「表示項目」に「変更」のチェックボックスが2つ出てきてしまいますね。

get_all_columns関数の、

cols += ['time', 'changetime']

部分をいじればOKっぽいです。

私は登録日も対応したかったので、まるまる削除しました。

Posted by: shira | 2009.02.27 at 11:01

コメントありがとうございます。

初期バージョンでは、確かに「更新」が2列表示されるなどの現象が出ていました(^^;

作成日も含めて抽出できるようにした最新版を公開しましたので、よろしければ参考にしてください。

Posted by: syo | 2009.02.28 at 12:59

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/42757712

Listed below are links to weblogs that reference カスタムクエリ画面で更新日を条件に抽出したい:

» カスタムクエリ画面で更新日を条件に抽出したい(2) [気の向くままに・・・]
 カスタムクエリ画面で更新日を条件に抽出したいで、無理矢理更新日を条件に検索する [Read More]

Tracked on 2008.11.06 at 08:30

» カスタムクエリ画面で作成日を条件に抽出したい [気の向くままに・・・]
カスタムクエリ画面で更新日を条件に抽出したい カスタムクエリ画面で更新日を条件に [Read More]

Tracked on 2009.02.28 at 12:57

« カスタムクエリのページング機能の不具合 | Main | チケット更新時のsubmitをフックする »