package EPrints::Plugin::Screen::Container::NewFromItem; use EPrints::Plugin::Screen; @ISA = ( 'EPrints::Plugin::Screen' ); use strict; sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new(%params); $self->{actions} = [qw/ create /]; $self->{icon} = "action_new_version.png"; $self->{appears} = [ { place => "eprint_container_item_actions", position => 200, } ]; return $self; } sub allow_create { my ( $self ) = @_; if ($self->allow( "container/use" )) { # check that the user is either associated with a container or # they own an eprint in a container my $session = $self->{session}; my $user = $session->current_user; my $list = $session->get_repository->call( "get_allowed_containers", $user, $session ); if (defined $list && $list->count > 0) { return $self->allow( "container/use" ); } } return 0; } sub action_create { my( $self ) = @_; my $ds = $self->{processor}->{session}->get_repository->get_dataset( "inbox" ); my $container_ds = $self->{processor}->{session}->get_repository->get_dataset( "container" ); my $user = $self->{session}->current_user; my $containerid = $self->{processor}->{containerid}; my $templateid = $self->{processor}->{templateid}; my $container = $container_ds->dataobj( $containerid ); my $template = new EPrints::DataObj::EPrint( $self->{session}, $templateid ); my $copy = $template->clone( $ds, 0, 1 ); $copy->set_value( "userid", $user->get_value( "userid" ) ); $copy->set_value( "title", "" ); $copy->set_value( "abstract", "" ); $copy->commit(); $self->{processor}->{eprint} = $copy; $self->{processor}->{eprintid} = $copy->get_id; my $container_items = EPrints::Utils::clone( $container->get_value( "eprints" ) ); push @$container_items, $copy->get_id; $container->set_value( "eprints", $container_items ); $container->commit; if( !defined $self->{processor}->{eprint} ) { my $db_error = $self->{session}->get_database->error; $self->{processor}->{session}->get_repository->log( "Database Error: $db_error" ); $self->{processor}->add_message( "error", $self->html_phrase( "db_error" ) ); return; } $self->{processor}->{screenid} = "EPrint::Edit"; } sub render { my( $self ) = @_; my $session = $self->{session}; my $url = URI->new($self->{processor}->{url}); $url->query_form( screen => $self->{processor}->{screenid}, eprintid => $self->{processor}->{templateid}, containerid => $self->{processor}->{containerid}, _action_create => 1 ); $session->redirect( $url ); $session->terminate(); exit(0); } sub properties_from { my( $self ) = @_; $self->{processor}->{containerid} = $self->{session}->param( "containerid" ); $self->{processor}->{templateid} = $self->{session}->param( "eprintid" ); my $container_ds = $self->{session}->get_repository->get_dataset( "container" ); my $ep_ds = $self->{session}->get_repository->get_dataset( "eprint" ); my $container = $container_ds->dataobj($self->{processor}->{containerid}); my $template = $ep_ds->dataobj($self->{processor}->{templateid}); if( !defined $container ) { $self->{processor}->{screenid} = "Error"; $self->{processor}->add_message( "error", $self->{session}->html_phrase( "cgi/users/edit_eprint:cant_find_it", id=>$self->{session}->make_text( $self->{processor}->{containerid} ) ) ); return; } if( !defined $template ) { $self->{processor}->{screenid} = "Error"; $self->{processor}->add_message( "error", $self->{session}->html_phrase( "cgi/users/edit_eprint:cant_find_it", id=>$self->{session}->make_text( $self->{processor}->{templateid} ) ) ); return; } $self->SUPER::properties_from; } 1;