diff --git a/Repositories/Misc/cgi/users/home_local b/Repositories/Misc/cgi/users/home_local new file mode 100755 index 0000000..b7214e5 --- /dev/null +++ b/Repositories/Misc/cgi/users/home_local @@ -0,0 +1,525 @@ +###################################################################### +# +# EPrints Author Home +# +###################################################################### +# +# 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::User; +use EPrints::Database; +use EPrints::Session; +use EPrints::EPrint; + +use strict; + + +###################################################################### +# +# Session initialisation +# +###################################################################### + +my $session = new EPrints::Session; +exit( 0 ) unless( defined $session ); + +# Any user can view this page, but most BE a user. +if( !$session->auth_check ) +{ + $session->terminate(); + exit( 0 ); +} + +# If we were sent here by change_user then we have an icky url +# eg .../home/username rather than .../home +# let's clean it up... +if( $ENV{PATH_INFO} ne "" ) +{ + $session->redirect( $session->get_archive()->get_conf( "userhome" ) ); + $session->terminate(); + exit; +} + +my $user = $session->current_user; + +my $fullname = $user->render_description(); + +my $probs = $user->validate(); +my $valid_user = ( scalar @{$probs} == 0 ); + +# If not a valid user then redirect them to the user-info page. +# This'll give us info like "name". +unless( $valid_user ) +{ + $session->redirect( "record" ); + $session->terminate(); + exit; +} + +###################################################################### +# +# Render page +# +###################################################################### + +my( $page, $dt, $dd, $a ); +my( $table, $tr, $td ); + + + +my $changeuserpath = "/change_user/".($user->get_value( "username" )); +my $securehost = $session->get_archive->get_conf( "securehost" ); +my $securepath = $session->get_archive->get_conf( "securepath" ); +if( EPrints::Utils::is_set( $securehost ) ) +{ + $changeuserpath = $securepath.$changeuserpath; +} + +my $tools = [ + ### Create New Item + { + location=>"create", + code=>"new_item", + page=>"submit?_action_new=1", + priv=>"deposit" + }, + ### Change User Info + { + location=>"user", + code=>"change", + page=>"record", + invpriv=>"no_edit_own_record" + }, + ### Change subscription options + { + location=>"user", + code=>"subscribe", + page=>"subscribe", + priv=>"subscription" + }, + ### View the archive status page + { + location=>"staff", + code=>"status", + page=>"status", + priv=>"view-status" + }, + ### Review items we've got in archive + { + location=>"review", + code=>"review", + page=>"review", + priv=>"deposit" + }, + ### View the Editor submission buffer + { + location=>"staff", + code=>"staff_buffer", + page=>"staff/buffer", + priv=>"editor" + }, + ### Staff EPrints Search + { + location=>"staff", + code=>"staff_eprint_search", + page=>"search", + priv=>"staff-view" + }, + ### Staff User Search + { + location=>"staff", + code=>"staff_user_search", + page=>"search/users", + priv=>"staff-view" + }, + ### Add New User + { + location=>"staff", + code=>"staff_add_user", + page=>"staff/add_user", + priv=>"edit-user" + }, + ### Change Email + { + location=>"user", + code=>"change_email", + page=>"change_email", + priv=>"change-email" + }, + ### Use the Subject Edit Tool + { + location=>"staff", + code=>"staff_edit_subject", + page=>"staff/edit_subject", + priv=>"edit-subject" + }, + ### Change the current login user + { + location=>"user", + code=>"change_user", + page=>$changeuserpath, + priv=>"change-user" + } +]; + + + + +my $sb = $session->get_archive()->get_conf( "skip_buffer" ); +my $dls = {}; +my $tool; +foreach $tool (@{$tools}) +{ + # disable buffer option if skip_buffer is in effect: + if( $tool->{code} eq 'staff_buffer' && defined $sb && $sb == 1 ) + { + next; + } + + + if( defined $tool->{priv} ) + { + next unless $user->has_priv( $tool->{priv} ); + } + if( defined $tool->{invpriv} ) + { + next if $user->has_priv( $tool->{invpriv} ); + } + if( !defined $dls->{$tool->{location}} ) + { + $dls->{$tool->{location}} = $session->make_element( "dl" ); + } + my $dl = $dls->{$tool->{location}}; + $dt = $session->make_element( "dt" ); + $a = $session->render_link( $tool->{page} ); + $a->appendChild( $session->html_phrase( "cgi/users/home:".$tool->{code}."_link" ) ); + $dt->appendChild( $a ); + $dl->appendChild( $dt ); + + $dd = $session->make_element( "dd" ); + $dd->appendChild( $session->html_phrase( "cgi/users/home:".$tool->{code}."_info" ) ); + $dl->appendChild( $dd ); +} + + + + + + + + +$page = $session->make_doc_fragment(); + +### Welcome author blurb +$page->appendChild( $session->html_phrase( "cgi/users/home:intro" ) ); + +$page->appendChild( $session->html_phrase( "cgi/users/home:basic_options" ) ); + +$table = $session->make_element("table"); +$tr = $session->make_element("tr"); +$table->appendChild( $tr ); +$page->appendChild( $table ); + +if( $user->has_priv( "deposit" ) ) +{ + $td = $session->make_element("td",valign=>"top",width=>"50%"); + $tr->appendChild( $td ); + + my $div; + + ### Begin new item + $div = $session->make_element("div"); + $div->appendChild( $dls->{create} ); + $td->appendChild( $div ); + + ### Review items in repository + $div = $session->make_element("div"); + $div->appendChild( $dls->{review} ); + $td->appendChild( $div ); +} + +if( defined $dls->{user} ) +{ + $td = $session->make_element("td",valign=>"top", style=>"padding-left: 3em;"); + $tr->appendChild( $td ); + $td->appendChild( $dls->{user} ); +} + +$page->appendChild( $session->html_phrase( "cgi/users/home:workspace" ) ); + +$table = $session->make_element("table",style=>"padding-bottom:1.5em;"); +$tr = $session->make_element("tr"); +$table->appendChild( $tr ); +$page->appendChild( $table ); + +if( $user->has_priv( "deposit" ) ) +{ + $td = $session->make_element("td",valign=>"top",width=>"50%",style=>"padding-right:1em;"); + $tr->appendChild( $td ); + + my $div; + + ### Workspace + $td->appendChild( &render_workspace( $session, $user ) ); + + ### Pending + $td->appendChild( &render_pending( $session, $user ) ); + + $td = $session->make_element("td",valign=>"top",width=>"50%",style=>"padding-left:1em;"); + $tr->appendChild( $td ); + + ### Recent Additions + $td->appendChild( &render_recent( $session, $user, 10 ) ); +} + + +if( defined $dls->{staff} ) +{ + $page->appendChild( $session->html_phrase( "cgi/users/home:staff_options" ) ); + $page->appendChild( $dls->{staff} ); +} + + + +$session->build_page( + $session->html_phrase( + "cgi/users/home:user_home", + name => $fullname ), + $page, + "user_home" ); +$session->send_page(); + +$session->terminate(); +exit; + + + +###################################################################### +# +# render_workspace( $session, $user ) +# +# This puts all of the user's items in the inbox table in a form. +# The buttons will POST stuff to the submit script, with the possible +# actions: +# +# New (Create a new EPrint) +# Edit (Edit a selected EPrint) +# Clone (Clone the selected EPrint) +# Delete (Delete the selected EPrint) +# Deposit (Submit the selected EPrint to the archive) +# +# +# If the user has no items in the inbox, a single button is drawn, +# Allowing them to start the upload process. +# +###################################################################### + +sub render_workspace +{ + my( $session, $user ) = @_; + + ### Get the actual items in the workspace + my $ds = $session->get_archive()->get_dataset( "inbox" ); + my @eprints = $user->get_owned_eprints( $ds ); + + my( $html, $form, $div ); + + $html = $session->make_doc_fragment(); + $html->appendChild( $session->html_phrase( "cgi/users/home:docs" )); + + if( scalar @eprints == 0) + { + # No items, oh well. + return $html; + } + + # One or more items in workspace. + # Render a form to let the user fiddle with them. + + my( $table, $tr, $td ); + + $table = $session->make_element( "table", + cellpadding=>3, + cellspacing=>0, + border=>0 ); + my $e; + my $cnt = 0; + my $row = 0; + foreach $e (@eprints) + { + $tr = $session->make_element( "tr", class=>"row_".($row?"b":"a") ); + $table->appendChild( $tr ); + $td = $session->make_element( "td", class=>'first_col userpage_table_emph' ); + $tr->appendChild( $td ); + $td->appendChild( $e->render_description() ); + $td = $session->make_element( "td", class=>'last_col' ); + $tr->appendChild( $td ); + # $td->appendChild( $session->html_phrase( + # "cgi/users/home:accepted_at", + # time=>$e->render_value( "datestamp" ) ) ); + my $a; + + $a = $session->render_link( "submit?eprintid=".$e->get_id."&_action_edit=1" ); + $a->appendChild( $session->html_phrase("cgi/users/home:action_edit") ); + $td->appendChild( $a ); + + $td->appendChild( $session->make_text( ", " ) ); + + $a = $session->render_link( "submit?eprintid=".$e->get_id."&_action_submit=1" ); + $a->appendChild( $session->html_phrase("cgi/users/home:action_submit") ); + $td->appendChild( $a ); + + $td->appendChild( $session->make_text( ", " ) ); + + $a = $session->render_link( "submit?eprintid=".$e->get_id."&_action_copy=1" ); + $a->appendChild( $session->html_phrase("cgi/users/home:action_copy") ); + $td->appendChild( $a ); + + $td->appendChild( $session->make_text( ", " ) ); + + $a = $session->render_link( "submit?eprintid=".$e->get_id."&_action_delete=1" ); + $a->appendChild( $session->html_phrase("cgi/users/home:action_delete") ); + $td->appendChild( $a ); + $row=!$row; + } + + $html->appendChild( $session->html_phrase( "cgi/users/home:depositing" ) ); + $html->appendChild( $table ); + + return $html; +} + + + +###################################################################### +# +# render_pending( $session, $user) +# +# Render any items that are in the submissions buffer, if any +# +###################################################################### + +sub render_pending +{ + my( $session, $user ) = @_; + + ### Get the items in the buffer + my $ds = $session->get_archive()->get_dataset( "buffer" ); + my @eprints = $user->get_owned_eprints( $ds ); + + my $html = $session->make_doc_fragment(); + + $html->appendChild( $session->html_phrase( "cgi/users/home:pending_title" ) ); + + if( scalar @eprints == 0 ) + { + $html->appendChild( $session->html_phrase( "cgi/users/home:no_pending" ) ); + } + else + { + my( $table, $tr, $td ); + + $table = $session->make_element( "table", + cellpadding=>3, + cellspacing=>0, + border=>0 ); + $html->appendChild( $table ); + my $row = 0; + foreach my $e (@eprints) + { + $tr = $session->make_element( "tr", class=>"row_".($row?"b":"a") ); + $table->appendChild( $tr ); + $td = $session->make_element( "td", class=>"first_col userpage_table_emph" ); + $tr->appendChild( $td ); + $td->appendChild( $e->render_description() ); + $td = $session->make_element( "td", class=>"last_col" ); + $tr->appendChild( $td ); + $td->appendChild( $session->html_phrase( + "cgi/users/home:deposited_at", + time=>$e->render_value( "datestamp" ) ) ); + $row=!$row; + } + } + return $html; +} + + +###################################################################### +# +# render_recent( $session, $user, $max, $review ) +# +# Render any items that have been recently accepted into the main +# archive. +# +###################################################################### + +sub render_recent +{ + my( $session, $user, $max ) = @_; + + ### Get the items in the buffer + my $ds = $session->get_archive()->get_dataset( "archive" ); + my @eprints = $user->get_owned_eprints( $ds ); + + my $html = $session->make_doc_fragment(); + + $html->appendChild( $session->html_phrase( "cgi/users/home:recent_title" ) ); + + if( scalar @eprints == 0 ) + { + $html->appendChild( $session->html_phrase( "cgi/users/home:no_recent" ) ); + } + else + { + my( $table, $tr, $td ); + + $table = $session->make_element( "table", + cellpadding=>3, + cellspacing=>0, + border=>0 ); + $html->appendChild( $table ); + my $e; + my $cnt = 0; + my $row = 0; + foreach $e (reverse @eprints) +#cjg not exactly the right way! +#cjg should really do it by deposit date + { + last if( $cnt++ == $max ); + $tr = $session->make_element( "tr", class=>"row_".($row?"b":"a") ); + $table->appendChild( $tr ); + $td = $session->make_element( "td", class=>"first_col userpage_table_emph" ); + $tr->appendChild( $td ); + my $a = $session->render_link( $e->get_url() ); + $a->appendChild( $e->render_description() ); + $td->appendChild( $a ); + $td = $session->make_element( "td", class=>"last_col" ); + $tr->appendChild( $td ); + $td->appendChild( $session->html_phrase( + "cgi/users/home:accepted_at", + time=>$e->render_value( "datestamp" ) ) ); + $row=!$row; + } + } + + return $html; +} +