###################################################################### # # 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_local", priv=>"deposit" }, ### View the Editor submission buffer { location=>"staff", code=>"staff_buffer", page=>"staff/buffer_local", 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( "div" ); } my $dl = $dls->{$tool->{location}}; $dt = $session->make_element( "p", style=>"font-weight: bold;" ); $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( "div", style=>"padding: 0em 2em 0em 2em;" ); $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" ) ); ### User workspace if( $user->has_priv( "deposit" ) ) { $page->appendChild( $session->html_phrase( "cgi/users/home:workspace" ) ); $table = $session->make_element("table",style=>"padding-bottom:2em; margin-top:-0.5em;",width=>"100%"); $tr = $session->make_element("tr"); $table->appendChild( $tr ); $page->appendChild( $table ); $td = $session->make_element("td",valign=>"top",width=>"50%", style=>"padding-right: 1.5em;"); $tr->appendChild( $td ); ### Begin new item $td->appendChild( $dls->{create} ); $td = $session->make_element("td",valign=>"top",width=>"50%", style=>"padding-left: 1.5em;"); $tr->appendChild( $td ); ### Review items in repository $td->appendChild( $dls->{review} ); $tr = $session->make_element("tr"); $table->appendChild( $tr ); $td = $session->make_element("td",valign=>"top",width=>"50%",style=>"padding-right:1em;"); $tr->appendChild( $td ); ### 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 ) ); } ### User options $page->appendChild( $session->html_phrase( "cgi/users/home:options" ) ); $table = $session->make_element("table", style=>"margin-top:-1.5em;"); $tr = $session->make_element("tr"); $table->appendChild( $tr ); $page->appendChild( $table ); if( defined $dls->{user} ) { if ( defined $dls->{staff} ) { $td = $session->make_element("td",valign=>"top", width=>"50%", style=>"padding-right: 1.5em;"); $td->appendChild( $session->html_phrase( "cgi/users/home:basic_options" ) ); } else { $td = $session->make_element("td",valign=>"top"); } $tr->appendChild( $td ); $td->appendChild( $dls->{user} ); } if( defined $dls->{staff} ) { if ( defined $dls->{user} ) { $td = $session->make_element("td",valign=>"top", style=>"padding-left: 1.5em;"); $td->appendChild( $session->html_phrase( "cgi/users/home:staff_options" ) ); } else { $td = $session->make_element("td",valign=>"top"); } $tr->appendChild( $td ); $td->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. $html->appendChild( $session->html_phrase( "cgi/users/home:no_depositing" )); 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, width=>"100%", class=>"compact" ); 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', width=>"40%" ); $tr->appendChild( $td ); $td->appendChild( $e->render_description() ); $td = $session->make_element( "td", class=>'last_col', width=>"60%", align=>"right" ); $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, width=>"100%", class=>"compact" ); $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", width=>"50%" ); $tr->appendChild( $td ); $td->appendChild( $e->render_description() ); $td = $session->make_element( "td", class=>"last_col", width=>"50%", align=>"right" ); $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, width=>"100%", class=>"compact" ); $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", width=>"50%" ); $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", width=>"50%", align=>"right" ); $tr->appendChild( $td ); $td->appendChild( $session->html_phrase( "cgi/users/home:accepted_at", time=>$e->render_value( "datestamp" ) ) ); $row=!$row; } } return $html; }