[Rt-commit] rt branch, 4.0/customfieldlookupid-acl-regression, created. rt-4.0.9-16-gcc95623
Kevin Falcone
falcone at bestpractical.com
Wed Jan 23 16:20:37 EST 2013
The branch, 4.0/customfieldlookupid-acl-regression has been created
at cc9562317aa87d0b3d31b0cdbebed1de9795cd3e (commit)
- Log -----------------------------------------------------------------
commit 6d5b035891caa7f42f9d434183c8843788b4e244
Author: Kevin Falcone <falcone at bestpractical.com>
Date: Wed Jan 23 15:34:11 2013 -0500
Ensure that Custom Fields submitted are saved to the database.
There was a regression in 4.0.9 (a64a16d1c) which meant that even if you
had SeeQueue, CreateTicket, ModifyCustomField and SeeCustomField and the
custom field appeared for editing, it would be lost during the
submission. If you had ShowTicket, it worked fine.
diff --git a/t/web/ticket_display.t b/t/web/ticket_display.t
index a9cab0c..35e9217 100644
--- a/t/web/ticket_display.t
+++ b/t/web/ticket_display.t
@@ -1,7 +1,7 @@
use strict;
use warnings;
-use RT::Test tests => 18;
+use RT::Test tests => undef;
my $queue = RT::Test->load_or_create_queue( Name => 'General' );
@@ -10,10 +10,15 @@ my $user = RT::Test->load_or_create_user(
Password => 'password',
);
+my $cf = RT::Test->load_or_create_custom_field( Name => 'test_cf', Queue => $queue->Name, Type => 'FreeformSingle' );
+my $cf_form_id = 'Object-RT::Ticket--CustomField-'.$cf->Id.'-Value';
+my $cf_test_value = "some string for test_cf $$";
+
my ( $baseurl, $m ) = RT::Test->started_ok;
ok(
RT::Test->set_rights(
{ Principal => $user, Right => [qw(SeeQueue CreateTicket)] },
+ { Principal => $user, Object => $queue, Right => [qw(SeeCustomField ModifyCustomField)] }
),
'set rights'
);
@@ -26,7 +31,7 @@ diag "test ShowTicket right";
$m->get_ok( '/Ticket/Create.html?Queue=' . $queue->id,
'go to ticket create page' );
my $form = $m->form_name('TicketCreate');
- $m->submit_form( fields => { Subject => 'ticket foo' } );
+ $m->submit_form( fields => { Subject => 'ticket foo', $cf_form_id => $cf_test_value } );
my $ticket = RT::Test->last_ticket;
ok( $ticket->id, 'ticket is created' );
@@ -56,8 +61,9 @@ diag "test ShowTicket right";
$m->content_lacks( "No permission to view ticket", 'no error msg' );
$m->title_is( "#$id: ticket foo", 'we can it' );
+ $m->content_contains($cf_test_value, "Custom Field was submitted and saved");
}
-# TODO more /Ticket/Display.html tests here
-
+undef $m;
+done_testing();
commit cc9562317aa87d0b3d31b0cdbebed1de9795cd3e
Author: Kevin Falcone <falcone at bestpractical.com>
Date: Wed Jan 23 15:36:34 2013 -0500
Check the id from the table and by loading the Object.
An optimization was added in a64a16d1c so that if you were trying to
find the "Custom Field Object" from a Ticket, it would shortcut and
return $ticket->Queue rather than loading $ticket->QueueObj->Id.
Unfortunately, $ticket->Queue is protected by ShowTicket while
$ticket->QueueObj->Id is protected by SeeQueue. It's not uncommon in RT
for a user to be granted SeeQueue and CreateTicket but not be given
ShowTicket (a dropbox queue where you create tickets but then don't see
them anymore).
In this setup on 4.0.9, any custom field values entered on
Ticket/Create.html will be silently discarded because $ticket->Queue
returns undef. This results in the Custom Field not being found and
AddCustomFieldValue not saving it.
This was revealed in the RTIR test suite which tests just such a
scenario using Constituencies (you can submit a ticket that you then
can't see because it belongs to a separate Constituency).
diff --git a/lib/RT/Record.pm b/lib/RT/Record.pm
index 8dcf4d1..0310475 100644
--- a/lib/RT/Record.pm
+++ b/lib/RT/Record.pm
@@ -1597,7 +1597,12 @@ sub CustomFieldLookupId {
$object = $object->$method;
}
- return $object->$final;
+ my $id = $object->$final;
+ unless (defined $id) {
+ my $method = "${final}Obj";
+ $id = $object->$method->Id;
+ }
+ return $id;
}
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list