X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FSavedSearches.pm;h=0b5ac9787030eed5224eeae942b50c983d31793e;hp=262bfa8d0590633ea602c6b2c7db8ce5bf095082;hb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;hpb=a513c0bef534d05f03c1242831b6f3be19b97dae diff --git a/rt/lib/RT/SavedSearches.pm b/rt/lib/RT/SavedSearches.pm index 262bfa8d0..0b5ac9787 100644 --- a/rt/lib/RT/SavedSearches.pm +++ b/rt/lib/RT/SavedSearches.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -22,7 +22,9 @@ # # 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., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/copyleft/gpl.html. # # # CONTRIBUTION SUBMISSION POLICY: @@ -43,7 +45,6 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} - =head1 NAME RT::SavedSearches - a pseudo-collection for SavedSearch objects. @@ -162,40 +163,23 @@ sub _GetObject { my $self = shift; my $privacy = shift; - my ($obj_type, $obj_id) = split(/\-/, $privacy); - unless ($obj_type eq 'RT::User' || $obj_type eq 'RT::Group') { - $RT::Logger->error("Tried to load a search belonging to an $obj_type, which is neither a user nor a group"); - return undef; - } + return RT::SavedSearch->new($self->CurrentUser)->_GetObject($privacy); +} - my $object; - eval " - require $obj_type; - \$object = $obj_type->new(\$self->CurrentUser); - \$object->Load($obj_id); - "; - unless (ref($object) eq $obj_type) { - $RT::Logger->error("Could not load object of type $obj_type with ID $obj_id"); - return undef; - } - - # Do not allow the loading of a user object other than the current - # user, or of a group object of which the current user is not a member. - - if ($obj_type eq 'RT::User' - && $object->Id != $self->CurrentUser->UserObj->Id()) { - $RT::Logger->error('Requested user ' . $object->Id - . 'is not current user'); - return undef; - } - if ($obj_type eq 'RT::Group' - && !$object->HasMemberRecursively($self->CurrentUser->PrincipalObj)) { - $RT::Logger->error('Current user does not belong to requested group ' - . $object->Id); - return undef; - } +### Internal methods + +# _PrivacyObjects: returns a list of objects that can be used to load saved searches from. + +sub _PrivacyObjects { + my $self = shift; + my $CurrentUser = $self->CurrentUser; + + my $groups = RT::Groups->new($CurrentUser); + $groups->LimitToUserDefinedGroups; + $groups->WithMember( PrincipalId => $CurrentUser->Id, + Recursively => 1 ); - return $object; + return ( $CurrentUser->UserObj, @{ $groups->ItemsArrayRef() } ); } eval "require RT::SavedSearches_Vendor";