Customizing The Ticket System


This guide will explain how to add the "assigned_to" and "submitted_by" fields to the ticket system in Fossil, as well as making the system more useful. You must have "admin" access to the repository to implement these instructions.

First modify the TICKET table

Click on the "Admin" menu, then "Tickets", then "Table". After the other fields and before the final ")", insert:

  assigned_to TEXT,
  opened_by TEXT
And "Apply Changes". You have just added two more fields to the ticket database! NOTE: I won't tell you to "Apply Changes" after each step from here on out. Now, how do you use these fields?

Next add assignees

Back to the "Tickets" admin page, and click "Common". Add something like this:

set assigned_choices {
Obviously, choose names corresponding to the logins on your system. The 'unassigned' entry is important, as it prevents you from having a NULL in that field (which causes problems later when editing).

Now modify the 'new ticket' page

Back to the "Tickets" admin page, and click "New Ticket Page". This is a little more tricky. Edit the top part:

  if {[info exists submit]} {
     set status Open
     set opened_by $login
	 set assigned_to "unassigned"
Note the "set opened_by" bit -- that will automatically set the "opened_by" field to the login name of the bug reporter. Now, skip to the part with "EMail" and modify it like so:
<th1>enable_output [expr { "$login" eq "anonymous"}]</th1>
<td align="right">EMail:
<input type="text" name="private_contact" value="$<private_contact>" size="30">
<td><u>Not publicly visible</u>. Used by developers to contact you with
<th1>enable_output 1</th1>
This bit of code will get rid of the "email" field entry for logged-in users. Since we know the user's information, we don't have to ask for it. NOTE: it might be good to automatically scoop up the user's email and put it here.

Modify the 'view ticket' page

Look for the text "Contact:" (about halfway through). Then insert these lines after the closing tr tag and before the "enable_output" line:

  <td align="right">Assigned to:</td><td bgcolor="#d0d0d0">
  <td align="right">Opened by:</td><td bgcolor="#d0d0d0">
This will add a row which displays these two fields, in the event the user has "edit" capability.

Modify the 'edit ticket' page

Before the "Severity:" line, add this:

<tr><td align="right">Assigned to:</td><td>
<th1>combobox assigned_to $assigned_choices 1</th1>
That will give you a drop-down list of assignees. Now, similar to the previous section, look for "Contact:" and add this:
  <tr><td align="right">Reported by:</td><td>
  <input type="text" name="opened_by" size="40"

What next?

Now you can add custom reports which select based on the person to whom the ticket is assigned. For example, an "Assigned to me" report could be:

  CASE WHEN status IN ('Open','Verified') THEN '#f2dcdc'
       WHEN status='Review' THEN '#e8e8e8'
       WHEN status='Fixed' THEN '#cfe8bd'
       WHEN status='Tested' THEN '#bde5d6'
       WHEN status='Deferred' THEN '#cacae5'
       ELSE '#c8c8c8' END AS 'bgcolor',
  substr(tkt_uuid,1,10) AS '#',
  datetime(tkt_mtime) AS 'mtime',
FROM ticket
WHERE assigned_to=user()