[Rt-commit] rt branch, 4.6/select-queue-in-ticket-create, repushed

Aaron Trevena ast at bestpractical.com
Wed Jan 8 09:45:40 EST 2020


The branch 4.6/select-queue-in-ticket-create was deleted and repushed:
       was fc7e37a85f17a027f1f9b094ac8bcc1675224d08
       now fc3fd3d52262912dffecc3ee43e3df825745a416

1: e2530cd920 < -:  ------- Add Create Ticket link in Menu
2: eae4316bb1 < -:  ------- Add Test::HTML::Form for testing
3: fc7e37a85f ! 1: ab2ddf5db0 Select Queue in Ticket Create page
    @@ -3,7 +3,6 @@
         Select Queue in Ticket Create page
         
         Allow Queue to be selected in the create ticket page, using defaults from configuration if none provided
    -    Added new tests for creating tickets with custom fields and lifecycles, and with or without queue specified
         Existing urls for queue creation will still work, and previous ticket create button and modal are possible by over-riding template
         Auto-complete lookup will be used if configured in place of selectbox in ticket create page in same way as previous modal
     
    @@ -11,23 +10,14 @@
     --- a/lib/RT/Interface/Web/MenuBuilder.pm
     +++ b/lib/RT/Interface/Web/MenuBuilder.pm
     @@
    +         $widgets->child( create_article => raw_html => $HTML::Mason::Commands::m->scomp('/Articles/Elements/CreateArticleButton') );
    +     } else {
    +         $widgets->child( simple_search => raw_html => $HTML::Mason::Commands::m->scomp('SimpleSearch', Placeholder => loc('Search Tickets')) );
    +-        $widgets->child( create_ticket => raw_html => $HTML::Mason::Commands::m->scomp('CreateTicket', ButtonOnly => 1) );
    ++        $widgets->child( create_ticket => raw_html => $HTML::Mason::Commands::m->scomp('CreateTicket', ButtonOnly => 1, SkipQueueSelection => 1) );
    +     }
      
          my $home = $top->child( home => title => loc('Homepage'), path => '/' );
    -     $home->child( createticket => title => loc("Create Ticket"),
    --                  path => "/Ticket/CreateInQueue.html" );
    -+                  path => "/Ticket/Create.html" );
    - 
    -     unless ($HTML::Mason::Commands::session{'dashboards_in_menu'}) {
    -         my $dashboards_in_menu = $current_user->UserObj->Preferences(
    -@@
    - 
    - 
    -     if ( $queue_count > 1 ) {
    --        $top->child( new => title => loc('New ticket'), path => '/SelfService/CreateTicketInQueue.html' );
    -+        $top->child( new => title => loc('New ticket'), path => '/SelfService/CreateTicket.html' );
    -     } elsif ( $queue_id ) {
    -         $top->child( new => title => loc('New ticket'), path => '/SelfService/Create.html?Queue=' . $queue_id );
    -     }
     
     diff --git a/share/html/Elements/CreateTicket b/share/html/Elements/CreateTicket
     --- a/share/html/Elements/CreateTicket
    @@ -37,47 +27,48 @@
      % my $button_start = '<input type="submit" class="button btn btn-primary form-control" value="';
      % my $button_start_modal = '<input type="submit" class="button btn btn-primary form-control ticket-create-modal" value="';
     -% my $button_only_start_modal = '<input type="submit" class="btn btn-primary ticket-create-modal" value="';
    -+% my $button_only_start_modal = '<input type="submit" class="btn btn-primary ticket-create-modal" value="'; # not used, but left in place if users want later
     +% my $button_only_start = '<input type="submit" class="btn btn-primary" value="';
      % my $button_end = '" />';
     -% my $queue_selector = $m->scomp('/Elements/SelectNewTicketQueue', AutoSubmit => 1, SendTo => $SendTo, Placeholder => loc('Queue'), Hyperlink => $Hyperlink );
    - 
    --% if ($Hyperlink) {
    --<% $queue_selector |n %>
    --% }
    --% elsif ($ButtonOnly) {
    -+% if ($ButtonOnly) {
    - <div class="create-ticket-button">
    -+% if ($ShowModal) {
    - <&|/l_unsafe, $button_only_start_modal, $button_end &>[_1]Create new ticket[_2]</&>
    -+% } else {
    +-
    ++% my $queue_selector = '';
    ++% unless ($SkipQueueSelection) {
    ++%    $queue_selector = $m->scomp('/Elements/SelectNewTicketQueue', AutoSubmit => 1, SendTo => $SendTo, Placeholder => loc('Queue'), Hyperlink => $Hyperlink );
    ++% }
    + % if ($Hyperlink) {
    + <% $queue_selector |n %>
    + % }
    + % elsif ($ButtonOnly) {
    ++%   if ($SkipQueueSelection) {
    ++%       my $button_only_start = '<input type="submit" class="btn btn-primary" value="';
    ++<div class="create-wide">
     +<&|/l_unsafe, $button_only_start, $button_end &>[_1]Create new ticket[_2]</&>
    -+% }
    - </div>
    - % }
    - % else {
    -+%   my $queue_selector = $m->scomp('/Elements/SelectNewTicketQueue', AutoSubmit => 1, SendTo => $SendTo, Placeholder => loc('Queue'), Hyperlink => $Hyperlink );
    -+%   if ($Hyperlink) {
    -+<% $queue_selector |n %>
    ++</div>
    ++<div class="create-medium">
    ++<&|/l_unsafe, $button_only_start, $button_end &>[_1]Create[_2]</&>
    ++</div>
    ++<div class="create-narrow">
    ++<&|/l_unsafe, $button_only_start, $button_end &>[_1]+[_2]</&>
    ++</div>
     +%   }
     +%   else {
    ++% my $button_only_start_modal = '<input type="submit" class="btn btn-primary ticket-create-modal" value="';
      <div class="create-wide">
    - <&|/l_unsafe, $button_start, $button_end, $queue_selector &>[_1]New ticket in[_2] [_3]</&>
    + <&|/l_unsafe, $button_only_start_modal, $button_end &>[_1]Create new ticket[_2]</&>
      </div>
     @@
      <div class="create-narrow">
      <&|/l_unsafe, $button_start_modal, $button_end &>[_1]+[_2]</&>
      </div>
    -+%   }
    ++%    }
      % }
    - 
    - % $m->callback(CallbackName => 'BeforeFormEnd');
    + % else {
    + <div class="create-wide">
     @@
      $IncludeExplanation => 0
      $Hyperlink => undef
      $ButtonOnly => undef
    -+$ShowModal => 0
    - $FormName => 'CreateTicketInQueue'
    ++$SkipQueueSelection => undef
      </%ARGS>
     
     diff --git a/share/html/Elements/SelectObject b/share/html/Elements/SelectObject
    @@ -140,8 +131,8 @@
      </%args>
      <%init>
     -$ARGS{OnChange} = "jQuery(this).closest('form').submit();" if $AutoSubmit;
    -+$ARGS{OnChange} = "jQuery('#queue-changed-reload').val(1);jQuery('#queue-changed-reload').val(jQuery(this).children('option:selected').val());";
    -+$ARGS{OnChange} .= "jQuery(this).closest('form').submit();" if $AutoSubmit;
    ++$ARGS{OnChange} = q{jQuery('#queue-changed-reload').val(1);};
    ++$ARGS{OnChange} .= "jQuery(this).closest('form').submit();" if ($AutoSubmit);
      </%init>
     
     diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
    @@ -156,6 +147,14 @@
      <& /Elements/ListActions, actions => \@results &>
      
      <form action="<% RT->Config->Get('WebPath') %>/Ticket/Create.html" method="post" enctype="multipart/form-data" name="TicketCreate">
    +@@
    + 
    + <div id="ticket-create-metadata">
    +     <&| /Widgets/TitleBox, title => loc("Basics"), class=>'ticket-info-basics' &>
    +-    <input type="hidden" class="hidden" name="Queue" value="<% $QueueObj->Id %>" />
    +     <div>
    +     <& /Ticket/Elements/EditBasics,
    +         InTable => 1,
     @@
              defaults => \%ARGS,
              fields  => [
    @@ -168,7 +167,7 @@
     +                    Wrap        => 1,
     +                    SelectedId  => $Queue,
     +                    AutoSubmit  => 1,
    -+                    Name        => 'SelectedQueue'
    ++                    Name        => 'Queue'
                      },
                  },
                  {   name => 'Status',
    @@ -249,131 +248,3 @@
              $RT::Logger->crit("After display call; error is $@");
              $m->abort();
     
    -diff --git a/share/static/js/util.js b/share/static/js/util.js
    ---- a/share/static/js/util.js
    -+++ b/share/static/js/util.js
    -@@
    -         return false;
    -     });
    - 
    --    jQuery("#home-createticket,.ticket-create-modal").click(function(ev){
    -+    jQuery(".ticket-create-modal").click(function(ev){
    -         ev.preventDefault();
    -         jQuery.get(
    -             RT.Config.WebHomePath + "/Helpers/CreateInQueue",
    -
    -diff --git a/t/web/csrf.t b/t/web/csrf.t
    ---- a/t/web/csrf.t
    -+++ b/t/web/csrf.t
    -@@
    - $m->title_is('Possible cross-site request forgery');
    - 
    - # Sending a wrong CSRF is just a normal request.  We'll make a request
    --# with just an invalid token, which means no Queue=, which means
    --# Create.html errors out.
    -+# with just an invalid token, which means no Queue=x so default queue used
    - my $link = $m->find_link(text_regex => qr{resume your request});
    - (my $broken_url = $link->url) =~ s/(CSRF_Token)=\w+/$1=crud/;
    - $m->get($broken_url);
    --$m->content_like(qr/Queue\s+could not be loaded/);
    --$m->title_is('RT Error');
    --$m->warning_like(qr/Queue\s+could not be loaded/);
    -+$m->content_like(qr/Create\sa\snew\sticket\sin\sGeneral/);
    -+$m->title_is('Create a new ticket in General');
    - 
    - # The token doesn't work for other pages, or other arguments to the same page.
    - $m->add_header(Referer => undef);
    -
    -diff --git a/t/web/group_summary.t b/t/web/group_summary.t
    ---- a/t/web/group_summary.t
    -+++ b/t/web/group_summary.t
    -@@
    - 
    -     $m->submit_form_ok({ form_name => 'CreateTicket' },
    -                          "Submitted form to create ticket with group $group_id as Cc" );
    --    like( $m->uri, qr{/Ticket/Create\.html\?AddGroupCc=$group_id&Queue=1$},
    -+    like( $m->uri, qr{/Ticket/Create\.html\?AddGroupCc=$group_id&queue-changed-reload=0&Queue=1$},
    -           "now on /Ticket/Create\.html with param AddGroupCc=$group_id" );
    - 
    -     my $subject = 'test AddGroupCc ticket';
    -
    -diff --git a/t/web/ticket_create.t b/t/web/ticket_create.t
    -new file mode 100644
    ---- /dev/null
    -+++ b/t/web/ticket_create.t
    -@@
    -+use strict;
    -+use warnings;
    -+use Test::HTML::Form;
    -+
    -+use RT::Test tests => undef;
    -+use RT::Lifecycle;
    -+
    -+# populate lifecycles
    -+my $lifecycles = RT->Config->Get('Lifecycles');
    -+RT->Config->Set( Lifecycles => %{$lifecycles},
    -+                 foo => {
    -+                     initial  => ['initial'],
    -+                     active   => ['open'],
    -+                     inactive => ['resolved'],
    -+                 }
    -+);
    -+RT::Lifecycle->FillCache();
    -+
    -+# populate test queues and test user
    -+my $queue1 = RT::Test->load_or_create_queue( Name => 'General' );
    -+my $queue2 = RT::Test->load_or_create_queue( Name => 'Specific' );
    -+my $queue3 = RT::Test->load_or_create_queue( Name => 'Bugs' );
    -+my $user = RT::Test->load_or_create_user(
    -+    Name     => 'user',
    -+    Password => 'password',
    -+);
    -+
    -+my ( $baseurl, $m ) = RT::Test->started_ok;
    -+
    -+#set up lifecycle for one of the queues
    -+ok $m->login;
    -+$m->get_ok( '/Admin/Queues/Modify.html?id='.$queue1->id );
    -+$m->form_name('ModifyQueue');
    -+$m->submit_form( fields => { Lifecycle => 'foo' } );
    -+
    -+# set up custom field
    -+my $cf = RT::Test->load_or_create_custom_field( Name => 'test_cf', Queue => $queue1->Name, Type => 'FreeformSingle' );
    -+my $cf_form_id = 'Object-RT::Ticket--CustomField-'.$cf->Id.'-Value';
    -+my $cf_test_value = "some string for test_cf $$";
    -+
    -+# load initial ticket create page without specifying queue
    -+# should have default queue with no custom fields
    -+note('load create ticket page with defaults');
    -+$m->get_ok( '/Ticket/Create.html', 'go to ticket create page with no queue id' );
    -+no_tag($m,'input',{ name => $cf_form_id }, 'no custom field');
    -+form_field_value_matches($m, 'Queue', $queue3->id, 'TicketCreate', 'queue id set in hidden field');
    -+form_select_field_matches($m, { field_name => 'SelectedQueue', selected => $queue3->id,
    -+                                form_name => 'TicketCreate'}, 'Queue selection dropdown populated');
    -+form_select_field_matches($m, { field_name => 'Status', selected => "new",
    -+                                form_name => 'TicketCreate'}, 'Status selection dropdown populated');
    -+
    -+# test ticket creation on reload from selected queue, specifying queue with custom fields
    -+note('reload ticket create page with selected queue');
    -+$m->get_ok( '/Ticket/Create.html?queue-changed-reload=1&Queue='.$queue1->id.'&SelectedQueue=' . $queue1->id,
    -+            'go to ticket create page' );
    -+
    -+form_select_field_matches($m, { field_name => 'SelectedQueue', selected => $queue1->id,
    -+                                form_name => 'TicketCreate'}, 'Queue selection dropdown populated and pre-selected');
    -+form_field_value_matches($m, 'Queue', $queue1->id, 'TicketCreate', 'queue id set in hidden field');
    -+form_field_value_matches($m, $cf_form_id, "", 'TicketCreate', 'custom field is present');
    -+
    -+my $form = $m->form_name('TicketCreate');
    -+my $status_input = $form->find_input('Status');
    -+is_deeply( [ $status_input->possible_values ], [ 'initial', 'open', 'resolved' ], 'status selectbox shows custom lifecycle for queue' );
    -+
    -+note('submit populated form');
    -+$m->submit_form( fields => { Subject => 'ticket foo', 'Queue' => $queue1->id, $cf_form_id => $cf_test_value } );
    -+$m->text_contains('test_cf', 'custom field populated in display');
    -+$m->text_contains($cf_test_value, 'custom field populated in display');
    -+
    -+my $ticket = RT::Test->last_ticket;
    -+ok( $ticket->id, 'ticket is created' );
    -+is($ticket->QueueObj->id, $queue1->id, 'Ticket created with correct queue');
    -+
    -+done_testing();
-:  ------- > 2: fc3fd3d522 Select Queue in Ticket Create page Tests and test dependancies



More information about the rt-commit mailing list