# This is a sample "ticket configuration" file for fossil.
#
# There is considerable flexibility in how tickets are defined
# in fossil.  Each repository can define its own ticket setup
# differently.  Each repository has an instance of a file, like
# this one that defines how that repository deals with tickets.
#
# This file is in the form of a script in an exceedingly 
# minimalist scripting language called "subscript".  Here are
# the rules:
#
# SYNTAX
#
#     *  The script consists of a sequence of whitespace
#        separated tokens.  Whitespace is ignored, except
#        as its role as a token separator.
#
#     *  Lines that begin with '#' are considered to be whitespace.
#
#     *  Text within matching {...} is consider to be a single "string"
#        token, even if the text spans multiple lines and includes
#        embedded whitespace.  The outermost {...} are not part of
#        the text of the token.
#
#     *  A token that begins with "/" is a string token.
#
#     *  A token that looks like a number is a string token.
#
#     *  Tokens that do not fall under the previous three rules
#        are "verb" tokens.
#
#  PROCESSING:
#
#     *  When a script is processed, the engine reads tokens
#        one by one.
#
#     *  String tokens are pushed onto the stack.
#
#     *  Verb tokens which correspond to the names of variables
#        cause the corresponding variable to be pushed onto the
#        stack.
#
#     *  Verb tokens which correspond to procedures cause the
#        procedures to run.  The procedures might push or pull 
#        values from the stack.
#
# There are just a handful of verbs.  For the purposes of this
# configuration script, there is only a single verb: "set".  The
# "set" verb pops two arguments from the stack.  The topmost is
# the name of a variable.  The second element is the value.  The
# "set" verb sets the value of the named variable.
#
#      VALUE NAME set
#
# This configuration file just sets the values of various variables.
# Some of the variables have special meanings.  The content of some
# of the variables are additional subscript scripts.
#
############################################################################
#
# Every ticket configuration file should have a title.  When you
# come up with a new ticket configuration, please change the title
# to something descriptive.
#
{Default Ticket Configuration} /ticket_config_title set

############################################################################
# Every ticket configuration *must* define a set of columns for the
# "ticket" table of the database.  These column names will also be
# used as CGI parameter names, so to avoid problems it is best that
# the names be all lower-case alphabetic characters.  The names must
# be unique and must not begin with "tkt_".
#
{
   type
   status
   subsystem
   priority
   severity
   contact
   title
   comment
} /ticket_fields
{
   CREATE TABLE ticket(
     -- Do not change any column that begins with tkt_
     tkt_id INTEGER PRIMARY KEY,
     tkt_uuid TEXT UNIQUE,
     tkt_mtime DATE,
     tkt_valid BOOLEAN,
     -- Add as many field as required below this line
     type TEXT,
     status TEXT,
     subsystem TEXT,
     priority TEXT,
     severity TEXT,
     title TEXT,
     comment TEXT
   );
   -- Add indices as desired
} /ticket_sql set

#############################################################################
# You can define additional variables here.  These variables will be
# accessible to the page templates when they run.
#
{Code Build_Problem Documentation Feature_Request Incident} /type_choices set
{High Medium Low} /priority_choices set
{Critical Severe Important Minor Cosmetic} /severity_choices set
{
  Open
  Fixed
  Rejected
  Unable_To_Reproduce
  Works_As_Designed
  External_Bug
  Not_A_Bug
  Duplicate
  Overcome_By_Events
  Drive_By_Patch
} /resolution_choices set
{
  Open
  Verified
  In_Process
  Deferred
  Fixed
  Tested
  Closed
} /status_choices set

############################################################################
# The "tktnew_template" variable is set to text which is a template for
# the HTML of the "New Ticket" page.  Within this template, text contained
# within [...] is subscript.  That subscript runs when the page is
# rendered.
#
{
  <!-- load database field names not found in CGI with an empty string -->
  <!-- start a form -->
  [{Open} /status set /submit submit_new_ticket]
  <table cellpadding="5">
  <tr>
  <td cellpadding="2">
  Enter a one-line summary of the problem:<br>
  <input type="text" name="title" size="60" value="[title html]">
  </td>
  </tr>
  
  <tr>
  <td align="right">Type:
  [/type typechoices 20 combobox]
  </td>
  <td>What type of ticket is this?</td>
  </tr>
  
  <tr>
  <td align="right">Version: 
  <input type="text" name="foundin" size="20" value="[foundin html]">
  </td>
  <td>In what version or build number do you observer the problem?</td>
  </tr>
  
  <tr>
  <td align="right">Severity:
  [/severity {High Medium Low} 8 combobox]
  </td>
  <td>How debilitating is the problem?  How badly does the problem
  effect the operation of the product?</td>
  </tr>
  
  <tr>
  <td colspan="2">
  Enter a detailed description of the problem.
  For code defects, be sure to provide details on exactly how
  the problem can be reproduced.  Provide as much detail as
  possible.
  <br>
  <textarea name="comment" cols="80" rows="[comment linecount 50 max 10 min]"
   wrap="virtual" class="wikiedit">[comment html]</textarea><br>
  <br>
  <input type="submit" name="preview" value="Preview">
  </tr>

  [0 /preview get enable_output]
  <tr><td colspan="2">
  Description Preview:<br><hr>
  [/comment html]
  <hr>
  </td></tr>
  [1 enable_output]
  
  <tr>
  <td align="right">
  <input type="submit" name="submit" value="Submit">
  </td>
  <td>After filling in the information above, press this button to create
  the new ticket</td>
  </tr>
  </table>
  <!-- end of form -->
} /tktnew_template set

