Edgewall Software

Ticket #2463: add_required_fields_inclde_new_ticket.patch

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

Add

  • trac/ticket/api.py

     
    213213        """Default resolution for resolving (closing) tickets 
    214214        (''since 0.11'').""") 
    215215 
     216    required_fields = Option('ticket', 'required_fields', '', 
     217        """Required fields for issues 
     218        (''since 0.13'').""") 
     219 
    216220    def __init__(self): 
    217221        self.log.debug('action controllers for ticket workflow: %r' %  
    218222                [c.__class__.__name__ for c in self.action_controllers]) 
  • 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(',')] 
  • 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        required_fields = TicketSystem(self.env).required_fields.split(',') 
     1137        required_fields = [rf.strip() for rf in required_fields] 
     1138        if action not in  (None, 'leave', 'new'): 
     1139            # todo - add required fields for 'new', which are the default  
     1140            # required fields 
     1141            controllers = list( 
     1142                self._get_action_controllers(req, ticket, action)) 
     1143            if controllers: 
     1144                action_config = controllers[0].actions.get(action, {}) 
     1145                required_fields = action_config.get('required_fields', []) 
     1146 
     1147        if 'description' in required_fields: 
     1148            required_fields.remove('description') 
     1149            if not ticket['description']: 
     1150                add_warning(req, _( 
     1151                    'Description field is a required field', 
     1152                    field = 'description')) 
     1153                valid = False 
     1154 
    11321155        # Always validate for known values 
    11331156        for field in ticket.fields: 
     1157             
     1158            if field['name'] in required_fields and not field['value']: 
     1159                    add_warning(req, _('"%(field)s" is a required  field', 
     1160                                       field = field['name'])) 
     1161                    valid = False 
     1162 
    11341163            if 'options' not in field: 
    11351164                continue 
    11361165            if field['name'] == 'status':