[Rt-commit] rt branch, 4.4-trunk, updated. rt-4.4.2-224-g7c3d3c880

? sunnavy sunnavy at bestpractical.com
Mon Apr 23 16:45:46 EDT 2018


The branch, 4.4-trunk has been updated
       via  7c3d3c8805dd4e13df1f982fdde9ebddd3800738 (commit)
       via  d51f1788a9ed98f7bf2c7ddc1bebec19f2390b0b (commit)
       via  01f867ae2ed045be44593b27bf6b1b5683c4f9cb (commit)
       via  124918acbfbfe8d64a9122a319d0b1e758c2e414 (commit)
       via  55dbf4f0fac395fd9855fc6550728d2ca7c5849b (commit)
       via  5ecc69b6246d20318213893ea68bf1f1682ef556 (commit)
       via  fc961da40af8f43319ec78e5c6fcf9796bfe22bd (commit)
       via  823e73ec59cd6f15f567102163ce86bc7d679402 (commit)
       via  ac1943e8f2ba5639f74c9f0047b7041446a7e6f8 (commit)
       via  5f86c59191030162ad744221c0690e69f9fdd858 (commit)
       via  41fe68fbc99d2a201232710cd23986900826850b (commit)
       via  0ba55063867fcc97b241d1a7dd9dec8eca92850d (commit)
       via  9fcfeb94c65639ae3fac5d1588754705a1fedfde (commit)
       via  03e65e6c8c547b84658065d69e495f53067e4b89 (commit)
       via  463a3146beddae1e32a6479bc47e3ddd477d9fc7 (commit)
       via  4b5d34e86a2b7e7b9a358bd175d980766af68dde (commit)
       via  6dee85f9ea1aae86495a8bbc51e93bd3ad075df1 (commit)
       via  157e7f9bae510c8a05a48558d4ea1e6d66c0ca54 (commit)
       via  33fcc338b871aa95ac1d5db8da738a498ad49ef8 (commit)
       via  6d87c629c20dc3571f06e5c9030a12cf9a9a1737 (commit)
       via  be0a016d0c05519022237e9a45a46cf6ece66068 (commit)
       via  5f3d9eda56dd93e6bcd60da34ac963c2ba63da38 (commit)
       via  091de14bae18b8df1866ba5af061cfae8a3585b4 (commit)
       via  3ae12fb130ec642d0de59fbeb11c3228b6979fb5 (commit)
       via  ff5b55a19f80edc287435e2cf062deaf1dab0fcb (commit)
       via  9f59d1a305199078d1fb7f191ad95cbfdc1c6f60 (commit)
       via  5032832f866c1723d7b71147e201edccb3852c58 (commit)
       via  2c929112fca712fa71f56d2b3c131241baf3bfcc (commit)
       via  495bf0f891ace34fc277bc3b4b875846a12fd83d (commit)
       via  8303ea9a1882d4bab32c9456c010e392c23f147b (commit)
       via  79038f5561f75c05a27cd71509580b90e0a0fe57 (commit)
       via  49b50d3372db98edf024b7479c5cf7c4448924d7 (commit)
       via  94346679e9dfb74309d4ed9e1b53ad1e60e62b8d (commit)
       via  5a704b4882b912fe5ed4e88d9bb1a8f81a5ecac4 (commit)
       via  6945ff7aeebe03c51abc24e6047697e7f26cb69f (commit)
       via  34de0af0ccaf8f35dc242fd04369691364541693 (commit)
       via  9ef494fc7daec7750ed7c6e892f1559a0e782e46 (commit)
       via  f7966d039ead566cbd4e90d50cef0baa225e24fc (commit)
       via  badfc0763ffba8cde7475b27e0e8dffa320a8d7e (commit)
       via  96075fc4169e164a81e527110722e16bcae0d40a (commit)
       via  c8d543799132b7ee40e01c5e2d92a0a5254bc358 (commit)
       via  74e13acf775e116d6af21809fe9c999aa8ece263 (commit)
       via  42821b80daf4e16d0290b32c1bf5a7f63e7cb1c6 (commit)
       via  8871a2247de4830d9c6bb41ed268d75136621bd7 (commit)
       via  c26271fc4c6b768ba6be8b610d57b559e86a57ec (commit)
       via  13281fcbef58fef5342e6251cfaa0fdf05e9b0a0 (commit)
       via  141c999a863bda66efe733e5f0842ece304be324 (commit)
       via  dc8dcd828cc05ec753e14b429c0d7864ed1ef033 (commit)
       via  9d43aefa44c75e5d368f02eb6631218594b2a8a0 (commit)
       via  2ac80e537b7972f16de40743a333824fcb792c9d (commit)
       via  9d1d82f0291a1528c667fdd8c54ae8616ee17b11 (commit)
       via  87fdd79647f61f60dcb69738bd8e6eae05889d29 (commit)
       via  5e1d28fdf8751f9423a7560b67af4efb4002f1ef (commit)
       via  92dc9048972a8b0ea33aaa7e72a2454e996146f7 (commit)
       via  86bcd0b16285fb8d5449c988ae3243694dd9e916 (commit)
       via  9ab461b247b038a32e43080e775d3196749423d5 (commit)
       via  b393152fce9db1d5c2fd779500c0c1bed79e7f45 (commit)
       via  a5f62fd949806162f8a86acbd9f811f9f5f3f8d3 (commit)
       via  7eccdee28eedff9151e2b8b6942c396683c2fe97 (commit)
       via  77c5646484088e5fdde7a0dad6a9ccfdaf0f5a47 (commit)
      from  5874172e14f7e88cd24405d90e7ffae024eb0e36 (commit)

