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


Reply via email to