######################################################################
# The template for the "edit ticket" page
{
  <!-- database field names not found as CGI parameters are loaded
       from the database automatically -->
  <!-- start a form -->
  [{<hr><i>%USER% added on %DATE%:</i><br>}
    /cmappnd /comment append_remark]
  [/submit submit_ticket_change]
  <table cellpadding="5">
  <tr><td align="right">Title:</td><td>
  <input type="text" name="title" value="[title html] size=60">
  </td></tr>
  <tr><td align="right">Status:</td><td>
  [/status status_choices 20 combobox]
  </td></tr>
  <tr><td align="right">Type:</td><td>
  [/type type_choices 20 combobox]
  </td></tr>
  <tr><td align="right">Severity:</td><td>
  [/severity {High Medium Low} 10 combobox]
  </td></tr>
  <tr><td align="right">Priority:</td><td>
  [/priority {High Medium Low} 10 combobox]
  </td></tr>
  <tr><td align="right">Resolution:</td><td>
  [/resolution resolution_choices 20 combobox]
  </td></tr>
  <tr><td align="right">Subsystem:</td><td>
  [/subsystem subsystem_choices 30 combobox]
  </td></tr>
  [/e hascap enable_output]
    <tr><td align="right">Contact:</td><td>
    <input type="text" name="contact" size="40" value="[contact html]">
    </td></tr>
  [1 enable_output]
  <tr><td align="right">Version&nbsp;Found&nbsp;In:</td><td>
  <input type="text" name="foundin" size="50" value="[foundin html]">
  </td></tr>
  <tr><td colspan="2">
  [0 /eall 0 get /eall set]
  [/aonlybtn exists not /eall set]
  [/eallbtn exists /eall set]
  [/w hascap eall and /eall set]
  [eall enable_output]
    Description And Comments:<br>
    <textarea name="comment" cols="80" rows="[comment linecount 15 max 10 min]"
     wrap="virtual" class="wikiedit">[comment html]</textarea><br>
    <input type="hidden" name="eall" value="1">
    <input type="submit" name="aonlybtn" value="Append Remark">
  [eall not enable_output]
    Append Remark:<br>
    <textarea name="cmappnd" cols="80" rows="15"
     wrap="virtual" class="wikiedit">[cmappnd html]</textarea><br>
    [ok_wrtkt enable_output]
    <input type="submit" name="eallbtn" value="Edit All">
  [1 enable_output]
  </td></tr>
  <tr><td align="right"></td><td>
  <input type="submit" name="submit" value="Submit Changes">
  </td></tr>
  </table>
  <!-- end-form inserted automatically -->
} /tktedit_template set

######################################################################
# The template for the "view ticket" page
{
  <!-- load database fields automatically loaded into variables -->
  <table cellpadding="5">
  <tr><td align="right">Title:</td><td>
  [/title html]
  </td></tr>
  <tr><td align="right">Status:</td><td>
  [/status html]
  </td></tr>
  <tr><td align="right">Type:</td><td>
  [/type html]
  </td></tr>
  <tr><td align="right">Severity:</td><td>
  [/severity html]
  </td></tr>
  <tr><td align="right">Priority:</td><td>
  [/priority html]
  </td></tr>
  <tr><td align="right">Resolution:</td><td>
  [/priority html]
  </td></tr>
  <tr><td align="right">Subsystem:</td><td>
  [/subsystem html]
  </td></tr>
  [{e} hascap enable_output]
    <tr><td align="right">Contact:</td><td>
    [/contact html]
    </td></tr>
  [1 enable_output]
  <tr><td align="right">Version&nbsp;Found&nbsp;In:</td><td>
  [/foundin html]
  </td></tr>
  <tr><td colspan="2">
  Description And Comments:<br>
  [/comment html]
  </td></tr>
  </table>
} /tktview_template set
