From b84db39863cd55166bff584265d255a0f882e64a Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Thu, 25 Jul 2013 14:41:32 +0800 Subject: Bug 750742: Create new BMO extension called TrackingFlags to move current tracking flags away from custom fields --- extensions/BMO/Extension.pm | 1 + extensions/BMO/lib/Reports/ReleaseTracking.pm | 25 ++-- extensions/BMO/lib/Util.pm | 17 ++- .../en/default/bug/create/create-winqual.html.tmpl | 93 ++++++++++----- .../BMO/template/en/default/email/bugmail.txt.tmpl | 9 +- .../hook/bug/edit-after_custom_fields.html.tmpl | 128 --------------------- extensions/BMO/web/js/edit_bug.js | 32 ------ 7 files changed, 100 insertions(+), 205 deletions(-) delete mode 100644 extensions/BMO/template/en/default/hook/bug/edit-after_custom_fields.html.tmpl (limited to 'extensions/BMO') diff --git a/extensions/BMO/Extension.pm b/extensions/BMO/Extension.pm index 4f4e4e82d..2129e675d 100644 --- a/extensions/BMO/Extension.pm +++ b/extensions/BMO/Extension.pm @@ -889,6 +889,7 @@ sub mailer_before_send { my @set_values = (); foreach my $field (@fields) { + next if $field->type == FIELD_TYPE_EXTENSION; my $field_name = $field->name; next if cf_flag_disabled($field_name, $bug); next if !$bug->$field_name || $bug->$field_name eq '---'; diff --git a/extensions/BMO/lib/Reports/ReleaseTracking.pm b/extensions/BMO/lib/Reports/ReleaseTracking.pm index e307da192..f9eabc340 100644 --- a/extensions/BMO/lib/Reports/ReleaseTracking.pm +++ b/extensions/BMO/lib/Reports/ReleaseTracking.pm @@ -9,6 +9,7 @@ package Bugzilla::Extension::BMO::Reports::ReleaseTracking; use strict; use warnings; +use Bugzilla::Constants; use Bugzilla::Error; use Bugzilla::Extension::BMO::Util; use Bugzilla::Field; @@ -121,7 +122,7 @@ sub report { my @unlink_products; foreach my $product (@usable_products) { my @fields = - grep { is_active_status_field($_->name) } + grep { is_active_status_field($_) } Bugzilla->active_custom_fields({ product => $product }); my @field_ids = map { $_->id } @fields; if (!scalar @fields) { @@ -244,6 +245,11 @@ sub report { $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 .= "WHERE "; if ($q->{start_date}) { @@ -273,11 +279,15 @@ sub report { if (scalar @{$q->{fields}}) { my @fields; foreach my $field (@{$q->{fields}}) { - push @fields, - "(" . - ($field->{value} eq '+' ? '' : '!') . - "(b.".$field->{name}." IN ('fixed','verified'))" . - ") "; + my $field_sql = "(" . ($field->{value} eq '+' ? '' : '!') . "("; + if ($field->{type} == FIELD_TYPE_EXTENSION) { + $field_sql .= "tf.name = " . $dbh->quote($field->{name}) . " AND tfb.value"; + } + else { + $field_sql .= "b." . $field->{name}; + } + $field_sql .= " IN ('fixed','verified')))"; + push(@fields, $field_sql); } my $join = uc $q->{join}; push @where, '(' . join(" $join ", @fields) . ')'; @@ -383,7 +393,8 @@ sub _parse_query { my ($id, $value) = ($1, $2); my $field_obj = Bugzilla::Field->new($id) or ThrowUserError('report_invalid_parameter', { name => 'field_id' }); - push @fields, { id => $id, value => $value, name => $field_obj->name }; + push @fields, { id => $id, value => $value, + name => $field_obj->name, type => $field_obj->type }; } $query->{fields} = \@fields; diff --git a/extensions/BMO/lib/Util.pm b/extensions/BMO/lib/Util.pm index ccb25758b..b25215f61 100644 --- a/extensions/BMO/lib/Util.pm +++ b/extensions/BMO/lib/Util.pm @@ -9,6 +9,7 @@ package Bugzilla::Extension::BMO::Util; use strict; use warnings; +use Bugzilla::Constants; use Bugzilla::Error; use Bugzilla::Extension::BMO::Data qw($cf_disabled_flags); use Date::Parse; @@ -74,10 +75,20 @@ sub parse_date { } sub is_active_status_field { - my ($field_name) = @_; - if ($field_name =~ /^cf_status/) { - return !grep { $field_name eq $_ } @$cf_disabled_flags + my ($field) = @_; + if ($field->type != FIELD_TYPE_EXTENSION + && $field->name =~ /^cf_status/) + { + return !grep { $field->name eq $_ } @$cf_disabled_flags } + + if ($field->type == FIELD_TYPE_EXTENSION + && $field->can('flag_type') + && $field->flag_type eq 'status') + { + return 1; + } + return 0; } diff --git a/extensions/BMO/template/en/default/bug/create/create-winqual.html.tmpl b/extensions/BMO/template/en/default/bug/create/create-winqual.html.tmpl index d14cca810..fd21ed4ed 100644 --- a/extensions/BMO/template/en/default/bug/create/create-winqual.html.tmpl +++ b/extensions/BMO/template/en/default/bug/create/create-winqual.html.tmpl @@ -611,23 +611,25 @@ TUI_hide_default('expert_fields'); [%# non-tracking flags custom fields %] -[% FOREACH field = Bugzilla.active_custom_fields %] +[% FOREACH field = Bugzilla.active_custom_fields(product=>product,type=>1) %] + [% NEXT IF field.type == constants.FIELD_TYPE_EXTENSION %] [% NEXT UNLESS field.enter_bug %] - [% NEXT IF cf_hidden_in_product(field.name, product.name, component.name, 1) %] [%# crash-signature gets custom handling %] - [% NEXT IF field.name == 'cf_crash_signature' %] - + [% IF field.name == 'cf_crash_signature' %] + [% show_crash_signature = 1 %] + [% NEXT %] + [% END %] [% SET value = ${field.name}.defined ? ${field.name} : "" %] - [% INCLUDE bug/field.html.tmpl - bug = default, field = field, value = value, editable = 1, + [% INCLUDE bug/field.html.tmpl + bug = default, field = field, value = value, editable = 1, value_span = 3 %] [% END %] [%# crash-signature handling %] -[% UNLESS cf_hidden_in_product('cf_crash_signature', product.name, component.name, 1) %] +[% IF show_crash_signature %] @@ -647,23 +649,27 @@ TUI_hide_default('expert_fields'); [% END %] -[% display_bug_flags = 0 %] -[% FOREACH field = Bugzilla.active_custom_fields %] +[% old_tracking_flags = [] %] +[% old_project_flags = [] %] +[% FOREACH field = Bugzilla.active_custom_fields(product=>product,type=>2) %] + [% NEXT IF field.type == constants.FIELD_TYPE_EXTENSION %] [% NEXT UNLESS field.enter_bug %] - [% NEXT IF cf_hidden_in_product(field.name, product.name, component.name, 2) %] - [% display_bug_flags = 1 %] - [% LAST %] + [% IF cf_is_project_flag(field.name) %] + [% old_project_flags.push(field) %] + [% ELSE %] + [% old_tracking_flags.push(field) %] + [% END %] [% END %] [% display_flags = 0 %] [% any_flags_requesteeble = 0 %] -[% FOREACH flag_type = product.flag_types(is_active=>1).bug %] +[% FOREACH flag_type = product.flag_types.bug %] [% display_flags = 1 %] [% SET any_flags_requesteeble = 1 IF flag_type.is_requestable && flag_type.is_requesteeble %] [% LAST IF display_flags && any_flags_requesteeable %] [% END %] -[% IF display_bug_flags || display_flags %] +[% IF old_project_flags.size || old_tracking_flags.size || display_flags %] Flags: @@ -680,38 +686,63 @@ TUI_hide_default('expert_fields'); Set [% terms.bug %] flags - - [% IF display_bug_flags %] - - - -[% END %] - -[% IF tracking_flags.size %] - - - - -[% END %] diff --git a/extensions/BMO/web/js/edit_bug.js b/extensions/BMO/web/js/edit_bug.js index e630eb995..16bef9890 100644 --- a/extensions/BMO/web/js/edit_bug.js +++ b/extensions/BMO/web/js/edit_bug.js @@ -23,38 +23,6 @@ * ***** END LICENSE BLOCK ***** */ -// --- custom flags -var Dom = YAHOO.util.Dom; - -function bmo_hide_tracking_flags() { - for (var field in bmo_custom_flags) { - var el = Dom.get(field); - var value = el ? el.value : bmo_custom_flags[field]; - if (el && (value != bmo_custom_flags[field])) { - bmo_show_tracking_flags(); - return; - } - if (value == '---') { - Dom.addClass('row_' + field, 'bz_hidden'); - } else { - Dom.addClass(field, 'bz_hidden'); - Dom.removeClass('ro_' + field, 'bz_hidden'); - } - } -} - -function bmo_show_tracking_flags() { - Dom.addClass('edit_tracking_fields_action', 'bz_hidden'); - for (var field in bmo_custom_flags) { - if (Dom.get(field).value == '---') { - Dom.removeClass('row_' + field, 'bz_hidden'); - } else { - Dom.removeClass(field, 'bz_hidden'); - Dom.addClass('ro_' + field, 'bz_hidden'); - } - } -} - function init_clone_bug_menu(el, bug_id, product, component) { var diff_url = 'enter_bug.cgi?cloned_bug_id=' + bug_id; var cur_url = diff_url + -- cgit v1.2.3-24-g4f1b
- + + [% IF old_tracking_flags.size %] + + [% END %] + [% IF old_project_flags.size %] + + + [% END %] [% IF display_flags %] [% END %] - + + [% Hook.process('bug_flags_end') %]
+ + [% FOREACH field = old_tracking_flags %] + [% SET value = ${field.name}.defined ? ${field.name} : "" %] + + [% INCLUDE bug/field.html.tmpl + bug = default + field = field + value = value + editable = 1 + value_span = 3 + %] + + [% END %] + [% Hook.process('tracking_flags_end') %] +
Tracking Flags:
+
+ - [% FOREACH field = Bugzilla.active_custom_fields %] - [% NEXT UNLESS field.enter_bug %] - [% NEXT IF cf_hidden_in_product(field.name, product.name, component.name, 2) %] - - [% SET value = ${field.name}.defined ? ${field.name} : "" %] - - [% INCLUDE bug/field.html.tmpl - bug = default, field = field, value = value, editable = 1, - value_span = 3 %] - - [% END %] + + [% FOREACH field = old_project_flags %] + [% SET value = ${field.name}.defined ? ${field.name} : "" %] + + [% INCLUDE bug/field.html.tmpl + bug = default + field = field + value = value + editable = 1 + value_span = 3 + %] + + [% END %] + [% Hook.process('project_flags_end') %]
Project Flags:
- [% PROCESS "flag/list.html.tmpl" flag_types = product.flag_types(is_active=>1).bug + [% PROCESS "flag/list.html.tmpl" flag_types = product.flag_types.bug any_flags_requesteeble = any_flags_requesteeble flag_table_id = "bug_flags" %]
diff --git a/extensions/BMO/template/en/default/email/bugmail.txt.tmpl b/extensions/BMO/template/en/default/email/bugmail.txt.tmpl index 76fa492ee..771157dd1 100644 --- a/extensions/BMO/template/en/default/email/bugmail.txt.tmpl +++ b/extensions/BMO/template/en/default/email/bugmail.txt.tmpl @@ -40,15 +40,16 @@ Configure [% terms.bug %]mail: [% urlbase %]userprefs.cgi?tab=email Product/Component: [%+ bug.product +%] :: [%+ bug.component %] [% USE Bugzilla %] -[% tracking_flags = [] %] +[% show_tracking_flags = [] %] [% FOREACH field = Bugzilla.active_custom_fields(product => bug.product_obj, component => bug.component_obj, type => 2) %] [% NEXT IF cf_flag_disabled(field.name, bug) %] [% NEXT IF bug.${field.name} == "---" %] - [% tracking_flags.push(field) %] + [% show_tracking_flags.push(field) %] [% END %] -[% IF tracking_flags.size %] + +[% IF show_tracking_flags.size %] ------- Tracking Flags: ------- -[% FOREACH field = tracking_flags %] +[% FOREACH field = show_tracking_flags %] [%+ field.description %]:[% bug.${field.name} %] [% END %] [% END %] diff --git a/extensions/BMO/template/en/default/hook/bug/edit-after_custom_fields.html.tmpl b/extensions/BMO/template/en/default/hook/bug/edit-after_custom_fields.html.tmpl deleted file mode 100644 index f72267246..000000000 --- a/extensions/BMO/template/en/default/hook/bug/edit-after_custom_fields.html.tmpl +++ /dev/null @@ -1,128 +0,0 @@ -[%# ***** BEGIN LICENSE BLOCK ***** - # Version: MPL 1.1 - # - # The contents of this file are subject to the Mozilla Public License Version - # 1.1 (the "License"); you may not use this file except in compliance with - # the License. You may obtain a copy of the License at - # http://www.mozilla.org/MPL/ - # - # Software distributed under the License is distributed on an "AS IS" basis, - # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - # for the specific language governing rights and limitations under the - # License. - # - # The Original Code is the BMO Bugzilla Extension; - # - # The Initial Developer of the Original Code is the Mozilla Foundation. - # Portions created by the Initial Developer are Copyright (C) 2011 the - # Initial Developer. All Rights Reserved. - # - # Contributor(s): - # Byron Jones - # - # ***** END LICENSE BLOCK ***** - #%] - -[% tracking_flags = [] %] -[% project_flags = [] %] -[% FOREACH field = Bugzilla.active_custom_fields(product=>bug.product_obj,component=>bug.component_obj,type=>2) %] - [% NEXT IF NOT user.id AND bug.${field.name} == "---" %] - [% NEXT IF cf_flag_disabled(field.name, bug) %] - [% IF cf_is_project_flag(field.name) %] - [% project_flags.push(field) %] - [% ELSE %] - [% tracking_flags.push(field) %] - [% END %] -[% END %] - -[% IF project_flags.size %] -
- - - - [% IF bug.check_can_change_field('flagtypes.name', 0, 1) %] - - [% FOREACH field = project_flags %] - [% NEXT IF NOT user.id AND field.value == "---" %] - - - - - - [% END %] -
  - - - [% PROCESS bug/field.html.tmpl value = bug.${field.name} - editable = user.id - no_tds = 1 %] - [% IF user.id %] - - [% bug.${field.name} FILTER html %] - - [% END %] -
- [% ELSE %] - [% FOREACH field = project_flags %] - [% NEXT IF bug.${field.name} == "---" %] - [% field_descs.${field.name} FILTER html %]: [% bug.${field.name} FILTER html %]
- [% END %] - [% END %] -
- - - - [% IF bug.check_can_change_field('flagtypes.name', 0, 1) %] - [% IF user.id %] - - (edit) - - [% END %] - - [% FOREACH field = tracking_flags %] - [% NEXT IF NOT user.id AND field.value == "---" %] - - - - - - [% END %] -
  - - - [% PROCESS bug/field.html.tmpl value = bug.${field.name} - editable = user.id - no_tds = 1 %] - [% IF user.id %] - - [% bug.${field.name} FILTER html %] - - [% END %] -
- [% ELSE %] - [% FOREACH field = tracking_flags %] - [% NEXT IF bug.${field.name} == "---" %] - [% field_descs.${field.name} FILTER html %]: [% bug.${field.name} FILTER html %]
- [% END %] - [% END %] -