X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FSavedSearches.pm;h=0848fc882c10aa916c75a212967ed35d201cf2a1;hb=29c296af24c09dc904f6fad51edbf3c5f2f085d3;hp=262bfa8d0590633ea602c6b2c7db8ce5bf095082;hpb=5e05724a635a22776f1b973f5d7e77989da4e048;p=freeside.git diff --git a/rt/lib/RT/SavedSearches.pm b/rt/lib/RT/SavedSearches.pm index 262bfa8d0..0848fc882 100644 --- a/rt/lib/RT/SavedSearches.pm +++ b/rt/lib/RT/SavedSearches.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 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/licenses/old-licenses/gpl-2.0.html. # # # CONTRIBUTION SUBMISSION POLICY: @@ -60,24 +62,15 @@ =head1 METHODS -=begin testing - -use_ok(RT::SavedSearches); - -# The real tests are in lib/t/20savedsearch.t - -=end testing =cut package RT::SavedSearches; -use RT::Base; use RT::SavedSearch; use strict; -use vars qw/@ISA/; -@ISA = qw/RT::Base/; +use base 'RT::Base'; sub new { my $proto = shift; @@ -162,40 +155,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";