###################################################################### # # EPrints Registration Module # ###################################################################### # # This file is part of EPrints 2. # # Copyright (c) 2000,2001,2002 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::Session; use strict; my $session = new EPrints::Session; Apache::exit( 0 ) unless( defined $session ); my( $page, $title ) = make_page( $session ); $page->appendChild( $session->html_phrase( "general:frontpage_link" ) ); $session->build_page( $title, $page, "registration" ); $session->send_page(); $session->terminate(); sub make_page { my( $session ) = @_; my $fakeuser = EPrints::User::create_user( $session, $session->get_archive()->get_conf( "default_user_type" ) ); my $page = $session->make_doc_fragment; my $user_ds = $session->get_archive()->get_dataset( "user" ); ## We assume that the "default_user_type" dataset has the following fields: ## email ## password ## username ## usertype ## password should not be "required", others might be. ## my @fields = $user_ds->get_type_fields( $fakeuser->get_value( "usertype" ), 0 ); my $title = $session->html_phrase( "cgi/register:title" ); if( !$session->have_parameters() ) { $page->appendChild( $session->html_phrase( "cgi/register:intro" ) ); my @newfields = (); foreach my $field ( @fields ){ ## next if( $field->get_name eq "usertype" ); my $f = $field->clone(); $f->set_property( "confid", "register" ); push @newfields,$f; } my $buttons = { submit=>$session->phrase( "cgi/register:action_submit" ) }; $page->appendChild( $session->render_input_form( show_comment=>1, dataset=>$user_ds, type=>$fakeuser->get_value( "usertype" ), show_help=>1, show_names=>1, default_action=>"submit", buttons=>$buttons, fields=>\@newfields, dest=>"register" ) ); $fakeuser->remove; return( $page, $title ); } # Process the form. my $username; my @newfields = (); my %values = (); my $passwdrequired = 0; foreach my $field ( @fields ){ ## next if( $field->get_name eq "usertype" ); my $f = $field->clone(); $f->set_property( "confid", "register" ); my $value= $field->form_value ($session); $fakeuser->set_value($field->get_name, $value); if($field->get_name eq "password") { $passwdrequired=$user_ds->field_required_in_type($field,$fakeuser->get_value("usertype")); } push @newfields,$f; $values{$field->get_name} = $value; } my $email = $values{"email"}; my $newpassword = $values{ "password"}; my $username = $values{"username" }; $values{"password"} = ""; EPrints::Config::load_archive_config_module( $session->get_archive()->{id} ); my @problems = @{$fakeuser->EPrints::User::validate()}; if( $passwdrequired ? ( defined $newpassword && length($newpassword) < 3 ): (! defined $newpassword ) ) { push @problems, $session->html_phrase( "lib/user:missed_field", field => $session->make_text( $user_ds->get_field("password")->display_name( $session ) ) ); } if( scalar @problems == 0 && defined EPrints::User::user_with_username( $session, $username ) ) { push @problems, $session->html_phrase( "cgi/register:username_in_use", username=>$session->make_text( $username ) ) ; } if( scalar @problems == 0 ){ ## everything is OK $fakeuser->set_value( "newpassword", $newpassword ); my $pin = sprintf( "%04X%04X%04X%04X",int rand 0xffff,int rand 0xffff,int rand 0xffff,int rand 0xffff ); $fakeuser->set_value( "newemail", undef ); $fakeuser->set_value( "password", undef ); $fakeuser->set_value( "pin", $pin ); $fakeuser->set_value( "pinsettime", time() ); $fakeuser->commit(); $fakeuser->mail( "cgi/register:account", $session->html_phrase( "mail_password_pin", confirmurl => $session->make_text( $session->get_archive()->get_conf( "perl_url" )."/confirm?userid=".$fakeuser->get_value( "userid" )."&pin=".$pin ) ) ); $page->appendChild( $session->html_phrase( "cgi/register:mail_sent", email=>$session->make_text( $email ) ) ); return( $page, $title ); } $page->appendChild( $session->html_phrase( "lib/userform:form_incorrect" ) ); my $ul = $session->make_element( "ul" ); foreach my $problem ( @problems ) { my $li = $session->make_element( "li" ); $li->appendChild($problem); $ul->appendChild( $li ); } $page->appendChild( $ul ) ; my $buttons = { submit=>$session->phrase( "cgi/register:action_submit" ) }; $page->appendChild( $session->render_input_form( show_comment=>1, dataset=>$user_ds, type=>$fakeuser->get_value( "usertype" ), show_help=>1, show_names=>1, default_action=>"submit", buttons=>$buttons, fields=>\@newfields, values=>\%values, dest=>"register" ) ); $fakeuser->remove; return( $page, $session->html_phrase("cgi/register:error_title" ) ); }