X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FSavedSearch.pm;h=f7695d6f04aac83351ce0a6a965876a863a8a061;hb=a6fe07e49e3fc12169e801b1ed6874c3a5bd8500;hp=4ad3202570f745859f434b689c91e72bbe77849c;hpb=fc6209f398899f0211cfcedeb81a3cd65e04a941;p=freeside.git diff --git a/rt/lib/RT/SavedSearch.pm b/rt/lib/RT/SavedSearch.pm index 4ad320257..f7695d6f0 100644 --- a/rt/lib/RT/SavedSearch.pm +++ b/rt/lib/RT/SavedSearch.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -66,6 +66,7 @@ package RT::SavedSearch; use strict; use warnings; + use base qw/RT::SharedSetting/; =head1 METHODS @@ -126,9 +127,48 @@ sub Type { return $self->{'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->WithMember( PrincipalId => $CurrentUser->Id, + Recursively => 1 ); + 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;