Building a DataSet
Contents
Modify EPrint Status Field
We must start my modifying the eprint_status field so that it can have the new value dark_archive.
push( @{$c->{fields}->{eprint}}, {
name=>"eprint_status", type=>"set", required=>1,
options=>[qw/ inbox buffer archive deletion dark_archive /],
replace_core=>1 #this flag must be used with EXTREME caution, it makes is very easy to break things
});
Add the dark archive dataset definition
dark_archive => {
sqlname => "eprint",
virtual => 1,
class => "EPrints::DataObj::EPrint",
confid => "eprint",
import => 1,
index => 1,
filters => [ { meta_fields => [ 'eprint_status' ], value => 'dark_archive', describe=>0 } ],
dataset_id_field => "eprint_status",
datestamp => "lastmod",
},
epadmin update_database_structure <repoid>
Build a screen to move an object to the archive
package EPrints::Plugin::Screen::EPrint::MoveToDarkArchive;
@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/ move_dark_archive /];
$self->{appears} = [
{ place => "eprint_editor_actions", action => "move_dark_archive", position => 400, },
{ place => "eprint_item_actions", action => "move_dark_archive", position => 400, },
];
#$self->{action_icon} = { move_archive => "action_approve.png" };
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_move_dark_archive
{
my( $self ) = @_;
return 0 unless $self->could_obtain_eprint_lock;
return 1;
}
sub action_move_dark_archive
{
my( $self ) = @_;
$self->{processor}->{eprint}->remove_static;
$self->{processor}->{eprint}->set_value("eprint_status", "dark_archive");
$self->{processor}->{eprint}->commit;
$self->add_result_message( 1 );
}
sub add_result_message
{
my( $self, $ok ) = @_;
if( $ok )
{
$self->{processor}->add_message( "message",
$self->html_phrase( "status_changed",
status=>$self->{processor}->{eprint}->render_value( "eprint_status" ) ) );
}
else
{
$self->{processor}->add_message( "error",
$self->html_phrase(
"cant_move",
id => $self->{session}->make_text(
$self->{processor}->{eprintid} ) ) );
}
$self->{processor}->{screenid} = "EPrint::View";
}
1;