Index: trac/ticket/api.py
===================================================================
--- trac/ticket/api.py	(revision 5)
+++ trac/ticket/api.py	(working copy)
@@ -83,20 +83,46 @@
         return [action for action in actions.get(ticket['status'], ['leave'])
                 if action not in perms or perm_.has_permission(perms[action])]
 
+    def _eval_field_value(self, value):
+        value=value.strip()
+        if value.startswith('$(') and value.endswith(')'):
+            temp=value[2:-1]
+            if temp=='today':
+                import datetime
+                value = str(datetime.date.today())
+        return value
+
+    # ulr1 061127 TODO: nastaviti ...
+    def _get_field_dflt_props(self, fields, name, type, label=None):
+        field = { 'name': name, 
+                  'type': type, 
+                  'label': self.config.get('ticket', 'label_' + name, label or name.title()), 
+                  'order': self.config.getint('ticket', 'order_' + name, 2000+len(fields)*10),
+                  }
+        #print field
+        value = self.config.get('ticket', 'default_' + name)
+        if value:
+            field['value']=self._eval_field_value(value)
+        return field
+
     def get_ticket_fields(self):
         """Returns the list of fields available for tickets."""
         from trac.ticket import model
 
         db = self.env.get_db_cnx()
         fields = []
-
+        # TODO: ulr1 061127 default values for new field - make function
         # Basic text fields
         for name in ('summary', 'reporter'):
-            field = {'name': name, 'type': 'text', 'label': name.title()}
+            # ulr1 061128 
+            #field = {'name': name, 'type': 'text', 'label': name.title()}
+            field = self._get_field_dflt_props(fields, name, 'text')
             fields.append(field)
 
         # Owner field, can be text or drop-down depending on configuration
-        field = {'name': 'owner', 'label': 'Owner'}
+        # ulr1 061128 
+        field = self._get_field_dflt_props(fields, 'owner', 'text', 'Assign to')
+        #field = {'name': 'owner', 'label': 'Owner'}
         if self.restrict_owner:
             field['type'] = 'select'
             users = []
@@ -106,13 +132,16 @@
                     users.append(username)
             field['options'] = users
             field['optional'] = True
-        else:
-            field['type'] = 'text'
+        #ulr1 061128 not needed any more
+        #else:
+        #    field['type'] = 'text'
         fields.append(field)
 
         # Description
-        fields.append({'name': 'description', 'type': 'textarea',
-                       'label': 'Description'})
+        # ulr1 061128 
+        field = self._get_field_dflt_props(fields, 'description', 'textarea')
+        fields.append(field)
+        #fields.append({'name': 'description', 'type': 'textarea','label': 'Description'})
 
         # Default select and radio fields
         selects = [('type', model.Type), ('status', model.Status),
@@ -125,9 +154,15 @@
                 # Fields without possible values are treated as if they didn't
                 # exist
                 continue
-            field = {'name': name, 'type': 'select', 'label': name.title(),
-                     'value': self.config.get('ticket', 'default_' + name),
-                     'options': options}
+            # ulr1 061128 
+            #options.append('(undef)')
+            field = self._get_field_dflt_props(fields, name, 'select')
+            field['options']=options
+            #if not field.has_key('value'):
+            #    field['value']='(undef)'
+            
+            #field = {'name': name, 'type': 'select', 'label': name.title(),
+            #         'value': self.config.get('ticket', 'default_' + name), 'options': options}
             if name in ('status', 'resolution'):
                 field['type'] = 'radio'
                 field['optional'] = True
@@ -137,7 +172,9 @@
 
         # Advanced text fields
         for name in ('keywords', 'cc', ):
-            field = {'name': name, 'type': 'text', 'label': name.title()}
+            # ulr1 061128 
+            field = self._get_field_dflt_props(fields, name, 'text')
+            #field = {'name': name, 'type': 'text', 'label': name.title()}
             fields.append(field)
 
         for field in self.get_custom_fields():
@@ -152,8 +189,17 @@
             field['custom'] = True
             fields.append(field)
 
+        # NOTE: fields sort also done to web_ui.py::process_request (ulr1 061127)
+        # ulr1 061128 
+        fields.sort(lambda x, y: cmp(x['order'], y['order']))
+
+        #test: 
+        #for field in fields:
+        #    print "1.name=%s, order=%d" % (field['name'], field['order'])
+
         return fields
 
+    # -------------------------------------------
     def get_custom_fields(self):
         fields = []
         config = self.config['ticket-custom']
@@ -162,13 +208,42 @@
             field = {
                 'name': name,
                 'type': config.get(name),
-                'order': config.getint(name + '.order', 0),
+                # ulr1 061127 default from 0 to 3000...
+                'order': config.getint(name + '.order', 3000+len(fields)*10),
                 'label': config.get(name + '.label') or name.capitalize(),
                 'value': config.get(name + '.value', '')
-            }
+                }
+            #ulr1 061128 
+            field['value']=self._eval_field_value(field['value'])
+
             if field['type'] == 'select' or field['type'] == 'radio':
