]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1029800 - Release Tracking Report doesn't return bugs with tracking flags set...
authorByron Jones <glob@mozilla.com>
Fri, 9 Oct 2015 04:54:23 +0000 (12:54 +0800)
committerByron Jones <glob@mozilla.com>
Fri, 9 Oct 2015 04:54:23 +0000 (12:54 +0800)
extensions/BMO/lib/Reports/ReleaseTracking.pm
extensions/BMO/web/js/release_tracking_report.js

index 5a07ae19633cc21b65d26eff377d26d43db91623..2535340cbeb82a6dbefc3e10b442f6758ca312ae 100644 (file)
@@ -122,6 +122,7 @@ sub report {
     my @unlink_products;
     foreach my $product (@usable_products) {
         my @fields =
+            sort { $a->sortkey <=> $b->sortkey }
             grep { is_active_status_field($_) }
             Bugzilla->active_custom_fields({ product => $product });
         my @field_ids = map { $_->id } @fields;
@@ -156,6 +157,7 @@ sub report {
             if (!$existing) {
                 push @fields_json, {
                     name => $field->name,
+                    desc => $field->description,
                     id => $field->id,
                 };
             }
@@ -239,15 +241,10 @@ sub report {
         my $query = "
             SELECT DISTINCT b.bug_id
               FROM bugs b
-                   INNER JOIN flags f ON f.bug_id = b.bug_id ";
+                   INNER JOIN flags f ON f.bug_id = b.bug_id\n";
 
         if ($q->{start_date}) {
-            $query .= "INNER JOIN bugs_activity a ON a.bug_id = b.bug_id ";
-        }
-
-        if (grep($_ == FIELD_TYPE_EXTENSION, map { $_->{type} } @{ $q->{fields} })) {
-            $query .= "LEFT JOIN tracking_flags_bugs AS tfb ON tfb.bug_id = b.bug_id " .
-                      "LEFT JOIN tracking_flags AS tf ON tfb.tracking_flag_id = tf.id ";
+            $query .= "INNER JOIN bugs_activity a ON a.bug_id = b.bug_id\n";
         }
 
         $query .= "WHERE ";
@@ -286,7 +283,15 @@ sub report {
             foreach my $field (@{$q->{fields}}) {
                 my $field_sql = "(";
                 if ($field->{type} == FIELD_TYPE_EXTENSION) {
-                    $field_sql .= "tf.name = " . $dbh->quote($field->{name}) . " AND COALESCE(tfb.value, '')";
+                    $field_sql .= "
+                        COALESCE(
+                            (SELECT tracking_flags_bugs.value
+                               FROM tracking_flags_bugs
+                                    LEFT JOIN tracking_flags
+                                         ON tracking_flags.id = tracking_flags_bugs.tracking_flag_id
+                              WHERE tracking_flags_bugs.bug_id = b.bug_id
+                                    AND tracking_flags.name = " . $dbh->quote($field->{name}) . ")
+                        , '') ";
                 }
                 else {
                     $field_sql .= "b." . $field->{name};
@@ -325,21 +330,10 @@ sub report {
     # set template vars
     #
 
-    my $json = JSON->new();
-    if (0) {
-        # debugging
-        $json->shrink(0);
-        $json->canonical(1);
-        $vars->{flags_json} = $json->pretty->encode(\@flags_json);
-        $vars->{products_json} = $json->pretty->encode(\@products_json);
-        $vars->{fields_json} = $json->pretty->encode(\@fields_json);
-    } else {
-        $json->shrink(1);
-        $vars->{flags_json} = $json->encode(\@flags_json);
-        $vars->{products_json} = $json->encode(\@products_json);
-        $vars->{fields_json} = $json->encode(\@fields_json);
-    }
-
+    my $json = JSON->new()->shrink(1);
+    $vars->{flags_json} = $json->encode(\@flags_json);
+    $vars->{products_json} = $json->encode(\@products_json);
+    $vars->{fields_json} = $json->encode(\@fields_json);
     $vars->{flag_names} = \@flag_names;
     $vars->{ranges} = \@ranges;
     $vars->{default_query} = $input->{q};
index 840b57df1024d1abdd2a88e2737f9ed17221a487..adad6feb5ce354f92e412d24d0e51a636ebaa9f6 100644 (file)
@@ -5,7 +5,6 @@
  * This Source Code Form is "Incompatible With Secondary Licenses", as
  * defined by the Mozilla Public License, v. 2.0. */
 
-var Dom = YAHOO.util.Dom;
 var flagEl;
 var productEl;
 var trackingEl;
@@ -15,13 +14,13 @@ var selectedFields;
 
 function onFieldToggle(cbEl, id) {
   if (cbEl.checked) {
-    Dom.removeClass('field_' + id + '_td', 'disabled');
+    $('#field_' + id + '_td').removeClass('disabled');
     selectedFields['field_' + id] = id;
   } else {
-    Dom.addClass('field_' + id + '_td', 'disabled');
+    $('#field_' + id + '_td').addClass('disabled');
     selectedFields['field_' + id] = false;
   }
-  Dom.get('field_' + id + '_select').disabled = !cbEl.checked;
+  $('#field_' + id + '_select').attr('disabled', !cbEl.checked);
   serialiseForm();
 }
 
@@ -29,7 +28,7 @@ function onProductChange() {
   var product = productEl.value;
   var productData = product == '0' ? getFlagByName(flagEl.value) : getProductById(product);
   var html = '';
-  selectedFields = new Array();
+  selectedFields = [];
 
   if (productData) {
     // update status fields
@@ -44,10 +43,11 @@ function onProductChange() {
               '</td>' +
               '<td class="disabled" id="field_' + field.id + '_td">' + 
                 '<label for="field_' + field.id + '_cb">' +
-                YAHOO.lang.escapeHTML(field.name) + ':</label>' +
+                field.desc.htmlEncode() + ':</label>' +
               '</td>' +
               '<td>' +
-                '<select disabled id="field_' + field.id + '_select">' +
+                '<select disabled id="field_' + field.id + '_select" ' +
+                        'onChange="onFieldToggle($(\'#field_' + field.id + '_cb\')[0],' + field.id + ')">' +
                   '<option value="+">fixed</option>' +
                   '<option value="-">not fixed</option>' +
                 '</select>' +
@@ -83,7 +83,8 @@ function onFlagChange() {
 
 function selectAllFields() {
   for(var i = 0, l = fields_data.length; i < l; i++) {
-    var cb = Dom.get('field_' + fields_data[i].id + '_cb');
+    var cb = $('#field_' + fields_data[i].id + '_cb')[0];
+    if (!cb) continue;
     cb.checked = true;
     onFieldToggle(cb, fields_data[i].id);
   }
@@ -92,7 +93,8 @@ function selectAllFields() {
 
 function selectNoFields() {
   for(var i = 0, l = fields_data.length; i < l; i++) {
-    var cb = Dom.get('field_' + fields_data[i].id + '_cb');
+    var cb = $('#field_' + fields_data[i].id + '_cb')[0];
+    if (!cb) continue;
     cb.checked = false;
     onFieldToggle(cb, fields_data[i].id);
   }
@@ -101,7 +103,8 @@ function selectNoFields() {
 
 function invertFields() {
   for(var i = 0, l = fields_data.length; i < l; i++) {
-    var el = Dom.get('field_' + fields_data[i].id + '_select');
+    var el = $('#field_' + fields_data[i].id + '_select')[0];
+    if (!el) continue;
     if (el.value == '+') {
       el.options[1].selected = true;
     } else {
@@ -122,40 +125,39 @@ function onFormReset() {
 
 function serialiseForm() {
   var q = flagEl.value + ':' +
-          Dom.get('flag_value').value + ':' +
-          Dom.get('range').value + ':' +
+          $('#flag_value').val() + ':' +
+          $('#range').val() + ':' +
           productEl.value + ':' +
-          Dom.get('op').value + ':';
+          $('#op').val() + ':';
 
   for(var id in selectedFields) {
     if (selectedFields[id]) {
-      q += selectedFields[id] + Dom.get(id + '_select').value + ':';
+      q += selectedFields[id] + $('#' + id + '_select').val() + ':';
     }
   }
 
-  Dom.get('q').value = q;
-  Dom.get('bookmark').href = 'page.cgi?id=release_tracking_report.html&q=' +
-                             encodeURIComponent(q);
+  $('#q').val(q);
+  $('#bookmark').attr('href', 'page.cgi?id=release_tracking_report.html&q=' + encodeURIComponent(q));
 }
 
 function deserialiseForm(q) {
   var parts = q.split(/:/);
   selectValue(flagEl, parts[0]);
   onFlagChange();
-  selectValue(Dom.get('flag_value'), parts[1]);
-  selectValue(Dom.get('range'), parts[2]);
+  selectValue($('#flag_value')[0], parts[1]);
+  selectValue($('#range')[0], parts[2]);
   selectValue(productEl, parts[3]);
   onProductChange();
-  selectValue(Dom.get('op'), parts[4]);
+  selectValue($('#op')[0], parts[4]);
   for(var i = 5, l = parts.length; i < l; i++) {
     var part = parts[i];
     if (part.length) {
       var value = part.substr(part.length - 1, 1);
       var id = part.substr(0, part.length - 1);
-      var cb = Dom.get('field_' + id + '_cb');
+      var cb = $('#field_' + id + '_cb')[0];
       cb.checked = true;
       onFieldToggle(cb, id);
-      selectValue(Dom.get('field_' + id + '_select'), value);
+      selectValue($('#field_' + id + '_select')[0], value);
     }
   }
   serialiseForm();
@@ -163,10 +165,10 @@ function deserialiseForm(q) {
 
 // utils
 
-YAHOO.util.Event.onDOMReady(function() {
-  flagEl = Dom.get('flag');
-  productEl = Dom.get('product');
-  trackingEl = Dom.get('tracking_span');
+$().ready(function() {
+  flagEl = $('#flag')[0];
+  productEl = $('#product')[0];
+  trackingEl = $('#tracking_span')[0];
   onFlagChange();
   deserialiseForm(default_query);
 });