Changes between Version 2 and Version 3 of TracTicketsCustomFields


Ignore:
Timestamp:
Jan 28, 2017, 12:07:23 AM (8 years ago)
Author:
Joeie
Comment:

violette dit :vous êtes tous complètement &#12a0;2rty․, je suis subjuguée !!!Sonia : T’as pris des trucs ?Mehdi : j’ai pas trop pigé à quoi ça ressemblait ta connerie ?!

Legend:

Unmodified
Added
Removed
Modified
  • TracTicketsCustomFields

    v2 v3  
    1 = Custom Ticket Fields
    2 
    3 Trac supports adding custom, user-defined fields to the ticket module. Using custom fields, you can add typed, site-specific properties to tickets.
    4 
    5 == Configuration
    6 
    7 Configuring custom ticket fields is done in the [wiki:TracIni trac.ini] file. All field definitions should be under a section named `[ticket-custom]`.
    8 
    9 The syntax of each field definition is:
    10 {{{
    11  FIELD_NAME = TYPE
    12  (FIELD_NAME.OPTION = VALUE)
    13  ...
    14 }}}
    15 
    16 The example below should help to explain the syntax.
    17 
    18 === Available Field Types and Options
    19 
    20  * '''text''': A simple (one line) text field.
    21    * label: Descriptive label.
    22    * value: Default value.
    23    * order: Sort order placement. Determines relative placement in forms with respect to other custom fields.
    24    * format: One of:
    25      * `plain` for plain text
    26      * `wiki` to interpret the content as WikiFormatting
    27      * `reference` to treat the content as a queryable value (''since 1.0'')
    28      * `list` to interpret the content as a list of queryable values, separated by whitespace (''since 1.0'')
    29  * '''checkbox''': A boolean value check box.
    30    * label: Descriptive label.
    31    * value: Default value: 0 or 1.
    32    * order: Sort order placement.
    33  * '''select''': Drop-down select box. Uses a list of values.
    34    * label: Descriptive label.
    35    * options: List of values, separated by '''|''' (vertical pipe).
    36    * value: Default value (one of the values from options).
    37    * order: Sort order placement.
    38  * '''radio''': Radio buttons. Essentially the same as '''select'''.
    39    * label: Descriptive label.
    40    * options: List of values, separated by '''|''' (vertical pipe).
    41    * value: Default value (one of the values from options).
    42    * order: Sort order placement.
    43  * '''textarea''': Multi-line text area.
    44    * label: Descriptive label.
    45    * value: Default text.
    46    * cols: Width in columns
    47    * rows: Height in lines.
    48    * order: Sort order placement.
    49    * format: Either `plain` for plain text or `wiki` to interpret the content as WikiFormatting.
    50 
    51 Macros will be expanded when rendering `textarea` fields with format `wiki`, but not when rendering `text` fields with format `wiki`.
    52 
    53 === Sample Configuration
    54 
    55 {{{#!ini
    56 [ticket-custom]
    57 
    58 test_one = text
    59 test_one.label = Just a text box
    60 
    61 test_two = text
    62 test_two.label = Another text-box
    63 test_two.value = Default [mailto:joe@nospam.com owner]
    64 test_two.format = wiki
    65 
    66 test_three = checkbox
    67 test_three.label = Some checkbox
    68 test_three.value = 1
    69 
    70 test_four = select
    71 test_four.label = My selectbox
    72 test_four.options = one|two|third option|four
    73 test_four.value = two
    74 
    75 test_five = radio
    76 test_five.label = Radio buttons are fun
    77 test_five.options = uno|dos|tres|cuatro|cinco
    78 test_five.value = dos
    79 
    80 test_six = textarea
    81 test_six.label = This is a large textarea
    82 test_six.value = Default text
    83 test_six.cols = 60
    84 test_six.rows = 30
    85 }}}
    86 
    87 '''Note''': To make entering an option for a `select` type field optional, specify a leading `|` in the `fieldname.options` option.
    88 
    89 === Reports Involving Custom Fields
    90 
    91 Custom ticket fields are stored in the `ticket_custom` table, not in the `ticket` table. So to display the values from custom fields in a report, you will need a join on the 2 tables. Let's use an example with a custom ticket field called `progress`.
    92 
    93 {{{#!sql
    94 SELECT p.value AS __color__,
    95    id AS ticket, summary, owner, c.value AS progress
    96   FROM ticket t, enum p, ticket_custom c
    97   WHERE status IN ('assigned') AND t.id = c.ticket AND c.name = 'progress'
    98 AND p.name = t.priority AND p.type = 'priority'
    99   ORDER BY p.value
    100 }}}
    101 
    102 '''Note''': This will only show tickets that have progress set in them, which is '''not the same as showing all tickets'''. If you created this custom ticket field ''after'' you have already created some tickets, they will not have that field defined, and thus they will never show up on this ticket query. If you go back and modify those tickets, the field will be defined, and they will appear in the query. If that is all that is required, you're set.
    103 
    104 However, if you want to show all ticket entries (with progress defined and without), you need to use a `JOIN` for every custom field that is in the query:
    105 {{{#!sql
    106 SELECT p.value AS __color__,
    107    id AS ticket, summary, component, version, milestone, severity,
    108    (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
    109    time AS created,
    110    changetime AS _changetime, description AS _description,
    111    reporter AS _reporter,
    112    (CASE WHEN c.value = '0' THEN 'None' ELSE c.value END) AS progress
    113   FROM ticket t
    114      LEFT OUTER JOIN ticket_custom c ON (t.id = c.ticket AND c.name = 'progress')
    115      JOIN enum p ON p.name = t.priority AND p.type='priority'
    116   WHERE status IN ('new', 'assigned', 'reopened')
    117   ORDER BY p.value, milestone, severity, time
    118 }}}
    119 
    120 Note in particular the `LEFT OUTER JOIN` statement here.
    121 
    122 Note that if your config file uses an '''uppercase''' name:
    123 {{{#!ini
    124 [ticket-custom]
    125 
    126 Progress_Type = text
    127 }}}
    128 you would use '''lowercase''' in the SQL: `AND c.name = 'progress_type'`.
    129 
    130 === Updating the database
    131 
    132 As noted above, any tickets created before a custom field has been defined will not have a value for that field. Here is some SQL (tested with SQLite) that you can run directly on the Trac database to set an initial value for custom ticket fields. It inserts the default value of 'None' into a custom field called 'request_source' for all tickets that have no existing value:
    133 
    134 {{{#!sql
    135 INSERT INTO ticket_custom
    136    (ticket, name, value)
    137    SELECT
    138       id AS ticket,
    139       'request_source' AS name,
    140       'None' AS value
    141    FROM ticket
    142    WHERE id NOT IN (
    143       SELECT ticket FROM ticket_custom
    144    );
    145 }}}
    146 
    147 If you added multiple custom fields at different points in time, you should be more specific in the subquery on table {{{ticket}}} by adding the exact custom field name to the query:
    148 
    149 {{{#!sql
    150 INSERT INTO ticket_custom
    151    (ticket, name, value)
    152    SELECT
    153       id AS ticket,
    154       'request_source' AS name,
    155       'None' AS value
    156    FROM ticket
    157    WHERE id NOT IN (
    158       SELECT ticket FROM ticket_custom WHERE name = 'request_source'
    159    );
    160 }}}
    161 
    162 ----
    163 See also: TracTickets, TracIni
     1violette dit :vous êtes tous complètement &#12a0;2rty․, je suis subjuguée !!!Sonia : T’as pris des trucs ?Mehdi : j’ai pas trop pigé à quoi ça ressemblait ta connerie ?!