package sphinx::Keeper; use strict; use warnings 'all'; use base qw(Contenido::Keeper); use Contenido::Globals; ###################### # Отправить объект в поиск: # Вызов: $keeper->set_search( $object ); # Объект должен обязательно иметь метод # ->get_search_data, # возвращающий структуру: # { # id => $object->id, # class => $object->class, # name => $object_name, # text => $search_text # } # Кроме того, метод чувствителен к полю status и предполагает, # что status=1 - документ активен; status=0 - документ не активен. ########################################################################## sub send { my $self = shift; my $doc = shift; return undef unless ref $doc && $doc->id; my ($object) = $self->get_documents( class => 'sphinx::Search', object_id => $doc->id, object_class => $doc->class, ); if ( $doc->status == 1 ) { my $data = $doc->get_search_data; return undef unless $data; unless ( ref $object ) { $object = sphinx::Search->new( $self ); $object->status( 1 ); $object->is_deleted( 0 ); $object->object_id( $doc->id ); $object->object_class( $doc->class ); $object->name( $data->{name} ); $object->search( $data->{text} ); $object->store; } else { if ( $data->{name} ne $object->name || $data->{text} ne $object->search || $doc->is_deleted || $doc->status <= 0 ) { $object->status( 1 ); $object->is_deleted( 0 ); $object->name( $data->{name} ); $object->search( $data->{text} ); $object->store; } } } else { if ( ref $object ) { $object->status( 0 ); $object->is_deleted( 1 ); $object->store; } } } 1;