[Rt-commit] rt branch, 4.6/lifecycle-ui-dev, repushed
Craig Kaiser
craig at bestpractical.com
Tue Feb 4 18:59:21 EST 2020
The branch 4.6/lifecycle-ui-dev was deleted and repushed:
was 8a7190eac4206310dc7f56671f1701962da4992c
now 2cad9fdf1b0767ad2fd4fbeafc2a81a8a5795998
1: df734e53cb < --: ------- Function "size" has been dropped since jQuery 3
2: 999524541a < --: ------- Fix jquery ui background url
3: 0761408f8c < --: ------- Revert back to old padding of autocomplete list
4: a018ec36ea < --: ------- Highlight hovered autocomplete item like RT menu
5: 94f71583ee < --: ------- Don't show underline for items in superfish and autocomplete menus
6: e35a5bd89b < --: ------- Add question-circle to fontawesome SVG build
7: 0d2f8e1670 < --: ------- Replace Cc and AdminCc helper text with tooltips
8: 512c923e34 < --: ------- Replace CustomField hint text with tooltips
9: 2cdd7c1dee < --: ------- Add hint text for queue CustomField
10: 631f9da17a < --: ------- No need to show hint icon if cf doesn't have hints
11: 3a4b8c6ae6 < --: ------- Replace custom role hints with tooltips
12: 859337a59a < --: ------- Update dated reference to carbon-copy
13: 967569f10e < --: ------- Initial ticket transaction query builder
14: dd39b9f8c3 < --: ------- Resolve the inconsistent $Class param in Search and CollectionAsTable
15: 0e4b159daf < --: ------- Add support to clip long search result columns
16: c54d6a8b97 < --: ------- Add transaction search tests
17: 65fb92cee0 < --: ------- Add transaction query builder tests
18: 8c15d7b1bd < --: ------- Add Transactions to query builder docs
19: 5e21183b11 < --: ------- Tighten margin and padding for ticket people lists
20: a00ca8f4dc < --: ------- Add css background for tr and form-row elements with oddline class
21: 6207c71f49 < --: ------- Allow longer email addresses for value on People
22: df229c3aeb < --: ------- Add collapse to topactions inputs
23: f1e9a79e7d < --: ------- Fix topactions menu overlap
24: 0f4b41bcb8 < --: ------- Horizontally align bootstrap-select labels query builder labels
25: 8e3fae9251 < --: ------- Horizontally align AND/OR operators with its label in query builder
26: 46a2a2b228 < --: ------- Allow specifying size for Integer and String widgets
27: 905f556204 < --: ------- Allow String widget to have a value of "0"
28: 0542699993 < --: ------- Add RadioStyle option to Boolean widget
29: 95a03293f6 < --: ------- Make booleans with RadioStyle use true/false logic
30: 6870277a5d < --: ------- DatabaseSetting schema updates
31: 208e8b024a < --: ------- Add ORM classes for DatabaseSettings
32: bf67efa9a0 < --: ------- Port database config loading and refreshing from extension
33: 2aa39df793 < --: ------- Add Code and MultilineString widgets
34: 40cd7f0cba < --: ------- Port EditConfig page from extension
35: 0f84863dc8 < --: ------- Annotate Immutable options
36: 404fa64dd6 < --: ------- Add widget metadata for config options
37: 508affcfd3 < --: ------- Hide deprecated options
38: 3f6eb3322c < --: ------- List Database as source of configuration on Sys Config page
39: 5285070e53 < --: ------- Render config with EditLink as readonly
40: e163dfd3e0 < --: ------- Switch from Storable::dclone to Clone::clone to handle code/regex
41: 25d049da65 < --: ------- Migrate MultilineString to new themes
42: dd8840d281 < --: ------- Add LabelLink support for form widgets
43: 3be8415d3f < --: ------- Vertically align boolean label/value
44: 4a531199f3 < --: ------- Add tabs to the Configuration in DB feature
45: 674817e718 < --: ------- Rename DatabaseSetting to Configuration
46: 17730cbdf2 < --: ------- Validate Content of Configurations
47: 0f883c6c17 < --: ------- Use Data::Dumper instead in Configuration to support regex
48: 96225fe34a < --: ------- Note RT::Extension::ConfigInDatabase is cored and the main backend change
49: 17b78b10aa < --: ------- Add container div for configuration pages
50: 66462915a8 < --: ------- Move Edit link to the page menu on the configuration page
51: ed027415fb < --: ------- Add some basic help to configuration pages
52: 8bbbe8ddaa < --: ------- Add configuration documentation in POD
53: f7c39dd275 < --: ------- Add the missing $LDAPOptions to RT_Config.pm
54: 863f59cde9 < --: ------- Add test for /Admin/Tools/EditConfig.html
55: a95edf7e09 < --: ------- Refactor SectionMap to get the whole structure from RT_Config.pm
56: e8764fdc2b < --: ------- Re-organize RT_Config.pm to update config stucture on "RT Configuration"
57: 1df35f9004 < --: ------- Fix typo of "TransactionDefaultSearchResultOrderBy"
58: 694a603c39 < --: ------- Clean up items that simply use default widget from config meta
59: 0ac511afdb < --: ------- Use select widget for DefaultCatalog for better user experience
60: b7ab1acd08 < --: ------- Move "Must modify" message up to be right under the option it's talking about
61: e408f7dae2 < --: ------- Line up the top menu option on left with the top of config box on the right
62: 8141c77cd1 < --: ------- Add $LabelCols and $ValueCols to easily customize cols for label/value
63: c9841e7e49 < --: ------- Switch to 4/8 of label/value layout considering we have long option names
64: 1958a54c8e < --: ------- Hide all crypt related configs from web
65: 72929ed7fe < --: ------- Suppress stack info trace from user interface
66: 3ff137c7cb < --: ------- Clean up obsolete config AllowLoginPasswordAutoComplete
67: b2611aeeb1 < --: ------- Don't show "Save Changes" if there is nothing to change
68: bb7a369435 < --: ------- Make log configs immutable as updates from web doesn't work
69: ab30f346e7 < --: ------- Add empty option to StatementLog so we can disable it
70: 6fa582c3f1 ! 1: 5efbb8d773 Core lifecycle-UI
@@ -6,9 +6,9 @@
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@
- quoteselection.js
- fontawesome.min.js
- rights-inspector.js
+ Chart.min.js
+ chartjs-plugin-colorschemes.min.js
+ jquery.jgrowl.min.js
+ d3.min.js
+ lifecycleui-editor.js
+ lifecycleui-model.js
@@ -333,7 +333,7 @@
+ my $status = $left ? $left_status : $right_status;
+
+ unless ( grep{ $status eq $_ } keys %{$lifecycles->{$name}->{'transitions'}} ) {
-+ RT::Logger->error("Deleting mapping: $left_status -> $right_status, for status: $status" );
++ RT::Logger->debug("Deleting mapping: $left_status -> $right_status, for status: $status" );
+ delete $lifecycles->{'__maps__'}{$mapname};
+ }
+ }
@@ -369,39 +369,6 @@
+}
+
1;
-
-diff --git a/lib/RT/System.pm b/lib/RT/System.pm
---- a/lib/RT/System.pm
-+++ b/lib/RT/System.pm
-@@
- }
- }
-
-+=head2 LifecycleCacheNeedsUpdate ( 1 )
-+
-+Attribute to decide when we need to flush the list of lifecycles
-+and re-register any changes. This is needed for the lifecycle UI editor.
-+
-+If passed a true value, will update the attribute to be the current time.
-+
-+=cut
-+
-+sub LifecycleCacheNeedsUpdate {
-+ my $self = shift;
-+ my $update = shift;
-+
-+ if ($update) {
-+ return $self->SetAttribute(Name => 'LifecycleCacheNeedsUpdate', Content => time);
-+ }
-+ else {
-+ my $cache = $self->FirstAttribute('LifecycleCacheNeedsUpdate');
-+ return (defined $cache ? $cache->Content : 0 );
-+ }
-+}
-+
- =head2 AddUpgradeHistory package, data
-
- Adds an entry to the upgrade history database. The package can be either C<RT>
diff --git a/share/html/Admin/Lifecycles/Create.html b/share/html/Admin/Lifecycles/Create.html
new file mode 100644
@@ -550,6 +517,151 @@
new file mode 100644
--- /dev/null
+++ b/share/html/Admin/Lifecycles/Mappings.html
+@@
++%# BEGIN BPS TAGGED BLOCK {{{
++%#
++%# COPYRIGHT:
++%#
++%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
++%# <sales at bestpractical.com>
++%#
++%# (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
++%# you are the copyright holder for those contributions and you grant
++%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
++%# 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 }}}
++<& /Admin/Elements/Header, Title => $title &>
++<& /Elements/Tabs &>
++<& /Elements/ListActions, actions => \@results &>
++
++<form action="<%RT->Config->Get('WebPath')%>/Admin/Lifecycles/Mappings.html" name="ModifyMappings" method="post" enctype="multipart/form-data">
++<input type="hidden" class="hidden" name="Name" value="<% $LifecycleObj->Name %>" />
++<input type="hidden" class="hidden" name="Type" value="<% $LifecycleObj->Type %>" />
++
++% for my $Other (@lifecycles) {
++% my $FromMapping = $Other->MoveMap($LifecycleObj);
++% my $ToMapping = $LifecycleObj->MoveMap($Other);
++% my @OtherStatuses = $Other->Valid;
++
++ <&| /Widgets/TitleBox, title => "Support Mappings with ".$Other->Name &>
++
++<h3><&|/l, $Other->Name, $LifecycleObj->Name &>Changing from [_1] to [_2]:</&></h3>
++<table>
++% for my $OtherStatus (@OtherStatuses) {
++ <tr>
++ <td><% $OtherStatus %>:</td>
++ <td><& /Elements/SelectStatus, Statuses => \@MyStatuses, Default => $FromMapping->{$OtherStatus}, Name => 'map-' . $Other->Name . '-' . $OtherStatus . '--' . $LifecycleObj->Name&></td>
++ </tr>
++% }
++</table>
++
++<h3><&|/l, $LifecycleObj->Name, $Other->Name &>Changing from [_1] to [_2]:</&></h3>
++<table>
++% for my $MyStatus (@MyStatuses) {
++ <tr>
++ <td><% $MyStatus %>:</td>
++ <td><& /Elements/SelectStatus, Statuses => \@OtherStatuses, Default => $ToMapping->{$MyStatus}, Name => 'map-' . $LifecycleObj->Name . '-' . $MyStatus . '--' . $Other->Name &></td>
++ </tr>
++% }
++</table>
++
++ </&>
++% }
++
++% unless ( scalar @lifecycles ) {
++ <p><&|/l&>Mapping only available when more than one lifecycle exists</&></p>
++% }
++
++<& /Elements/Submit, Name => 'Update', Label => loc('Save Changes') &>
++
++</form>
++<%INIT>
++my ($title, @results);
++my $LifecycleObj = RT::Lifecycle->new( $session{'CurrentUser'} );
++$LifecycleObj->Load(Name => $Name, Type => $Type);
++
++Abort("Invalid lifecycle") unless $LifecycleObj->Name
++ && $LifecycleObj->{data}{type} eq $Type;
++
++my @MyStatuses = $LifecycleObj->Valid;
++
++$title = loc("Mappings for lifecycle [_1]", $LifecycleObj->Name);
++
++# This code does automatic redirection if any updates happen.
++MaybeRedirectForResults(
++ Actions => \@results,
++ Arguments => { Name => $LifecycleObj->Name, Type => $LifecycleObj->Type },
++);
++
++my @lifecycle_names = grep { $_ ne 'approvals' } RT::Lifecycle->ListAll($Type);
++
++if ($Update) {
++ my %maps;
++ my $lifecycle_re = join '|', map { quotemeta($_) } @lifecycle_names;
++ for my $key (keys %ARGS) {
++ my ($from_lifecycle, $from_status, $to_lifecycle) = $key =~ /^map-($lifecycle_re)-(.*)--($lifecycle_re)$/ or next;
++ if (my $to_status = $ARGS{$key}) {
++ $maps{"$from_lifecycle -> $to_lifecycle"}{$from_status} = $to_status;
++ }
++ }
++
++ my ($ok, $msg) = RT::Lifecycle->UpdateMaps(
++ CurrentUser => $session{CurrentUser},
++ Maps => \%maps,
++ );
++ push @results, $msg;
++}
++
++my @lifecycles = map { RT::Lifecycle->Load(Name => $_, Type => $Type) }
++ sort { loc($a) cmp loc($b) }
++ grep { $_ ne $Name }
++ @lifecycle_names;
++</%INIT>
++<%ARGS>
++$Name => undef
++$Type => undef
++$Update => undef
++</%ARGS>
+
+diff --git a/share/html/Admin/Lifecycles/Mappings.html.orig b/share/html/Admin/Lifecycles/Mappings.html.orig
+new file mode 100644
+--- /dev/null
++++ b/share/html/Admin/Lifecycles/Mappings.html.orig
@@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
@@ -1026,241 +1138,6 @@
+$Ticket => undef
+</%ARGS>
-diff --git a/share/html/Elements/Lifecycle/Interactive b/share/html/Elements/Lifecycle/Interactive
-new file mode 100644
---- /dev/null
-+++ b/share/html/Elements/Lifecycle/Interactive
-@@
-+%# BEGIN BPS TAGGED BLOCK {{{
-+%#
-+%# COPYRIGHT:
-+%#
-+%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
-+%# <sales at bestpractical.com>
-+%#
-+%# (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
-+%# you are the copyright holder for those contributions and you grant
-+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-+%# 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 }}}
-+<div class="status-menus">
-+% for my $status (keys %menus) {
-+<div class="status-menu" data-status="<% $status %>">
-+% my $menu = $menus{$status};
-+<& /Elements/Menu, menu => $menu &>
-+</div>
-+% }
-+</div>
-+
-+<%INIT>
-+my $Lifecycle = $Ticket->LifecycleObj;
-+my $id = $Ticket->Id;
-+my %menus;
-+
-+# largely borrowed from /Elements/Tabs
-+my $current = $Ticket->Status;
-+my $hide_resolve_with_deps = RT->Config->Get('HideResolveActionsWithDependencies')
-+ && $Ticket->HasUnresolvedDependencies;
-+my $query_string = sub {
-+ my %args = @_;
-+ my $u = URI->new();
-+ $u->query_form(map { $_ => $args{$_} } sort keys %args);
-+ return $u->query;
-+};
-+
-+for my $status ($Lifecycle->Valid) {
-+ $menus{$status} = RT::Interface::Web::Menu->new();
-+}
-+
-+my %seen_status;
-+
-+my $add_menu = sub {
-+ my $next = shift;
-+ my $info = shift || {};
-+ my @class;
-+ my $include_url = 1;
-+
-+ $seen_status{$next}++;
-+
-+ if (!$Lifecycle->IsTransition( $current => $next )) {
-+ push @class, 'no-transition';
-+ $include_url = 0;
-+ }
-+ else {
-+ my $check = $Lifecycle->CheckRight( $current => $next );
-+ if (!$Ticket->CurrentUserHasRight($check)) {
-+ push @class, 'no-permission';
-+ $include_url = 0;
-+ }
-+ }
-+
-+ if ($hide_resolve_with_deps
-+ && $Lifecycle->IsInactive($next)
-+ && !$Lifecycle->IsInactive($current)) {
-+ push @class, 'hide-resolve-with-deps';
-+ $include_url = 0;
-+ }
-+
-+ my $action = $info->{'update'} || '';
-+ my $url = '/Ticket/';
-+ $url .= "Update.html?". $query_string->(
-+ $action
-+ ? (Action => $action)
-+ : (SubmitTicket => 1, Status => $next),
-+ DefaultStatus => $next,
-+ id => $id,
-+ );
-+ my $key = $info->{'label'} || ucfirst($next);
-+ $menus{$next}->child(
-+ $key =>
-+ title => loc( $key ),
-+ ($include_url ? (path => $url) : ()),
-+ class => (join " ", @class),
-+ );
-+};
-+
-+foreach my $info ( $Lifecycle->Actions($current) ) {
-+ $add_menu->($info->{to}, $info);
-+}
-+
-+for my $status ($Lifecycle->Valid) {
-+ next if $seen_status{$status};
-+ $add_menu->($status);
-+}
-+
-+$m->callback( CallbackName => 'StatusMenus', TicketObj => $Ticket, LifecycleObj => $Lifecycle, Menus => \%menus);
-+
-+</%INIT>
-+<%ARGS>
-+$Ticket => undef
-+</%ARGS>
-
-diff --git a/share/html/Ticket/Elements/ShowLifecycle b/share/html/Ticket/Elements/ShowLifecycle
-new file mode 100644
---- /dev/null
-+++ b/share/html/Ticket/Elements/ShowLifecycle
-@@
-+%# BEGIN BPS TAGGED BLOCK {{{
-+%#
-+%# COPYRIGHT:
-+%#
-+%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
-+%# <sales at bestpractical.com>
-+%#
-+%# (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
-+%# you are the copyright holder for those contributions and you grant
-+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-+%# 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>
-+$Ticket
-+</%ARGS>
-+<%INIT>
-+my $config = $Ticket->LifecycleObj->{data};
-+
-+my $display_config = $config->{ticket_display} || 'hidden';
-+return unless $display_config eq 'readonly' || $display_config eq 'interactive';
-+
-+my $zoom_config = $config->{ticket_zoom} || 'static';
-+my $center_config = $config->{ticket_center} || 'origin';
-+</%INIT>
-+<&| /Widgets/TitleBox,
-+ title => loc("Lifecycle"),
-+ class => 'ticket-info-lifecycle',
-+&>
-+ <& /Elements/Lifecycle/Graph,
-+ Ticket => $Ticket,
-+ Interactive => ($display_config eq 'interactive'),
-+ Zoomable => ($zoom_config eq 'dynamic'),
-+ Center => $center_config,
-+ &>
-+</&>
-
-diff --git a/share/html/Ticket/Elements/ShowSummary b/share/html/Ticket/Elements/ShowSummary
---- a/share/html/Ticket/Elements/ShowSummary
-+++ b/share/html/Ticket/Elements/ShowSummary
-@@
- </&>
- % }
- % $m->callback( %ARGS, CallbackName => 'AfterReminders' );
-+
-+<& /Ticket/Elements/ShowLifecycle, Ticket => $Ticket &>
-+% $m->callback( %ARGS, CallbackName => 'AfterLifecycle' );
-+
- <&| /Widgets/TitleBox, title => loc("Dates"),
- ($can_modify ? (title_href => RT->Config->Get('WebPath')."/Ticket/ModifyDates.html?id=".$Ticket->Id) : ()),
- class => 'ticket-info-dates',
-
diff --git a/share/static/css/elevator-light/lifecycleui.css b/share/static/css/elevator-light/lifecycleui.css
new file mode 100644
--- /dev/null
@@ -1307,10 +1184,10 @@
--- a/share/static/css/elevator-light/main.css
+++ b/share/static/css/elevator-light/main.css
@@
- @import "ticket-lists.css";
- @import "ticket-search.css";
- @import "print.css";
-+ at import "lifecycleui.css";
+ @import "Chart.css";
+ @import "jquery.jgrowl.min.css";
+ @import "inline-edit.css";
++ at import "lifecycleui.css"
diff --git a/share/static/js/d3.min.js b/share/static/js/d3.min.js
new file mode 100644
71: ba1e568ec4 < --: ------- Remove 'Interactive' lifecycle UI component
72: 555d2551ba < --: ------- Remove lifecycle UI from ticket display
73: a4252b123b < --: ------- Debug log when removing an old status mapping instead of error logging
74: 413af7dbde = 2: 7a6e45226f Use RT::Configuration to store lifecycle config instead of RT::Attribute
75: 7e2fb6382d ! 3: 1d92f10f06 Migrate lifecycle UI pages to elevator theme
@@ -89,52 +89,56 @@
--- a/share/html/Admin/Lifecycles/Mappings.html
+++ b/share/html/Admin/Lifecycles/Mappings.html
@@
- <&| /Widgets/TitleBox, title => $Other->Name &>
-
- <h3><&|/l, $Other->Name, $LifecycleObj->Name &>Changing from [_1] to [_2]:</&></h3>
+ % my $ToMapping = $LifecycleObj->MoveMap($Other);
+ % my @OtherStatuses = $Other->Valid;
+
+- <&| /Widgets/TitleBox, title => "Support Mappings with ".$Other->Name &>
++<&| /Widgets/TitleBox, title => "Support Mappings with ".$Other->Name &>
++ <div class="form-row">
+
+-<h3><&|/l, $Other->Name, $LifecycleObj->Name &>Changing from [_1] to [_2]:</&></h3>
-<table>
-+<div class="row">
-+ <div class="col-xl-6">
++ <div class="col-md-3">
++ <h3><&|/l, $Other->Name, $LifecycleObj->Name &>Changing from [_1] to [_2]:</&></h3>
% for my $OtherStatus (@OtherStatuses) {
- <tr>
- <td><% $OtherStatus %>:</td>
- <td><& /Elements/SelectStatus, Statuses => \@MyStatuses, Default => $FromMapping->{$OtherStatus}, Name => 'map-' . $Other->Name . '-' . $OtherStatus . '--' . $LifecycleObj->Name&></td>
- </tr>
-+ <div class="form-row">
-+ <div class="col-md-3 label text-left"><% $OtherStatus %>:</div>
-+ <div class="col-md-3">
-+ <& /Elements/SelectStatus, Statuses => \@MyStatuses, Default => $FromMapping->{$OtherStatus}, Name => 'map-' . $Other->Name . '-' . $OtherStatus . '--' . $LifecycleObj->Name &>
-+ </div>
-+ </div>
++ <div class="form-row">
++ <div class="col-md-3 label text-left"><% $OtherStatus %>:</div>
++ <div class="col-md-6">
++ <& /Elements/SelectStatus, Statuses => \@MyStatuses, Default => $FromMapping->{$OtherStatus}, Name => 'map-' . $Other->Name . '-' . $OtherStatus . '--' . $LifecycleObj->Name &>
++ </div>
++ </div>
% }
-</table>
-+ </div>
-+</div>
-+
-+<br>
-
- <h3><&|/l, $LifecycleObj->Name, $Other->Name &>Changing from [_1] to [_2]:</&></h3>
++ </div>
+
+-<h3><&|/l, $LifecycleObj->Name, $Other->Name &>Changing from [_1] to [_2]:</&></h3>
-<table>
-+<div class="row">
-+ <div class="col-xl-6">
++ <div class="col-md-3">
++ <h3><&|/l, $LifecycleObj->Name, $Other->Name &>Changing from [_1] to [_2]:</&></h3>
% for my $MyStatus (@MyStatuses) {
- <tr>
- <td><% $MyStatus %>:</td>
- <td><& /Elements/SelectStatus, Statuses => \@OtherStatuses, Default => $ToMapping->{$MyStatus}, Name => 'map-' . $LifecycleObj->Name . '-' . $MyStatus . '--' . $Other->Name &></td>
- </tr>
-+ <div class="form-row">
-+ <div class="col-md-3 label text-left"><% $MyStatus %>:</div>
-+ <div class="col-md-3">
-+ <& /Elements/SelectStatus, Statuses => \@OtherStatuses, Default => $ToMapping->{$MyStatus}, Name => 'map-' . $LifecycleObj->Name . '-' . $MyStatus . '--' . $Other->Name &>
-+ </div>
-+ </div>
++ <div class="form-row">
++ <div class="col-md-3 label text-left"><% $MyStatus %>:</div>
++ <div class="col-md-6">
++ <& /Elements/SelectStatus, Statuses => \@OtherStatuses, Default => $ToMapping->{$MyStatus}, Name => 'map-' . $LifecycleObj->Name . '-' . $MyStatus . '--' . $Other->Name &>
++ </div>
++ </div>
% }
-</table>
--
++ </div>
++ </div>
++</&>
++
++<br>
+
- </&>
-+ </div>
-+</div>
-+</&>
% }
% unless ( scalar @lifecycles ) {
76: 1c3052c51c < --: ------- Update lifecyle Mapping page's title
77: 4911d30c2e < --: ------- Lifecycle mapping page show status mappings side by side
78: fa978ebfee ! 4: c1c6bd1754 Ensure lifecycle cache is updated across threads when flagged
@@ -31,3 +31,36 @@
my %args = @_;
+diff --git a/lib/RT/System.pm b/lib/RT/System.pm
+--- a/lib/RT/System.pm
++++ b/lib/RT/System.pm
+@@
+ }
+ }
+
++=head2 LifecycleCacheNeedsUpdate ( 1 )
++
++Attribute to decide when we need to flush the list of lifecycles
++and re-register any changes. This is needed for the lifecycle UI editor.
++
++If passed a true value, will update the attribute to be the current time.
++
++=cut
++
++sub LifecycleCacheNeedsUpdate {
++ my $self = shift;
++ my $update = shift;
++
++ if ($update) {
++ return $self->SetAttribute(Name => 'LifecycleCacheNeedsUpdate', Content => time);
++ }
++ else {
++ my $cache = $self->FirstAttribute('LifecycleCacheNeedsUpdate');
++ return (defined $cache ? $cache->Content : 0 );
++ }
++}
++
+ =head2 AddUpgradeHistory package, data
+
+ Adds an entry to the upgrade history database. The package can be either C<RT>
+
79: 58645cca9d ! 5: 1d979ae51b Add lifecycle UI Advanced page
@@ -1,6 +1,6 @@
Author: Craig Kaiser <craig at bestpractical.com>
- Add lifecycle UI Advanced page
+ Add lifecycle UI Advanced page
diff --git a/lib/RT/Lifecycle.pm b/lib/RT/Lifecycle.pm
--- a/lib/RT/Lifecycle.pm
80: d215346ae4 = 6: 6fa18d46f7 Add lifecycle UI Actions page
81: d1cbfcbd4f = 7: 0ee00a2754 Add lifecycle UI Rights page
82: 8a7190eac4 = 8: 2cad9fdf1b Add lifecycle Rights/Actions/Advanced pages to menu
More information about the rt-commit
mailing list