Mercurial > hg > savane-forge
changeset 334:70f5630b1e1e
Tracker: more display form fields
author | Sylvain Beucler <beuc@beuc.net> |
---|---|
date | Sun, 22 Aug 2010 22:18:04 +0200 |
parents | 1de0e15f60d6 |
children | 0718a9ef6cd5 |
files | doc/scripts/tracker_gendefs.py migrate_old_savane.sql savane/tracker/defs.py savane/tracker/models.py templates/tracker/item_form.html |
diffstat | 5 files changed, 81 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/scripts/tracker_gendefs.py +++ b/doc/scripts/tracker_gendefs.py @@ -18,17 +18,17 @@ name = row[1] field_names.append(name) defs[name] = '' - if name == 'field_name': - defs[name] += " 'name' : {\n" - else: - defs[name] += " '"+name+"' : {\n" + defs[name] += " '"+name+"' : {\n" for i,val in enumerate(row): if i <= 0 \ or (complex_defs[name]['display_type'] not in ('TA', 'TF') and tfields[i] == 'display_size'): continue else: + col_name = tfields[i] + if col_name == 'field_name': + col_name = 'name' defs[name] += " " \ - + "'"+tfields[i]+"'" \ + + "'"+col_name+"'" \ + ": " if tfields[i] == 'label' or tfields[i] == 'description': defs[name] += '_("' + val + '"),' @@ -37,11 +37,10 @@ # override priority.required so we have a common # definition for all trackers defs[name] += str(0)+"," - elif (name=='priority' or name=='resolution_id') \ - and tfields[i] == 'empty_ok': - # override priority.empty_ok so we have a common - # definition for all trackers - defs[name] += str(1)+"," + elif name in ('bug_id','group_id','submitted_by','date','close_date',) \ + and tfields[i] == 'display_type': + # not editable, no display_type + defs[name] += "''," elif type(val) == long: defs[name] += str(val)+"," else:
--- a/migrate_old_savane.sql +++ b/migrate_old_savane.sql @@ -551,7 +551,7 @@ keep_history, transition_default_auth) SELECT 'bugs', NULL, field_name, use_it, IF(show_on_add<2,0,1), IF(show_on_add%2=0,0,1), show_on_add_members, place, - label, description, custom_display_size, custom_empty_ok, + label, description, display_size, custom_empty_ok, keep_history, transition_default_auth FROM temp_bugs_field_usage JOIN savane_old.bugs_field USING (bug_field_id) @@ -562,7 +562,7 @@ keep_history, transition_default_auth) SELECT 'bugs', NULL, field_name, 0, IF(show_on_add<2,0,1), IF(show_on_add%2=0,0,1), show_on_add_members, place, - label, description, custom_display_size, custom_empty_ok, + label, description, display_size, custom_empty_ok, keep_history, transition_default_auth FROM temp_task_field_usage JOIN savane_old.task_field USING (bug_field_id) @@ -582,7 +582,6 @@ DROP TABLE temp_bugs_field_usage; DROP TABLE temp_task_field_usage; - -- Get rid of field_value duplicates (old mysql/php/savane bug?) -- Apparently this affects 'None' values. -- Give priority to the last one (arbitrarily).
--- a/savane/tracker/defs.py +++ b/savane/tracker/defs.py @@ -63,7 +63,7 @@ field_defs = { 'bug_id' : { 'name': 'bug_id', - 'display_type': 'TF', + 'display_type': '', 'scope': 'S', 'required': 1, 'special': 1, @@ -71,7 +71,7 @@ }, 'group_id' : { 'name': 'group_id', - 'display_type': 'TF', + 'display_type': '', 'scope': 'S', 'required': 1, 'special': 1, @@ -79,7 +79,7 @@ }, 'submitted_by' : { 'name': 'submitted_by', - 'display_type': 'SB', + 'display_type': '', 'scope': 'S', 'required': 1, 'special': 1, @@ -87,7 +87,7 @@ }, 'date' : { 'name': 'date', - 'display_type': 'DF', + 'display_type': '', 'scope': 'S', 'required': 1, 'special': 1, @@ -95,7 +95,7 @@ }, 'close_date' : { 'name': 'close_date', - 'display_type': 'DF', + 'display_type': '', 'scope': 'S', 'required': 1, 'special': 1,
--- a/savane/tracker/models.py +++ b/savane/tracker/models.py @@ -41,7 +41,8 @@ # EDIT: actually I think only forms fields cannot be overriden, it # still can be done programmatically -DISPLAY_TYPE_CHOICES = (('DF', _('date field')), +DISPLAY_TYPE_CHOICES = (('', _('not editable')), + ('DF', _('date field')), ('SB', _('select box')), ('TA', _('text area')), ('TF', _('text field')),) @@ -217,6 +218,14 @@ field_definition['transition_default_auth'] = self.transition_default_auth elif field_definition['display_type'] in ('TA', 'TF'): field_definition['display_size'] = self.display_size + print field_definition['name'], field_definition['display_size'] + # Make it easier to access the field from templates: + if field_definition['display_type'] == 'TF': + field_definition['input_size'] = field_definition['display_size'].split("/")[0] + field_definition['input_maxlength'] = field_definition['display_size'].split("/")[1] + else: + field_definition['textarea_cols'] = field_definition['display_size'].split("/")[0] + field_definition['textarea_rows'] = field_definition['display_size'].split("/")[1] if self.group_id is None or field_definition['special'] != 1: field_definition['keep_history'] = self.keep_history if self.group_id is None or field_definition['custom'] == 1: @@ -308,6 +317,10 @@ v.append(o) values.sort(key=lambda x: x['rank']) + # Try to apply a translation: + for v in values: + v['value'] = ugettext(v['value']) + return values # Auto_increment counters @@ -488,7 +501,7 @@ elif self.tracker_id == 'task': return "task" - def get_fields(self): + def get_field_defs(self): """ Return fields definition for this group tracker (default values + group-specific overlay). Only apply sensible @@ -502,7 +515,7 @@ overlay.apply_on(fields[name]) for name in fields: if fields[name]['display_type'] == 'SB': - fields[name]['values'] = field_get_values(self.tracker_id, self.group, + fields[name]['choices'] = field_get_values(self.tracker_id, self.group, fields[name], self.get_value(name)) return fields @@ -510,7 +523,7 @@ """ Return displayable fields, ordered by rank """ - fields = self.get_fields().copy() + fields = self.get_field_defs() ret = [] for name in fields.keys(): if (not (fields[name]['required'] or fields[name]['use_it']) @@ -565,15 +578,17 @@ html += u'<input type="text" size="4" maxlength="4" name="%s_yearfd" value="TODO">' % (name) elif field['display_type'] == 'SB': html += u'<select name="%s">\n' % name - for option in field['values']: + for option in field['choices']: selected = '' if option['value_id'] == value: selected = ' selected="selected"' - html += u'<option value="%d"%s>%s</option>\n' % (option['value_id'], selected, ugettext(option['value'])) + html += u'<option value="%d"%s>%s</option>\n' % (option['value_id'], selected, option['value']) html += '</select>' elif field['display_type'] == 'TA': + # TODO: display_size html += u'<textarea name="%s">%s</textarea>' % (name, value) elif field['display_type'] == 'TF': + # TODO: display_size html += u'<input type="text" name="%s" value="%s" />' % (name, value) html += '</td>\n'
--- a/templates/tracker/item_form.html +++ b/templates/tracker/item_form.html @@ -27,14 +27,17 @@ <tr> <th>{% trans "Submitted by" %}{% trans ": " %}</th> <td> - {% if object.submitted_by %} - <a href="{% url savane:svmain:user_detail object.submitted_by.username %}" - >{{object.submitted_by.get_full_name}} - <{{object.submitted_by.username}}></a> - {% else %} - {% trans "Anonymous" %} - {% endif %}</td> - <td colspan="2" class="button"><input type="submit" style="font-weight: bold;" value="{% trans "Submit changes and browse items" %}" /> + {% if object.submitted_by %} + <a href="{% url savane:svmain:user_detail object.submitted_by.username %}" + >{{object.submitted_by.get_full_name}} + <{{object.submitted_by.username}}></a> + {% else %} + {% trans "Anonymous" %} + {% endif %} + </td> + <td colspan="2" class="button"> + <input type="submit" style="font-weight: bold;" value="{% trans "Submit changes and browse items" %}" /> + </td> </tr> <tr> <th>{% trans "Submitted on" %}{% trans ": " %}</th> @@ -43,10 +46,43 @@ </tr> <tr><td colspan="4" style="height: 15px;"></td></tr> {{object.get_form}} +<tr> + <th>{% trans "Summary" %}{% trans ": "%}</th> + <td colspan="3"> + <input type="text" name="summary" value="{{object.get_summary}}" + maxlength="{{object.get_field_defs.summary.input_maxlength}}" + size="{{object.get_field_defs.summary.input_size}}" + /> + </td> +</tr> </table> + <h2>{% trans "Post a comment" %}</h2> +<p class="preinput">{% trans "Add a new comment" %}{% trans ": " %}<br /> + <textarea cols="65" rows="16" name="comment"></textarea> +</p> +<p class="preinput">{% trans "Comment type & canned response" %}{% trans ": " %}<br /> + <select name="comment_type_id"> + {% for choice in object.get_field_defs.comment_type_id.choices %} + <option value="{{choice.value_id}}">{{choice.value}}</option> + {% endfor %} + </select> + + {% if 0 %} + <select named="canned_response"> + <option value="">TODO</option> + </select> + {% else %} + {% trans "No canned response available" %} + + <a class="smaller" href="TODO"> + ({% trans "Or define a new canned response" %}) + </a> + {% endif %} +</p> + <h2>{% trans "Discussion" %}</h2> <h2>{% trans "Attached files" %}</h2>