From: Kohei Yoshino Date: Thu, 25 Apr 2019 21:10:18 +0000 (-0400) Subject: Bug 1546624 - Add a 'everchanged' operator X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92a065fd881dde325c5f454403723464c752b8f8;p=thirdparty%2Fbugzilla.git Bug 1546624 - Add a 'everchanged' operator --- diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index a3f929011..72fc275a4 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -159,6 +159,7 @@ use constant OPERATORS => { anywords => \&_anywords, allwords => \&_allwords, nowords => \&_nowords, + everchanged => \&_everchanged, changedbefore => \&_changedbefore_changedafter, changedafter => \&_changedbefore_changedafter, changedfrom => \&_changedfrom_changedto, @@ -212,6 +213,7 @@ use constant NON_NUMERIC_OPERATORS => qw( # These operators ignore the entered value use constant NO_VALUE_OPERATORS => qw( + everchanged isempty isnotempty ); @@ -266,12 +268,14 @@ use constant OPERATOR_FIELD_OVERRIDE => { 'flagtypes.name' => {_non_changed => \&_flagtypes_nonchanged,}, longdesc => { changedby => \&_long_desc_changedby, + everchanged => \&_long_desc_everchanged, changedbefore => \&_long_desc_changedbefore_after, changedafter => \&_long_desc_changedbefore_after, _non_changed => \&_long_desc_nonchanged, }, 'longdescs.count' => { changedby => \&_long_desc_changedby, + everchanged => \&_long_desc_everchanged, changedbefore => \&_long_desc_changedbefore_after, changedafter => \&_long_desc_changedbefore_after, changedfrom => \&_invalid_combination, @@ -297,6 +301,7 @@ use constant OPERATOR_FIELD_OVERRIDE => { percentage_complete => {_non_changed => \&_percentage_complete,}, work_time => { changedby => \&_work_time_changedby, + everchanged => \&_work_time_everchanged, changedbefore => \&_work_time_changedbefore_after, changedafter => \&_work_time_changedbefore_after, _default => \&_work_time, @@ -2617,6 +2622,12 @@ sub _long_desc_changedby { $args->{term} = "$table.who = $user_id"; } +sub _long_desc_everchanged { + my ($self, $args) = @_; + $self->_convert_everchanged($args); + $self->_long_desc_changedbefore_after($args); +} + sub _long_desc_changedbefore_after { my ($self, $args) = @_; my ($chart_id, $operator, $value, $joins) @@ -2758,6 +2769,12 @@ sub _work_time_changedby { $args->{term} = "$table.who = $user_id AND $table.work_time != 0"; } +sub _work_time_everchanged { + my ($self, $args) = @_; + $self->_convert_everchanged($args); + $self->_work_time_changedbefore_after($args); +} + sub _work_time_changedbefore_after { my ($self, $args) = @_; my ($chart_id, $operator, $value, $joins) @@ -3400,6 +3417,21 @@ sub _nowords { $args->{term} = "NOT($term)"; } +# Add support for the `everchanged` operator, which is a shortcut for +# `changedafter`: `1970-01-01` +sub _convert_everchanged { + my ($self, $args) = @_; + $args->{operator} = 'changedafter'; + $args->{value} = EMPTY_DATE; + $args->{quoted} = Bugzilla->dbh->quote(EMPTY_DATE); +} + +sub _everchanged { + my ($self, $args) = @_; + $self->_convert_everchanged($args); + $self->_changedbefore_changedafter($args); +} + sub _changedbefore_changedafter { my ($self, $args) = @_; my ($chart_id, $joins, $field, $operator, $value) diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl index 995841a62..96e07e58a 100644 --- a/template/en/default/global/field-descs.none.tmpl +++ b/template/en/default/global/field-descs.none.tmpl @@ -47,6 +47,7 @@ $stash->set( "anywords" => "contains any of the words", "allwords" => "contains all of the words", "nowords" => "contains none of the words", + "everchanged" => "ever changed", "changedbefore" => "changed before", "changedafter" => "changed after", "changedfrom" => "changed from", diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl index 108d6a69a..de71558bc 100644 --- a/template/en/default/list/list.html.tmpl +++ b/template/en/default/list/list.html.tmpl @@ -98,7 +98,7 @@ [% SET shown_types = [ 'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq', - 'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter', + 'greaterthan', 'greaterthaneq', 'everchanged', 'changedbefore', 'changedafter', 'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords', 'nowordssubstr', 'notmatches', 'isempty', 'isnotempty' ] %] diff --git a/template/en/default/search/boolean-charts.html.tmpl b/template/en/default/search/boolean-charts.html.tmpl index 767ea7563..b386babc7 100644 --- a/template/en/default/search/boolean-charts.html.tmpl +++ b/template/en/default/search/boolean-charts.html.tmpl @@ -40,6 +40,7 @@ "anywords", "allwords", "nowords", + "everchanged", "changedbefore", "changedafter", "changedfrom",