package EPrints::Plugin::Screen::Admin::OpenAlexImporter; use strict; use base 'EPrints::Plugin::Screen'; sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new(%params); $self->{actions} = [qw/ run /]; $self->{appears} = [ { place => "admin_actions_misc", position => 200 }, ]; return $self; } sub can_be_viewed { my( $self ) = @_; return $self->allow( "admin" ); } sub render { my( $self ) = @_; my $session = $self->{session}; my $frag = $session->make_doc_fragment; my $h = $session->make_element("h2"); $h->appendChild($session->make_text("OpenAlex Importer")); $frag->appendChild($h); if( my $msg = $self->{processor}->{notes}->{openalex_msg} ) { my $p = $session->make_element("p"); $p->appendChild($session->make_text($msg)); $frag->appendChild($p); } my $form = $session->render_form( method => "post" ); $form->appendChild( $session->render_hidden_field( "screen", $self->{id} ) ); my $p2 = $session->make_element("p"); $p2->appendChild($session->make_text("Paste one per line: DOI, OpenAlex Work ID (W...), or Title")); $form->appendChild($p2); $form->appendChild( $session->render_textarea_field( name => "query", rows => 10, cols => 90 ) ); my %buttons = ( run => "Import from OpenAlex", _order => [ "run" ], ); $form->appendChild( $session->render_action_buttons(%buttons) ); $frag->appendChild($form); return $frag; } sub allow_run { my( $self ) = @_; return $self->can_be_viewed; } sub action_run { my( $self ) = @_; my $session = $self->{session}; my $q = $session->param("query") // ""; $q =~ s/^\s+|\s+$//g; if( $q eq "" ) { $self->{processor}->{notes}->{openalex_msg} = "No input provided."; return; } my $importer = $session->plugin( "Import::OpenAlex", processor => $self->{processor} ); if( !defined $importer ) { $self->{processor}->{notes}->{openalex_msg} = "Import::OpenAlex plugin not available."; return; } open( my $fh, "<", \$q ); my $list = $importer->input_fh( fh => $fh, dataset => $session->dataset("archive"), ); my $n = $list ? $list->count : 0; $self->{processor}->{notes}->{openalex_msg} = "Imported $n item(s)."; } 1;