Index: trac/Timeline.py
===================================================================
--- trac/Timeline.py	(revision 1238)
+++ trac/Timeline.py	(working copy)
@@ -33,7 +33,7 @@
     template_name = 'timeline.cs'
     template_rss_name = 'timeline_rss.cs'
 
-    def get_info(self, req, start, stop, maxrows, filters=AVAILABLE_FILTERS):
+    def get_info(self, req, start, stop, maxrows, filters=AVAILABLE_FILTERS, only_user=None):
         perm_map = {'tickets': perm.TICKET_VIEW, 'changeset': perm.CHANGESET_VIEW,
                     'wiki': perm.WIKI_VIEW, 'milestone': perm.MILESTONE_VIEW}
         filters = list(filters) # copy list so we can make modifications
@@ -43,20 +43,32 @@
         if not filters:
             return []
 
+        if only_user:
+            param1 = (start, stop, only_user)
+        else:
+            param1 = (start, stop)
+
         sql, params = [], []
         if 'changeset' in filters:
-            sql.append("SELECT time,rev,'','changeset',message,author"
+            query =   ("SELECT time,rev,'','changeset',message,author"
                        " FROM revision WHERE time>=%s AND time<=%s")
-            params += (start, stop)
+            if only_user: query += " AND author='%s'"
+            sql.append(query)
+            params += param1
+            
         if 'ticket' in filters:
-            sql.append("SELECT time,id,'','newticket',summary,reporter"
+            query =   ("SELECT time,id,'','newticket',summary,reporter"
                        " FROM ticket WHERE time>=%s AND time<=%s")
-            params += (start, stop)
-            sql.append("SELECT time,ticket,'','reopenedticket','',author "
+            if only_user: query += " AND reporter='%s'"
+            sql.append(query)
+            params += param1
+            query =   ("SELECT time,ticket,'','reopenedticket','',author "
                        "FROM ticket_change WHERE field='status' "
                        "AND newvalue='reopened' AND time>=%s AND time<=%s")
-            params += (start, stop)
-            sql.append("SELECT t1.time,t1.ticket,t2.newvalue,'closedticket',"
+            if only_user: query += " AND author='%s'"
+            sql.append(query)
+            params += param1
+            query =   ("SELECT t1.time,t1.ticket,t2.newvalue,'closedticket',"
                        "t3.newvalue,t1.author"
                        " FROM ticket_change t1"
                        "   INNER JOIN ticket_change t2 ON t1.ticket = t2.ticket"
@@ -66,11 +78,15 @@
                        " WHERE t1.field = 'status' AND t1.newvalue = 'closed'"
                        "   AND t2.field = 'resolution'"
                        "   AND t1.time >= %s AND t1.time <= %s")
-            params += (start,stop)
+            if only_user: query += " AND t1.author='%s'"
+            sql.append(query)
+            params += param1
         if 'wiki' in filters:
-            sql.append("SELECT time,-1,name,'wiki',comment,author"
+            query =   ("SELECT time,-1,name,'wiki',comment,author"
                        " FROM wiki WHERE time>=%s AND time<=%s")
-            params += (start, stop)
+            if only_user: query += " AND author='%s'"
+            sql.append(query)
+            params += param1
         if 'milestone' in filters:
             sql.append("SELECT completed AS time,-1,name,'milestone','',''" 
                        " FROM milestone WHERE completed>=%s AND completed<=%s")
@@ -148,7 +164,10 @@
         for f in filters:
             req.hdf.setValue('timeline.%s' % f, 'checked')
 
-        info = self.get_info(req, start, stop, maxrows, filters)
+        user = req.args.get('user', '')
+        req.hdf.setValue('timeline.user', user)
+
+        info = self.get_info(req, start, stop, maxrows, filters, user)
         for item in info:
             render_func = getattr(self, '_render_%s' % item['type'])
             item = render_func(req, item)

