###################################################################### # # 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; }