Edgewall Software

Ticket #890: Timeline.py.diff

File Timeline.py.diff, 4.4 KB (added by Arthur.Ward@…, 4 years ago)

Updated diff for Timeline.py that applies against 0.8.1

  • trac/Timeline.py

    old new  
    3434    template_name = 'timeline.cs' 
    3535    template_rss_name = 'timeline_rss.cs' 
    3636 
    37     def get_info (self, start, stop, maxrows, tickets, 
     37    def get_info (self, start, stop, maxrows, tickets, ticket_comments, 
    3838                  changeset, wiki, milestone): 
    3939        cursor = self.db.cursor () 
    4040 
    4141        tickets = tickets and self.perm.has_permission(perm.TICKET_VIEW) 
     42        ticket_comments = ticket_comments and self.perm.has_permission(perm.TICKET_VIEW) 
    4243        changeset = changeset and self.perm.has_permission(perm.CHANGESET_VIEW) 
    4344        wiki = wiki and self.perm.has_permission(perm.WIKI_VIEW) 
    4445        milestone = milestone and self.perm.has_permission(perm.MILESTONE_VIEW) 
     
    5253        REOPENED_TICKET = 4 
    5354        WIKI = 5 
    5455        MILESTONE = 6 
     56        TICKET_COMMENT = 7 
    5557 
    5658        q = [] 
    5759        if changeset: 
     
    9092                     "name AS message, '' AS author "  
    9193                     "FROM milestone WHERE time>=%s AND time<=%s" % 
    9294                     (start, stop)) 
     95        if ticket_comments: 
     96            q.append("SELECT time, ticket AS idata, '' AS tdata, 7 AS type, " 
     97                     "newvalue AS message, author AS author " 
     98                     "FROM ticket_change WHERE field = 'comment' " 
     99                     "AND time>=%s AND time<=%s" % (start, stop)) 
    93100 
    94101        q_str = string.join(q, ' UNION ALL ') 
    95102        q_str += ' ORDER BY time DESC' 
     
    100107 
    101108        # Make the data more HDF-friendly 
    102109        info = [] 
     110        tickets = {} 
    103111        while 1: 
    104112            row = cursor.fetchone() 
    105113            if not row: 
     
    168176            elif item['type'] == MILESTONE: 
    169177                item['href'] = util.escape(self.env.href.milestone(item['message'])) 
    170178                item['message'] = util.escape(item['message']) 
    171             else:               # TICKET 
     179            else:               # all the TICKET types 
    172180                item['href'] = util.escape(self.env.href.ticket(item['idata'])) 
     181                if item['type'] == TICKET_COMMENT: 
     182                # The following would be ok if there would be a cost effective way 
     183                # to get that change nunmber... 
     184                # item['href'] += '#change_%d' % item['change'] 
     185                    pass 
     186                else: 
     187                    tickets[(item['idata'], item['time'])] = 1 
    173188                msg = item['message'] 
    174189                item['shortmsg'] = util.escape(util.shorten_line(msg)) 
    175190                item['message'] = wiki_to_oneliner( 
     
    187202            item['message.rss'] = util.escape(item['message'] or '') 
    188203 
    189204            info.append(item) 
    190         return info 
     205        # Ok, the following line is maybe not Python 2.1 friendly, I don't know... 
     206        # return [ i for i in info if i['type'] != 7 or not tickets.has_key((i['idata'], i['time'])) ] 
     207        info2 = [] 
     208        for item in info: 
     209            if item['type'] != 7 or not tickets.has_key((item['idata'], item['time'])): 
     210                info2.append(item) 
     211        return info2 
    191212 
    192213    def render (self): 
    193214        self.perm.assert_permission(perm.TIMELINE_VIEW) 
     
    218239 
    219240        wiki = self.args.has_key('wiki')  
    220241        ticket = self.args.has_key('ticket') 
     242        ticket_comments = self.args.has_key('ticket_comments') 
    221243        changeset = self.args.has_key('changeset') 
    222244        milestone = self.args.has_key('milestone') 
    223245        if not (wiki or ticket or changeset or milestone): 
     
    227249            self.req.hdf.setValue('timeline.wiki', 'checked') 
    228250        if ticket: 
    229251            self.req.hdf.setValue('timeline.ticket', 'checked') 
     252        if ticket_comments: 
     253            self.req.hdf.setValue('timeline.ticket_comments', 'checked') 
    230254        if changeset: 
    231255            self.req.hdf.setValue('timeline.changeset', 'checked') 
    232256        if milestone: 
     
    247271            '?daysback=90&max=50%s&format=rss' % rssargs, 
    248272            'RSS Feed', 'application/rss+xml', 'rss') 
    249273 
    250         info = self.get_info (start, stop, maxrows, ticket, 
     274        info = self.get_info (start, stop, maxrows, ticket, ticket_comments, 
    251275                              changeset, wiki, milestone) 
    252276        util.add_dictlist_to_hdf(info, self.req.hdf, 'timeline.items') 
    253277        self.req.hdf.setValue('title', 'Timeline')