#!/usr/bin/perl
use EPrints;
use strict;
use warnings;
my $repo = EPrints->new->current_repository;
my $db = $repo->get_database;
my $xml = $repo->xml;
my $need = 5;
my $q = $repo->param( "q" ) || "";
exit unless length( $q ) >= $need;
my $id = $repo->param( "eprintid" );
$id = $repo->param( "id" ) if !EPrints::Utils::is_set( $id );
my $fieldname = $repo->param( "field" );
$fieldname = 'title' if !EPrints::Utils::is_set( $fieldname );
my $dataset_name = $repo->param( "dataset" );
$dataset_name = 'eprint' if !EPrints::Utils::is_set( $dataset_name );
if( !defined($id) )
{
$repo->log( "duplicates lookup script called without id argument: ".join(',',$repo->param));
exit(0);
}
elsif( $id =~ /^([0-9]+)$/ )
{
$id = $1;
}
else
{
EPrints::abort "Requires numeric id argument";
}
my $dataset = $repo->dataset( $dataset_name );
EPrints->abort( "No such dataset '$dataset_name'" ) if !defined $dataset;
EPrints->abort( "No such field '$fieldname'" ) if !$dataset->has_field( $fieldname );
my $field = $dataset->field( $fieldname );
my $Q_table = $db->quote_identifier($dataset->get_sql_table_name);
my $Q_id = $db->quote_identifier( $dataset_name . "id" );
my $Q_eprint_status = $db->quote_identifier( "eprint_status" );
my $Q_field_name = $db->quote_identifier( $field->get_sql_name );
my $sql = "SELECT ep.eprintid, ml_title_text FROM eprint AS ep JOIN eprint_ml_title_text AS ml ON ep.eprintid = ml.eprintid WHERE ";
if ($dataset_name eq "eprint") {
$sql .= " $Q_eprint_status=" . $db->quote_value( "archive" ) . " AND ";
}
$sql .= "ml.ml_title_text IS NOT NULL" .
" AND ml.ml_title_text " .
$db->sql_LIKE() .
$db->quote_value( EPrints::Database::prep_like_value( $q ) . '%' );
my $html = $xml->create_element( "div" );
my $sth = $db->prepare_select( $sql, 'limit' => 10 );
$db->execute( $sth , $sql );
my $base_url = $repo->config( "base_url" );
my $row = $sth->fetch;
unless( defined $row )
{
print '';
$repo->terminate;
exit;
}
$html->appendChild( $repo->render_message( "warning",
$repo->html_phrase( "cgi/users/lookup/title_duplicates:warning",
field => $field->render_name,
)
) );
# messages have a 10px top & bottom margin :-(
$html->appendChild( my $ul = $xml->create_element( 'ul',
style => "margin-top: -10px",
));
my $count = 0;
my $first = 1;
do
{
my( $id, $value ) = @$row;
$ul->appendChild( my $li = $repo->make_element( 'li' ) );
if( $first )
{
$li->setAttribute( 'class', 'ep_first' );
$first = 0;
}
my $dataobj = $dataset->dataobj($id);
if( ++$count > 5 )
{
$li->appendChild( $dataobj->render_citation_link( "brief", target => "_blank" ) );
}
else
{
$li->appendChild( $dataobj->render_citation_link( "default", target=>"_blank" ) );
}
} while( $count < 20 && defined($row = $sth->fetch) );
$sth->finish;
binmode(STDOUT, ":utf8");
$repo->send_http_header( content_type => "text/xml; charset=UTF-8" );
print <
END
$repo->xhtml->to_xhtml( $html );
$xml->dispose( $html );