# -*- coding: utf-8 -*- # # Copyright (C) 2014-2021 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://trac.edgewall.org/wiki/TracLicense. # # This software consists of voluntary contributions made by many # individuals. For the exact contribution history, see the revision # history and logs, available at https://trac.edgewall.org/. from trac.ticket.default_workflow import get_workflow_config from trac.util import backup_config_file new_actions = { 'create': { '': ' -> new', 'default': 1, }, 'create_and_assign': { '': ' -> assigned', 'label': 'assign', 'permissions': 'TICKET_MODIFY', 'operations': 'may_set_owner' } } def do_upgrade(env, version, cursor): """Add 'create' actions to ticket-workflow (ticket #2045). """ save = False all_actions = get_workflow_config(env.config) all_states = list( {state for action in all_actions.values() for state in action['oldstates']} | {action['newstate'] for action in all_actions.values()}) for action, attributes in new_actions.items(): if action == 'create_and_assign' and 'assigned' not in all_states: continue if action not in env.config['ticket-workflow']: for attr, value in attributes.items(): key = action + ('.' + attr if attr else '') env.config.set('ticket-workflow', key, value) save = True else: env.log.info("Couldn't add ticket action '%s' because it " "already exists.", action) if save: backup_config_file(env, '.db33.bak') env.config.save()