Summary of changes:
 devel/tools/extract-message-catalog     | 256 ++---------------------------
 docs/customizing/templates.pod          |   5 +
 docs/writing_portlets.pod               |   2 +-
 lib/RT/Attribute.pm                     |   2 +-
 lib/RT/Config.pm                        |  20 ++-
 lib/RT/I18N/Extract.pm                  | 280 ++++++++++++++++++++++++++++++++
 lib/RT/Interface/Web/Handler.pm         |   2 +-
 lib/RT/ObjectCustomFieldValue.pm        |  43 ++++-
 lib/RT/ObjectCustomFieldValues.pm       |  76 +++++++--
 lib/RT/Record.pm                        |   1 +
 lib/RT/Shredder.pm                      |   8 +-
 lib/RT/Ticket.pm                        |  17 ++
 share/html/Admin/Groups/Members.html    |  10 +-
 share/html/Dashboards/Subscription.html |   2 +-
 share/html/Elements/ColumnMap           |   1 -
 share/html/Elements/Crypt/KeyIssues     |   2 +-
 share/html/Elements/EmailInput          |   2 +-
 share/html/Ticket/Crypt.html            |   2 +-
 share/html/Ticket/Display.html          |  11 +-
 share/html/Ticket/Elements/EditWatchers |   8 +-
 share/html/Ticket/Forward.html          |   4 +-
 share/html/Ticket/History.html          |   2 +-
 share/html/Ticket/Modify.html           |   2 +-
 share/html/Ticket/ModifyDates.html      |   2 +-
 share/html/Ticket/ModifyLinks.html      |   2 +-
 share/html/Ticket/ModifyPeople.html     |   2 +-
 share/html/Ticket/Reminders.html        |   2 +-
 share/html/Ticket/Update.html           |   2 +-
 t/customfields/api.t                    |  29 +++-
 t/i18n/extract.t                        |  18 ++
 t/shredder/03plugin_users.t             |  56 ++++++-
 t/web/language_update.t                 |   4 +-
 t/web/reminder-permissions.t            |   4 +-
 t/web/reminders.t                       |   6 +-
 t/web/ticket_modify_people.t            |  35 ++--
 t/web/ticket_timeworked.t               |   6 +-
 36 files changed, 589 insertions(+), 337 deletions(-)
 create mode 100644 lib/RT/I18N/Extract.pm
 create mode 100644 t/i18n/extract.t

