X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=rt%2Fshare%2Fhtml%2FSearch%2FElements%2FEditSearches;h=e7de62bd0abd94794d4e268a48963d9130e208c0;hb=44dd00a3ff974a17999e86e64488e996edc71e3c;hp=62871fd5f5b00311df99fe06b618fed55bc0b13f;hpb=63a268637b2d51a8766412617724b9436439deb6;p=freeside.git diff --git a/rt/share/html/Search/Elements/EditSearches b/rt/share/html/Search/Elements/EditSearches index 62871fd5f..e7de62bd0 100644 --- a/rt/share/html/Search/Elements/EditSearches +++ b/rt/share/html/Search/Elements/EditSearches @@ -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-2019 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,16 +43,17 @@ %# 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 }}} +
<&| /Widgets/TitleBox, title => loc($Title)&> %# Hide all the save functionality if the user shouldn't see it. % if ( $can_modify ) { -<&|/l&>Privacy: +<&|/l&>Privacy: <& SelectSearchObject, Name => 'SavedSearchOwner', Objects => \@Objects, Object => ( $Object && $Object->id ) ? $Object->Object : '' &>
-<&|/l&>Description: +<&|/l&>Description: % if ($Id ne 'new') { @@ -66,20 +67,20 @@ % } % } -% if ( $Object && $Object->Id ) { - -% } else { - +% if ( $Object && $Object->Id && $Object->CurrentUserHasRight('update') ) { + +% } elsif ( !$Object ) { + %} % }

