Author: rjollos Date: Mon Mar 3 07:07:53 2014 New Revision: 1573459 URL: http://svn.apache.org/r1573459 Log: 0.8dev: Fixed regression in r1570616: the product at scope is no longer the default selection. Refs #727.
The code in `theme.py` was also refactored to simplify preparation of the `options` dictionary. Modified: bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html bloodhound/trunk/bloodhound_theme/bhtheme/theme.py Modified: bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css?rev=1573459&r1=1573458&r2=1573459&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css Mon Mar 3 07:07:53 2014 @@ -343,7 +343,7 @@ ol.arabic { list-style-type: decimal margin-bottom: 5px; } #qct-more { - visibility: hidden; + visibility: hidden; } /* Modified: bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html?rev=1573459&r1=1573458&r2=1573459&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html Mon Mar 3 07:07:53 2014 @@ -117,13 +117,15 @@ <!--! create ticket button + dropdown --> <py:def function="field_select(field)"> <select id="field-${field.name}" name="field_${field.name}" - class="input-block-level" data-field="${field.name}" data-optional="${'true' if field.optional else 'false'}"> + class="input-block-level" data-field="${field.name}" + data-optional="${'true' if field.optional else 'false'}"> <option value="">${'' if field.optional else 'Choose...'}</option> - <option py:for="idx,option in enumerate(field.options)" - py:with="description = field.options_desc[idx] if field.options_desc else option" - selected="${field.value == option or None}" - value = "${option.value}" - data-product-new-ticket-url = "${option.product_new_ticket_url}" + <option py:for="option in field.options" + py:with="description = option.description or option; + value = option.value or option" + selected="${field.value == value or None}" + value = "$value" + data-product-new-ticket-url = "$option.new_ticket_url" py:content="description"></option> <optgroup py:for="optgroup in field.optgroups" py:if="optgroup.options" Modified: bloodhound/trunk/bloodhound_theme/bhtheme/theme.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/theme.py?rev=1573459&r1=1573458&r2=1573459&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/theme.py (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/theme.py Mon Mar 3 07:07:53 2014 @@ -47,7 +47,6 @@ from bhdashboard.web_ui import Dashboard from bhdashboard import wiki from multiproduct.env import ProductEnvironment -from multiproduct.model import Product from multiproduct.web_ui import PRODUCT_RE, ProductModule from bhtheme.translation import _, add_domain @@ -532,7 +531,7 @@ class QuickCreateTicketDialog(Component) locale_dir = pkg_resources.resource_filename(__name__, 'locale') add_domain(self.env.path, locale_dir) super(QuickCreateTicketDialog, self).__init__(*args, **kwargs) - + # IRequestFilter(Interface): def pre_process_request(self, req, handler): @@ -556,26 +555,31 @@ class QuickCreateTicketDialog(Component) dum_req.perm = req.perm ticket = Ticket(self.env) tm._populate(dum_req, ticket, False) - all_fields = dict([f['name'], self.add_prod_new_ticket_url(dum_req, f)] + all_fields = dict([f['name'], f] for f in tm._prepare_fields(dum_req, ticket) if f['type'] == 'select') product_field = all_fields.get('product') if product_field: - # Filter out products for which user doesn't have TICKET_CREATE - product_field['options'] = \ - [prefix for prefix in product_field['options'] - if req.perm.has_permission('TICKET_CREATE', - Neighborhood('product', prefix['value']) - .child(None, None))] - + # When at product scope, set the default selection to the + # product at current scope. When at global scope the default + # selection is determined by [ticket] default_product if self.env.product and \ self.env.product.prefix in product_field['options']: product_field['value'] = self.env.product.prefix - product_field['options_desc'] = [ - ProductEnvironment.lookup_env(self.env, p['value']).product.name - for p in product_field['options'] - ] + # Transform the options field to dictionary of product + # attributes and filter out products for which user doesn't + # have TICKET_CREATE permission + product_field['options'] = [ + dict(value=p, + new_ticket_url=dum_req.href.products(p, 'newticket'), + description=ProductEnvironment.lookup_env(self.env, p) + .product.name + ) + for p in product_field['options'] + if req.perm.has_permission('TICKET_CREATE', + Neighborhood('product', p) + .child(None, None))] else: msg = _("Missing ticket field '%(field)s'.", field='product') if ProductTicketModule is not None and \ @@ -666,17 +670,5 @@ class QuickCreateTicketDialog(Component) "of ticket #%s: %s" % (t.id, e)) return t['product'], t.id - def add_prod_new_ticket_url(self, req, fields): - if fields.get('name') == 'product': - options_with_attrs = [] - for option in fields.get('options', []): - options_with_attrs.append({ - 'value': option, - 'product_new_ticket_url': \ - req.href.products(option, 'newticket') - }) - fields['options'] = options_with_attrs - return fields - from pkg_resources import get_distribution application_version = get_distribution('BloodhoundTheme').version