Revision 599 (by ahitrov, 2016/10/19 16:17:37) |
Initial plugin
|
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;