Edgewall Software

Ticket #4549: trac-ulr1-061208.diff

File trac-ulr1-061208.diff, 8.9 kB (added by trebor74hr@…, 20 months ago)

trac/ticket/web_ui.py, api.py, trac/web/auth.py

  • trac/ticket/api.py

     
    8383        return [action for action in actions.get(ticket['status'], ['leave']) 
    8484                if action not in perms or perm_.has_permission(perms[action])] 
    8585 
     86    def _eval_field_value(self, value): 
     87        value=value.strip() 
     88        if value.startswith('$(') and value.endswith(')'): 
     89            temp=value[2:-1] 
     90            if temp=='today': 
     91                import datetime 
     92                value = str(datetime.date.today()) 
     93        return value 
     94 
     95    # ulr1 061127 TODO: nastaviti ... 
     96    def _get_field_dflt_props(self, fields, name, type, label=None): 
     97        field = { 'name': name,  
     98                  'type': type,  
     99                  'label': self.config.get('ticket', 'label_' + name, label or name.title()),  
     100                  'order': self.config.getint('ticket', 'order_' + name, 2000+len(fields)*10), 
     101                  } 
     102        #print field 
     103        value = self.config.get('ticket', 'default_' + name) 
     104        if value: 
     105            field['value']=self._eval_field_value(value) 
     106        return field 
     107 
    86108    def get_ticket_fields(self): 
    87109        """Returns the list of fields available for tickets.""" 
    88110        from trac.ticket import model 
    89111 
    90112        db = self.env.get_db_cnx() 
    91113        fields = [] 
    92  
     114        # TODO: ulr1 061127 default values for new field - make function 
    93115        # Basic text fields 
    94116        for name in ('summary', 'reporter'): 
    95             field = {'name': name, 'type': 'text', 'label': name.title()} 
     117            # ulr1 061128  
     118            #field = {'name': name, 'type': 'text', 'label': name.title()} 
     119            field = self._get_field_dflt_props(fields, name, 'text') 
    96120            fields.append(field) 
    97121 
    98122        # Owner field, can be text or drop-down depending on configuration 
    99         field = {'name': 'owner', 'label': 'Owner'} 
     123        # ulr1 061128  
     124        field = self._get_field_dflt_props(fields, 'owner', 'text', 'Assign to') 
     125        #field = {'name': 'owner', 'label': 'Owner'} 
    100126        if self.restrict_owner: 
    101127            field['type'] = 'select' 
    102128            users = [] 
     
    106132                    users.append(username) 
    107133            field['options'] = users 
    108134            field['optional'] = True 
    109         else: 
    110             field['type'] = 'text' 
     135        #ulr1 061128 not needed any more 
     136        #else: 
     137        #    field['type'] = 'text' 
    111138        fields.append(field) 
    112139 
    113140        # Description 
    114         fields.append({'name': 'description', 'type': 'textarea', 
    115                        'label': 'Description'}) 
     141        # ulr1 061128  
     142        field = self._get_field_dflt_props(fields, 'description', 'textarea') 
     143        fields.append(field) 
     144        #fields.append({'name': 'description', 'type': 'textarea','label': 'Description'}) 
    116145 
    117146        # Default select and radio fields 
    118147        selects = [('type', model.Type), ('status', model.Status), 
     
    125154                # Fields without possible values are treated as if they didn't 
    126155                # exist 
    127156                continue 
    128             field = {'name': name, 'type': 'select', 'label': name.title(), 
    129                      'value': self.config.get('ticket', 'default_' + name), 
    130                      'options': options} 
     157            # ulr1 061128  
     158            #options.append('(undef)') 
     159            field = self._get_field_dflt_props(fields, name, 'select') 
     160            field['options']=options 
     161            #if not field.has_key('value'): 
     162            #    field['value']='(undef)' 
     163             
     164            #field = {'name': name, 'type': 'select', 'label': name.title(), 
     165            #         'value': self.config.get('ticket', 'default_' + name), 'options': options} 
    131166            if name in ('status', 'resolution'): 
    132167                field['type'] = 'radio' 
    133168                field['optional'] = True 
     
    137172 
    138173        # Advanced text fields 
    139174        for name in ('keywords', 'cc', ): 
    140             field = {'name': name, 'type': 'text', 'label': name.title()} 
     175            # ulr1 061128  
     176            field = self._get_field_dflt_props(fields, name, 'text') 
     177            #field = {'name': name, 'type': 'text', 'label': name.title()} 
    141178            fields.append(field) 
    142179 
    143180        for field in self.get_custom_fields(): 
     
    152189            field['custom'] = True 
    153190            fields.append(field) 
    154191 
     192        # NOTE: fields sort also done to web_ui.py::process_request (ulr1 061127) 
     193        # ulr1 061128  
     194        fields.sort(lambda x, y: cmp(x['order'], y['order'])) 
     195 
     196        #test:  
     197        #for field in fields: 
     198        #    print "1.name=%s, order=%d" % (field['name'], field['order']) 
     199 
    155200        return fields 
    156201 
     202    # ------------------------------------------- 
    157203    def get_custom_fields(self): 
    158204        fields = [] 
    159205        config = self.config['ticket-custom'] 
     
    162208            field = { 
    163209                'name': name, 
    164210                'type': config.get(name), 
    165                 'order': config.getint(name + '.order', 0), 
     211                # ulr1 061127 default from 0 to 3000... 
     212                'order': config.getint(name + '.order', 3000+len(fields)*10), 
    166213                'label': config.get(name + '.label') or name.capitalize(), 
    167214                'value': config.get(name + '.value', '') 
    168             } 
     215                } 
     216            #ulr1 061128  
     217            field['value']=self._eval_field_value(field['value']) 
     218 
    169219            if field['type'] == 'select' or field['type'] == 'radio': 
    170                 field['options'] = config.getlist(name + '.options', sep='|') 
     220                #ulr1 061019 SQL: 
     221                #field['options'] = config.getlist(name + '.options', sep='|') 
     222                options = self.config.get('ticket-custom', name + '.options').strip() 
     223                if options.startswith("SQL:"): 
     224                    cursor = self.env.get_db_cnx().cursor() 
     225                    cursor.execute(options[len("SQL:"):]) 
     226                    rows = cursor.fetchall() 
     227                    if rows: 
     228                        field['options'] = [row[0].strip() for row in rows] 
     229                    else: 
     230                        field['options']=[] 
     231                else: 
     232                    # old: field['options'] = [value.strip() for value in options.split('|')] 
     233                    # ulr1 060731  end 
     234                    field['options'] = config.getlist(name + '.options', sep='|') 
    171235                field['optional'] = '' in field['options'] 
     236            #ulr1 061128  
     237            # TODO: for text and other ... optional ...  
     238            #else: 
     239            #    field['optional'] = config.getint(name + '.optional') > 0 
     240             
     241            # new 
     242            if field['type'] == 'select' or field['type'] == 'radio': 
     243                options = self.config.get('ticket-custom', name + '.options') 
     244 
     245 
     246 
    172247            elif field['type'] == 'textarea': 
    173248                field['width'] = config.getint(name + '.cols') 
    174249                field['height'] = config.getint(name + '.rows') 
  • trac/ticket/web_ui.py

     
    149149                ticket.fields.insert(insert_idx, ticket.fields[curr_idx]) 
    150150                del ticket.fields[curr_idx] 
    151151 
     152        #ulr1 061128  
     153        ticket.fields.sort(lambda x, y: cmp(x['order'], y['order'])) 
     154 
    152155        for field in ticket.fields: 
     156            #ulr1 061128 test 
     157            #print "2.name=%s, order=%d" % (field['name'], field['order']) 
    153158            name = field['name'] 
    154159            del field['name'] 
    155160            if name in ('summary', 'reporter', 'description', 'type', 'status', 
    156161                        'resolution'): 
    157162                field['skip'] = True 
    158163            elif name == 'owner': 
    159                 field['label'] = 'Assign to' 
     164                #ulr1 061128  
     165                # already filled in api.py  
     166                # field['label'] = 'Assign to' 
    160167                if not req.perm.has_permission('TICKET_MODIFY'): 
    161168                    field['skip'] = True 
    162169            elif name == 'milestone': 
     
    556563        fragment = cnum and '#comment:'+cnum or '' 
    557564        req.redirect(req.href.ticket(ticket.id) + fragment) 
    558565 
     566    # TODO: ulr1 061128 some fields shouldn't be changed in  
    559567    def _insert_ticket_data(self, req, db, ticket, reporter_id): 
    560568        """Insert ticket data into the hdf""" 
    561569        replyto = req.args.get('replyto') 
  • trac/web/auth.py

     
    209209    def load(self, filename): 
    210210        fd = open(filename, 'r') 
    211211        for line in fd: 
     212            #ulr1 060726  
     213            if line.startswith("#"):  
     214               continue 
    212215            line = line.strip() 
    213216            if not line: 
    214217                continue