package EPrints::Plugin::Screen::User::Edit; use EPrints::Plugin::Screen::User; @ISA = ( 'EPrints::Plugin::Screen::User' ); use strict; sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new(%params); $self->{actions} = [qw/ stop save next prev /]; $self->{appears} = [ { place => "user_actions", position => 100, } ]; $self->{staff} = 0; return $self; } sub can_be_viewed { my( $self ) = @_; return $self->allow( "user/edit" ); } 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; } sub allow_stop { my( $self ) = @_; return $self->can_be_viewed; } sub action_stop { my( $self ) = @_; $self->{processor}->{screenid} = "User::View"; } sub allow_save { my( $self ) = @_; return $self->can_be_viewed; } sub action_save { my( $self ) = @_; $self->workflow->update_from_form( $self->{processor} ); $self->uncache_workflow; $self->{session}->reload_current_user; $self->{processor}->{screenid} = "User::View"; } sub allow_prev { my( $self ) = @_; return $self->can_be_viewed; } sub action_prev { my( $self ) = @_; $self->workflow->update_from_form( $self->{processor} ); $self->{session}->reload_current_user; $self->uncache_workflow; $self->workflow->prev; } sub allow_next { my( $self ) = @_; return $self->can_be_viewed; } sub action_next { my( $self ) = @_; my $from_ok = $self->workflow->update_from_form( $self->{processor} ); $self->uncache_workflow; $self->{session}->reload_current_user; return unless $from_ok; if( !defined $self->workflow->get_next_stage_id ) { $self->{processor}->{screenid} = $self->screen_after_flow; return; } $self->workflow->next; } sub screen_after_flow { my( $self ) = @_; return "User::View"; } sub render { my( $self ) = @_; # $self->{processor}->before_messages( # $self->render_blister( $self->workflow->get_stage_id, 1 ) ); my $form = $self->render_form; $form->appendChild( $self->render_buttons ); $form->appendChild( $self->workflow->render ); $form->appendChild( $self->render_buttons ); return $form; } sub redirect_to_me_url { my( $self ) = @_; return $self->SUPER::redirect_to_me_url.$self->workflow->get_state_params; } sub render_buttons { my( $self ) = @_; my %buttons = ( _order=>[], _class=>"ep_form_button_bar" ); if( defined $self->workflow->get_prev_stage_id ) { push @{$buttons{_order}}, "prev"; $buttons{prev} = $self->phrase( "prev" ); } push @{$buttons{_order}}, "stop", "save"; $buttons{stop} = $self->phrase( "stop" ); $buttons{save} = $self->phrase( "save" ); if( defined $self->workflow->get_next_stage_id ) { push @{$buttons{_order}}, "next"; $buttons{next} = $self->phrase( "next" ); } return $self->{session}->render_action_buttons( %buttons ); } 1;