Edgewall Software

Ticket #2463: preliminary_required_fields_change.patch

File preliminary_required_fields_change.patch, 2.3 KB (added by Mark Mc Mahon <mark.mcmahon@…>, 17 months ago)

Very first attempt at implementing required ticket fields

  • trac-trunk/trac/ticket/web_ui.py

     
    11291129            add_warning(req, _("Tickets must contain a summary.")) 
    11301130            valid = False 
    11311131             
     1132        action = req.args.get('action', None) 
     1133        if action == 'leave': 
     1134            action = ticket.values['status'] 
     1135 
     1136        if action not in  (None, 'leave', 'new'): 
     1137            # todo - add required fields for 'new', which are the default  
     1138            # required fields 
     1139            controllers = list( 
     1140                self._get_action_controllers(req, ticket, action)) 
     1141            if controllers: 
     1142                action_config = controllers[0].actions.get(action, {}) 
     1143                required_fields = action_config.get('required_fields', []) 
     1144                 
    11321145        # Always validate for known values 
    11331146        for field in ticket.fields: 
     1147            if field['name'] in required_fields and not field['value']: 
     1148                add_warning(req, _( 
     1149                    '"%(field)s" requires a value for the "%(action)s" action', 
     1150                    field = field['name'], action = action)) 
     1151                valid = False 
     1152                 
    11341153            if 'options' not in field: 
    11351154                continue 
    11361155            if field['name'] == 'status': 
  • trac-trunk/trac/ticket/default_workflow.py

     
    7474        else: 
    7575            attributes['permissions'] = [a.strip() for a in 
    7676                                         attributes['permissions'].split(',')] 
     77        # If no required_fields are specified, then all fields are conditional 
     78        if 'required_fields' not in attributes: 
     79            attributes['required_fields'] = [] 
     80        else: 
     81            attributes['required_fields'] = [ 
     82                a.strip() for a in attributes['required_fields'].split(',')] 
     83 
    7784        # Normalize the oldstates 
    7885        attributes['oldstates'] = [x.strip() for x in 
    7986                                   attributes['oldstates'].split(',')]