Newer
Older
Digital_Repository / OARiNZ / DIY / deb_package / eprints-3.0 / perl_lib / EPrints / MetaField / Fulltext.pm
######################################################################
#
# EPrints::MetaField::Longtext;
#
######################################################################
#
#  This file is part of GNU EPrints 2.
#  
#  Copyright (c) 2000-2004 University of Southampton, UK. SO17 1BJ.
#  
#  EPrints 2 is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  EPrints 2 is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with EPrints 2; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
######################################################################

=pod

=head1 NAME

B<EPrints::MetaField::Fulltext> - no description

=head1 DESCRIPTION

not done

=over 4

=cut

package EPrints::MetaField::Fulltext;

use strict;
use warnings;

BEGIN
{
	our( @ISA );

	@ISA = qw( EPrints::MetaField::Text );
}

use EPrints::MetaField::Text;

sub is_browsable
{
	return( 0 );
}

sub get_value
{
	my( $self, $object ) = @_;
	my @docs = $object->get_all_documents;
	my $r = [];
	foreach my $doc ( @docs )
	{
		push @{$r}, "_FULLTEXT_:".$doc->get_id;
	}
	return $r;
}

sub get_index_codes_basic
{
	my( $self, $session, $value ) = @_;

	if( $value !~ s/^_FULLTEXT_:// )
	{
		return $self->SUPER::get_index_codes_basic( $session, $value );
	}
	my $doc = EPrints::DataObj::Document->new( $session, $value );

	my $eprint =  $doc->get_eprint;
	return( [], [], [] ) unless( defined $eprint );

	my $words_file = $doc->words_file;
	my $indexcodes_file = $doc->indexcodes_file;
	my @s1 = stat( $words_file );
	my @s2 = stat( $indexcodes_file );
    	if( defined $s1[9] && defined $s2[9] && $s2[9] > $s1[9] )
	{
		my $codes = [];
		unless( open( CODELOG, $indexcodes_file ) )
		{
			$session->get_repository->log( "Failed to open $indexcodes_file: $!" );
		}
		else
		{
			@$codes = <CODELOG>;
			s/\015?\012?$//s for @$codes;
			close CODELOG;
		}
		return( $codes, [], [] );
	}

	$value = $doc->get_text;
	my( $codes, $badwords ) = ( [], [] );
	if( EPrints::Utils::is_set( $value ) )
	{
		( $codes, $badwords ) = EPrints::MetaField::Text::_extract_words( $session, $value );
	}
	
	unless( open( CODELOG, ">".$indexcodes_file ) )
	{
		$session->get_repository->log( "Failed to write to $indexcodes_file: $!" );
	}
	else
	{
		print CODELOG join( "\n", @$codes );
		close CODELOG;
	}
		
	# does not return badwords
	return( $codes, [], [] );
}


######################################################################
1;