- Log -----------------------------------------------------------------
commit 7c3d3c8805dd4e13df1f982fdde9ebddd3800738
Merge: 5874172e1 d51f1788a
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Tue Apr 24 03:01:10 2018 +0800

    Merge branch '4.2-trunk' into 4.4-trunk

diff --cc share/html/Dashboards/Subscription.html
index 86f3360c7,b00dde6b6..0cb020c1a
--- a/share/html/Dashboards/Subscription.html
+++ b/share/html/Dashboards/Subscription.html
@@@ -93,15 -93,11 +93,15 @@@
  </td><td class="value">
  
  <input type="radio" id="Frequency-daily" name="Frequency" value="daily" <% $fields{'Frequency'} eq 'daily' ? 'checked="checked"' : "" |n %>></input>
 -<label for="Frequency-daily"><&|/l&>daily</&></label>
 -<br />
 +<label for="Frequency-daily">
 +<&|/l&>daily, on</&>
 +</label>
 +
 +% for my $day ( qw/Monday Tuesday Wednesday Thursday Friday Saturday Sunday/ ) {
-       <label><input name="<% $day %>" value=1 type="checkbox" <% $fields{$day} ? 'checked="checked"' : '' %>> <&|/l&><% $day %></&></label>
++      <label><input name="<% $day %>" value=1 type="checkbox" <% $fields{$day} ? 'checked="checked"' : '' %>> <% loc($day) %></label>
 +    <input type="hidden"class="hidden" name="<% $day %>-Magic" value=1 />
 +% }
  
 -<input type="radio" id="Frequency-m-f" name="Frequency" value="m-f" <% $fields{'Frequency'} eq 'm-f' ? 'checked="checked"' : "" |n %>></input>
 -<label for="Frequency-m-f"><&|/l&>Monday through Friday</&></label>
  <br />
  
  <input type="radio" id="Frequency-weekly" name="Frequency" value="weekly"<% $fields{'Frequency'} eq 'weekly' ? 'checked="checked"' : "" |n %>></input>
diff --cc share/html/Elements/EmailInput
index 4e33098e7,41355da1b..f07ede617
--- a/share/html/Elements/EmailInput
+++ b/share/html/Elements/EmailInput
@@@ -45,47 -45,7 +45,47 @@@
  %# those contributions and any derivatives thereof.
  %#
  %# END BPS TAGGED BLOCK }}}
 -<input type="text" id="<% $Name %>" name="<% $Name %>" <% defined $Size ? qq{size="$Size"} : '' |n %> value="<% $Default || '' %>" <% $Autocomplete ? q{data-autocomplete="Users"} : '' |n%> <% $AutocompleteMultiple ? q{data-autocomplete-multiple} : '' |n%> />
 +<input
 +    type="text"
 +    id="<% $Name %>"
 +    name="<% $Name %>"
 +    value="<% $Default || '' %>"
 +
 +% if (defined $Size) {
 +    size="<% $Size %>"
 +% }
 +
 +% if ($Placeholder) {
 +    placeholder="<% $Placeholder %>"
 +% }
 +
 +% if ($Autocomplete) {
 +    data-autocomplete="Users"
 +% }
 +
 +% if ($AutocompleteMultiple) {
 +    data-autocomplete-multiple
 +% }
 +
 +% if ($AutocompleteReturn) {
 +    data-autocomplete-return="<% $AutocompleteReturn %>"
 +% }
 +
 +% if ($AutocompleteNobody) {
 +    data-autocomplete-include-nobody
 +% }
 +
 +% if ($AutocompleteSystem) {
 +    data-autocomplete-include-system
 +% }
 +
 +/>
 +% if ($EntryHint) {
 +<br>
 +<i><font size="-2">
-   <&|/l&><% $EntryHint %></&>
++  <% loc($EntryHint) %>
 +</font></i>
 +% }
  <%ARGS>
  $Name
  $Size    => 40
