Author: asemonella Date: Fri Feb 21 16:11:20 2014 New Revision: 1570616 URL: http://svn.apache.org/r1570616 Log: #727 Post QCT fields to preview new ticket. Disables "more" link if no product selected. Remove hidden fields not required for QCT 'more'.
Modified: bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/web_ui.py bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html bloodhound/trunk/bloodhound_theme/bhtheme/theme.py Modified: bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/web_ui.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/web_ui.py?rev=1570616&r1=1570615&r2=1570616&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/web_ui.py (original) +++ bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/web_ui.py Fri Feb 21 16:11:20 2014 @@ -50,16 +50,11 @@ class ProductTicketModule(TicketModule): """Override for TicketModule process_request""" ticketid = req.args.get('id') productid = req.args.get('productid', '') - qct_product = req.args.get('product') # From QCT form + if not ticketid: # if /newticket is executed in global scope (from QCT), redirect # the request to /products/<first_product_in_DB>/newticket - # - # If here from "More fields" link then pass along QCT form fields. - # If product arg present then redirect to - # /products/<qct_product>/newticket . - - if not productid and not qct_product and \ + if not productid and \ not isinstance(self.env, ProductEnvironment): default_product = self.env.config.get('ticket', 'default_product') @@ -67,16 +62,8 @@ class ProductTicketModule(TicketModule): prefixes = [prod.prefix for prod in products] if not default_product or default_product not in prefixes: default_product = products[0].prefix - req.redirect(req.href.products(default_product, 'newticket', - req.args)) - elif qct_product: - # Most likely arrived here via the QCT "More fields" link. - # Use <qct_product> to redirect to the appropriate product - # scope - - req.args.pop('product') # don't reenter block on redirect. - req.redirect(req.href.products(qct_product, 'newticket', - req.args)) + req.redirect(req.href.products(default_product, 'newticket')) + return self._process_newticket_request(req) if req.path_info in ('/newticket', '/products'): Modified: bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css?rev=1570616&r1=1570615&r2=1570616&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css Fri Feb 21 16:11:20 2014 @@ -342,6 +342,9 @@ ol.arabic { list-style-type: decimal margin-top: 5px; margin-bottom: 5px; } +#qct-more { + visibility: hidden; +} /* workaround for -hidden/-visible buttons in a btn-group, which don't Modified: bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js?rev=1570616&r1=1570615&r2=1570616&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js Fri Feb 21 16:11:20 2014 @@ -94,16 +94,36 @@ $( function () { }); /** - * Pass QCT form fields to full ticket form when "More fields" is clicked + * POST QCT form fields to full ticket form when "More fields" is clicked */ $('#qct-more').click(function(e) { + // As we're not creating the ticket, we'll remove hidden fields + // that result in unnecessary validation messages. e.preventDefault(); - var href = $(this).attr('href'); - var params = $('#qct-form').serialize(); - params = params.replace(/field_/g, ''); // map to newticket querystring - window.location = href + '?' + params; + $qct_form = $('#qct-form'); + $qct_form.unbind('submit'); + new_ticket_url = $qct_form.find(':selected').attr('data-product-new-ticket-url'); + $qct_form.attr('action', new_ticket_url); + $('.qct-product-scope-extra').remove(); + $qct_form.append('<input type="hidden" value="1" name="preview" />'); + $qct_form.submit(); + }); + function set_qct_more_visibility(is_visible) { + if (is_visible) { + $('#qct-more').css('visibility', 'visible'); + } else { + $('#qct-more').css('visibility', 'hidden'); + } + } + + $('#field-product').change(function(e) { + set_qct_more_visibility($(this).val()); + }); + + set_qct_more_visibility($('#field-product').val()); + $('body').on('click.close', '#qct-alert-close', function (e) { qct_alert_close() }); 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=1570616&r1=1570615&r2=1570616&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html Fri Feb 21 16:11:20 2014 @@ -122,7 +122,8 @@ <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 = "${option.value}" + data-product-new-ticket-url = "${option.product_new_ticket_url}" py:content="description"></option> <optgroup py:for="optgroup in field.optgroups" py:if="optgroup.options" @@ -176,7 +177,7 @@ </div> <py:for each="field in qct.hidden_fields"> - <input type="hidden" name="field_${field.name}" value="${field.value}" /> + <input class="qct-product-scope-extra" type="hidden" name="field_${field.name}" value="${field.value}" /> </py:for> </form> Modified: bloodhound/trunk/bloodhound_theme/bhtheme/theme.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/theme.py?rev=1570616&r1=1570615&r2=1570616&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_theme/bhtheme/theme.py (original) +++ bloodhound/trunk/bloodhound_theme/bhtheme/theme.py Fri Feb 21 16:11:20 2014 @@ -47,6 +47,7 @@ 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 @@ -555,7 +556,7 @@ class QuickCreateTicketDialog(Component) dum_req.perm = req.perm ticket = Ticket(self.env) tm._populate(dum_req, ticket, False) - all_fields = dict([f['name'], f] + all_fields = dict([f['name'], self.add_prod_new_ticket_url(dum_req, f)] for f in tm._prepare_fields(dum_req, ticket) if f['type'] == 'select') @@ -565,13 +566,14 @@ class QuickCreateTicketDialog(Component) product_field['options'] = \ [prefix for prefix in product_field['options'] if req.perm.has_permission('TICKET_CREATE', - Neighborhood('product', prefix) + Neighborhood('product', prefix['value']) .child(None, None))] + 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).product.name + ProductEnvironment.lookup_env(self.env, p['value']).product.name for p in product_field['options'] ] else: @@ -587,8 +589,7 @@ class QuickCreateTicketDialog(Component) 'fields': [all_fields[k] for k in self.qct_fields if k in all_fields], 'hidden_fields': [all_fields[k] for k in all_fields.keys() - if k not in self.qct_fields] - } + if k not in self.qct_fields] } return template, data, content_type # IRequestHandler methods @@ -665,5 +666,17 @@ 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