######################################################################
#
#  EPrints Object Exporter
#
######################################################################
#
#  __COPYRIGHT__
#
# Copyright 2000-2008 University of Southampton. All Rights Reserved.
# 
#  __LICENSE__
#
######################################################################

use EPrints;

use strict;
use Data::Dumper;

my $session = new EPrints::Session;
exit( 0 ) unless( defined $session );
# $session->get_database->set_debug( 1 );

if( defined $session->param( "view" ) )
{
	# hmm, got GET parameters, not a path...
	my $viewid = $session->param( "view" );
	my $values = $session->param( "values" );
	my $format = $session->param( "format" );

	my $plugin = get_plugin( $session, $format );
	if( !defined $plugin )
	{
		error( $session, $session->html_phrase( "cgi/export:not_available",
					format => $session->make_text( $format ) ) );
		$session->terminate;
		exit;
	}

	my $export_url = $session->config( "perl_url" )."/exportview";
	my $fn = $values;
	$fn =~ s/\//_/g;
	$export_url .= "/$viewid/$values/$format/$fn".$plugin->param("suffix");
	$session->redirect( $export_url );
	exit;
}


my $path_info = $session->get_request->path_info;
#http://devel.eprints.org/cgi/exportview/person/Nittrouer=3AX=2E=3A=3A/HTML/Nittrouer=3AX=2E=3A=3A.html
unless( $path_info =~ m!^/([^/]+)/(.*)/([^/]+)/[^/]+$! )
{
	error( $session, $session->html_phrase( "cgi/export:no_id" ) );
	$session->terminate;
	exit;
}
my $viewid = $1;
my @view_path = split( '/', $2 );
my $format = $3;

my $plugin = get_plugin( $session, $format );
if( !defined $plugin )
{
	error( $session, $session->html_phrase( "cgi/export:not_available",
				format => $session->make_text( $format ) ) );
	$session->terminate;
	exit;
}

my $view;
foreach my $a_view ( @{$session->config( "browse_views" )} )
{
	$view = $a_view if( $a_view->{id} eq $viewid );
}
if( !defined $view )
{
	EPrints::abort( "view with ID '$viewid' is not available." );
}
$view = EPrints::Update::Views->new( repository => $session, view => $view );

my @path_values = $view->unescape_path_values( @view_path );
my $filters = $view->get_filters( \@path_values, 1 ); # EXact

my $order = $view->{order};
if( $plugin->is_feed )
{
	$order = "-datestamp";
}

my $list = $view->dataset->search(
	custom_order => $order,
	satisfy_all => 1,
	filters => $filters );

$session->send_http_header( "content_type"=>$plugin->param("mimetype") );
$plugin->initialise_fh( \*STDOUT );

my %arguments = %{$plugin->param( "arguments" )};
# fetch the plugin arguments, if any
foreach my $argname (keys %arguments)
{
	if( defined $session->param( $argname ) )
	{
		$arguments{$argname} = $session->param( $argname );
	}
}

print $list->export( $format, %arguments );	
	
$session->terminate;
exit;

sub error
{
	my( $session, $msg ) = @_;

	$session->build_page( 
		$session->html_phrase( "cgi/export:error_title" ),
		$msg,
		"export_error" );
	$session->send_page;
}

sub get_plugin
{
	my( $session, $format ) = @_;

	my @plugins = $session->plugin_list( 
				type=>"Export", 
				can_accept=>"list/eprint", 
				is_visible=>"all" );
	my $ok = 0;
	foreach( @plugins ) 
	{ 
		if( $_ eq "Export::$format" ) 
		{
			return $session->plugin( "Export::$format" );
		}
	}
	return;
}

