Changeset 796

Show
Ignore:
Timestamp:
05/30/06 23:24:39 (2 years ago)
Author:
mgood
Message:

PlannedMilestonesMacro:

  • use the Milestone model API to be cross-DB compatible and preserve proper sorting (fixes #158, #213, #235, #398)
  • use Markup to make sure HTML is properly escaped for output
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plannedmilestonesmacro/0.9/PlannedMilestones.py

    r401 r796  
    11from StringIO import StringIO 
    2 import re 
    3 from time import localtime, strftime, time 
    4 import os 
     2from trac.util import Markup, format_date 
     3from trac.ticket import Milestone 
    54 
    65def execute(hdf, txt, env): 
    76    out = StringIO() 
    8     db = env.get_db_cnx() 
    9  
    10     query = "SELECT name, due, description FROM milestone " \ 
    11             "WHERE name != '' " \ 
    12             "AND (due IS NULL OR due = 0 OR due > %d) " \ 
    13             "ORDER BY (IFNULL(due, 0) = 0) ASC, due ASC, name" % time() 
    14  
    15     cursor = db.cursor() 
    16     cursor.execute(query) 
    177    out.write('<ul>\n') 
    18     while True: 
    19         row = cursor.fetchone() 
    20         if not row: 
    21             break 
    22         name = row['name'] 
    23         if row['due'] > 0: 
    24             date = strftime('%x', localtime(row['due'])) 
     8    for milestone in Milestone.select(env, include_completed=False): 
     9        if milestone.due > 0: 
     10            date = format_date(milestone.due) 
    2511        else: 
    26             date = "<i>(later)</i>" 
    27         if name == "": 
    28             continue 
    29         out.write('<li> %s - <a href="http://%s%s">%s</a>\n' % 
    30                   (date, os.getenv('HTTP_HOST'), 
    31                    env.href.milestone(name), name)) 
     12            date = Markup('<i>(later)</i>') 
     13        out.write(Markup('<li>%s - <a href="%s">%s</a></li>\n', 
     14                         date, env.href.milestone(milestone.name), 
     15                         milestone.name)) 
    3216    out.write('</ul>\n') 
    3317    return out.getvalue()