diff --cc share/html/Ticket/Display.html
index e02a9eae5,ea439ded7..8e02f63d3
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@@ -57,20 -57,8 +57,20 @@@
  <& Elements/ShowDependencyStatus, Ticket => $TicketObj &>
  
  % $m->callback( %ARGS, Ticket => $TicketObj, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowSummary' );
 -<div class="summary">
 -<&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
 +
 +<%PERL>
 +my $show_label    = $m->interp->apply_escapes( loc("Show unset fields"), 'h' );
 +my $hide_label    = $m->interp->apply_escapes( loc("Hide unset fields"), 'h' );
 +my $initial_label = $HideUnsetFields ? $show_label : $hide_label;
 +
- my $url = "?HideUnsetFields=" . ($HideUnsetFields ? 0 : 1) . ";id=$id";
++my $url = "?HideUnsetFields=" . ($HideUnsetFields ? 0 : 1) . ";id=$ARGS{id}";
 +my $url_html = $m->interp->apply_escapes($url, 'h');
 +
 +my $titleright = qq{<a href="$url_html" data-show-label="$show_label" data-hide-label="$hide_label" onclick="return toggle_hide_unset(this)">$initial_label</a>};
 +</%PERL>
 +
 +<div class="summary unset-fields-container<% $HideUnsetFields ? ' unset-fields-hidden' : '' %>">
 +<&| /Widgets/TitleBox, title => loc('Ticket metadata'), titleright_raw => $titleright &>
  <& /Ticket/Elements/ShowSummary,  Ticket => $TicketObj, Attachments => $attachments &>
  </&>
  </div>
@@@ -112,10 -95,8 +112,9 @@@
  % );
  
  <%ARGS>
- $id => undef
  $TicketObj => undef
  $ShowHeaders => 0
 +$HideUnsetFields => RT->Config->Get('HideUnsetFieldsOnDisplay', $session{CurrentUser})
  $ForceShowHistory => 0
  </%ARGS>
  
