NewWorkflow: patch-newworkflow-r1064.diff
| File patch-newworkflow-r1064.diff, 89.2 KB (added by pkou <pkou at ua.fm>, 4 years ago) |
|---|
-
htdocs/css/timeline.css
30 30 /* Apply icon background-image twice to avoid hover-flicker in IE/Win */ 31 31 dt.changeset, dt.changeset a { background-image: url(../changeset.png) !important } 32 32 dt.newticket, dt.newticket a { background-image: url(../newticket.png) !important } 33 dt.resolvedticket, dt.resolvedticket a { background-image: url(../resolvedticket.png) !important } 34 dt.reopenedticket, dt.reopenedticket a { background-image: url(../reopenedticket.png) !important } 33 35 dt.closedticket, dt.closedticket a { background-image: url(../closedticket.png) !important } 34 36 dt.wiki, dt.wiki a { background-image: url(../wiki.png) !important } 35 37 dt.milestone, dt.milestone a { background-image: url(../milestone.png) !important } -
wiki-default/TracIni
22 22 See also: TracLogging 23 23 24 24 == [ticket] == 25 || workflow || Ticket workflow class. If not specified, it is ''trac.workflows.SimpleWorkflow'' || 25 26 || default_version || Default version for newly created tickets || 26 27 || default_severity || Default severity for newly created tickets || 27 28 || default_priority || Default priority for newly created tickets || … … 54 55 55 56 [[BR]] 56 57 ---- 57 See also: TracGuide, TracAdmin 58 No newline at end of file 58 See also: TracGuide, TracAdmin -
wiki-default/TracAdmin
23 23 permission add <user> <action> -- Add a new permission rule 24 24 permission remove <user> <action> -- Remove permission rule 25 25 component list -- Show available components 26 component add <name> <owner> -- Add a new component26 component add <name> <owner> [<qaowner>] -- Add a new component 27 27 component rename <name> <newname> -- Rename a component 28 28 component remove <name> -- Remove/uninstall component 29 component chown <name> <owner> -- Change component ownership29 component chown <name> <owner> [<qaowner>] -- Change component ownership 30 30 priority list -- Show possible ticket priorities 31 31 priority add <value> -- Add a priority value option 32 32 priority change <value> <newvalue> -- Change a priority value … … 41 41 version time <name> <time> -- Set version date/time 42 42 version remove <name> -- Remove version 43 43 milestone list -- Show milestones 44 milestone add <name> [ time]-- Add milestone44 milestone add <name> [<owner> [time]] -- Add milestone 45 45 milestone rename <name> <newname> -- Rename milestone 46 46 milestone time <name> <time> -- Set milestone date/time 47 milestone chown <name> <owner> -- Change milestone ownership 47 48 milestone remove <name> -- Remove milestone 48 49 }}} 49 50 -
scripts/trac-admin
290 290 291 291 # ## Component 292 292 _help_component = [('component list', 'Show available components'), 293 ('component add <name> <owner> ', 'Add a new component'),293 ('component add <name> <owner> [<qaowner>]', 'Add a new component'), 294 294 ('component rename <name> <newname>', 'Rename a component'), 295 295 ('component remove <name>', 'Remove/uninstall component'), 296 ('component chown <name> <owner> ', 'Change component ownership')]296 ('component chown <name> <owner> [<qaowner>]', 'Change component ownership')] 297 297 298 298 def complete_component (self, text, line, begidx, endidx): 299 299 if begidx in [16,17]: … … 309 309 try: 310 310 if arg[0] == 'list': 311 311 self._do_component_list() 312 elif arg[0] == 'add' and len(arg) ==3:312 elif arg[0] == 'add' and len(arg) in [3,4]: 313 313 name = arg[1] 314 314 owner = arg[2] 315 self._do_component_add(name, owner) 315 if len(arg) == 4: 316 qaowner = arg[3] 317 else: 318 qaowner = owner 319 self._do_component_add(name, owner, qaowner) 316 320 elif arg[0] == 'rename' and len(arg)==3: 317 321 name = arg[1] 318 322 newname = arg[2] … … 320 324 elif arg[0] == 'remove' and len(arg)==2: 321 325 name = arg[1] 322 326 self._do_component_remove(name) 323 elif arg[0] == 'chown' and len(arg) ==3:327 elif arg[0] == 'chown' and len(arg) in [3,4]: 324 328 name = arg[1] 325 329 owner = arg[2] 326 self._do_component_set_owner(name, owner) 330 if len(arg) == 4: 331 qaowner = arg[3] 332 else: 333 qaowner = owner 334 self._do_component_set_owner(name, owner, qaowner) 327 335 else: 328 336 self.do_help ('component') 329 337 except Exception, e: 330 338 print 'Component %s failed:' % arg[0], e 331 339 332 340 def _do_component_list(self): 333 data = self.db_execsql('SELECT name, owner FROM component')334 self.print_listing(['Name', 'Owner' ], data)341 data = self.db_execsql('SELECT name, owner, qaowner FROM component') 342 self.print_listing(['Name', 'Owner', 'QA Owner'], data) 335 343 336 def _do_component_add(self, name, owner ):337 data = self.db_execsql("INSERT INTO component VALUES('%s', '%s' )"338 % (name, owner))344 def _do_component_add(self, name, owner, qaowner): 345 data = self.db_execsql("INSERT INTO component VALUES('%s', '%s', '%s')" 346 % (name,owner,qaowner)) 339 347 340 348 def _do_component_rename(self, name, newname): 341 349 cnx = self.db_open() … … 360 368 data = self.db_execsql("DELETE FROM component WHERE name='%s'" 361 369 % (name)) 362 370 363 def _do_component_set_owner(self, name, owner ):371 def _do_component_set_owner(self, name, owner, qaowner): 364 372 cnx = self.db_open() 365 373 cursor = cnx.cursor () 366 374 cursor.execute('SELECT name FROM component WHERE name=%s', name) 367 375 data = cursor.fetchone() 368 376 if not data: 369 377 raise Exception("No such component '%s'" % name) 370 data = self.db_execsql("UPDATE component SET owner='%s' WHERE name='%s'"371 % (owner, name))378 data = self.db_execsql("UPDATE component SET owner='%s', qaowner='%s' WHERE name='%s'" 379 % (owner,qaowner,name)) 372 380 373 381 374 382 ## Permission … … 795 803 796 804 ## Milestone 797 805 _help_milestone = [('milestone list', 'Show milestones'), 798 ('milestone add <name> [ time]', 'Add milestone'),806 ('milestone add <name> [<owner> [time]]', 'Add milestone'), 799 807 ('milestone rename <name> <newname>', 800 808 'Rename milestone'), 809 ('milestone chown <name> <newowner>', 'Change milestone owner'), 801 810 ('milestone time <name> <time>', 'Set milestone date (Format: "Jun 3, 2003")'), 802 811 ('milestone remove <name>', 'Remove milestone')] 803 812 … … 805 814 806 815 if begidx in [15,17]: 807 816 comp = self.get_milestone_list () 817 elif begidx > 15 and line.startswith('milestone chown '): 818 comp = self.get_user_list() 808 819 elif begidx < 15: 809 comp = ['list','add','rename',' time','remove']820 comp = ['list','add','rename','chown','time','remove'] 810 821 return self.word_complete(text, comp) 811 822 812 823 def do_milestone(self, line): 813 self._do_mile_ver('milestone', line) 824 type = 'milestone' 825 arg = self.arg_tokenize(line) 826 try: 827 if arg[0] == 'list': 828 self._do_milestone_list() 829 elif arg[0] == 'add' and len(arg) in [2,3,4]: 830 name = arg[1] 831 self._do_mile_ver_add(type, name) 832 if len(arg) >= 3: 833 owner = arg[2] 834 self._do_mile_ver_chown(type, name, owner) 835 if len(arg) >= 4: 836 time = arg[3] 837 self._do_mile_ver_time(type, name, time) 838 elif arg[0] == 'rename' and len(arg)==3: 839 name = arg[1] 840 newname = arg[2] 841 self._do_mile_ver_rename(type, name, newname) 842 elif arg[0] == 'chown' and len(arg)==3: 843 name = arg[1] 844 owner = arg[2] 845 self._do_mile_ver_chown(type, name, owner) 846 elif arg[0] == 'time' and len(arg)==3: 847 name = arg[1] 848 time = arg[2] 849 self._do_mile_ver_time(type, name, time) 850 elif arg[0] == 'remove' and len(arg)==2: 851 name = arg[1] 852 self._do_mile_ver_remove(type, name) 853 else: 854 self.do_help (type) 855 except Exception, e: 856 print 'Command %s failed:' % arg[0], e 814 857 858 def _do_milestone_list(self): 859 data = self.db_execsql("SELECT name,owner,time FROM milestone ORDER BY time,name") 860 data = map(lambda x: (x[0], x[1], x[2] and time.strftime('%c', time.localtime(x[2]))), data) 861 #print data 862 self.print_listing(['Name', 'Owner', 'Time'], data) 815 863 864 816 865 ## Version 817 866 _help_version = [('version list', 'Show versions'), 818 867 ('version add <name> [time]', 'Add version'), … … 832 881 def do_version(self, line): 833 882 self._do_mile_ver('version', line) 834 883 835 # Milestone and Version are identical, methods884 # Milestone and Version are almost identical, methods 836 885 837 886 def _do_mile_ver(self, type, line): 838 887 arg = self.arg_tokenize(line) … … 923 972 else: 924 973 print >> sys.stderr, 'Unknown time format' 925 974 975 def _do_mile_ver_chown(self, type, name, owner): 976 data = self.db_execsql("UPDATE %s SET owner='%s' WHERE name='%s'" 977 % (type, owner, name)); 978 926 979 _help_upgrade = [('upgrade', 'Upgrade database to current version.')] 927 980 def do_upgrade(self, line): 928 981 arg = self.arg_tokenize(line) -
setup.py
198 198 author_email="info@edgewall.com", 199 199 license=LICENSE, 200 200 url=URL, 201 packages=['trac', 'trac.upgrades', 'trac.wikimacros', 'trac.mimeviewers'], 201 packages=['trac', 'trac.upgrades', 'trac.wikimacros', 'trac.mimeviewers', 202 'trac.workflows'], 202 203 data_files=[(_p('share/trac/templates'), glob('templates/*')), 203 204 (_p('share/trac/htdocs'), glob(_p('htdocs/*.*')) + [_p('htdocs/README')]), 204 205 (_p('share/trac/htdocs/css'), glob(_p('htdocs/css/*'))), -
trac/db_default.py
21 21 22 22 23 23 # Database version identifier. Used for automatic upgrades. 24 db_version = 724 db_version = 8 25 25 26 26 def __mkreports(reps): 27 27 """Utility function used to create report data in same syntax as the … … 125 125 ); 126 126 CREATE TABLE component ( 127 127 name text PRIMARY KEY, 128 owner text 128 owner text, 129 qaowner text 129 130 ); 130 131 CREATE TABLE milestone ( 131 132 id integer PRIMARY KEY, 132 133 name text, 133 134 time integer, 135 owner text, 134 136 descr text, 135 137 UNIQUE(name) 136 138 ); … … 209 211 """, 210 212 """ 211 213 SELECT p.value AS __color__, 212 versionAS __group__,213 id AS ticket, summary, component, version, severity,214 (CASE WHEN IFNULL(version, '') = '' THEN 'Not Specified' ELSE 'Version ' || version END) AS __group__, 215 id AS ticket, summary, component, milestone, severity, 214 216 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 215 217 time AS created, 216 218 changetime AS _changetime, description AS _description, … … 218 220 FROM ticket t, enum p 219 221 WHERE status IN ('new', 'assigned', 'reopened') 220 222 AND p.name = t.priority AND p.type = 'priority' 221 ORDER BY ( version IS NULL),version, p.value, severity, time223 ORDER BY (IFNULL(version, '') = '') DESC,version, p.value, severity, time 222 224 """), 223 225 #---------------------------------------------------------------------------- 224 ('A llTickets by Milestone',226 ('Active Tickets by Milestone', 225 227 """ 226 228 This report shows how to color results by priority, 227 229 while grouping results by milestone. … … 231 233 """, 232 234 """ 233 235 SELECT p.value AS __color__, 234 milestone||' Release'AS __group__,236 (CASE WHEN IFNULL(milestone, '') = '' THEN 'Not Assigned' ELSE milestone||' Release' END) AS __group__, 235 237 id AS ticket, summary, component, version, severity, 236 238 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 237 239 time AS created, … … 240 242 FROM ticket t, enum p 241 243 WHERE status IN ('new', 'assigned', 'reopened') 242 244 AND p.name = t.priority AND p.type = 'priority' 243 ORDER BY ( milestone IS NULL),milestone, p.value, severity, time245 ORDER BY (IFNULL(milestone, '') = '') DESC,milestone, p.value, severity, time 244 246 """), 245 247 #---------------------------------------------------------------------------- 246 248 ('Assigned, Active Tickets by Owner', … … 248 250 List assigned tickets, group by ticket owner, sorted by priority. 249 251 """, 250 252 """ 251 252 253 SELECT p.value AS __color__, 253 ownerAS __group__,254 id AS ticket, summary, component, milestone, severity, time AS created,254 (CASE WHEN IFNULL(owner, '') = '' THEN 'Not Assigned' ELSE owner END) AS __group__, 255 id AS ticket, summary, component, version, milestone, severity, time AS created, 255 256 changetime AS _changetime, description AS _description, 256 257 reporter AS _reporter 257 258 FROM ticket t,enum p 258 259 WHERE status = 'assigned' 259 260 AND p.name=t.priority AND p.type='priority' 260 ORDER BY owner, p.value, severity, time261 ORDER BY (IFNULL(owner, '') = '') DESC, owner, p.value, severity, time 261 262 """), 262 263 #---------------------------------------------------------------------------- 263 264 ('Assigned, Active Tickets by Owner (Full Description)', … … 268 269 """ 269 270 SELECT p.value AS __color__, 270 271 owner AS __group__, 271 id AS ticket, summary, component, milestone, severity, time AS created,272 id AS ticket, summary, component, version, milestone, severity, time AS created, 272 273 description AS _description_, 273 274 changetime AS _changetime, reporter AS _reporter 274 275 FROM ticket t, enum p … … 283 284 """, 284 285 """ 285 286 SELECT p.value AS __color__, 286 t.milestoneAS __group__,287 (CASE WHEN IFNULL(t.milestone, '') = '' THEN 'Not Assigned' ELSE t.milestone || ' Release' END) AS __group__, 287 288 (CASE status 288 289 WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;' 289 290 ELSE … … 295 296 time AS _time,reporter AS _reporter 296 297 FROM ticket t,enum p 297 298 WHERE p.name=t.priority AND p.type='priority' 298 ORDER BY ( milestone IS NULL), milestone DESC, (status = 'closed'),299 ORDER BY (IFNULL(milestone, '') = '') DESC, milestone DESC, (status = 'closed'), 299 300 (CASE status WHEN 'closed' THEN modified ELSE -p.value END) DESC 300 301 """), 301 302 #---------------------------------------------------------------------------- … … 308 309 """ 309 310 SELECT p.value AS __color__, 310 311 (CASE status WHEN 'assigned' THEN 'Assigned' ELSE 'Owned' END) AS __group__, 311 id AS ticket, summary, component, version, milestone,312 id AS ticket, summary, component, status, version, milestone, 312 313 severity, priority, time AS created, 313 314 changetime AS _changetime, description AS _description, 314 315 reporter AS _reporter 315 316 FROM ticket t, enum p 316 WHERE t.status IN ('new', 'assigned', 'reopened')317 WHERE t.status <> 'closed' 317 318 AND p.name = t.priority AND p.type = 'priority' AND owner = '$USER' 318 319 ORDER BY (status = 'assigned') DESC, p.value, milestone, severity, time 319 320 """), … … 338 339 WHERE status IN ('new', 'assigned', 'reopened') 339 340 AND p.name = t.priority AND p.type = 'priority' 340 341 ORDER BY (owner = '$USER') DESC, p.value, milestone, severity, time 342 """), 343 #---------------------------------------------------------------------------- 344 ('Open Tickets, Mine first', 345 """ 346 * List all not closed tickets by priority. 347 * Show all tickets owned by the logged in user in a group first. 348 """, 349 """ 350 SELECT p.value AS __color__, 351 (CASE owner 352 WHEN '$USER' THEN 'My Tickets' 353 ELSE 'Open Tickets' 354 END) AS __group__, 355 id AS ticket, summary, component, status, version, milestone, severity, 356 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 357 time AS created, 358 changetime AS _changetime, description AS _description, 359 reporter AS _reporter 360 FROM ticket t, enum p 361 WHERE status <> 'closed' 362 AND p.name = t.priority AND p.type = 'priority' 363 ORDER BY (owner = '$USER') DESC, p.value, milestone, severity, time 364 """), 365 #---------------------------------------------------------------------------- 366 ('Open Tickets by Version', 367 """ 368 * List all not closed tickets by priority. 369 * Group results by version. 370 """, 371 """ 372 SELECT p.value AS __color__, 373 (CASE WHEN IFNULL(version, '') = '' THEN 'Not Specified' ELSE 'Version ' || version END) AS __group__, 374 id AS ticket, summary, component, status, milestone, severity, 375 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 376 time AS created, 377 changetime AS _changetime, description AS _description, 378 reporter AS _reporter 379 FROM ticket t, enum p 380 WHERE status <> 'closed' 381 AND p.name = t.priority AND p.type = 'priority' 382 ORDER BY (IFNULL(version, '') = '') desc,version, p.value, severity, time 383 """), 384 #---------------------------------------------------------------------------- 385 ('Open Tickets by Milestone', 386 """ 387 * List all not closed tickets by priority. 388 * Group results by milestone. 389 """, 390 """ 391 SELECT p.value AS __color__, 392 (CASE WHEN IFNULL(milestone, '') = '' THEN 'Not Assigned' ELSE milestone||' Release' END) AS __group__, 393 id AS ticket, summary, component, status, version, severity, 394 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 395 time AS created, 396 changetime AS _changetime, description AS _description, 397 reporter AS _reporter 398 FROM ticket t, enum p 399 WHERE status <> 'closed' 400 AND p.name = t.priority AND p.type = 'priority' 401 ORDER BY (IFNULL(milestone, '') = '') DESC,milestone, p.value, severity, time 402 """), 403 #---------------------------------------------------------------------------- 404 ('Open Tickets by Owner', 405 """ 406 List not closed tickets, group by ticket owner, sorted by priority. 407 """, 408 """ 409 SELECT p.value AS __color__, 410 (CASE WHEN IFNULL(owner, '') = '' THEN 'Not Assigned' ELSE owner END) AS __group__, 411 id AS ticket, summary, component, status, version, milestone, severity, 412 time AS created, changetime AS _changetime, description AS _description, 413 reporter AS _reporter 414 FROM ticket t,enum p 415 WHERE status <> 'closed' 416 AND p.name=t.priority AND p.type='priority' 417 ORDER BY (IFNULL(owner, '') = '') DESC, owner, p.value, severity, time 418 """), 419 #---------------------------------------------------------------------------- 420 ('Open Tickets by Status', 421 """ 422 * List all not closed tickets by priority. 423 * Group results by status. 424 """, 425 """ 426 SELECT p.value AS __color__, 427 status AS __group__, 428 id AS ticket, summary, component, version, milestone, severity, owner, 429 time AS created, 430 changetime AS _changetime, description AS _description, 431 reporter AS _reporter 432 FROM ticket t, enum q, enum p 433 WHERE status <> 'closed' 434 AND q.name = t.status AND q.type = 'status' 435 AND p.name = t.priority AND p.type = 'priority' 436 ORDER BY q.value, p.value, severity, time 437 """), 438 #---------------------------------------------------------------------------- 439 ('Resolved Tickets, Mine first', 440 """ 441 * List all resolved tickets by priority. 442 * Show all tickets owned by the logged in user in a group first. 443 """, 444 """ 445 SELECT p.value AS __color__, 446 (CASE owner 447 WHEN '$USER' THEN 'My Tickets' 448 ELSE 'Active Tickets' 449 END) AS __group__, 450 id AS ticket, summary, component, version, milestone, severity, 451 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 452 time AS created, 453 changetime AS _changetime, description AS _description, 454 reporter AS _reporter 455 FROM ticket t, enum p 456 WHERE status = 'resolved' 457 AND p.name = t.priority AND p.type = 'priority' 458 ORDER BY (owner = '$USER') DESC, p.value, milestone, severity, time 459 """), 460 #---------------------------------------------------------------------------- 461 ('Resolved Tickets by Milestone', 462 """ 463 List resolved tickets, sorted by priority, grouped by milestone 464 """, 465 """ 466 SELECT p.value AS __color__, 467 (CASE WHEN IFNULL(milestone, '') = '' THEN 'Not Assigned' ELSE milestone||' Release' END) AS __group__, 468 id AS ticket, summary, component, version, severity, 469 (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, 470 time AS created, 471 changetime AS _changetime, description AS _description, 472 reporter AS _reporter 473 FROM ticket t, enum p 474 WHERE status = 'resolved' 475 AND p.name = t.priority AND p.type = 'priority' 476 ORDER BY (IFNULL(milestone, '') = '') DESC,milestone, p.value, severity, time 477 """), 478 #---------------------------------------------------------------------------- 479 ('Resolved Tickets by Owner', 480 """ 481 List resolved tickets, group by ticket owner, sorted by priority. 482 """, 483 """ 484 SELECT p.value AS __color__, 485 (CASE WHEN IFNULL(owner, '') = '' THEN 'Not Assigned' ELSE owner END) AS __group__, 486 id AS ticket, summary, component, version, milestone, severity, time AS created, 487 changetime AS _changetime, description AS _description, 488 reporter AS _reporter 489 FROM ticket t,enum p 490 WHERE status = 'resolved' 491 AND p.name=t.priority AND p.type='priority' 492 ORDER BY (IFNULL(owner, '') = '') DESC, owner, p.value, severity, time 493 """), 494 #---------------------------------------------------------------------------- 495 ('Completed Tickets by Milestone (Full Description)', 496 """ 497 Release Notes: List verified and closed tickets, group by milestone, include description. 498 """, 499 """ 500 SELECT p.value AS __color__, 501 (CASE WHEN IFNULL(milestone, '') = '' THEN 'Not Assigned' ELSE milestone||' Release' END) AS __group__, 502 id AS ticket, summary, component, status, version, severity, time AS created, 503 description AS _description_, 504 changetime AS _changetime, reporter AS _reporter 505 FROM ticket t, enum p 506 WHERE status IN ('verified', 'closed') 507 AND p.name = t.priority AND p.type = 'priority' 508 ORDER BY (IFNULL(milestone, '') = '') DESC,milestone, p.value, severity, time 341 509 """)) 342 510 343 511 … … 347 515 348 516 # (table, (column1, column2), ((row1col1, row1col2), (row2col1, row2col2))) 349 517 data = (('component', 350 ('name', 'owner' ),351 (('component1', 'somebody' ),352 ('component2', 'somebody' ))),518 ('name', 'owner', 'qaowner'), 519 (('component1', 'somebody', 'qasomebody'), 520 ('component2', 'somebody', 'qasomebody'))), 353 521 ('milestone', 354 522 ('name', 'time'), 355 523 (('', 0), … … 367 535 (('status', 'new', 1), 368 536 ('status', 'assigned', 2), 369 537 ('status', 'reopened', 3), 370 ('status', 'closed', 4), 538 ('status', 'resolved', 4), 539 ('status', 'verified', 5), 540 ('status', 'closed', 6), 371 541 ('resolution', 'fixed', 1), 372 542 ('resolution', 'invalid', 2), 373 543 ('resolution', 'wontfix', 3), … … 426 596 ('project', 'footer', 427 597 ' Visit the Trac open source project at<br />' 428 598 '<a href="http://trac.edgewall.com/">http://trac.edgewall.com/</a>'), 599 ('ticket', 'workflow', 'trac.workflows.QaRmtWorkflow'), 429 600 ('ticket', 'default_version', ''), 430 601 ('ticket', 'default_severity', 'normal'), 431 602 ('ticket', 'default_priority', 'normal'), -
trac/Milestone.py
60 60 if not group: 61 61 queries['all_tickets'] = env.href.query({'milestone': milestone}) 62 62 queries['active_tickets'] = env.href.query({ 63 'milestone': milestone, 'status': ['new', 'assigned', 'reopened' ]63 'milestone': milestone, 'status': ['new', 'assigned', 'reopened', 'resolved'] 64 64 }) 65 65 queries['closed_tickets'] = env.href.query({ 66 'milestone': milestone, 'status': 'closed'66 'milestone': milestone, 'status': ['closed', 'verified'] 67 67 }) 68 68 else: 69 69 queries['all_tickets'] = env.href.query({ … … 71 71 }) 72 72 queries['active_tickets'] = env.href.query({ 73 73 'milestone': milestone, grouped_by: group, 74 'status': ['new', 'assigned', 'reopened' ]74 'status': ['new', 'assigned', 'reopened', 'resolved'] 75 75 }) 76 76 queries['closed_tickets'] = env.href.query({ 77 77 'milestone': milestone, grouped_by: group, 78 'status': 'closed'78 'status': ['closed', 'verified'] 79 79 }) 80 80 return queries 81 81 82 82 def calc_ticket_stats(tickets): 83 83 total_cnt = len(tickets) 84 active = [ticket for ticket in tickets if ticket['status'] != 'closed' ]84 active = [ticket for ticket in tickets if ticket['status'] != 'closed' and ticket['status'] != 'verified'] 85 85 active_cnt = len(active) 86 86 closed_cnt = total_cnt - active_cnt 87 87 … … 116 116 if datestr: 117 117 date = self.parse_date(datestr) 118 118 descr = self.args.get('descr', '') 119 owner = self.args.get('owner', '') 119 120 if not id: 120 self.create_milestone(name, date, descr )121 self.create_milestone(name, date, descr, owner) 121 122 else: 122 self.update_milestone(id, name, date, descr )123 self.update_milestone(id, name, date, descr, owner) 123 124 elif id: 124 125 self.req.redirect(self.env.href.milestone(id)) 125 126 else: … … 141 142 'Invalid Date Format') 142 143 return seconds 143 144 144 def create_milestone(self, name, date=0, descr='' ):145 def create_milestone(self, name, date=0, descr='', owner=''): 145 146 self.perm.assert_permission(perm.MILESTONE_CREATE) 146 147 if not name: 147 148 raise TracError('You must provide a name for the milestone.', 148 149 'Required Field Missing') 149 150 cursor = self.db.cursor() 150 151 self.log.debug("Creating new milestone '%s'" % name) 151 cursor.execute("INSERT INTO milestone (id, name, time, descr ) "152 "VALUES (NULL, %s, %d, %s )", name, date, descr)152 cursor.execute("INSERT INTO milestone (id, name, time, descr, owner) " 153 "VALUES (NULL, %s, %d, %s, %s)", name, date, descr, owner) 153 154 self.db.commit() 154 155  
