[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