diff --cc t/customfields/api.t
index 873503c73,f4551b363..f3d186c32
--- a/t/customfields/api.t
+++ b/t/customfields/api.t
@@@ -231,70 -256,4 +257,71 @@@ warning_like 
  #       $test_add_delete_cycle->( sub { return $_[0]->Name } );
  #}
  
 +# These represent adding the custom field to all objects
 +my $all_queues = RT::Queue->new( RT->SystemUser );
 +my $all_classes = RT::Class->new( RT->SystemUser );
 +
 +# Queue CustomField Message Test
 +{
 +    my $queue = RT::Queue->new( RT->SystemUser );
 +    $queue->Create( Name => 'queue_name_0' );
 +
 +    my $custom_field = RT::CustomField->new( RT->SystemUser );
 +    $custom_field->Create( Name => 'custom_field_0', Type => 'SelectSingle', LookupType => 'RT::Queue' );
 +
 +    my ($status, $msg) = $custom_field->AddToObject( $queue );
 +    is($msg, 'Added custom field custom_field_0 to queue_name_0.', "Adding custom field to queue produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->RemoveFromObject( $queue );
 +    is($msg, 'Removed custom field custom_field_0 from queue_name_0.', "Removing custom field from queue produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->AddToObject( $all_queues );
 +    is($msg, 'Globally added custom field custom_field_0.', "Adding custom field globally produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->RemoveFromObject( $all_queues );
 +    is($msg, 'Globally removed custom field custom_field_0.', "Rmeoving custom field globally produces appropriate message");
 +}
 +
 +# Ticket CustomField Message Test
 +{
 +    my $queue = RT::Queue->new( RT->SystemUser );
 +    $queue->Create( Name => 'queue_name_1' );
 +
 +    my $custom_field = RT::CustomField->new( RT->SystemUser );
 +    $custom_field->Create( Name => 'custom_field_1', Type => 'SelectSingle', LookupType => 'RT::Queue-RT::Ticket' );
 +
 +    my ($status, $msg) = $custom_field->AddToObject( $queue );
 +    is($msg, 'Added custom field custom_field_1 to queue_name_1.', "Adding custom field to queue-ticket produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->RemoveFromObject( $queue );
 +    is($msg, 'Removed custom field custom_field_1 from queue_name_1.', "Removing custom field from queue produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->AddToObject( $all_queues );
 +    is($msg, 'Globally added custom field custom_field_1.', "Adding custom field globally produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->RemoveFromObject( $all_queues );
 +    is($msg, 'Globally removed custom field custom_field_1.', "Removing custom field globally produces appropriate message");
 +}
 +
 +# Class CustomField Message Test
 +{
 +    my $class = RT::Class->new( RT->SystemUser );
 +    $class->Create( Name => 'class_name_0' );
 +
 +    my $custom_field = RT::CustomField->new( RT->SystemUser );
 +    $custom_field->Create( Name => 'custom_field_2', Type => 'SelectSingle', LookupType => 'RT::Class-RT::Article' );
 +
 +    my ($status, $msg) = $custom_field->AddToObject( $class );
 +    is($msg, 'Added custom field custom_field_2 to class_name_0.', "Adding custom field to class-ticket produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->RemoveFromObject( $class );
 +    is($msg, 'Removed custom field custom_field_2 from class_name_0.', "Remove custom field from class produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->AddToObject( $all_classes );
 +    is($msg, 'Globally added custom field custom_field_2.', "Adding custom field globally produces appropriate message");
 +
 +    ($status, $msg) = $custom_field->RemoveFromObject( $all_classes );
 +    is($msg, 'Globally removed custom field custom_field_2.', "Removing custom field globally produces appropriate message");
 +}
 +
+ done_testing;
diff --cc t/web/ticket_timeworked.t
index 3e8ddf66c,000000000..dc52cebd8
mode 100644,000000..100644
--- a/t/web/ticket_timeworked.t
+++ b/t/web/ticket_timeworked.t
@@@ -1,149 -1,0 +1,149 @@@
 +use strict;
 +use warnings;
 +use RT::Test tests => undef, config => 'Set($DisplayTotalTimeWorked, 1);';
 +
 +my ( $baseurl, $m ) = RT::Test->started_ok;
 +ok( $m->login, "Logged in" );
 +
 +my $queue = RT::Test->load_or_create_queue( Name => 'General' );
 +ok( $queue->id, "loaded the General queue" );
 +
 +my ( $child1, $child2 ) = RT::Test->create_tickets(
 +    { Queue   => 'General' },
 +    { Subject => 'child ticket 1', },
 +    { Subject => 'child ticket 2', },
 +);
 +
 +my ( $child1_id, $child2_id ) = ( $child1->id, $child2->id );
 +my $parent_id; # id of the parent ticket
 +
 +diag "add ticket links for timeworked tests"; {
 +    my $ticket = RT::Test->create_ticket(
 +        Queue   => 'General',
 +        Subject => "timeworked parent",
 +    );
 +    my $id = $parent_id = $ticket->id;
 +
 +    $m->goto_ticket($id);
 +    $m->follow_link_ok( { text => 'Links' }, "Followed link to Links" );
 +
 +    ok( $m->form_with_fields("MemberOf-$id"), "found the form" );
 +    $m->field( "MemberOf-$id", "$child1_id $child2_id" );
 +
 +    $m->submit;
 +
 +    $m->content_like(
 +        qr{"DeleteLink-.*?ticket/$child1_id-MemberOf-"},
 +        "base for MemberOf: has child1 ticket",
 +    );
 +    $m->content_like(
 +        qr{"DeleteLink-.*?ticket/$child2_id-MemberOf-"},
 +        "base for MemberOf: has child2 ticket",
 +    );
 +
 +    $m->goto_ticket($id);
 +    $m->content_like( qr{$child1_id:.*?\[new\]}, "has active ticket", );
 +}
 +
 +diag "adding timeworked values for child tickets"; {
 +    my $user_a = RT::Test->load_or_create_user(
 +        Name => 'user_a', Password => 'password',
 +    );
 +    ok $user_a && $user_a->id, 'loaded or created user';
 +
 +    my $user_b = RT::Test->load_or_create_user(
 +        Name => 'user_b', Password => 'password',
 +    );
 +    ok $user_b && $user_b->id, 'loaded or created user';
 +
 +    ok( RT::Test->set_rights(
 +        { Principal => $user_a, Right => [qw(SeeQueue ShowTicket ModifyTicket CommentOnTicket)] },
 +        { Principal => $user_b, Right => [qw(SeeQueue ShowTicket ModifyTicket CommentOnTicket)] },
 +    ), 'set rights');
 +
 +
 +    my @updates = ({
 +        id => $child1_id,
 +        view => 'Modify',
 +        field => 'TimeWorked',
 +        form => 'TicketModify',
-         title => "Modify ticket #$child1_id",
++        title => "Modify ticket #$child1_id: child ticket 1",
 +        time => 45,
 +        user => 'user_a',
 +    }, {
 +        id => $child2_id,
 +        view => 'Modify',
 +        field => 'TimeWorked',
 +        form => 'TicketModify',
-         title => "Modify ticket #$child2_id",
++        title => "Modify ticket #$child2_id: child ticket 2",
 +        time => 35,
 +        user => 'user_a',
 +    }, {
 +        id => $child2_id,
 +        view => 'Update',
 +        field => 'UpdateTimeWorked',
 +        form => 'TicketUpdate',
-         title => "Update ticket #$child2_id (child ticket 2)",
++        title => "Update ticket #$child2_id: child ticket 2",
 +        time => 90,
 +        user => 'user_b',
 +    });
 +
 +    foreach my $update ( @updates ) {
 +        my $agent = RT::Test::Web->new;
 +        ok $agent->login($update->{user}, 'password'), 'logged in as user';
 +        $agent->goto_ticket( $update->{id}, $update->{view} );
 +        $agent->title_is( $update->{title}, 'have child ticket page' );
 +        ok( $agent->form_name( $update->{form} ), 'found the form' );
 +        $agent->field( $update->{field}, $update->{time} );
 +        $agent->submit_form( button => 'SubmitTicket' );
 +    }
 +}
 +
 +diag "checking parent ticket for expected timeworked data"; {
 +    $m->goto_ticket( $parent_id );
 +    $m->title_is( "#$parent_id: timeworked parent");
 +    $m->content_like(
 +        qr{(?s)Worked:.+?value">2\.83 hours \(170 minutes\)},
 +        "found expected total TimeWorked in parent ticket"
 +    );
 +    $m->content_like(
 +        qr{(?s)user_a:.+?value">1\.33 hours \(80 minutes\)},
 +        "found expected user_a TimeWorked in parent ticket"
 +    );
 +    $m->content_like(
 +        qr{(?s)user_b:.+?value">1\.5 hours \(90 minutes\)},
 +        "found expected user_b TimeWorked in parent ticket"
 +    );
 +}
 +
 +diag "checking child ticket 1 for expected timeworked data"; {
 +    $m->goto_ticket( $child1_id );
 +    $m->title_is( "#$child1_id: child ticket 1");
 +    $m->content_like(
 +        qr{(?s)Worked:.+?value">45 minutes},
 +        "found expected total TimeWorked in child ticket 1"
 +    );
 +    $m->content_like(
 +        qr{(?s)user_a:.+?value">45 minutes},
 +        "found expected user_a TimeWorked in child ticket 1"
 +    );
 +}
 +
 +diag "checking child ticket 2 for expected timeworked data"; {
 +    $m->goto_ticket( $child2_id );
 +    $m->title_is( "#$child2_id: child ticket 2");
 +    $m->content_like(
 +        qr{(?s)Worked:.+?value">2\.08 hours \(125 minutes\)},
 +        "found expected total TimeWorked in child ticket 2"
 +    );
 +    $m->content_like(
 +        qr{(?s)user_a:.+?value">35 minutes},
 +        "found expected user_a TimeWorked in child ticket 2"
 +    );
 +    $m->content_like(
 +        qr{(?s)user_b:.+?value">1\.5 hours \(90 minutes\)},
 +        "found expected user_b TimeWorked in child ticket 2"
 +    );
 +}
 +
 +done_testing();

-----------------------------------------------------------------------


More information about the rt-commit mailing list