Skip to content
Permalink
master
Switch branches/tags
Go to file
@goetzk
Latest commit fa34723 Sep 26, 2018 History
Rework hostname check as validation sub routine

Based on feedback in #31 I've merged my existing code in to the new 2.1
branch's validate_datacite function.

There are a couple of minor updates too:
* Update path to validate_datacite ; validate_datacite lives in the mapping file under lib/cfg.d rather than the main configuration file in cfg/cfg.d.
* Copy / paste fix in a comment
* Now using get_conf instead of $c->
3 contributors

Users who have contributed to this file

@goetzk @cziaarm @leg20-unikent
package EPrints::Plugin::Screen::EPrint::Staff::CoinDOI;
#use EPrints::Plugin::Screen::EPrint;
@ISA = ( 'EPrints::Plugin::Screen::EPrint' );
use strict;
sub new
{
my( $class, %params ) = @_;
my $self = $class->SUPER::new(%params);
# $self->{priv} = # no specific priv - one per action
$self->{actions} = [qw/ coindoi /];
$self->{appears} = [ {
place => "eprint_editor_actions",
action => "coindoi",
position => 1977,
}, ];
return $self;
}
sub obtain_lock
{
my( $self ) = @_;
return $self->could_obtain_eprint_lock;
}
sub about_to_render
{
my( $self ) = @_;
$self->EPrints::Plugin::Screen::EPrint::View::about_to_render;
}
sub allow_coindoi
{
my( $self ) = @_;
return 0 unless $self->could_obtain_eprint_lock;
my $repository = $self->{repository};
#TODO a version that works for documents too
my $dataobj = $self->{processor}->{eprint};
if (defined $repository->get_conf( "datacitedoi", "typesallowed")) {
# Is this type of eprint allowed/denied coining?
return 0 unless $repository->get_conf( "datacitedoi", "typesallowed", $dataobj->get_type);
}
return 0 unless $repository->get_conf( "datacitedoi", "eprintstatus", $dataobj->value( "eprint_status" ));
# Don't show coinDOI button if a DOI is already set AND coining of custom doi is disallowed
return 0 if($dataobj->is_set($repository->get_conf( "datacitedoi", "eprintdoifield")) &&
!$repository->get_conf("datacitedoi","allow_custom_doi"));
#TODO don't allow the coinDOI button if a DOI is already registered (may require a db flag for successful reg)
# Or maybe check with datacite api to see if a doi is registered
return $self->allow( $repository->get_conf( "datacitedoi", "minters") );
}
sub action_coindoi
{
my( $self ) = @_;
my $repository = $self->{repository};
return undef if (!defined $repository);
$self->{processor}->{redirect} = $self->redirect_to_me_url()."&_current=2";
my $eprint = $self->{processor}->{eprint};
if (defined $eprint) {
my $problems = $self->validate($eprint);
if( scalar @{$problems} > 0 )
{
my $dom_problems = $self->{session}->make_element("ul");
foreach my $problem_xhtml ( @{$problems} )
{
$dom_problems->appendChild( my $li = $self->{session}->make_element("li"));
$li->appendChild( $problem_xhtml );
}
$self->workflow->link_problem_xhtml( $dom_problems, "EPrint::Edit" );
$self->{processor}->add_message( "warning", $dom_problems );
}else{
my $eprint_id = $eprint->id;
$repository->dataset( "event_queue" )->create_dataobj({
pluginid => "Event::DataCiteEvent",
action => "datacite_doi",
params => [$eprint->internal_uri],
});
$self->add_result_message( 1 );
}
}
}
sub add_result_message
{
my( $self, $ok ) = @_;
if( $ok )
{
$self->{processor}->add_message( "message",
$self->html_phrase( "coiningdoi" ) );
}
else
{
# Error?
$self->{processor}->add_message( "error" );
}
$self->{processor}->{screenid} = "EPrint::View";
}
# Validate this datacite submission - this will call validate_datacite in lib/cfg.d/z_datacite_mapping.pl
sub validate
{
my( $self, $eprint ) = @_;
my @problems;
my $validate_fn = "validate_datacite";
if( $self->{session}->can_call( $validate_fn ) )
{
push @problems, $self->{session}->call(
$validate_fn,
$eprint,
$self->{session} );
}
return \@problems;
}
1;