[Bps-public-commit] RT-Extension-QuickCalls branch allow-multiple-custom-quickcall-portlets-via-config created. 1.03-11-g36d2b98
BPS Git Server
git at git.bestpractical.com
Wed Oct 4 14:42:25 UTC 2023
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "RT-Extension-QuickCalls".
The branch, allow-multiple-custom-quickcall-portlets-via-config has been created
at 36d2b98d57c5509f2376fb8015b1c3ef63356cb8 (commit)
- Log -----------------------------------------------------------------
commit 36d2b98d57c5509f2376fb8015b1c3ef63356cb8
Author: Brad Embree <brad at bestpractical.com>
Date: Sun Oct 1 15:15:05 2023 -0700
Change logic to check for custom config based on Dashboard ID
diff --git a/html/Helpers/QuickCalls b/html/Helpers/QuickCalls
index 6834e6e..2fe4470 100644
--- a/html/Helpers/QuickCalls
+++ b/html/Helpers/QuickCalls
@@ -62,16 +62,21 @@
my ( $quick_create, $quick_create_path, $quick_create_values );
-if ($QuickCall) {
- my $custom = RT->Config->Get('QuickCallsPages');
+if ( $QuickCall ) {
+ my $config = RT->Config->Get('QuickCalls');
my $quickcalls;
- my $page;
- if ( $page = $ARGS{QuickCallsPage} ) {
- $quickcalls = $custom->{$page} || [];
+
+ if ( ref $config eq 'ARRAY' ) {
+ # old behavior
+ $quickcalls = $config;
}
- else {
- $quickcalls = $RT::QuickCalls || [];
+ elsif ( ref $config eq 'HASH' ) {
+ # new behavior
+ my $quickcall_dashboard_id = $ARGS{QuickCallsDashboard} || '';
+ my $quickcall_config = $config->{$quickcall_dashboard_id} || $config->{Default} || {};
+ $quickcalls = $quickcall_config->{Actions};
}
+
my ( $QuickCall ) = grep { $_->{Name} eq $QuickCall } @$quickcalls;
# copy so we don't nuke the config variable
$QuickCall = { map { $_ => $QuickCall->{$_} } keys %$QuickCall };
commit c70e2d79e213bf17b3ae39374925f3e61537b2c1
Author: Brad Embree <brad at bestpractical.com>
Date: Sun Oct 1 15:14:23 2023 -0700
Change logic to check for custom config based on Dashboard ID
diff --git a/html/Elements/QuickCalls b/html/Elements/QuickCalls
index 9a0f413..1051c27 100644
--- a/html/Elements/QuickCalls
+++ b/html/Elements/QuickCalls
@@ -53,8 +53,8 @@
<div class="col-auto">
<form method="post"
action="<%$RT::WebPath%>/Helpers/QuickCalls">
-% if ( $page ) {
- <input type="hidden" class="hidden" name="QuickCallsPage" value="<% $page %>">
+% if ( $quickcall_dashboard_id ) {
+ <input type="hidden" class="hidden" name="QuickCallsDashboard" value="<% $quickcall_dashboard_id %>">
% }
<input type="hidden" class="hidden" name="QuickCallsPath" value="<%RT->Config->Get('WebPath')%><% $r->path_info %>">
<select name="QuickCall" class="selectpicker form-control">
@@ -85,15 +85,44 @@
% }
<%INIT>
my $title = loc('Quick Calls');
-my $custom = RT->Config->Get('QuickCallsPages');
+my $config = RT->Config->Get('QuickCalls') || [];
my $quickcalls;
-my $page;
-if ( $page = $ARGS{QuickCallsPage} ) {
- $quickcalls = $custom->{$page} || [];
- $title .= " - $page";
+
+my $arg = $m->dhandler_arg || '';
+my ( $dashboard_id, $dashboard_name ) = split '/', $arg;
+my $system_default_id = 0;
+
+unless ( $dashboard_id ) {
+ # if there is no dhandler_arg we are on the default homepage dashboard
+ # following logic copied from share/html/Elements/MyRT to find user's default dashboard
+ my $user = $session{'CurrentUser'}->UserObj;
+ my ( $system_default ) = RT::System->new( $session{'CurrentUser'} )->Attributes->Named('DefaultDashboard');
+ $system_default_id = $system_default ? $system_default->Content : 0;
+ $dashboard_id = $user->Preferences( DefaultDashboard => $system_default_id );
+}
+
+# Allow any user to read system default dashboard
+my $Dashboard = RT::Dashboard->new( $system_default_id == $dashboard_id ? RT->SystemUser : $session{'CurrentUser'} );
+my ( $ok, $msg ) = $Dashboard->LoadById( $dashboard_id );
+if ( !$ok ) {
+ RT->Logger->error("Unable to load Dashboard '$dashboard_id': $msg");
}
-else {
- $quickcalls = $RT::QuickCalls || [];
+
+my $quickcall_dashboard_id;
+if ( ref $config eq 'ARRAY' ) {
+ # old behavior
+ $quickcalls = $config;
+}
+elsif ( ref $config eq 'HASH' ) {
+ # new behavior
+ $quickcall_dashboard_id = $Dashboard ? $Dashboard->id : '';
+
+ my $quickcall_config = $config->{$quickcall_dashboard_id} || $config->{Default} || {};
+
+ if ( my $quickcall_title = $quickcall_config->{Title} ) {
+ $title .= " - $quickcall_title";
+ }
+ $quickcalls = $quickcall_config->{Actions};
}
-</%INIT>
+</%INIT>
\ No newline at end of file
commit df8e52e8a9565b8efb77206134763d067288836a
Author: Brad Embree <brad at bestpractical.com>
Date: Sun Oct 1 15:13:38 2023 -0700
Update POD
diff --git a/lib/RT/Extension/QuickCalls.pm b/lib/RT/Extension/QuickCalls.pm
index 2c07d01..0435bc1 100644
--- a/lib/RT/Extension/QuickCalls.pm
+++ b/lib/RT/Extension/QuickCalls.pm
@@ -53,6 +53,8 @@ After you have added QuickCalls to your home page, you will be able to select
one, click Create and be brought to the ticket creation page with multiple
fields pre-filled.
+If you would like to have different versions of the QuickCalls portlet on different dashboards see C<CUSTOM PORTLET PER DASHBOARD> below;
+
=head1 INSTALLATION
=over
@@ -87,24 +89,28 @@ or add C<RT::Extension::QuickCalls> to your existing C<@Plugins> line.
=head1 CONFIGURATION
-=head2 MULTIPLE PORTLETS
-
-If you would like to have multiple different versions of the QuickCalls
-portlet you can use the C<QuickCallsPages> configuration option.
-
- Set($QuickCallsPages,{
- One => [
- {Name => "One Foo", Queue => 'General', Status => 'resolved'},
- {Name => "One Bar", Queue => 'Queue2', Status => 'resolved'}
- ],
- Two => [
- {Name => "Two Foo", Queue => 'General', Status => 'resolved'},
- {Name => "Two Bar", Queue => 'Queue2', Status => 'resolved'}
- ],
+=head2 CUSTOM PORTLET PER DASHBOARD
+
+If you would like to have different versions of the QuickCalls portlet for different dashboards you can use a different config format:
+
+ Set($QuickCalls,{
+ Default => {
+ Actions => [
+ {Name => "Default Foo", Queue => 'General', Status => 'resolved'},
+ {Name => "Default Bar", Queue => 'Queue2', Status => 'resolved'}
+ ],
+ },
+ 9 => { # use the ID of the Dashboard as the hash key
+ Title => 'Optional Title',
+ Actions => [
+ {Name => "Dashboard ID 9 Foo", Queue => 'General', Status => 'resolved'},
+ {Name => "Dashboard ID 9 Bar", Queue => 'Queue2', Status => 'resolved'}
+ ],
+ },
+ ...
});
-The above configuration would give you two new portlet options to add to
-your dashboards: C<QuickCalls-One> and C<QuickCalls-Two>.
+The above configuration would load different actions when the QuickCalls portlet is loaded on the Dashboard with ID 9. If there is not custom configuration for a Dashboard ID it will use the 'Default' value.
=head2 QUICK CREATE
commit b27605ada8cadeea0d27441188226eb69f361397
Author: Brad Embree <brad at bestpractical.com>
Date: Sun Oct 1 15:05:13 2023 -0700
Remove code auto generating element files from QuickCalls.pm
diff --git a/lib/RT/Extension/QuickCalls.pm b/lib/RT/Extension/QuickCalls.pm
index 603ffec..2c07d01 100644
--- a/lib/RT/Extension/QuickCalls.pm
+++ b/lib/RT/Extension/QuickCalls.pm
@@ -7,32 +7,6 @@ require Cwd;
our $VERSION = '1.03';
-my $path = Cwd::abs_path(__FILE__);
-$path =~ s{lib/RT/Extension/QuickCalls.pm$}{};
-$path = File::Spec->catfile( $path, 'html', 'Elements' );
-
-my $HomepageComponents = RT->Config->Get('HomepageComponents');
-my $custom = RT->Config->Get('QuickCallsPages') || {};
-foreach my $page ( keys %$custom ) {
- # the component name cannot have special characters
- my $component = $page;
- $component =~ s/ /_/g;
- $component =~ s/'|"|//g;
-
- # the page name needs to map to the entry in the config but must escape single quotes
- $page =~ s/'/\\'/g;
-
- push @$HomepageComponents, "QuickCalls-$component";
-
- my $filename = File::Spec->catfile( $path, "QuickCalls-$component" );
- my $content = '% $m->comp( \'/Elements/QuickCalls\', QuickCallsPage => \'' . $page . '\' );' . "\n";
- open my $fh, '>', $filename
- or RT->Logger->error("Could not open file '$filename' to write custom portlet: $!");
- print $fh $content;
- close $fh;
-}
-RT->Config->Set( 'HomepageComponents', $HomepageComponents );
-
=head1 NAME
RT::Extension::QuickCalls - Quickly create tickets in specific queues with default values
commit ce6e0f42ab825a5f6a5b8daf77bd9ca4a4f9600a
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 15:31:25 2023 -0700
Update POD
diff --git a/lib/RT/Extension/QuickCalls.pm b/lib/RT/Extension/QuickCalls.pm
index 37c95f7..603ffec 100644
--- a/lib/RT/Extension/QuickCalls.pm
+++ b/lib/RT/Extension/QuickCalls.pm
@@ -111,6 +111,49 @@ or add C<RT::Extension::QuickCalls> to your existing C<@Plugins> line.
=back
+=head1 CONFIGURATION
+
+=head2 MULTIPLE PORTLETS
+
+If you would like to have multiple different versions of the QuickCalls
+portlet you can use the C<QuickCallsPages> configuration option.
+
+ Set($QuickCallsPages,{
+ One => [
+ {Name => "One Foo", Queue => 'General', Status => 'resolved'},
+ {Name => "One Bar", Queue => 'Queue2', Status => 'resolved'}
+ ],
+ Two => [
+ {Name => "Two Foo", Queue => 'General', Status => 'resolved'},
+ {Name => "Two Bar", Queue => 'Queue2', Status => 'resolved'}
+ ],
+ });
+
+The above configuration would give you two new portlet options to add to
+your dashboards: C<QuickCalls-One> and C<QuickCalls-Two>.
+
+=head2 QUICK CREATE
+
+If you would like a QuickCalls action to automatically create a ticket
+instead of taking the user to the Ticket Create page you can set the
+option QuickCreate to a true value:
+
+ Set($QuickCalls,[{Name => "Foo", Queue => 'General', Status => 'resolved', 'QuickCreate' => 1},
+ {Name => "Bar", Queue => 'Queue2', Status => 'resolved'}]);
+
+or
+
+ Set($QuickCallsPages,{
+ One => [
+ {Name => "One Foo", Queue => 'General', Status => 'resolved', 'QuickCreate' => 1},
+ {Name => "One Bar", Queue => 'Queue2', Status => 'resolved'}
+ ],
+ Two => [
+ {Name => "Two Foo", Queue => 'General', Status => 'resolved'},
+ {Name => "Two Bar", Queue => 'Queue2', Status => 'resolved'}
+ ],
+ });
+
=head1 AUTHOR
Best Practical Solutions, LLC E<lt>modules at bestpractical.comE<gt>
commit 2749b9e6944185dabf73b0068476e973edb1fa1a
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 14:42:21 2023 -0700
Add QuickCreate QuickCalls config option
If QuickCreate is set then create the ticket immediately and refresh the
page the QuickCalls portlet was on.
diff --git a/html/Helpers/QuickCalls b/html/Helpers/QuickCalls
index a56ca69..6834e6e 100644
--- a/html/Helpers/QuickCalls
+++ b/html/Helpers/QuickCalls
@@ -45,7 +45,23 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
+% if ( $quick_create ) {
+<form id="quick-calls-quick-create-form" method="post" action="<% $quick_create_path %>">
+ <input type="hidden" class="hidden" name="QuickCreate" value="1" />
+% foreach my $key ( keys %$quick_create_values ) {
+ <input type="hidden" class="hidden" name="<% $key %>" value="<% $quick_create_values->{$key} %>" />
+% }
+</form>
+<script type="text/javascript">
+ window.self.onload = function() {
+ document.getElementById("quick-calls-quick-create-form").submit();
+ };
+</script>
+% }
<%init>
+
+my ( $quick_create, $quick_create_path, $quick_create_values );
+
if ($QuickCall) {
my $custom = RT->Config->Get('QuickCallsPages');
my $quickcalls;
@@ -64,12 +80,19 @@ if ($QuickCall) {
delete $QuickCall->{SetOwnerToCurrentUser};
delete $QuickCall->{Name};
+ $quick_create = delete $QuickCall->{QuickCreate};
+ $quick_create_path = $ARGS{QuickCallsPath};
+
# Anon subrefs can be used to generate dynamic values
$QuickCall->{$_} = $QuickCall->{$_}->()
for grep {ref $QuickCall->{$_} eq "CODE"} keys %{$QuickCall};
- my $query = $m->comp( '/Elements/QueryString', %$QuickCall);
- RT::Interface::Web::Redirect($RT::WebURL."Ticket/Create.html?$query");
+ if ( $quick_create ) {
+ $quick_create_values = { %$QuickCall };
+ } else {
+ my $query = $m->comp( '/Elements/QueryString', %$QuickCall);
+ RT::Interface::Web::Redirect($RT::WebURL."Ticket/Create.html?$query");
+ }
}
</%init>
<%args>
commit c6d687f4773a20d88f8f8e28e351692d3ece31de
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 14:31:44 2023 -0700
Add QuickCallsPath hidden input for quick create
/Helpers/QuickCalls needs the path the QuickCalls portlet is on for the
new quick create option so it can reload the page after the ticket is
created.
diff --git a/html/Elements/QuickCalls b/html/Elements/QuickCalls
index 62b6a21..9a0f413 100644
--- a/html/Elements/QuickCalls
+++ b/html/Elements/QuickCalls
@@ -56,6 +56,7 @@
% if ( $page ) {
<input type="hidden" class="hidden" name="QuickCallsPage" value="<% $page %>">
% }
+ <input type="hidden" class="hidden" name="QuickCallsPath" value="<%RT->Config->Get('WebPath')%><% $r->path_info %>">
<select name="QuickCall" class="selectpicker form-control">
% foreach my $QuickCall (@$quickcalls) {
<option value="<%$QuickCall->{Name}%>"><%$QuickCall->{Name}%>
commit 5b414e7a1b0f447bde083301d3b7aafffdb8212a
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 14:41:19 2023 -0700
Check for QuickCallsPage arg for custom QuickCalls config
If passed a QuickCallsPage argument use the config from the
QuickCallsPages config.
diff --git a/html/Helpers/QuickCalls b/html/Helpers/QuickCalls
index f15f6c4..a56ca69 100644
--- a/html/Helpers/QuickCalls
+++ b/html/Helpers/QuickCalls
@@ -47,7 +47,16 @@
%# END BPS TAGGED BLOCK }}}
<%init>
if ($QuickCall) {
- my ($QuickCall) = grep { $_->{Name} eq $QuickCall} @{$RT::QuickCalls||[]};
+ my $custom = RT->Config->Get('QuickCallsPages');
+ my $quickcalls;
+ my $page;
+ if ( $page = $ARGS{QuickCallsPage} ) {
+ $quickcalls = $custom->{$page} || [];
+ }
+ else {
+ $quickcalls = $RT::QuickCalls || [];
+ }
+ my ( $QuickCall ) = grep { $_->{Name} eq $QuickCall } @$quickcalls;
# copy so we don't nuke the config variable
$QuickCall = { map { $_ => $QuickCall->{$_} } keys %$QuickCall };
$QuickCall->{Subject} ||= $QuickCall->{Name};
commit a30575bf406a7afef065336969d42075166b7ee3
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 08:54:46 2023 -0700
Check for QuickCallsPage argument to show custom portlet
Check if passed a QuickCallsPage argument and if so show actions for
that Page from the new QuickCallsPages config option.
If not passed a QuickCallsPage argument behave as before and show
actions from the QuickCalls config option.
diff --git a/html/Elements/QuickCalls b/html/Elements/QuickCalls
index 6ed493a..62b6a21 100644
--- a/html/Elements/QuickCalls
+++ b/html/Elements/QuickCalls
@@ -48,13 +48,16 @@
% if ( RT::Handle::cmp_version($RT::VERSION, '5.0.0') >= 0 ) {
% # RT 5 version
-<&| /Widgets/TitleBox, title => loc('Quick Calls') &>
+<&| /Widgets/TitleBox, title => $title &>
<div class="form-row">
<div class="col-auto">
<form method="post"
action="<%$RT::WebPath%>/Helpers/QuickCalls">
+% if ( $page ) {
+ <input type="hidden" class="hidden" name="QuickCallsPage" value="<% $page %>">
+% }
<select name="QuickCall" class="selectpicker form-control">
-% foreach my $QuickCall (@{$RT::QuickCalls||[]}) {
+% foreach my $QuickCall (@$quickcalls) {
<option value="<%$QuickCall->{Name}%>"><%$QuickCall->{Name}%>
% }
</select>
@@ -71,7 +74,7 @@
<&| /Widgets/TitleBox, title => loc('Quick Calls') &>
<form action="<%$RT::WebPath%>/Helpers/QuickCalls">
<select name="QuickCall">
-% foreach my $QuickCall (@{$RT::QuickCalls||[]}) {
+% foreach my $QuickCall (@$quickcalls) {
<option value="<%$QuickCall->{Name}%>"><%$QuickCall->{Name}%>
% }
</select>
@@ -79,3 +82,17 @@
</form>
</&>
% }
+<%INIT>
+my $title = loc('Quick Calls');
+my $custom = RT->Config->Get('QuickCallsPages');
+my $quickcalls;
+my $page;
+if ( $page = $ARGS{QuickCallsPage} ) {
+ $quickcalls = $custom->{$page} || [];
+ $title .= " - $page";
+}
+else {
+ $quickcalls = $RT::QuickCalls || [];
+}
+
+</%INIT>
commit c5b87ffb0cde282acd6a005566465f8c3e7f8d6c
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 08:52:19 2023 -0700
Dynamically create custom portlets based on config
Add a new config QuickCallsPages that lets users configure multiple
custom QuickCalls portlets with different actions on each one.
This lets users group actions together and create different portlets for
different users/groups.
diff --git a/lib/RT/Extension/QuickCalls.pm b/lib/RT/Extension/QuickCalls.pm
index a0740d7..37c95f7 100644
--- a/lib/RT/Extension/QuickCalls.pm
+++ b/lib/RT/Extension/QuickCalls.pm
@@ -2,8 +2,37 @@ package RT::Extension::QuickCalls;
use warnings;
use strict;
+require File::Spec;
+require Cwd;
+
our $VERSION = '1.03';
+my $path = Cwd::abs_path(__FILE__);
+$path =~ s{lib/RT/Extension/QuickCalls.pm$}{};
+$path = File::Spec->catfile( $path, 'html', 'Elements' );
+
+my $HomepageComponents = RT->Config->Get('HomepageComponents');
+my $custom = RT->Config->Get('QuickCallsPages') || {};
+foreach my $page ( keys %$custom ) {
+ # the component name cannot have special characters
+ my $component = $page;
+ $component =~ s/ /_/g;
+ $component =~ s/'|"|//g;
+
+ # the page name needs to map to the entry in the config but must escape single quotes
+ $page =~ s/'/\\'/g;
+
+ push @$HomepageComponents, "QuickCalls-$component";
+
+ my $filename = File::Spec->catfile( $path, "QuickCalls-$component" );
+ my $content = '% $m->comp( \'/Elements/QuickCalls\', QuickCallsPage => \'' . $page . '\' );' . "\n";
+ open my $fh, '>', $filename
+ or RT->Logger->error("Could not open file '$filename' to write custom portlet: $!");
+ print $fh $content;
+ close $fh;
+}
+RT->Config->Set( 'HomepageComponents', $HomepageComponents );
+
=head1 NAME
RT::Extension::QuickCalls - Quickly create tickets in specific queues with default values
commit 072844b133979544bb5e53f1224fdf2dabddcabb
Author: Brad Embree <brad at bestpractical.com>
Date: Thu Sep 28 08:50:58 2023 -0700
Delete unnecessary file
diff --git a/html/Elements/.#QuickCalls b/html/Elements/.#QuickCalls
deleted file mode 120000
index b0228d0..0000000
--- a/html/Elements/.#QuickCalls
+++ /dev/null
@@ -1 +0,0 @@
-chmrr at umgah.localdomain.14071:1403105031
\ No newline at end of file
-----------------------------------------------------------------------
hooks/post-receive
--
RT-Extension-QuickCalls
More information about the Bps-public-commit
mailing list