= The Trac Ticket System =
[[TracGuideToc]]

The Trac ticket database provides simple but effective tracking of issues and bugs within a project.

As the central project management element of Trac, tickets are used for '''project tasks''', '''feature requests''', '''bug reports''' and '''software support issues'''. 

As with the TracWiki, this subsystem has been designed with the goal of making user contribution and participation as simple as possible. It should be as easy as possible to report bugs, ask questions and suggest improvements.

An issue is assigned to a person who must resolve it or reassign the ticket to someone else.
All tickets can be edited, annotated, assigned, prioritized and discussed at any time.

== Ticket Fields ==

A  ticket contains the following information attributes:
 
 * '''Reporter''' — The author of the ticket.
 * '''Type''' — The nature of the ticket (for example, defect or enhancement request)

 * '''Component''' — The project module or subsystem this ticket concerns.
 * '''Version''' — Version of the project that this ticket pertains to.
 * '''Keywords''' — Keywords that a ticket is marked with.  Useful for searching and report generation.

 * '''Priority''' — The importance of this issue, ranging from ''trivial'' to ''blocker''.
 * '''Milestone''' — When this issue should be resolved at the latest.
 * '''Assigned to/Owner''' — Principal person responsible for handling the issue.
 * '''Cc''' — A comma-separated list of other users or E-Mail addresses to notify. ''Note that this does not imply responsiblity or any other policy.''
 
 * '''Resolution''' — Reason for why a ticket was closed. One of {{{fixed}}}, {{{invalid}}}, {{{wontfix}}}, {{{duplicate}}}, {{{worksforme}}}.
 * '''Status''' — What is the current status? One of {{{new}}}, {{{assigned}}}, {{{closed}}}, {{{reopened}}}.
 * '''Summary''' — A brief description summarizing the problem or issue.
 * '''Description''' — The body of the ticket. A good description should be specific, descriptive and to the point.

'''Note:''' Versions of Trac prior to 0.9 did not have the ''type'' field, but instead provided a ''severity'' field and different default values for the ''priority'' field. This change was done to simplify the ticket model by removing the somewhat blurry distinction between ''priority'' and ''severity''. However, the old model is still available if you prefer it: just add/modify the default values of the ''priority'' and ''severity'', and optionally hide the ''type'' field by removing all the possible values through [wiki:TracAdmin trac-admin].

'''Note:''' the [trac:TicketTypes type], [trac:TicketComponent component], version, priority and severity fields can be managed with [wiki:TracAdmin trac-admin] or with the [trac:WebAdmin WebAdmin] plugin.

'''Note:''' Description of the builtin ''priority'' values is available at [trac:TicketTypes#Whyistheseverityfieldgone TicketTypes]

== Changing and Commenting Tickets ==

Once a ticket has been entered into Trac, you can at any time change the
information by '''annotating''' the bug. This means changes and comments to
the ticket are logged as a part of the ticket itself.

When viewing a ticket, the history of changes will appear below the main ticket area.

''In the Trac project, we use ticket comments to discuss issues and tasks. This makes
understanding the motivation behind a design- or implementation choice easier,
when returning to it later.''

'''Note:''' An important feature is being able to use TracLinks and
WikiFormatting in ticket descriptions and comments. Use TracLinks to refer to
other issues, changesets or files to make your ticket more specific and easier
to understand.

'''Note:''' See TracNotification for how to configure email notifications of ticket changes.

'''Note:''' See TracWorkflow for information about the state transitions (ticket lifecycle), and how this workflow can be customized.

== Default Values for Drop-Down Fields ==

The option selected by default for the various drop-down fields can be set in [wiki:TracIni trac.ini], in the `[ticket]` section:

 * `default_component`: Name of the component selected by default
 * `default_milestone`: Name of the default milestone
 * `default_priority`: Default priority value
 * `default_severity`: Default severity value
 * `default_type`: Default ticket type
 * `default_version`: Name of the default version
 * `default_owner`: Name of the default owner, ''if no owner for the component has been set''

If any of these options are omitted, the default value will either be the first in the list, or an empty value, depending on whether the field in question is required to be set.  Some of these can be chosen through the [trac:WebAdmin WebAdmin] plugin in the "Ticket System" section (others in the "trac.ini" section).  The default owner for a ticket will be the component owner, if that is set, or `default_owner`, if not.


== Hiding Fields and Adding Custom Fields ==

Many of the default ticket fields can be hidden from the ticket web interface simply by removing all the possible values through [wiki:TracAdmin trac-admin]. This of course only applies to drop-down fields, such as ''type'', ''priority'', ''severity'', ''component'', ''version'' and ''milestone''.

Trac also lets you add your own custom ticket fields. See TracTicketsCustomFields for more information.


== Assign-to as Drop-Down List ==

If the list of possible ticket owners is finite, you can change the ''assign-to'' ticket field from a text input to a drop-down list. This is done by setting the `restrict_owner` option of the `[ticket]` section in [wiki:TracIni trac.ini] to “true”. In that case, Trac will use the list of all users who have accessed the project to populate the drop-down field.

To appear in the dropdown list, a user needs be registered with the project, ''i.e.'' a user session should exist in the database. Such an entry is automatically created in the database the first time the user submits a change in the project, for example when editing the user's details in the ''Settings'' page, or simply by authenticating if the user has a login. Also, the user must have `TICKET_MODIFY` [TracPermissions permissions].

'''Note:''' See [http://pacopablo.com/wiki/pacopablo/blog/set-assign-to-drop-down Populating Assign To Drop Down] on how to add user entries at database level

'''Note 2:''' If you need serious flexibility and aren't afraid of a little plugin coding of your own, see [http://trac-hacks.org/wiki/FlexibleAssignToPlugin FlexibleAssignTo] (disclosure: I'm the author)

'''Note 3:''' Activating this option may cause some performance degradation, read more about this in the [trac:TracPerformance#Configuration Trac performance] page.

== Preset Values for New Tickets ==

To create a link to the new-ticket form filled with preset values, you need to call the `/newticket?` URL with variable=value separated by &. 

Possible variables are :

 * '''type''' — The type droplist
 * '''reporter''' — Name or email of the reporter
 * '''summary''' — Summary line for the ticket
 * '''description''' — Long description of the ticket
 * '''component''' — The component droplist
 * '''version''' — The version droplist
 * '''severity''' — The severity droplist
 * '''keywords''' — The keywords 
 * '''priority''' — The priority droplist
 * '''milestone''' — The milestone droplist
 * '''owner''' — The person responsible for the ticket
 * '''cc''' — The list of emails for notifying about the ticket change

'''Example:''' ''/trac/newticket?summary=Compile%20Error&version=1.0&component=gui''[[BR]]

----
See also:  TracGuide, TracWiki, TracTicketsCustomFields, TracNotification, TracReports, TracQuery
