X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=rt%2Fshare%2Fhtml%2FSearch%2FChart.html;h=417c2018ed350d81bd679f8764296c8f2e4c0382;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hp=fb9f45c669d67a8d7824c94f6787d43795a0ccf4;hpb=63a268637b2d51a8766412617724b9436439deb6;p=freeside.git diff --git a/rt/share/html/Search/Chart.html b/rt/share/html/Search/Chart.html index fb9f45c66..417c2018e 100644 --- a/rt/share/html/Search/Chart.html +++ b/rt/share/html/Search/Chart.html @@ -1,40 +1,40 @@ %# BEGIN BPS TAGGED BLOCK {{{ -%# +%# %# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# +%# +%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC +%# +%# %# (Except where explicitly superseded by other copyright notices) -%# -%# +%# +%# %# LICENSE: -%# +%# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. -%# +%# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. -%# +%# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# +%# +%# %# CONTRIBUTION SUBMISSION POLICY: -%# +%# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) -%# +%# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that @@ -43,56 +43,181 @@ %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. -%# +%# %# END BPS TAGGED BLOCK }}} -<%args> -$PrimaryGroupBy => 'Queue' -$SecondaryGroupBy => '' -$ChartStyle => 'bars' -$Description => undef - <%init> -$ARGS{SecondaryGroupBy} ||= ''; -$ARGS{Query} ||= 'id > 0'; - -# FIXME: should be factored with RT::Report::Tickets::Label :( -my $PrimaryGroupByLabel; -if ( $PrimaryGroupBy =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { - my $cf = $1; - if ( $cf =~ /\D/ ) { - $PrimaryGroupByLabel = loc( "custom field '[_1]'", $cf ); - } else { - my $obj = RT::CustomField->new( $session{'CurrentUser'} ); - $obj->Load( $cf ); - $PrimaryGroupByLabel = loc( "custom field '[_1]'", $obj->Name ); - } -} else { - $PrimaryGroupByLabel = loc( $PrimaryGroupBy ); -} +my $default_value = { + Query => 'id > 0', + GroupBy => ['Status'], + ChartStyle => ['bar+table+sql'], + ChartFunction => ['COUNT'], +}; + +$m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' ); -my $title = loc( "Search results grouped by [_1]", $PrimaryGroupByLabel ); +my $title = loc( "Grouped search results"); +my @search_fields = qw(Query GroupBy ChartStyle ChartFunction Width Height); my $saved_search = $m->comp( '/Widgets/SavedSearch:new', SearchType => 'Chart', - SearchFields => [qw(Query PrimaryGroupBy SecondaryGroupBy ChartStyle)] ); + SearchFields => [@search_fields], +); my @actions = $m->comp( '/Widgets/SavedSearch:process', args => \%ARGS, self => $saved_search ); +my %query; + +{ + if ($saved_search->{'CurrentSearch'}->{'Object'}) { + foreach my $search_field (@{ $saved_search->{'SearchFields'} }) { + $query{$search_field} = $saved_search->{'CurrentSearch'}->{'Object'}->Content->{$search_field}; + } + } + + my $current = $session{'CurrentSearchHash'}; + + my @session_fields = qw( + Query + SavedChartSearchId + SavedSearchDescription + SavedSearchLoad + SavedSearchLoadButton + SavedSearchOwner + ); + + for(@session_fields) { + $query{$_} = $DECODED_ARGS->{$_} unless defined $query{$_}; + $query{$_} = $current->{$_} unless defined $query{$_}; + } + + if ($DECODED_ARGS->{'SavedSearchLoadSubmit'}) { + $query{'SavedChartSearchId'} = $DECODED_ARGS->{'SavedSearchLoad'}; + } + + if ($DECODED_ARGS->{'SavedSearchSave'}) { + $query{'SavedChartSearchId'} = $saved_search->{'SearchId'}; + } + +} + +foreach (@search_fields) { + if ( ref $default_value->{$_} ) { + $query{$_} = ref $ARGS{$_} ? $ARGS{$_} : [ $ARGS{$_} ]; + $query{$_} = $default_value->{$_} + unless defined $query{$_} && defined $query{$_}[0]; + } + else { + $query{$_} = ref $ARGS{$_} ? $ARGS{$_} : $ARGS{$_}; + $query{$_} = $default_value->{$_} + unless defined $query{$_}; + } +} + +$m->callback( ARGSRef => \%ARGS, QueryArgsRef => \%query ); + <& /Elements/Header, Title => $title &> -<& /Ticket/Elements/Tabs, Title => $title, Query => $ARGS{Query}, - SavedChartSearchId => $saved_search->{SearchId} &> +<& /Elements/Tabs, QueryArgs => \%query &> <& /Elements/ListActions, actions => \@actions &> + +% $m->callback( ARGSRef => \%ARGS, CallbackName => 'BeforeChart' ); + <& /Search/Elements/Chart, %ARGS &> -
-<&| /Widgets/TitleBox, title => loc('Graph Properties')&> -
- +% $m->callback( ARGSRef => \%ARGS, CallbackName => 'AfterChart' ); + +
+
+ + + -<&|/l, $m->scomp('Elements/SelectChartType', Name => 'ChartStyle', Default => $ChartStyle), $m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $ARGS{Query}, Default => $PrimaryGroupBy) -&>[_1] chart by [_2] - + +<&| /Widgets/TitleBox, title => loc('Group by'), class => "chart-group-by" &> +
<% loc('Group tickets by') %> +<& Elements/SelectGroupBy, + Name => 'GroupBy', + Query => $query{Query}, + Default => $query{'GroupBy'}[0], + &> +
+
<% loc('and then') %> +<& Elements/SelectGroupBy, + Name => 'GroupBy', + Query => $query{Query}, + Default => $query{'GroupBy'}[1] // q{}, + ShowEmpty => 1, + &> +
+
<% loc('and then') %> +<& Elements/SelectGroupBy, + Name => 'GroupBy', + Query => $query{Query}, + Default => $query{'GroupBy'}[2] // q{}, + ShowEmpty => 1, + &> +
+ + +<&| /Widgets/TitleBox, title => loc("Calculate"), class => "chart-calculate" &> + +
<% loc('Calculate values of') %> +<& Elements/SelectChartFunction, Default => $query{'ChartFunction'}[0] &> +
+
<% loc('and then') %> +<& Elements/SelectChartFunction, Default => $query{'ChartFunction'}[1] // q{}, ShowEmpty => 1 &> +
+
<% loc('and then') %> +<& Elements/SelectChartFunction, Default => $query{'ChartFunction'}[2] // q{}, ShowEmpty => 1 &> +
+ -<& /Widgets/SavedSearch:show, %ARGS, Action => 'Chart.html', self => $saved_search, Title => loc('Saved charts') &> +<&| /Widgets/TitleBox, title => loc('Picture'), class => "chart-picture" &> + + + + + + + × + + +
+ > <% loc('Include data table') %> +
+
+ > <% loc('Include TicketSQL query') %> +
+ + + +<& /Elements/Submit, Label => loc('Update Chart'), Name => 'Update' &> + + +
+ +