X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FObjectCustomField_Overlay.pm;fp=rt%2Flib%2FRT%2FObjectCustomField_Overlay.pm;h=e95161b45abf33805520d23bdd247e48d0b2a3db;hb=b4b0c7e72d7eaee2fbfc7022022c9698323203dd;hp=c4eb4371c0f4c9396129b14a9de171466ff7dce6;hpb=2dfda73eeb3eae2d4f894099754794ef07d060dd;p=freeside.git diff --git a/rt/lib/RT/ObjectCustomField_Overlay.pm b/rt/lib/RT/ObjectCustomField_Overlay.pm index c4eb4371c..e95161b45 100644 --- a/rt/lib/RT/ObjectCustomField_Overlay.pm +++ b/rt/lib/RT/ObjectCustomField_Overlay.pm @@ -1,8 +1,8 @@ # BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: -# -# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +# +# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -45,33 +45,56 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} + package RT::ObjectCustomField; use strict; +use warnings; no warnings qw(redefine); sub Create { my $self = shift; - my %args = ( - CustomField => '0', - ObjectId => '0', - SortOrder => undef, - @_); + my %args = ( + CustomField => 0, + ObjectId => 0, + SortOrder => undef, + @_ + ); + + my $cf = $self->CustomFieldObj( $args{'CustomField'} ); + unless ( $cf->id ) { + $RT::Logger->error("Couldn't load '$args{'CustomField'}' custom field"); + return 0; + } - if (!defined $args{SortOrder}) { - my $CF = $self->CustomFieldObj($args{'CustomField'}); - my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser); - $ObjectCFs->LimitToObjectId($args{'ObjectId'}); - $ObjectCFs->LimitToLookupType($CF->LookupType); + #XXX: Where is ACL check for 'AssignCustomFields'? + + my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser); + $ObjectCFs->LimitToObjectId( $args{'ObjectId'} ); + $ObjectCFs->LimitToCustomField( $cf->id ); + $ObjectCFs->LimitToLookupType( $cf->LookupType ); + if ( my $first = $ObjectCFs->First ) { + $self->Load( $first->id ); + return $first->id; + } - $args{SortOrder} = $ObjectCFs->Count + 1; + unless ( defined $args{'SortOrder'} ) { + my $ObjectCFs = RT::ObjectCustomFields->new( $RT::SystemUser ); + $ObjectCFs->LimitToObjectId( $args{'ObjectId'} ); + $ObjectCFs->LimitToLookupType( $cf->LookupType ); + $ObjectCFs->OrderBy( FIELD => 'SortOrder', ORDER => 'DESC' ); + if ( my $first = $ObjectCFs->First ) { + $args{'SortOrder'} = $first->SortOrder + 1; + } else { + $args{'SortOrder'} = 0; + } } - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - ObjectId => $args{'ObjectId'}, - SortOrder => $args{'SortOrder'}, - ); + return $self->SUPER::Create( + CustomField => $args{'CustomField'}, + ObjectId => $args{'ObjectId'}, + SortOrder => $args{'SortOrder'}, + ); } sub Delete { @@ -84,9 +107,9 @@ sub Delete { # Move everything below us up my $sort_order = $self->SortOrder; while (my $OCF = $ObjectCFs->Next) { - my $this_order = $OCF->SortOrder; - next if $this_order <= $sort_order; - $OCF->SetSortOrder($this_order - 1); + my $this_order = $OCF->SortOrder; + next if $this_order <= $sort_order; + $OCF->SetSortOrder($this_order - 1); } $self->SUPER::Delete; @@ -95,8 +118,8 @@ sub Delete { sub CustomFieldObj { my $self = shift; my $id = shift || $self->CustomField; - my $CF = RT::CustomField->new($self->CurrentUser); - $CF->Load($id) or die "Cannot load CustomField $id"; + my $CF = RT::CustomField->new( $self->CurrentUser ); + $CF->Load( $id ); return $CF; }