[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