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;