You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/03/22 23:54:40 UTC
[13/21] git commit: [#4299] ticket:293 Use ProjectUserCombo for
'user' type custom field
[#4299] ticket:293 Use ProjectUserCombo for 'user' type custom field
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/672f7ba5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/672f7ba5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/672f7ba5
Branch: refs/heads/master
Commit: 672f7ba5c3e6338a6136a8965dd753d0bb7f293f
Parents: 3c5a73b
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Mar 14 14:34:20 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Fri Mar 22 21:55:16 2013 +0000
----------------------------------------------------------------------
ForgeTracker/forgetracker/widgets/ticket_form.py | 51 +++++++++++-----
1 files changed, 35 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/672f7ba5/ForgeTracker/forgetracker/widgets/ticket_form.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/widgets/ticket_form.py b/ForgeTracker/forgetracker/widgets/ticket_form.py
index c870686..1334b37 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_form.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_form.py
@@ -7,20 +7,24 @@ import ew as ew_core
import ew.jinja2_ew as ew
from allura import model as M
-from forgetracker import model
class TicketCustomFields(ew.CompoundField):
template='jinja:forgetracker:templates/tracker_widgets/ticket_custom_fields.html'
+ def __init__(self, *args, **kwargs):
+ super(TicketCustomFields, self).__init__(*args, **kwargs)
+ self._fields = None
+
@property
def fields(self):
# milestone is kind of special because of the layout
# add it to the main form rather than handle with the other customs
- fields = []
- for cf in c.app.globals.custom_fields:
- if cf.name != '_milestone':
- fields.append(TicketCustomField.make(cf))
- return fields
+ if self._fields is None:
+ self._fields = []
+ for cf in c.app.globals.custom_fields:
+ if cf.name != '_milestone':
+ self._fields.append(TicketCustomField.make(cf))
+ return self._fields
class GenericTicketForm(ew.SimpleForm):
defaults=dict(
@@ -40,21 +44,36 @@ class GenericTicketForm(ew.SimpleForm):
del field.options[field.options.index(milestone)]
ctx = self.context_for(field)
elif idx == 'assigned_to':
- user = ctx.get('value')
- if isinstance(user, basestring):
- user = M.User.by_username(user)
- if user:
- field.options = [
- ew.Option(
- py_value=user.username,
- label='%s (%s)' % (user.display_name, user.username))
- ]
+ self._add_current_value_to_user_field(field, ctx.get('value'))
+ elif idx == 'custom_fields':
+ for cf in c.app.globals.custom_fields:
+ if cf.type == 'user':
+ user = ctx.get('value', {}).get(cf.name)
+ for f in field.fields:
+ if f.name == cf.name:
+ self._add_current_value_to_user_field(f, user)
display = field.display(**ctx)
if ctx['errors'] and field.show_errors and not ignore_errors:
display = "%s<div class='error'>%s</div>" % (display, ctx['errors'])
return display
+ def _add_current_value_to_user_field(self, field, user):
+ """Adds current field's value to `ProjectUserCombo` options.
+
+ This is done to be able to select default value when widget loads,
+ since normally `ProjectUserCombo` shows without any options, and loads
+ them asynchronously (via ajax).
+ """
+ if isinstance(user, basestring):
+ user = M.User.by_username(user)
+ if user and user != M.User.anonymous():
+ field.options = [
+ ew.Option(
+ py_value=user.username,
+ label='%s (%s)' % (user.display_name, user.username))
+ ]
+
@property
def fields(self):
fields = [
@@ -146,7 +165,7 @@ class TicketCustomField(object):
return ew.NumberField(label=field.label, name=str(field.name))
def _user(field):
- return ffw.ProjectUserSelect(label=field.label, name=str(field.name))
+ return ffw.ProjectUserCombo(label=field.label, name=str(field.name))
@staticmethod
def _default(field):