-                field['options'] = config.getlist(name + '.options', sep='|')
+                #ulr1 061019 SQL:
+                #field['options'] = config.getlist(name + '.options', sep='|')
+                options = self.config.get('ticket-custom', name + '.options').strip()
+                if options.startswith("SQL:"):
+                    cursor = self.env.get_db_cnx().cursor()
+                    cursor.execute(options[len("SQL:"):])
+                    rows = cursor.fetchall()
+                    if rows:
+                        field['options'] = [row[0].strip() for row in rows]
+                    else:
+                        field['options']=[]
+                else:
+                    # old: field['options'] = [value.strip() for value in options.split('|')]
+                    # ulr1 060731  end
+                    field['options'] = config.getlist(name + '.options', sep='|')
                 field['optional'] = '' in field['options']
+            #ulr1 061128 
+            # TODO: for text and other ... optional ... 
+            #else:
+            #    field['optional'] = config.getint(name + '.optional') > 0
+            
+            # new
+            if field['type'] == 'select' or field['type'] == 'radio':
+                options = self.config.get('ticket-custom', name + '.options')
+
+
+
             elif field['type'] == 'textarea':
                 field['width'] = config.getint(name + '.cols')
                 field['height'] = config.getint(name + '.rows')
Index: trac/ticket/web_ui.py
===================================================================
--- trac/ticket/web_ui.py	(revision 2)
+++ trac/ticket/web_ui.py	(working copy)
@@ -149,14 +149,21 @@
                 ticket.fields.insert(insert_idx, ticket.fields[curr_idx])
                 del ticket.fields[curr_idx]
 
+        #ulr1 061128 
+        ticket.fields.sort(lambda x, y: cmp(x['order'], y['order']))
+
         for field in ticket.fields:
+            #ulr1 061128 test
+            #print "2.name=%s, order=%d" % (field['name'], field['order'])
             name = field['name']
             del field['name']
             if name in ('summary', 'reporter', 'description', 'type', 'status',
                         'resolution'):
                 field['skip'] = True
             elif name == 'owner':
-                field['label'] = 'Assign to'
+                #ulr1 061128 
+                # already filled in api.py 
+                # field['label'] = 'Assign to'
                 if not req.perm.has_permission('TICKET_MODIFY'):
                     field['skip'] = True
             elif name == 'milestone':
@@ -556,6 +563,7 @@
         fragment = cnum and '#comment:'+cnum or ''
         req.redirect(req.href.ticket(ticket.id) + fragment)
 
+    # TODO: ulr1 061128 some fields shouldn't be changed in 
     def _insert_ticket_data(self, req, db, ticket, reporter_id):
         """Insert ticket data into the hdf"""
         replyto = req.args.get('replyto')
Index: trac/web/auth.py
===================================================================
--- trac/web/auth.py	(revision 5)
+++ trac/web/auth.py	(working copy)
@@ -209,6 +209,9 @@
     def load(self, filename):
         fd = open(filename, 'r')
         for line in fd:
+            #ulr1 060726 
+            if line.startswith("#"): 
+               continue
             line = line.strip()
             if not line:
                 continue
