[Rt-commit] r7630 - in rt/branches/3.7-EXPERIMENTAL: .

ruz at bestpractical.com ruz at bestpractical.com
Mon Apr 23 08:28:26 EDT 2007


Author: ruz
Date: Mon Apr 23 08:28:22 2007
New Revision: 7630

Modified:
   rt/branches/3.7-EXPERIMENTAL/   (props changed)
   rt/branches/3.7-EXPERIMENTAL/lib/RT/ObjectCustomField_Overlay.pm

Log:
 r5076 at cubic-pc:  cubic | 2007-04-23 15:34:05 +0400
 * return 0 from Create if we couldn't load CF
 * check if CF is allready applied and return the current id
 * use MAX+1 for SortOrder instead COUNT+1


Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/ObjectCustomField_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/ObjectCustomField_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/ObjectCustomField_Overlay.pm	Mon Apr 23 08:28:22 2007
@@ -50,26 +50,46 @@
 
 sub Create {
     my $self = shift;
-    my %args = ( 
-                CustomField => '0',
-                ObjectId => '0',
-                SortOrder => undef,
-                  @_);
-
-    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);
+    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;
+    }
+
+    #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 ) {
+        return $first->id;
+    }
 
-        $args{SortOrder} = $ObjectCFs->Count + 1;
+    unless ( defined $args{'SortOrder'} ) {
+        my $ObjectCFs = RT::ObjectCustomFields->new( $RT::SuperUser );
+        $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 {


More information about the Rt-commit mailing list