[Rt-commit] rt branch 5.0/search-url-shortener updated. rt-5.0.2-22-g799b4fafaa

BPS Git Server git at git.bestpractical.com
Tue Oct 5 17:46:08 UTC 2021


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".

The branch, 5.0/search-url-shortener has been updated
       via  799b4fafaa2587290f84134780a56232570afb74 (commit)
       via  dc2b0f155a27c6da27921d4afc1b75ec26dcbc3c (commit)
       via  2d5d80606b9043d39a4101a20c5f349336fce524 (commit)
      from  424e24497b9f128f56eea10dc5cf37a7cf43bc3f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 799b4fafaa2587290f84134780a56232570afb74
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Wed Oct 6 01:43:07 2021 +0800

    Add tests for saved search shortener

diff --git a/t/web/search_shortener.t b/t/web/search_shortener.t
index 1851e936be..306570e577 100644
--- a/t/web/search_shortener.t
+++ b/t/web/search_shortener.t
@@ -64,4 +64,46 @@ $m->form_id('shredder-search-form');
 is( $m->value('Tickets:query'), 'id < 10', 'Tickets:query in shredder' );
 is( $m->value('Tickets:limit'), 50,        'Tickets:limit in shredder' );
 
+
+$m->get_ok('/Search/Build.html?Query=Queue="General"');
+$m->submit_form_ok(
+    {   form_name => 'BuildQuery',
+        fields    => { SavedSearchDescription => 'my saved search' },
+        button    => 'SavedSearchSave',
+    },
+    'Created saved search'
+);
+$m->follow_link_ok( { text => 'View', url => '/Search/Build.html?sc=34c1e4ea' } );
+$m->form_name('BuildQuery');
+is( $m->value('SavedSearchDescription'), 'my saved search', 'Loaded saved search' );
+
+$m->follow_link_ok( { text => 'Chart', url_regex => qr{/Search/Chart\.html\?.*\bsc=95a2992d} } );
+$m->text_contains(q{Queue = 'General'});
+
+$m->submit_form_ok(
+    {   form_number => 3,
+        fields      => { Width => 800, Height => 400 },
+        button      => 'Update',
+    },
+    'Updaetd chart search'
+);
+$m->form_number(3);
+is( $m->value('Width'),  800, 'Width is updated' );
+is( $m->value('Height'), 400, 'Height is updated' );
+
+$m->submit_form_ok(
+    {   form_name => 'SaveSearch',
+        fields    => { SavedSearchDescription => 'my chart saved search' },
+        button    => 'SavedSearchSave',
+    },
+    'Created chart saved search'
+);
+$m->follow_link_ok( { text => 'View', url => '/Search/Chart.html?sc=ac896925' } );
+$m->form_name('SaveSearch');
+is( $m->value('SavedSearchDescription'), 'my chart saved search', 'Loaded chart saved search' );
+
+$m->form_number(3);
+is( $m->value('Width'),  800, 'Width is set' );
+is( $m->value('Height'), 400, 'Height is set' );
+
 done_testing;

commit dc2b0f155a27c6da27921d4afc1b75ec26dcbc3c
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Tue Oct 5 23:10:47 2021 +0800

    Add shortener support to saved searches

diff --git a/lib/RT/Attribute.pm b/lib/RT/Attribute.pm
index 43e75d9123..62d72a0185 100644
--- a/lib/RT/Attribute.pm
+++ b/lib/RT/Attribute.pm
@@ -457,6 +457,17 @@ sub Delete {
                 RT->Logger->error( "Couldn't delete link #" . $link->id . ": $msg" );
             }
         }
+
+        if ( $name eq 'SavedSearch' ) {
+            my $shortener = RT::Shortener->new( $self->CurrentUser );
+            $shortener->LoadByCols( Content => 'SavedSearchId=' . $self->Id );
+            if ( $shortener->Id ) {
+                my ( $ret, $msg ) = $shortener->Delete;
+                if ( !$ret ) {
+                    RT->Logger->error( "Couldn't delete shortener #" . $shortener->Id . ": $msg" );
+                }
+            }
+        }
     }
 
     return @return;
diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index 4ad3a12acc..353d935638 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -2025,6 +2025,33 @@ sub ExpandShortenerCode {
             my $content = $shortener->DecodedContent;
             $shortener->_SetLastAccessed;
 
+            if ( my $search_id = delete $content->{SavedSearchId} ) {
+                my $search = RT::SavedSearch->new( $HTML::Mason::Commands::session{CurrentUser} );
+                my ( $ret, $msg ) = $search->LoadById($search_id);
+                if ($ret) {
+                    my %search_content = %{ $search->{Attribute}->Content || {} };
+                    my $type           = delete $search_content{SearchType} || 'Ticket';
+                    my $id             = join '-',
+                        $search->_build_privacy( $search->{Attribute}->ObjectType, $search->{Attribute}->ObjectId ),
+                        'SavedSearch', $search_id;
+                    if ( $type eq 'Chart' ) {
+                        $content->{SavedChartSearchId} = $id;
+                    }
+                    else {
+                        $content->{SavedSearchId} = $id;
+                        $content->{Class}         = "RT::${type}s";
+                    }
+
+                    $content->{SearchFields}    = [ keys %search_content ];
+                    $content->{SavedSearchLoad} = $content->{SavedSearchId} || $content->{SavedChartSearchId};
+                }
+                else {
+                    RT->Logger->warning("Could not load saved search $sc: $msg");
+                    push @{ $HTML::Mason::Commands::session{Actions}{''} },
+                        HTML::Mason::Commands::loc( "Could not load saved search [_1]: [_2]", $sc, $msg );
+                }
+            }
+
             # Shredder uses different parameters from search pages
             if ( $HTML::Mason::Commands::r->path_info =~ m{^/+Admin/Tools/Shredder} ) {
                 if ( $content->{Class} eq 'RT::Tickets' ) {
diff --git a/lib/RT/SavedSearch.pm b/lib/RT/SavedSearch.pm
index bbd92f8990..a11b87ab67 100644
--- a/lib/RT/SavedSearch.pm
+++ b/lib/RT/SavedSearch.pm
@@ -222,6 +222,20 @@ sub ObjectsForCreating {
     return @create_objects;
 }
 
+=head2 ShortenerObj
+
+Return the corresponding shortener object
+
+=cut
+
+sub ShortenerObj {
+    my $self = shift;
+    require RT::Shortener;
+    my $shortener = RT::Shortener->new( $self->CurrentUser );
+    $shortener->LoadOrCreate( Content => 'SavedSearchId=' . $self->Id, Permanent => 1 );
+    return $shortener;
+}
+
 RT::Base->_ImportOverlays();
 
 1;
diff --git a/share/html/Helpers/Permalink b/share/html/Helpers/Permalink
index 3ce59e2946..c1aebc2bcc 100644
--- a/share/html/Helpers/Permalink
+++ b/share/html/Helpers/Permalink
@@ -54,6 +54,12 @@
       </a>
     </div>
     <div class="modal-body text-center">
+%   if ( $shortener->Id && $shortener->DecodedContent->{SavedSearchId} ) {
+      <p class="description mt-1 ml-3">
+        <&|/l&>If you share this link, other users will need rights to load your saved search. Note that My saved searches are visible only to you.</&>
+      </p>
+%   }
+
       <div class="my-2">
         <a href="<% $URL %>"><% $URL %></a><br>
       </div>
diff --git a/share/html/Search/Elements/EditSearches b/share/html/Search/Elements/EditSearches
index b7d71f2db3..6206efdf14 100644
--- a/share/html/Search/Elements/EditSearches
+++ b/share/html/Search/Elements/EditSearches
@@ -89,7 +89,22 @@
   </div>
 % }
 
-% if ( $Object && $Object->Id && $Object->DependedOnBy->Count ) {
+% if ( $Object && $Object->Id ) {
+
+% if ( RT->Config->Get( 'EnableURLShortener', $session{CurrentUser} ) ) {
+% my $saved_search = RT::SavedSearch->new( $session{CurrentUser} );
+% $saved_search->LoadById($Object->Id);
+  <div class="form-row">
+    <div class="label col-4"><&|/l&>Permlink</&>:</div>
+    <div class="col-8">
+      <span class="form-control current-value">
+        <a href="<% $m->request_path %>?sc=<% $saved_search->ShortenerObj->Code %>" class="permalink" data-toggle="tooltip" data-original-title="<% loc('Permalink to this saved search') %>" data-code="<% $saved_search->ShortenerObj->Code %>" data-url="<% $m->request_path %>?sc=<% $saved_search->ShortenerObj->Code %>"><% loc('View') %></a>
+      </span>
+    </div>
+  </div>
+% }
+
+% if ( $Object->DependedOnBy->Count ) {
   <div class="form-row">
     <div class="label col-4"><&|/l&>Depended on by</&>:</div>
     <div class="col-8">
@@ -98,6 +113,8 @@
       </span>
     </div>
   </div>
+% }
+
 % }
 
   <hr />

commit 2d5d80606b9043d39a4101a20c5f349336fce524
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Tue Oct 5 22:59:26 2021 +0800

    Do not set SavedSearchId to chart search id
    
    SavedSearchLoad param is used in both chart and non-chart saved
    searches, so it's possible that $search_id represents a chart saved
    search. On the other hand, SavedSearchId param is only for non-chart
    saved searches, to show them on query builder page.
    
    This commit fixes the issue that chart saved search could show up on
    query builder page. To reproduce it, you can load a saved chart search
    on chart page and then go to query builder page via "Edit Search" page
    menu.

diff --git a/lib/RT/Interface/Web/MenuBuilder.pm b/lib/RT/Interface/Web/MenuBuilder.pm
index 2e9806c2d4..f66b57462d 100644
--- a/lib/RT/Interface/Web/MenuBuilder.pm
+++ b/lib/RT/Interface/Web/MenuBuilder.pm
@@ -600,13 +600,13 @@ sub BuildMainNav {
             $HTML::Mason::Commands::DECODED_ARGS->{ObjectType} || ( $class eq 'RT::Transactions' ? 'RT::Ticket' : () );
         my $current_search = $HTML::Mason::Commands::session{$hash_name} || {};
         my $search_id = $HTML::Mason::Commands::DECODED_ARGS->{'SavedSearchLoad'} || $HTML::Mason::Commands::DECODED_ARGS->{'SavedSearchId'} || $current_search->{'SearchId'} || '';
-        my $chart_id = $HTML::Mason::Commands::DECODED_ARGS->{'SavedChartSearchId'} || $current_search->{SavedChartSearchId};
+        my $chart_id = $HTML::Mason::Commands::DECODED_ARGS->{'SavedChartSearchId'} || $current_search->{SavedChartSearchId} || '';
 
         $has_query = 1 if ( $HTML::Mason::Commands::DECODED_ARGS->{'Query'} or $current_search->{'Query'} );
 
         my %query_args;
         my %fallback_query_args = (
-            SavedSearchId => ( $search_id eq 'new' ) ? undef : $search_id,
+            SavedSearchId => ( $search_id eq 'new' || $search_id eq $chart_id ) ? undef : $search_id,
             SavedChartSearchId => $chart_id,
             (
                 map {

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

Summary of changes:
 lib/RT/Attribute.pm                     | 11 +++++++++
 lib/RT/Interface/Web.pm                 | 27 +++++++++++++++++++++
 lib/RT/Interface/Web/MenuBuilder.pm     |  4 ++--
 lib/RT/SavedSearch.pm                   | 14 +++++++++++
 share/html/Helpers/Permalink            |  6 +++++
 share/html/Search/Elements/EditSearches | 19 ++++++++++++++-
 t/web/search_shortener.t                | 42 +++++++++++++++++++++++++++++++++
 7 files changed, 120 insertions(+), 3 deletions(-)


hooks/post-receive
-- 
rt


More information about the rt-commit mailing list