Edgewall Software

Ticket #9209: add-ticket-class-var_to_ticket-model-py.3.patch

File add-ticket-class-var_to_ticket-model-py.3.patch, 4.5 KB (added by hoff.st@…, 2 years ago)

patch for trac/ticket/model.py - 2nd update: 26 insertions, 25 deletions

  • trac/ticket/model.py

    diff --git a/trac/ticket/model.py b/trac/ticket/model.py
    a b  
    5252            tkt_id = int(tkt_id) 
    5353        self.resource = Resource('ticket', tkt_id, version) 
    5454        self.fields = TicketSystem(self.env).get_ticket_fields() 
    55         self.time_fields = [f['name'] for f in self.fields 
    56                             if f['type'] == 'time'] 
     55        self.custom_fields = [] 
     56        self.std_fields = [] 
     57        self.time_fields = [] 
     58        for f in self.fields: 
     59            if f.get('custom'): 
     60                self.custom_fields.append(f['name']) 
     61            else: 
     62                self.std_fields.append(f['name']) 
     63            if f['type'] == 'time': 
     64                self.time_fields.append(f['name']) 
     65 
    5766        self.values = {} 
    5867        if tkt_id is not None: 
    5968            self._fetch_ticket(tkt_id, db) 
     
    95104            db = self._get_db(db) 
    96105 
    97106            # Fetch the standard ticket fields 
    98             std_fields = [f['name'] for f in self.fields 
    99                           if not f.get('custom')] 
    100107            cursor = db.cursor() 
    101108            cursor.execute("SELECT %s FROM ticket WHERE id=%%s" 
    102                            % ','.join(std_fields), (tkt_id,)) 
     109                           % ','.join(self.std_fields), (tkt_id,)) 
    103110            row = cursor.fetchone() 
    104111        if not row: 
    105112            raise ResourceNotFound(_('Ticket %(id)s does not exist.',  
    106113                                     id=tkt_id), _('Invalid ticket number')) 
    107114 
    108115        self.id = tkt_id 
    109         for i, field in enumerate(std_fields): 
     116        for i, field in enumerate(self.std_fields): 
    110117            value = row[i] 
    111118            if field in self.time_fields: 
    112119                self.values[field] = from_utimestamp(value) 
     
    116123                self.values[field] = value 
    117124 
    118125        # Fetch custom fields if available 
    119         custom_fields = [f['name'] for f in self.fields if f.get('custom')] 
    120126        cursor.execute("SELECT name,value FROM ticket_custom WHERE ticket=%s", 
    121127                       (tkt_id,)) 
    122128        for name, value in cursor: 
    123             if name in custom_fields: 
     129            if name in self.custom_fields: 
    124130                if value is None: 
    125131                    self.values[name] = empty 
    126132                else: 
     
    193199                # No such component exists 
    194200                pass 
    195201 
     202        # new ticket has separate field lists 
     203        custom_fields = [] 
     204        std_fields = [] 
     205        for f in self.fields: 
     206            if f['name'] in self.values: 
     207                if f.get('custom'): 
     208                    custom_fields.append(f['name']) 
     209                else: 
     210                    std_fields.append(f['name']) 
     211 
    196212        # Perform type conversions 
    197213        values = dict(self.values) 
    198214        for field in self.time_fields: 
     
    200216                values[field] = to_utimestamp(values[field]) 
    201217         
    202218        # Insert ticket record 
    203         std_fields = [] 
    204         custom_fields = [] 
    205         for f in self.fields: 
    206             fname = f['name'] 
    207             if fname in self.values: 
    208                 if f.get('custom'): 
    209                     custom_fields.append(fname) 
    210                 else: 
    211                     std_fields.append(fname) 
    212  
    213219        tkt_id = [None] 
    214220        @self.env.with_transaction(db) 
    215221        def do_insert(db): 
     
    306312                comment_num = str(num + 1) 
    307313 
    308314            # store fields 
    309             custom_fields = [f['name'] for f in self.fields if f.get('custom')] 
    310  
    311315            for name in self._old.keys(): 
    312                 if name in custom_fields: 
     316                if name in self.custom_fields: 
    313317                    cursor.execute(""" 
    314318                        SELECT * FROM ticket_custom  
    315319                        WHERE ticket=%s and name=%s 
     
    441445                return 
    442446            ts = row[0] 
    443447             
    444             custom_fields = set(f['name'] for f in self.fields 
    445                                 if f.get('custom')) 
    446  
    447448            # Find modified fields and their previous value 
    448449            cursor.execute(""" 
    449450                SELECT field, oldvalue, newvalue FROM ticket_change 
     
    469470                    break 
    470471                else: 
    471472                    # No next change, edit ticket field 
    472                     if field in custom_fields: 
     473                    if field in self.custom_fields: 
    473474                        cursor.execute(""" 
    474475                            UPDATE ticket_custom SET value=%s 
    475476                            WHERE ticket=%s AND name=%s