= Advanced Ticket Workflow Plugin = == Description == AdvancedTicketWorkflowPlugin provides a number of advanced operations for customizable workflows that are similar to the operations provided in the customizeable workflow of the core system. Currently provided operations are: * set_owner_to_reporter (!TicketWorkflowOpOwnerReporter) * set_owner_to_component_owner (!TicketWorkflowOpOwnerComponent) * set_owner_to_field (!TicketWorkflowOpOwnerField) * set_owner_to_previous (!TicketWorkflowOpOwnerPrevious) * set_status_to_previous (!TicketWorkflowOpStatusPrevious) * run_external (!TicketWorkflowOpRunExternal) (File requests for additional operations as enhancement tickets.) == Bugs/Feature Requests == Existing bugs and feature requests for AdvancedTicketWorkflowPlugin are [query:status!=closed&component=AdvancedTicketWorkflowPlugin&order=priority here]. If you have any issues, create a [/newticket?component=AdvancedTicketWorkflowPlugin&owner=retracile new ticket]. == Download and Source == Download the [download:advancedticketworkflowplugin zipped source], check out [/svn/advancedticketworkflowplugin using Subversion], or [source:advancedticketworkflowplugin browse the source] with Trac. == Example == Enable the plugin with: {{{ [components] advancedworkflow.* = enabled }}} (or by copying the egg to the `plugins` directory) Add the individual controller to the workflow controller list: {{{ [ticket] workflow = ConfigurableTicketWorkflow,TicketWorkflowOpOwnerReporter }}} And use the operation in your custom workflow: {{{ [ticket-workflow] needinfo = * -> needinfo needinfo.name = Need info needinfo.operations = set_owner_to_reporter }}} == Documentation == Before installing this plugin, you need to understand that the `run_external` option allows arbitrary shell scripts to be run as the webserver user. '''Anyone who is allowed to modify the workflow configuration will be able to execute arbitrary commands as your webserver.''' * set_owner_to_reporter (!TicketWorkflowOpOwnerReporter) Sets the owner to the ticket reporter. {{{ .operations = set_owner_to_reporter }}} * set_owner_to_component_owner (!TicketWorkflowOpOwnerComponent) Sets the owner to the ticket's component owner. {{{ .operations = set_owner_to_component_owner }}} * set_owner_to_field (!TicketWorkflowOpOwnerField) Sets the owner to the value of a ticket field. {{{ .operations = set_owner_to_field .set_owner_to_field = mycustomfield }}} * set_owner_to_previous (!TicketWorkflowOpOwnerPrevious) Sets the owner to the previous owner. If there is no previous owner, the owner will be deleted. {{{ .operations = set_owner_to_previous }}} * set_status_to_previous (!TicketWorkflowOpStatusPrevious) Sets the status to the previous status. If there is no previous status, this is a no-op. {{{ .operations = set_owner_to_previous }}} * run_external (!TicketWorkflowOpRunExternal) Runs arbitrary commands as the webserver user. ''Please give some thought to the security ramifications.'' {{{ .operations = run_external .run_external = echo "whatever" >> /writable/file;/opt/pwn_server .run_external_hint = Do something dangerous. }}} == Recent Changes == [[ChangeLog(advancedticketworkflowplugin, 3)]] == Author/Contributors == '''Author:''' [wiki:retracile] [[BR]] '''Contributors:'''