Changeset 1987

Show
Ignore:
Timestamp:
04/18/08 22:31:50 (19 months ago)
Author:
bchoate
Message:

Added search_by_meta method. BugId:69021

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/release-35/lib/MT/Object.pm

    r1944 r1987  
    502502                'vfloat_indexed' ] }, 
    503503        }, 
    504         primary_key => [ $class->datasource . '_id', 'type' ], 
     504        primary_key => [ $id_field, 'type' ], 
    505505    }; 
    506506} 
     
    11681168} 
    11691169 
     1170sub search_by_meta { 
     1171    my $class = shift; 
     1172    my($key, $value, $terms, $args) = @_; 
     1173    $terms ||= {}; $args ||= {}; 
     1174    return unless $class->properties->{meta_installed}; 
     1175    return $class->error("Unknown meta '$key' on $class") 
     1176        unless $class->is_meta_column($key); 
     1177 
     1178    my $meta_rec = MT::Meta->metadata_by_name($class, $key); 
     1179    my $type_col = $meta_rec->{type}; 
     1180    my $type_id  = $meta_rec->{name}; 
     1181    my $meta_terms = { 
     1182        $type_col => $value, 
     1183        type      => $type_id, 
     1184        %$terms, 
     1185    }; 
     1186    my $meta_class = $class->meta_pkg; 
     1187    my $meta_pk = $meta_class->primary_key_tuple; 
     1188    my @metaobjs = $meta_class->search( 
     1189        $meta_terms, { %$args, fetchonly => $meta_pk } 
     1190    ); 
     1191 
     1192    my $pk = $class->primary_key_tuple; 
     1193    my $get_pk = sub {  
     1194        my $meta = shift; 
     1195        [ map { $meta->$_ } @$meta_pk ]; 
     1196    }; 
     1197 
     1198    return unless @metaobjs; 
     1199    return grep defined, @{ $class->lookup_multi([ map { $get_pk->($_) } @metaobjs ]) }; 
     1200} 
     1201 
    11701202package MT::Object::Meta; 
    11711203