######################################################################
#
# Review Author's Documents in the Archive
#
######################################################################
#
# This file is part of GNU EPrints 2.
#
# Copyright (c) 2000-2004 University of Southampton, UK. SO17 1BJ.
#
# EPrints 2 is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# EPrints 2 is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with EPrints 2; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
######################################################################
use EPrints::Database;
use EPrints::EPrint;
use EPrints::MetaField;
use EPrints::Session;
use EPrints::User;
use strict;
my $session = new EPrints::Session;
exit( 0 ) unless( defined $session );
# Check we have privs
if( !$session->auth_check( "deposit" ) )
{
$session->terminate();
exit( 0 );
}
my $page;
my $action = $session->get_action_button();
if( !defined $action )
{
$page = make_form( $session );
}
else
{
$page = process_form( $session, $action );
}
$session->terminate();
#############################################################
sub make_form
{
my( $session ) = @_;
my $user = $session->current_user;
# cjg. This should maybe extract stuff you can edit
# not just stuff you deposited.
my $ds = $session->get_archive()->get_dataset( "archive" );
my @eprints = $user->get_owned_eprints( $ds );
my $user = $session->current_user;
my $fullname = $user->render_description();
my $page = $session->make_doc_fragment();
my $title = $session->html_phrase( "cgi/users/review:title", name=>$fullname );
if( scalar @eprints == 0 )
{
$page->appendChild( $session->html_phrase(
"cgi/users/review:no_docs" ) );
$page->appendChild( $session->html_phrase(
"general:userhome_link" ) );
$session->build_page( $title, $page, "review_none" );
$session->send_page();
return;
}
my $r_req = $session->get_archive()->get_conf(
"allow_user_removal_request" );
my $checkout = $session->get_archive()->get_conf(
"allow_user_checkout_eprint" );
$page->appendChild( $session->html_phrase( "cgi/users/review:blurb" ) );
if( $checkout )
{
$page->appendChild( $session->html_phrase(
"cgi/users/review:checkout_info" ) );
}
if( $r_req )
{
$page->appendChild( $session->html_phrase(
"cgi/users/review:remove_info" ) );
}
my( $form, $table, $tr, $td, $th );
$form = $session->render_form( "post", "review" );
$page->appendChild( $form );
$table = $session->make_element( "table", class=>"compact", border=>0, cellspacing=>0, cellpadding=>3 );
$form->appendChild( $table );
my $row = 0;
foreach my $eprint ( @eprints )
{
$tr = $session->make_element( "tr", class=>"row_".($row?"b":"a") );
$table->appendChild( $tr );
$td = $session->make_element( "td", class=>"first_col", width=>"63%" );
$tr->appendChild( $td );
$td->appendChild( $eprint->render_citation_link() );
$td = $session->make_element( "td", class=>"last_col", align=>"right" );
$tr->appendChild( $td );
my $a;
$a = $session->render_link( "review?_action_clone_".$eprint->get_id."=1" );
$a->appendChild( $session->html_phrase("cgi/users/review:clone") );
$td->appendChild( $a );
$td->appendChild( $session->make_text( ", " ) );
$a = $session->render_link( "review?_action_copy_".$eprint->get_id."=1" );
$a->appendChild( $session->html_phrase("cgi/users/review:copy") );
$td->appendChild( $a );
if( $checkout )
{
$td->appendChild( $session->make_text( ", " ) );
$a = $session->render_link( "review?_action_checkout_".$eprint->get_id."=1" );
$a->appendChild( $session->html_phrase("cgi/users/review:checkout") );
$td->appendChild( $a );
}
if( $r_req )
{
$td->appendChild( $session->make_text( ", " ) );
$a = $session->render_link( "review?_action_remove_".$eprint->get_id."=1" );
$a->appendChild( $session->html_phrase("cgi/users/review:req_remove") );
$td->appendChild( $a );
}
$row=!$row;
}
$session->build_page( $title, $page, "review_list" );
$session->send_page();
return;
}
sub process_form
{
my( $session, $action ) = @_;
my $user = $session->current_user;
my $ds = $session->get_archive()->get_dataset( "archive" );
if( $action =~ m/^(clone|copy|remove|checkout)_(.+)$/ )
{
my( $act, $eprintid ) = ( $1, $2 );
my $r_req = $session->get_archive()->get_conf( "allow_user_removal_request" );
my $checkout = $session->get_archive()->get_conf( "allow_user_checkout_eprint" );
my $eprint = EPrints::EPrint->new( $session, $eprintid, $ds );
if( !defined $eprint )
{
$session->render_error(
$session->html_phrase( "cgi/users/review:cant_find_it" ) );
return;
}
if( $act eq "clone" || $act eq "copy" )
{
my $inbox_ds = $session->get_archive()->get_dataset( "inbox" );
my $copy;
if( $act eq "clone" )
{
$copy = $eprint->clone( $inbox_ds, 1 );
}
else
{
# nofiles, no link
$copy = $eprint->clone( $inbox_ds, 0, 1 );
}
if( defined $copy )
{
# Copied OK, redirect to workspace
$session->redirect( 'submit?eprintid='.$copy->get_id.'&_action_edit=1' );
return;
}
}
if( $act eq "remove" && $r_req)
{
unless( $user->is_owner( $eprint ) )
{
$session->render_error(
$session->html_phrase( "cgi/users/review:cant_remove" ) );
return;
}
&removal_request_form( $session, $eprint );
return;
}
if( $act eq "checkout" && $checkout)
{
unless( $user->is_owner( $eprint ) )
{
$session->render_error(
$session->html_phrase( "cgi/users/review:cant_checkout" ) );
return;
}
$eprint->move_to_inbox;
$session->redirect( 'submit?eprintid='.$eprint->get_id.'&_action_edit=1' );
return;
}
}
# If submit is defined, must have been a removal request form that was
# filled out.
if( $action eq "send" )
{
&handle_removal_request( $session, $user );
return;
}
# no valid action or "cancel" from the remove request.
&make_form( $session );
}
##
## remove_request_form( $session, $eprint )
##
## Display a removal request form.
##
sub removal_request_form
{
my( $session, $eprint ) = @_;
my $title = $session->html_phrase( "cgi/users/review:remove_title" );
my $page = $session->make_doc_fragment();
$page->appendChild( $session->html_phrase( "cgi/users/review:remove_blurb",
citation=>$eprint->render_citation_link() ) );
my( $form, $table, $tr, $td, $th );
my $reason_field = EPrints::MetaField->new(
archive=> $session->get_archive(),
confid=>'remove_request',
name=>'reason',
type=>'longtext',
input_rows=>15 );
$page->appendChild(
$session->render_input_form(
fields=>[ $reason_field ],
show_help=>1,
default_action=>"send",
buttons=>{
_order=> [ "send","cancel" ],
send => $session->phrase( "cgi/users/review:send" ),
cancel => $session->phrase( "cgi/users/review:cancel" )
},
hidden_fields=>{
eprintid => $eprint->get_value( "eprintid" )
},
dest=>"review" ) );
$session->build_page( $title, $page, "review_remove_form" );
$session->send_page();
return;
}
##
## $wrote_page = handle_removal_request( $session, $user )
##
## Handle the POSTed information from a removal request form.
##
sub handle_removal_request
{
my( $session, $user ) = @_;
# Get the EPrint we're dealing with
my $ds = $session->get_archive()->get_dataset( "archive" );
my $eprint = EPrints::EPrint->new(
$session,
$session->param( "eprintid" ),
$ds );
if( !defined $eprint )
{
$session->render_error(
$session->html_phrase( "cgi/users/review:cant_find_it" ) );
return;
}
if( !$user->is_owner( $eprint ) )
{
$session->render_error(
$session->html_phrase( "cgi/users/review:cant_remove" ) );
return;
}
my $reason = $session->param( "reason" );
my $url = $session->get_archive()->get_conf( "perl_url" ).
"/users/staff/edit_eprint?eprintid=".$eprint->get_value( "eprintid" );
my $rc = $session->mail_administrator(
"cgi/users/review:remove_mail_subject",
"cgi/users/review:remove_mail",
citation=>$eprint->render_citation(),
user=>$user->render_description(),
email=>$user->render_value( "email" ),
reason=>( EPrints::Utils::is_set( $reason ) ? $session->make_text( $reason )
: $session->html_phrase( "cgi/users/review:no_reason" ) ),
url=>$session->make_text( $url ) );
if( !$rc )
{
$session->render_error(
$session->html_phrase( "general:email_failed" ) );
return;
}
my $title = $session->html_phrase( "cgi/users/review:remove_title" );
my $page = $session->make_doc_fragment();
$page->appendChild( $session->html_phrase( "cgi/users/review:done" ) );
$page->appendChild( $session->html_phrase( "general:userhome_link" ) );
$session->build_page( $title, $page, "review_remove_done" );
$session->send_page();
return;
}