« XML-RPC Pluginで関数を追加する | Main | 医療制度 »

2008.09.21

ログインユーザに関するTicket一覧

 「チケットを見る」をクリックした場合に表示されるリストにおいては$USERがログインユーザ名に自動的に置き換えられます。しかし、queryリンクの場合は反応してくれません・・・(TicketQueryマクロの場合は0.11以降は$USERは反応します)。

 URLパラメータなしでqueryを呼び出した場合&TicketQueryマクロの場合と、queryリンクの場合の違いを見るため、とりあえず、ticket/query.pyのソースを確認。
 URLパラメータなしでqueryを呼び出した時は、

if user:
    qstring = qstring.replace('$USER', user)
constraints = Query.from_string(self.env, qstring).constraints

という感じで、明示的に文字列置換を行ってからQueryの再構築を行っているようです。TicketQueryマクロの場合は・・・辿っていくと、get_sql(self, req=None, cached_ids=None):関数のところですかね。SQL文を構築するタイミングで置き換えているような感じです。

 TicketQueryマクロはそれはそれで便利なのですが、表示対象件数が多くなってきた時に改ページ機能がない(maxを指定しなければ全件が表示されますが、やはり、queryページのように指定した件数単位での表示にしたいところ)というのがネック。

 ってことで、何とかqueryリンクでも$USERが反応するようにならないか、と挑戦してみることに。試しに、ticket/query.pyのprocess_request関数のif not constraints and not 'order' in req.args:に対するelse文として、

else:
  if req.authname and req.authname != 'anonymous':
    user = req.authname
    if user:
      for field,vals in constraints.items():
        for val in vals:
          if val == '$USER':
            vals.remove(val)
            vals.append(user)
            constraints[field] = vals


のような感じで書くと、とりあえずそれっぽい動きはしてくれました・・・が、こんなのでいいんだろうか??(^^; どこか他に影響が及んでいそうな気がしないでもないです。

※constraintsの中身は、String/Listのペアで値が格納されているようなので、上記のような感じのループ構成になっています。

ただ、「~で終わる」の扱いになってしまう場合があるような(問題なく表示される場合もあるっぽいですが、その動きの違いがよくわからない・・・)。

|

« XML-RPC Pluginで関数を追加する | Main | 医療制度 »

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

Comments

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/42532241

Listed below are links to weblogs that reference ログインユーザに関するTicket一覧:

« XML-RPC Pluginで関数を追加する | Main | 医療制度 »