package EPrints::Plugin::Screen::EPMC::REF2014; @ISA = ( 'EPrints::Plugin::Screen::EPMC' ); use strict; sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new( %params ); $self->{actions} = [qw( enable confirmed_disable cancel_disable disable ) ]; $self->{disable} = 0; # always enabled, even in lib/plugins $self->{package_name} = "ref2014"; return $self; } =item $screen->action_enable( [ SKIP_RELOAD ] ) Enable the L for the current repository. If SKIP_RELOAD is true will not reload the repository configuration. =cut sub action_enable { my( $self, $skip_reload ) = @_; $self->SUPER::action_enable( $skip_reload ); # Add the REF2014 UoAs: $self->add_ref2014_uoas(); # If people are coming from an upgrade, they might need the new UoA 'Z' (added in v1.1) $self->add_ref2014_uoa_z(); # re-commit ref_selection dataset (pre-populate ref_selection.output_type - added in v1.1) $self->recommit_ref_selections(); $self->reload_config if !$skip_reload; } sub add_ref2014_uoas { my( $self ) = @_; my $repo = $self->{repository}; # First check that this subject tree doesn't already exist... my $ds = $repo->dataset( 'subject' ); my $test_subject_id = $ds->dataobj( 'ref2014_uoas' ); if( !defined $test_subject_id ) { my $filename = $repo->config( 'archiveroot' ).'/cfg/subjects_uoa'; if( -e $filename ) { my $plugin = $repo->plugin( 'Import::FlatSubjects' ); my $list = $plugin->input_file( dataset => $repo->dataset( 'subject' ), filename=>$filename ); $repo->dataset( 'subject' )->reindex( $repo ); } } } sub add_ref2014_uoa_z { my( $self ) = @_; my $repo = $self->{repository}; print STDERR "adding UoA Z\n"; my $lang = $repo->config( "defaultlanguage" ); my $uoa_z = { subjectid => 'ref2014_z', name_name => [ 'Z - Unaffiliated' ], name_lang => [ $lang ], parents => [ 'ref2014_uoas' ], depositable => 'TRUE' }; my $subds = $repo->dataset( 'subject' ) or return; # has the UoA Z already been imported? return if( defined $subds->dataobj( 'ref2014_z' ) ); print STDERR "creating UoA Z\n"; my $z_object = $subds->create_dataobj( $uoa_z ); if( defined $z_object ) { $z_object->commit; $subds->reindex( $repo ); } } # Note: recommits only the current Benchmark sub recommit_ref_selections { my( $self ) = @_; my $repo = $self->{repository}; print STDERR "recommitting REF Selection dataset...\n"; my $benchmark = EPrints::DataObj::REFBenchmark->default( $repo ) or return; my $list = $benchmark->selections() or return; $list->map( sub { my( undef, undef, $item ) = @_; $item->commit( 1 ); } ); } =item $screen->action_disable( [ SKIP_RELOAD ] ) Disable the L for the current repository. If SKIP_RELOAD is true will not reload the repository configuration. =cut sub action_disable { my( $self, $skip_reload ) = @_; my $session = $self->{session}; my $frag = $session->make_doc_fragment; $frag->appendChild( $self->html_phrase( 'confirm' ) ); my $form = $frag->appendChild( $self->render_form ); $form->appendChild( $session->make_element( 'input', type => 'hidden', name => 'skip_reload', value => ($skip_reload?'1':'0') ) ); $form->appendChild( $session->render_action_buttons( confirmed_disable => 'Confirm', cancel_disable => 'Cancel' ) ); $self->{processor}->add_message( 'warning', $frag ); } sub allow_cancel_disable { shift->can_be_viewed } sub allow_confirmed_disable { shift->can_be_viewed } sub action_cancel_disable { shift->{processor}->{screenid} = 'Admin::EPM' } sub action_confirmed_disable { my( $self ) = @_; my $skip_reload = $self->{session}->param( 'skip_reload' ); $self->SUPER::action_disable( $skip_reload ); $self->reload_config if !$skip_reload; $self->{processor}->{screenid} = 'Admin::EPM'; } sub properties_from { my( $self ) = @_; $self->SUPER::properties_from; unless( defined $self->{processor}->{dataobj} ) { $self->{processor}->{dataobj} = $self->{session}->dataset( 'epm' )->dataobj( $self->{package_name} ); } } 1;