[Rt-commit] rt branch, 4.6/assetsql, updated. rt-4.4.0-275-ge6e7c12
Shawn Moore
shawn at bestpractical.com
Mon Jun 27 14:46:56 EDT 2016
The branch, 4.6/assetsql has been updated
via e6e7c122de9ad6d75e0000caa60d3244f643bcb5 (commit)
from 105f4691fec2f35d1f5ff20a37cc6ac262cdd77e (commit)
Summary of changes:
share/html/Asset/CreateLinkedTicket.html | 29 ++++++++++++++++++---
share/html/Asset/Elements/CreateLinkedTicket | 39 ++++++++++++++++++++++++----
share/html/Asset/Helpers/CreateLinkedTicket | 14 +++++++---
share/html/Asset/Search/Bulk.html | 13 +++++++++-
share/static/js/assets.js | 19 ++++++++++++++
5 files changed, 101 insertions(+), 13 deletions(-)
- Log -----------------------------------------------------------------
commit e6e7c122de9ad6d75e0000caa60d3244f643bcb5
Author: Jim Brandt <jbrandt at bestpractical.com>
Date: Tue Jun 14 13:35:44 2016 -0400
Link multiple assets to a new ticket from asset bulk update
Support creating a ticket from the asset bulk update page
and linking all selected assets to the created ticket. The
list of possible requestors is pulled from roles on all
selected assets.
The user is directed to the ticket create page for any
final updates before creating the ticket.
diff --git a/share/html/Asset/CreateLinkedTicket.html b/share/html/Asset/CreateLinkedTicket.html
index e2753b1..971b175 100644
--- a/share/html/Asset/CreateLinkedTicket.html
+++ b/share/html/Asset/CreateLinkedTicket.html
@@ -47,12 +47,33 @@
%# END BPS TAGGED BLOCK }}}
<%args>
$Asset => undef
+ at Assets => ()
$Requestors => ''
</%args>
<%init>
-my $asset = LoadAsset($Asset);
+my @asset_objs;
+my $single_asset;
+
+# Support passing a single asset or many, as with bulk update.
+if ( $Asset ){
+ push @asset_objs, LoadAsset($Asset);
+ $single_asset = 1;
+}
+elsif ( @Assets ){
+ @asset_objs = map { LoadAsset($_) } @Assets;
+ $single_asset = 1 if @asset_objs == 1;
+}
+else {
+ Abort('No asset specified');
+}
</%init>
-<& /Elements/Header,
- Title => loc("Create linked ticket for asset #[_1]: [_2]", $asset->id, $asset->Name) &>
+% if ($single_asset){
+ <& /Elements/Header,
+ Title => loc("Create linked ticket for asset #[_1]: [_2]", $asset_objs[0]->id, $asset_objs[0]->Name) &>
+%}
+%else{
+ <& /Elements/Header,
+ Title => loc("Create linked ticket for multiple assets") &>
+%}
<& /Elements/Tabs &>
-<& /Asset/Elements/CreateLinkedTicket, AssetObj => $asset, Requestors => $Requestors &>
+<& /Asset/Elements/CreateLinkedTicket, AssetObj => \@asset_objs, Requestors => $Requestors &>
diff --git a/share/html/Asset/Elements/CreateLinkedTicket b/share/html/Asset/Elements/CreateLinkedTicket
index 17102bd..b3b87a2 100644
--- a/share/html/Asset/Elements/CreateLinkedTicket
+++ b/share/html/Asset/Elements/CreateLinkedTicket
@@ -50,21 +50,50 @@ $AssetObj
$Requestors => ''
</%args>
<%init>
+my @asset_objs;
+if ( ref $AssetObj eq 'ARRAY' ){
+ # Accept an array of asset objects
+ @asset_objs = @$AssetObj;
+}
+else{
+ # Also support passing a single asset object
+ push @asset_objs, $AssetObj;
+}
+
my @description = map { $m->interp->apply_escapes($_, 'h') }
- $AssetObj->id, $AssetObj->Name;
+ $asset_objs[0]->id, $asset_objs[0]->Name;
+
+my $refers_to = join ' ', map { "asset:" . $_->id } @asset_objs;
+
+# Find possible requestors
+my %role_addresses;
+foreach my $asset (@asset_objs){
+ for my $role ($asset->Roles) {
+ # Create a hash with email addresses to easily de-dupe the lists from multiple assets
+ map { $role_addresses{$role}{$_} = 1 } $asset->RoleGroup($role)->MemberEmailAddresses;
+ }
+}
+
</%init>
<form action="<% RT->Config->Get("WebPath") %><% $session{CurrentUser}->Privileged ? "/Ticket" : "/SelfService" %>/Create.html" id="AssetCreateLinkedTicket">
- <input name="new-RefersTo" value="asset:<% $AssetObj->id %>" type="hidden">
- <input name="Subject" value="<% $AssetObj->Name %>" type="hidden">
+ <input name="new-RefersTo" value="<% $refers_to %>" type="hidden">
+ <input name="Subject" value="<% $asset_objs[0]->Name %>" type="hidden">
+% if ( @asset_objs == 1 ){
<&|/l_unsafe,
$m->scomp("/Elements/SelectNewTicketQueue"),
@description &>Create a new ticket in the [_1] queue about asset #[_2]: [_3].</&>
+% }
+% else {
+<&|/l_unsafe,
+ $m->scomp("/Elements/SelectNewTicketQueue"),
+ &>Create a new ticket in the [_1] queue about multiple assets.</&>
+% }
% if ($Requestors) {
<input type="hidden" name="Requestors" value="<% $Requestors%>" />
% } else {
% my $first = 1;
-% for my $role ($AssetObj->Roles) {
-% my $addr = $AssetObj->RoleGroup($role)->MemberEmailAddressesAsString;
+% for my $role ($asset_objs[0]->Roles) {
+% my $addr = join ', ', keys %{$role_addresses{$role}};
% next unless defined $addr and length $addr;
<br>
<label>
diff --git a/share/html/Asset/Helpers/CreateLinkedTicket b/share/html/Asset/Helpers/CreateLinkedTicket
index 6728b7b..f487d52 100644
--- a/share/html/Asset/Helpers/CreateLinkedTicket
+++ b/share/html/Asset/Helpers/CreateLinkedTicket
@@ -46,11 +46,19 @@
%#
%# END BPS TAGGED BLOCK }}}
<%args>
-$Asset
+ at Asset => ()
+$Asset => undef
$Requestors => ''
</%args>
<%init>
-my $asset = LoadAsset($Asset);
+my @asset_objs;
+if ( @Asset ){
+ @asset_objs = map { LoadAsset($_) } @Asset;
+}
+elsif ( $Asset ){
+ push @asset_objs, LoadAsset($Asset);
+}
+
</%init>
-<& /Asset/Elements/CreateLinkedTicket, AssetObj => $asset, Requestors => $Requestors &>
+<& /Asset/Elements/CreateLinkedTicket, AssetObj => \@asset_objs, Requestors => $Requestors &>
% $m->abort;
diff --git a/share/html/Asset/Search/Bulk.html b/share/html/Asset/Search/Bulk.html
index 79e3f4e..4a6bbb6 100644
--- a/share/html/Asset/Search/Bulk.html
+++ b/share/html/Asset/Search/Bulk.html
@@ -74,6 +74,12 @@
Label => loc('Update'),
CheckboxNameRegex => '/^UpdateAsset(All)?$/',
&>
+<div class="submit">
+ <div class="buttons">
+ <span class="caption"></span>
+ <input type="submit" id="bulk-update-create-linked-ticket" name="CreateLinkedTicket" value="Create Linked Ticket" class="button" alt="Create a ticket with checked assets linked" />
+ </div>
+</div>
<&| /Widgets/TitleBox, title => loc("Basics"), class => "asset-basics asset-bulk-basics", title_class => "inverse" &>
<table>
@@ -166,7 +172,12 @@ delete $ARGS{$_} foreach grep { $ARGS{$_} =~ /^$/ } keys %ARGS;
$DECODED_ARGS->{'UpdateAssetAll'} = 1 unless @UpdateAsset;
-if ( $ARGS{Update} ) {
+if ( $ARGS{'CreateLinkedTicket'} ){
+ my $url = RT->Config->Get('WebURL') . "Asset/CreateLinkedTicket.html";
+ $url .= '?'. $m->comp( '/Elements/QueryString', 'Assets' => \@UpdateAsset );
+ RT::Interface::Web::Redirect($url);
+}
+elsif ( $ARGS{Update} ) {
my @attributes = $asset->WritableAttributes;
@attributes = grep exists $ARGS{ 'Update'. $_ }, @attributes;
my %basics = map { $_ => $ARGS{ 'Update'. $_ } } @attributes;
diff --git a/share/static/js/assets.js b/share/static/js/assets.js
index 853ba86..8d5aaa0 100644
--- a/share/static/js/assets.js
+++ b/share/static/js/assets.js
@@ -34,6 +34,25 @@ jQuery(function() {
showModal
);
});
+ jQuery("#bulk-update-create-linked-ticket").click(function(ev){
+ ev.preventDefault();
+ var chkArray = [];
+
+ jQuery("input[name='UpdateAsset']:checked").each(function() {
+ chkArray.push(jQuery(this).val());
+ });
+
+ var selected = '';
+ for (var i = 0; i < chkArray.length; i++) {
+ selected += 'Asset=' + chkArray[i] + '&';
+ }
+ /* selected = chkArray.join(','); */
+ var url = RT.Config.WebHomePath + '/Asset/Helpers/CreateLinkedTicket?' + selected;
+ jQuery.post(
+ url,
+ showModal
+ );
+ });
jQuery("#assets-create").click(function(ev){
ev.preventDefault();
jQuery.get(
-----------------------------------------------------------------------
More information about the rt-commit
mailing list