package EPrints::Plugin::Screen::REF::User::Edit; use EPrints::Plugin::Screen::Workflow::Edit; use EPrints::Plugin::Screen::REF; @ISA = qw( EPrints::Plugin::Screen::Workflow::Edit EPrints::Plugin::Screen::REF ); use strict; sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new(%params); $self->{actions} = [qw/ stop save next prev /]; $self->{appears} = [ { place => "dataobj_view_actions", position => 1600, } ]; $self->{staff} = 0; return $self; } sub can_be_viewed { my( $self ) = @_; return 0 unless( $self->{session}->config( 'ref_enabled' ) ); return 0 unless( defined $self->{processor}->{dataset} && $self->{processor}->{dataset}->id eq 'user' ); my $role = $self->{processor}->{role}; my $user = $self->{session}->current_user; # or use specific ref* roles? if( defined $role && $role->get_id == $user->get_id ) { return ($self->allow( "user/staff/edit" ) || $self->allow( "user/edit" ) ); } return $self->allow( "user/staff/edit" ); } sub properties_from { my( $self ) = @_; my $session = $self->{session}; $self->{processor}->{dataset} = $session->dataset( 'user' ); $self->SUPER::properties_from; } sub from { my( $self ) = @_; if( defined $self->{processor}->{internal} ) { my $from_ok = $self->workflow->update_from_form( $self->{processor},undef,1 ); $self->uncache_workflow; return unless $from_ok; } $self->EPrints::Plugin::Screen::from; $self->EPrints::Plugin::Screen::REF::from; } sub workflow { my( $self, $staff ) = @_; my $cache_id = "workflow"; $cache_id.= "_staff" if( $staff ); if( !defined $self->{processor}->{$cache_id} ) { my %opts = ( item => $self->{processor}->{dataobj}, session => $self->{session} ); $opts{STAFF_ONLY} = [$staff ? "TRUE" : "FALSE","BOOLEAN"]; $self->{processor}->{$cache_id} = EPrints::Workflow->new( $self->{session}, "ref", %opts ); } return $self->{processor}->{$cache_id}; } 1;