-<&|/l&>Load saved search: +<&|/l&>Load saved search: <& SelectSearchesForObjects, Name => 'SavedSearchLoad', Objects => \@Objects, SearchType => $Type &> - + - +
<%INIT> return unless $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', @@ -91,8 +92,8 @@ my $can_modify = $session{'CurrentUser'}->HasRight( Object => $RT::System, ); -use RT::SavedSearches; -my @Objects = RT::SavedSearches->new($session{CurrentUser})->_PrivacyObjects; +use RT::SavedSearch; +my @Objects = RT::SavedSearch->new($session{CurrentUser})->_PrivacyObjects; push @Objects, RT::System->new( $session{'CurrentUser'} ) if $session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser' ); @@ -145,7 +146,7 @@ $SavedSearch => {} $SavedSearch->{'Id'} = ( $ARGS{Type} && $ARGS{Type} eq 'Chart' ? $ARGS{'SavedChartSearchId'} : $ARGS{'SavedSearchId'} ) || 'new'; -$SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'} || undef; +$SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'} || ''; $SavedSearch->{'Privacy'} = $ARGS{'SavedSearchOwner'} || undef; my @results; @@ -157,7 +158,8 @@ if ( $ARGS{'SavedSearchRevert'} ) { if ( $ARGS{'SavedSearchLoad'} ) { my ($container, $id ) = _parse_saved_search ($ARGS{'SavedSearchLoad'}); if ( $container ) { - my $search = $container->Attributes->WithId( $id ); + my $search = RT::Attribute->new( $session{'CurrentUser'} ); + $search->Load( $id ); $SavedSearch->{'Id'} = $ARGS{'SavedSearchLoad'}; $SavedSearch->{'Object'} = $search; $SavedSearch->{'Description'} = $search->Description; @@ -180,7 +182,11 @@ elsif ( $ARGS{'SavedSearchDelete'} ) { my ($container, $id) = _parse_saved_search( $SavedSearch->{'Id'} ); if ( $container && $container->id ) { # We have the object the entry is an attribute on; delete the entry... - $container->Attributes->DeleteEntry( Name => 'SavedSearch', id => $id ); + my ($val, $msg) = $container->Attributes->DeleteEntry( Name => 'SavedSearch', id => $id ); + unless ( $val ) { + push @results, $msg; + return @results; + } } $SavedSearch->{'Id'} = 'new'; $SavedSearch->{'Object'} = undef; @@ -189,7 +195,8 @@ elsif ( $ARGS{'SavedSearchDelete'} ) { } elsif ( $ARGS{'SavedSearchCopy'} ) { my ($container, $id ) = _parse_saved_search( $ARGS{'SavedSearchId'} ); - $SavedSearch->{'Object'} = $container->Attributes->WithId( $id ); + $SavedSearch->{'Object'} = RT::Attribute->new( $session{'CurrentUser'} ); + $SavedSearch->{'Object'}->Load( $id ); if ( $ARGS{'SavedSearchDescription'} && $ARGS{'SavedSearchDescription'} ne $SavedSearch->{'Object'}->Description ) { $SavedSearch->{'Description'} = $ARGS{'SavedSearchDescription'}; } else { @@ -203,7 +210,8 @@ if ( $SavedSearch->{'Id'} && $SavedSearch->{'Id'} ne 'new' && !$SavedSearch->{'Object'} ) { my ($container, $id ) = _parse_saved_search( $ARGS{'SavedSearchId'} ); - $SavedSearch->{'Object'} = $container->Attributes->WithId( $id ); + $SavedSearch->{'Object'} = RT::Attribute->new( $session{'CurrentUser'} ); + $SavedSearch->{'Object'}->Load( $id ); $SavedSearch->{'Description'} ||= $SavedSearch->{'Object'}->Description; } @@ -250,20 +258,42 @@ if ( $obj && $obj->id ) { if ( $new_obj_type && $new_obj_id ) { my ($val, $msg); - if ( $new_obj_type ne $obj_type ) { - ($val, $msg ) = $obj->SetObjectType($new_obj_type); - push @results, loc ('Unable to set privacy object: [_1]', $msg) unless ( $val ); + + # we need to check right before we change any of ObjectType and ObjectId, + # or it will fail the 2nd change if we use SetObjectType and + # SetObjectId sequentially + + if ( $obj->CurrentUserHasRight('update') ) { + if ( $new_obj_type ne $obj_type ) { + ( $val, $msg ) = $obj->__Set( + Field => 'ObjectType', + Value => $new_obj_type, + ); + push @results, loc( 'Unable to set privacy object: [_1]', $msg ) + unless ($val); + } + if ( $new_obj_id != $obj_id ) { + ( $val, $msg ) = $obj->__Set( + Field => 'ObjectId', + Value => $new_obj_id, + ); + push @results, loc( 'Unable to set privacy id: [_1]', $msg ) + unless ($val); + } } - if ( $new_obj_id != $obj_id ) { - ($val, $msg) = $obj->SetObjectId($new_obj_id); - push @results, loc ('Unable to set privacy id: [_1]', $msg) unless ( $val ); + else { + # two loc are just for convenience so we don't need to + # write an extra i18n translation item + push @results, + loc( 'Unable to set privacy object or id: [_1]', + loc('Permission Denied') ) } } else { push @results, loc('Unable to determine object type or id'); } push @results, loc('Updated saved search "[_1]"', $desc); } -elsif ( $id eq 'new' ) { +elsif ( $id eq 'new' and defined $desc and length $desc ) { my $saved_search = RT::SavedSearch->new( $session{'CurrentUser'} ); my ($status, $msg) = $saved_search->Save( Privacy => $privacy, @@ -273,8 +303,8 @@ elsif ( $id eq 'new' ) { ); if ( $status ) { - $SavedSearch->{'Object'} = - $session{'CurrentUser'}->UserObj->Attributes->WithId( $saved_search->Id ); + $SavedSearch->{'Object'} = RT::Attribute->new( $session{'CurrentUser'} ); + $SavedSearch->{'Object'}->Load( $saved_search->Id ); # Build new SearchId $SavedSearch->{'Id'} = ref( $session{'CurrentUser'}->UserObj ) . '-' @@ -286,6 +316,9 @@ elsif ( $id eq 'new' ) { push @results, loc("Can't find a saved search to work with").': '.loc($msg); } } +elsif ( $id eq 'new' ) { + push @results, loc("Can't save a search without a Description"); +} else { push @results, loc("Can't save this search"); }