= Workflow Discussion = The original proposal is at NewWorkflow. The [source:/sandbox/workflow workflow sandbox] is an attempt to implement an API for making the ticket system more generic. == Tasks == * ~~Add a `disabled` attribute to fields so that workflow hooks can disable fields but still leave them visible.~~ * ~~Add a `hidden` attribute for the same reason. I've actually already done this, simply by renaming the `skip` attribute to `hidden`. Did this to be more consistent with HTML.~~ * ~~Add a `fullrow` attribute which signifies that the form element will span both columns of the ticket property fieldset. eg. summary, type, description and reporter would all be `fullrow=1` (done, but code in the templates is not implemented).~~ [2833] * ~~Remove code specific to individual fields from ticket.cs/newticket.cs. The summary, type, description and reporter would be converted to use the the same generic code as the rest of the fields.~~ [2833] * ~~Remove large `if/elif` statement from ticket.cs/newticket.cs. Currently there is a large if/then/else style block which is used to display all fields other than the four described above. This could be removed and replaced with a call to form_control().~~ [2833] * ~~In order to specify the order the generic field display code would use, the above changes would probably require the ticket.fields.* HDF branch to be changed to an array (currently it is a dict). This change would be in api.py (return fields in the correct display order) and the .cs files, possibly elsewhere.~~ [2832]. * ~~If possible I would also like to factor out the ticket field display/edit code from both ticket.cs and newticket.cs into ticket_fields.cs, as the template code is basically functionally identical.~~ [2833] * Add a `.onchange` option for javascript field validation. * Add a `.title` option, or maybe `.tooltip`, though I think for the sake of consisteny it should be `.title`. * Add a `checkboxes` field type. This differs from the `checkbox` type in that it is a set of related checkboxes. It would store the data in the field value as `check1|check2|check4`. I'm not sure about this one, or how it would be presented in the query module, but I figured that people might find it useful. Similarly, a `multi_select` type could be useful. * Remove `ticket_custom_props()` macro? It does not appear to be referenced. * ~~Need a clean way to differentiate between fields that should not be displayed in the summary and those that should not be displayed at all. eg. `summary` should be hidden in the ticket summary (as it is used for the title), and should only be editable by users with `TICKET_ADMIN` privileges. Perhaps the logic should be that if a field is `hidden` it is not displayed anywhere, unless it is also `editable`, in which case it is only displayed in the ticket properties.~~ [2837] * There are a number of locations in the ticket code where permissions are hard coded. As an example, the `TICKET_CREATE` permission is required to create a new ticket. Should this be overridable by `ITicketWorkflow` implementors? == Available Field Types and Options == Common options: * label: Descriptive label. * value: Default value. * order: Sort order placement. (Determines relative placement in forms.) * hidden: Field is not displayed. Useful for storing extra ticket attributes programmatically (false by default). * fullrow: Field spans a full row when displayed in the ticket properties. * editable: Field is editable (true by default). If a field is hidden but editable, it will not display in the ticket summary but will be displayed and editable in the ticket properties. Types and type-specific options: * '''text''': A simple (one line) text field. * size: Size of text field. * '''checkbox''': A boolean value check box. * value: Default value (0 or 1). * '''select''': Drop-down select box. Uses a list of values. * options: List of values, separated by '''|''' (vertical pipe). * value: Default value (Item #, starting at 0). * '''radio''': Radio buttons. Essentially the same as '''select'''. * options: List of values, separated by '''|''' (vertical pipe). * value: Default value (Item #, starting at 0). * '''textarea''': Multi-line text area. * cols: Width in columns. * rows: Height in lines.