Newer
Older
Digital_Repository / OARiNZ / DIY / deb_package / eprints-3.0 / perl_lib / EPrints / Plugin / Screen / User / SaveSearch.pm

package EPrints::Plugin::Screen::User::SaveSearch;

use EPrints::Plugin::Screen::User;

@ISA = ( 'EPrints::Plugin::Screen::User' );

use strict;

sub new
{
	my( $class, %params ) = @_;

	my $self = $class->SUPER::new(%params);

	$self->{actions} = [qw/ create /];

	return $self;
}

sub allow_create
{
	my ( $self ) = @_;

	return $self->allow( "create_saved_search" );
}

sub action_create
{
	my( $self ) = @_;

	my $ds = $self->{processor}->{session}->get_repository->get_dataset( "saved_search" );

	my $user = $self->{session}->current_user;

	my $id = $self->{session}->param( "cache" );
        my $string = $self->{session}->get_database->cache_exp( $id );
        my $userid = $self->{session}->get_database->cache_userid( $id );
	if( $userid != $user->get_id )
	{
		$self->{processor}->add_message( 
			"error",
			$self->html_phrase( "not_your_search" ) );
		$self->{processor}->{screenid} = "User::View";
		return;
	}

   	my $search = new EPrints::Search(
		keep_cache => 1,
		session => $self->{session},
		dataset => $self->{session}->get_repository->get_dataset( "archive" ) );
	$search->from_string_raw( $string );


	$self->{processor}->{savedsearch} = $ds->create_object( $self->{session}, { 
		userid => $user->get_value( "userid" ),
		name => EPrints::Utils::tree_to_utf8( $search->render_conditions_description ),
		spec => $string } );

	if( !defined $self->{processor}->{savedsearch} )
	{
		my $db_error = $self->{session}->get_database->error;
		$self->{processor}->{session}->get_repository->log( "Database Error: $db_error" );
		$self->{processor}->add_message( 
			"error",
			$self->html_phrase( "db_error" ) );
		$self->{processor}->{screenid} = "User::View";
		return;
	}

	$self->{processor}->{savedsearchid} = $self->{processor}->{savedsearch}->get_id;
	$self->{processor}->{screenid} = "User::SavedSearch::Edit";
	$self->{processor}->add_message( 
		"message",
		$self->html_phrase( "done" ) );

}



1;