diff --git a/Repositories/Misc/cgi/users/review_local b/Repositories/Misc/cgi/users/review_local new file mode 100755 index 0000000..5cee6c5 --- /dev/null +++ b/Repositories/Misc/cgi/users/review_local @@ -0,0 +1,356 @@ +###################################################################### +# +# 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; +} +