X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FSavedSearch.pm;h=4dd869bf2492ae48ae5e98545d3aded0431d10c2;hp=518274044d163080380c41e0b45cfa631dd5a372;hb=919e930aa9279b3c5cd12b593889cd6de79d67bf;hpb=63a268637b2d51a8766412617724b9436439deb6 diff --git a/rt/lib/RT/SavedSearch.pm b/rt/lib/RT/SavedSearch.pm index 518274044..4dd869bf2 100644 --- a/rt/lib/RT/SavedSearch.pm +++ b/rt/lib/RT/SavedSearch.pm @@ -1,40 +1,40 @@ # BEGIN BPS TAGGED BLOCK {{{ -# +# # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -# -# +# +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +# +# # (Except where explicitly superseded by other copyright notices) -# -# +# +# # LICENSE: -# +# # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. -# +# # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 or visit their web page on the internet at # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -# -# +# +# # CONTRIBUTION SUBMISSION POLICY: -# +# # (The following paragraph is not intended to limit the rights granted # to you to modify and distribute this software under the terms of # the GNU General Public License and is only of importance to you if # you choose to contribute your changes and enhancements to the # community by submitting them to Best Practical Solutions, LLC.) -# +# # By intentionally submitting any modifications, corrections or # derivatives to this work, or any other work intended for use with # Request Tracker, to Best Practical Solutions, LLC, you confirm that @@ -43,7 +43,7 @@ # royalty-free, perpetual, license to use, copy, create derivative # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. -# +# # END BPS TAGGED BLOCK }}} =head1 NAME @@ -66,6 +66,7 @@ package RT::SavedSearch; use strict; use warnings; + use base qw/RT::SharedSetting/; =head1 METHODS @@ -76,7 +77,7 @@ An object of this class is called "search" =cut -sub ObjectName { "search" } +sub ObjectName { "search" } # loc sub PostLoad { my $self = shift; @@ -114,6 +115,28 @@ sub UpdateAttribute { return ($status, $msg); } +=head2 RT::SavedSearch->EscapeDescription STRING + +This is a class method because system-level saved searches aren't true +C objects but direct C objects. + +Returns C with all square brackets except those in C<[_1]> escaped, +ready for passing as the first argument to C. + +=cut + +sub EscapeDescription { + my $self = shift; + my $desc = shift; + if ($desc) { + # We only use [_1] in saved search descriptions, so let's escape other "[" + # and "]" unless they are escaped already. + $desc =~ s/(?{'Type'}; } -eval "require RT::SavedSearch_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Vendor.pm}); -eval "require RT::SavedSearch_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Local.pm}); +### Internal methods + +# _PrivacyObjects: returns a list of objects that can be used to load, create, +# etc. saved searches from. You probably want to use the wrapper methods like +# ObjectsForLoading, ObjectsForCreating, etc. + +sub _PrivacyObjects { + my $self = shift; + my ($has_attr) = @_; + my $CurrentUser = $self->CurrentUser; + + my $groups = RT::Groups->new($CurrentUser); + $groups->LimitToUserDefinedGroups; + $groups->WithCurrentUser; + if ($has_attr) { + my $attrs = $groups->Join( + ALIAS1 => 'main', + FIELD1 => 'id', + TABLE2 => 'Attributes', + FIELD2 => 'ObjectId', + ); + $groups->Limit( + ALIAS => $attrs, + FIELD => 'ObjectType', + VALUE => 'RT::Group', + ); + $groups->Limit( + ALIAS => $attrs, + FIELD => 'Name', + VALUE => $has_attr, + ); + } + + return ( $CurrentUser->UserObj, @{ $groups->ItemsArrayRef() } ); +} + +sub ObjectsForLoading { + my $self = shift; + return grep { $self->CurrentUserCanSee($_) } $self->_PrivacyObjects( "SavedSearch" ); +} + +RT::Base->_ImportOverlays(); 1;