--- loncom/interface/createaccount.pm 2010/12/02 02:15:11 1.37.2.5 +++ loncom/interface/createaccount.pm 2012/05/01 16:09:26 1.40.2.5.2.17 @@ -3,7 +3,7 @@ # institutional log-in ID (institutional authentication required - localauth # or kerberos) or an e-mail address. # -# $Id: createaccount.pm,v 1.37.2.5 2010/12/02 02:15:11 raeburn Exp $ +# $Id: createaccount.pm,v 1.40.2.5.2.17 2012/05/01 16:09:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,6 +57,8 @@ sub handler { my $sso_username = $r->subprocess_env->get('REDIRECT_SSOUserUnknown'); my $sso_domain = $r->subprocess_env->get('REDIRECT_SSOUserDomain'); + my $privkey = $r->dir_config('reCAPTCHA_PRIVATE'); + my $pubkey = $r->dir_config('reCAPTCHA_PUBLIC'); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['token','courseid']); &Apache::lonacc::get_posted_cgi($r); @@ -100,6 +102,10 @@ sub handler { my ($js,$courseid,$title); if (defined($env{'form.courseid'})) { $courseid = &validate_course($env{'form.courseid'}); + if (($courseid eq 'relate_3H121116c19344ff3relatel1') || + ($courseid eq 'relate_3e100973b27484f2drelatel1')) { + $courseid = 'relate_2764113e81b9e4f0crelatel1'; + } } if ($courseid ne '') { $js = &catreturn_js(); @@ -139,7 +145,6 @@ sub handler { $start_page = &Apache::loncommon::start_page($title,$js, {'no_inline_link' => 1,}); - my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$domain); my ($cancreate,$statustocreate) = &get_creation_controls($domain,$domconfig{'usercreation'}); @@ -147,7 +152,7 @@ sub handler { &print_header($r,$start_page,$courseid); my $output = '

'.&mt('Account creation unavailable').'

'. ''. - &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as username is not permitted for the GCI WebCenter.').'

'; + &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as username is not permitted for [_1].',$domdesc).'

'; $r->print($output); &print_footer($r); return OK; @@ -226,7 +231,7 @@ sub handler { $output = &process_email_request($env{'form.useremail'},$domain,$domdesc, $contact_name,$contact_email,$cancreate, $lonhost,$domconfig{'usercreation'}, - $courseid); + $courseid,$privkey); } elsif (!$token) { &print_header($r,$start_page,$courseid); my $now=time; @@ -239,13 +244,22 @@ sub handler { $r->print(&javascript_validmail()); } $output = &print_username_form($domain,$domdesc,$cancreate,$now,$lonhost, - $courseid); + $courseid,$pubkey); } $r->print($output); &print_footer($r); return OK; } +sub get_custom_name { + my ($domain) = @_; + if ($domain eq 'relate') { + return 'Mechanics Online'; + } else { + return lc($domain); + } +} + sub print_header { my ($r,$start_page,$courseid) = @_; $r->print($start_page); @@ -286,7 +300,7 @@ sub selfenroll_crumbs { } my $last_crumb; if ($desc ne '') { - $last_crumb = &mt('Self-enroll in [_1]',''.$desc.''); + $last_crumb = &mt('Self-enroll in [_1]',"$desc"); } else { $last_crumb = &mt('Self-enroll'); } @@ -379,7 +393,7 @@ function validate_email() { var lcemail = emailaddr.toLowerCase(); if (emailaddr != lcemail) { field.value = lcemail; - alert("WebCenter usernames are all lower case.\\nAccordingly your username will be "+lcemail+" once activated."); + alert("Mechanics Online usernames are all lower case.\\nAccordingly your username will be "+lcemail+" once activated."); } } return true; @@ -390,36 +404,54 @@ ENDSCRIPT } sub print_username_form { - my ($domain,$domdesc,$cancreate,$now,$lonhost,$courseid) = @_; - my %lt = &Apache::lonlocal::texthash( - unam => 'username', - udom => 'domain', - uemail => 'E-mail address in LON-CAPA', - proc => 'Proceed'); + my ($domain,$domdesc,$cancreate,$now,$lonhost,$courseid,$pubkey) = @_; + my %lt = &Apache::lonlocal::texthash ( + unam => 'username', + udom => 'domain', + uemail => 'E-mail address in LON-CAPA', + proc => 'Proceed', + crea => 'Create account with a username provided by this institution', + crlc => 'Create LON-CAPA account', + type => 'Type in your log-in ID and password to find out.', + plse => 'Please enter a valid e-mail address below.', + inst => 'Instructions on how to activate your account will be sent to the e-mail address you provide.', + aftr => 'After completing the activation process you will be directed to the course.', + ther => 'There you will have access to a "self test" that will help you assess your readiness for the course.', + ywil => 'You will also have access to introductory material and to the course schedule and policies.', + yous => 'Your user id for the course is your email address.', + ); my $output; if (ref($cancreate) eq 'ARRAY') { if (grep(/^login$/,@{$cancreate})) { my %domdefaults = &Apache::lonnet::get_domain_defaults($domain); if ((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth')) { - $output = '

'.&mt('Create account with a username provided by this institution').'

'; - my $submit_text = &mt('Create LON-CAPA account'); - $output .= &mt('If you already have a log-in ID at this institution,[_1] you may be able to use it for LON-CAPA.','
').'

'.&mt('Type in your log-in ID and password to find out.').'

'; + $output = '

'.$lt{'crea'}.'

'; + my $submit_text = $lt{'crlc'}; + $output .= &mt('If you already have a log-in ID at this institution,[_1] you may be able to use it for LON-CAPA.','
'). + '

'.$lt{'type'}.'

'; $output .= &login_box($now,$lonhost,$courseid,$submit_text, $domain,'createaccount').'
'; } } if (grep(/^email$/,@{$cancreate})) { - $output .= '

'.&mt('Create account with an e-mail address as your username').'

'; - my $captchaform = &create_recaptcha(); + $output .= '

'.&mt('Create account with an e-mail address as your username').'

'. + '

'. + &mt('You are about to sign-up for the [_1]Mechanics Online[_2] course.','','').'
'. + $lt{'plse'}.'

    '. + '
  • '.$lt{'inst'}.'
  • '. + '
  • '.$lt{'aftr'}.'
    '.$lt{'ther'}.'
    '. + $lt{'ywil'}.'
  • '. + '
  • '.$lt{'yous'}.'
'; + my $captchaform = &create_recaptcha($pubkey); if ($captchaform) { - my $submit_text = &mt('Request LON-CAPA account'); + my $submit_text = &mt('Sign-up'); my $emailform = ''; if (grep(/^login$/,@{$cancreate})) { - $output .= &mt('Provide your e-mail address to request a LON-CAPA account,[_1] if you do not have a log-in ID at your institution.','
').'

'; + $output .= &mt('Provide your e-mail address to sign up for a Mechanics Online account [_1]if you do not have a log-in ID at your institution.','
').'

'; } else { $output .= '
'; } - $output .= '
'. + $output .= ''. &Apache::lonhtmlcommon::start_pick_box()."\n". &Apache::lonhtmlcommon::row_title(&mt('E-mail address'), 'LC_pick_box_title')."\n". @@ -469,12 +501,12 @@ sub login_box { ); my ($lkey,$ukey) = &Apache::lonpreferences::des_keys(); my ($lextkey,$uextkey) = &getkeys($lkey,$ukey); - my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount', + my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount:createaccount', $lonhost); $output = &serverform($logtoken,$lonhost,undef,$courseid,$context); my $unameform = ''; my $upassform = ''; - $output .= ''."\n". + $output .= ''."\n". ''. &Apache::lonhtmlcommon::start_pick_box()."\n". &Apache::lonhtmlcommon::row_title($titles{$context}, @@ -483,8 +515,8 @@ sub login_box { &Apache::lonhtmlcommon::row_closure(1)."\n". &Apache::lonhtmlcommon::row_title(&mt('Password'), 'LC_pick_box_title')."\n". - $upassform; - $output .= &Apache::lonhtmlcommon::row_closure(1). + $upassform. + &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::row_title(). '
'."\n"; @@ -504,7 +536,7 @@ sub login_box { sub process_email_request { my ($useremail,$domain,$domdesc,$contact_name,$contact_email,$cancreate, - $server,$settings,$courseid) = @_; + $server,$settings,$courseid,$privkey) = @_; $useremail = lc($env{'form.useremail'}); my $output; if (ref($cancreate) eq 'ARRAY') { @@ -526,11 +558,12 @@ sub process_email_request { my $captcha = Captcha::reCAPTCHA->new; my $captcha_result = $captcha->check_answer( - 'PRIVATEKEY', + $privkey, $ENV{'REMOTE_ADDR'}, $env{'form.recaptcha_challenge_field'}, $env{'form.recaptcha_response_field'}, ); + # PRIVATE key from https://www.google.com/recaptcha if (!$captcha_result->{is_valid}) { $output = &invalid_state('captcha',$domdesc,$contact_name, $contact_email); @@ -541,7 +574,7 @@ sub process_email_request { if ($uhome eq 'no_host') { my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts); &call_rulecheck($useremail,$domain,\%alerts,\%rulematch, - \%inst_results,\%curr_rules,%got_rules,'username'); + \%inst_results,\%curr_rules,\%got_rules,'username'); if (ref($alerts{'username'}) eq 'HASH') { if (ref($alerts{'username'}{$domain}) eq 'HASH') { if ($alerts{'username'}{$domain}{$useremail}) { @@ -585,7 +618,7 @@ sub call_rulecheck { sub send_token { my ($domain,$email,$server,$domdesc,$contact_name,$contact_email,$courseid) = @_; my $msg = '

'.&mt('Account creation status').'

'. - &mt('Thank you for your request to create a new LON-CAPA account.'). + &mt('Thank you for your request to create a new Mechanics Online account.'). '

'; my $now = time; my %info = ('ip' => $ENV{'REMOTE_ADDR'}, @@ -593,17 +626,31 @@ sub send_token { 'domain' => $domain, 'username' => $email, 'courseid' => $courseid); - my $token = &Apache::lonnet::tmpput(\%info,$server); + my $token = &Apache::lonnet::tmpput(\%info,$server,'createaccount'); if ($token !~ /^error/ && $token ne 'no_such_host') { my $esc_token = &escape($token); - my $showtime = localtime(time); - my $mailmsg = &mt('A request was submitted on [_1] for creation of a GCI WebCenter account.',$showtime)." \n". - &mt('To complete this process please open a web browser and enter the following URL in the address/location box: [_1]', - "\n\n".&Apache::lonnet::absolute_url().'/adm/createaccount?token='.$esc_token); - my $result = &Apache::resetpw::send_mail($domdesc,$email,$mailmsg,$contact_name, - $contact_email); + my $mailsubj = &mt('Your Mechanics Online Course Account'); + my $msgfrom = &mt('Mechanics Online Course Staff'); + my $mailmsg = &mt('Greetings.')."\n\n". + &mt('Thank you for your interest in our Online Mechanics Course.'). + ' '. + &mt('In order to complete the registration process, please open the following link in your web browser:'). + "\n\n". + &Apache::lonnet::absolute_url().'/adm/createaccount?token='.$esc_token. + "\n\n". + &mt('This link will take you to a sign-up page where you will be asked to provide some general information and finalize the registration process.'). + ' '. + &mt('A self-test (for review) is available within the course, for you to test your level of preparation.'). + "\n\n". + &mt('Best Regards,'). + "\n\n". + &mt('RELATE Group')."\n"; + + my $result = &Apache::resetpw::send_mail('MIT',$email,$mailmsg, + $msgfrom,$contact_email, + $mailsubj); if ($result eq 'ok') { - $msg .= &mt('A message has been sent to the e-mail address you provided.').'
'.&mt('The message includes the web address for the link you will use to complete the account creation process.').'
'.&mt("The link included in the message will be valid for the next [_1]two[_2] hours.",'',''); + $msg .= &mt('A message has been sent to the e-mail address you provided.').'
'.&mt('The message includes the web address for the link you will use to complete the sign-up process.').'
'.&mt("The link included in the message will be valid for the next [_1]two[_2] hours.",'',''); } else { $msg .= ''. &mt('An error occurred when sending a message to the e-mail address you provided.').'
'. @@ -639,7 +686,7 @@ sub process_mailtoken { if ($result eq 'ok') { $msg = $output; my $shownow = &Apache::lonlocal::locallocaltime($now); - my $mailmsg = &mt('A GCI WebCenter account has been created [_1] from IP address: [_2]. If you did not perform this action or authorize it, please contact the [_3] ([_4]).',$shownow,$ENV{'REMOTE_ADDR'},$contact_name,$contact_email)."\n"; + my $mailmsg = &mt('A [_1] account has been created [_2] from IP address: [_3]. If you did not perform this action or authorize it, please contact the [_4] ([_5]).',$domdesc,$shownow,$ENV{'REMOTE_ADDR'},$contact_name,$contact_email)."\n"; my $mailresult = &Apache::resetpw::send_mail($domdesc,$data{'email'}, $mailmsg,$contact_name, $contact_email); @@ -650,7 +697,7 @@ sub process_mailtoken { } my %form = &start_session($r,$data{'username'},$domain, $lonhost,$data{'courseid'}, - $token); + $token,'new'); $nostart = 1; $noend = 1; } else { @@ -677,7 +724,7 @@ sub process_mailtoken { } sub start_session { - my ($r,$username,$domain,$lonhost,$courseid,$token) = @_; + my ($r,$username,$domain,$lonhost,$courseid,$token,$usertype) = @_; my %form = ( uname => $username, udom => $domain, @@ -688,6 +735,9 @@ sub start_session { if ($courseid ne '') { $form{'courseid'} = $courseid; $firsturl = '/adm/selfenroll?courseid='.$courseid; + if ($usertype) { + $firsturl .= '&usertype='.$usertype; + } } } if ($r->dir_config('lonBalancer') eq 'yes') { @@ -717,7 +767,7 @@ sub print_dataentry_form { $output .= &javascript_setforms($now)."\n".&javascript_checkpass($now); my ($lkey,$ukey) = &Apache::lonpreferences::des_keys(); my ($lextkey,$uextkey) = &getkeys($lkey,$ukey); - my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount', + my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount:createaccount', $lonhost); my $formtag = ''; my ($datatable,$rowcount) = @@ -746,7 +796,7 @@ ENDSERVERFORM my $upasstwo = ''; my $submit_text = &mt('Create LON-CAPA account'); $output .= '

'.&mt('Login Data').'

'."\n". - ''."\n". &Apache::lonhtmlcommon::start_pick_box()."\n". &Apache::lonhtmlcommon::row_title(&mt('Username'), @@ -791,6 +841,17 @@ sub get_creation_controls { if (ref($usercreation->{'cancreate'}) eq 'HASH') { if (ref($usercreation->{'cancreate'}{'statustocreate'}) eq 'ARRAY') { @statustocreate = @{$usercreation->{'cancreate'}{'statustocreate'}}; + if (@statustocreate == 0) { + my ($othertitle,$usertypes,$types) = + &Apache::loncommon::sorted_inst_types($domain); + if (ref($types) eq 'ARRAY') { + if (@{$types} == 0) { + @statustocreate = ('default'); + } + } else { + @statustocreate = ('default'); + } + } } else { @statustocreate = ('default'); my ($othertitle,$usertypes,$types) = @@ -912,7 +973,7 @@ sub username_check { my (%rulematch,%inst_results,$checkfail,$rowcount,$editable,$output,$msg, %alerts,%curr_rules,%got_rules); &call_rulecheck($username,$domain,\%alerts,\%rulematch, - \%inst_results,\%curr_rules,%got_rules,'username'); + \%inst_results,\%curr_rules,\%got_rules,'username'); if (ref($alerts{'username'}) eq 'HASH') { if (ref($alerts{'username'}{$domain}) eq 'HASH') { if ($alerts{'username'}{$domain}{$username}) { @@ -958,7 +1019,7 @@ sub username_check { 'time' => $now, 'domain' => $domain, 'username' => $username); - my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost); + my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost,'createaccount'); if ($authtoken !~ /^error/ && $authtoken ne 'no_such_host') { $output .= ''; } else { @@ -969,7 +1030,7 @@ sub username_check { } } if ($checkfail) { - $msg = '

'.&mt('Account creation unavailable').'

'; + $msg = '

'.&mt('Account creation unavailable').'

'; if ($checkfail eq 'username') { $msg .= ''. &mt('A LON-CAPA account may not be created with the username you use.'). @@ -995,7 +1056,7 @@ sub username_check { if ($rowcount) { if ($editable) { if ($courseid ne '') { - $msg = '

'.&mt('User information').'

'; + $msg = '

'.&mt('User information').'

'; } $msg .= &mt('To create one, use the table below to provide information about yourself, then click the [_1]Create LON-CAPA account[_2] button.','','').'
'; } else { @@ -1059,7 +1120,7 @@ sub username_activation { # Call modifyuser my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts,%info); &call_rulecheck($username,$domain,\%alerts,\%rulematch, - \%inst_results,\%curr_rules,%got_rules); + \%inst_results,\%curr_rules,\%got_rules); my @userinfo = ('firstname','middlename','lastname','generation', 'permanentemail','id'); my %canmodify = @@ -1086,7 +1147,7 @@ sub username_activation { if ($result eq 'ok') { my $delete = &Apache::lonnet::tmpdel($env{'form.authtoken'}); $output = &mt('A LON-CAPA account has been created for username: [_1] in domain: [_2].',$username,$domain); - my %form = &start_session($r,$username,$domain,$lonhost,$courseid); + my %form = &start_session($r,$username,$domain,$lonhost,$courseid,undef,'new'); my $nostart = 1; return ('ok',$output,$nostart); } else { @@ -1134,7 +1195,7 @@ sub invalid_state { if ($error eq 'baduseremail') { $msg .= &mt('The e-mail address you provided does not appear to be a valid address.'); } elsif ($error eq 'existinguser') { - my $uname = &HTML::Entities::encode($useremail); + my $uname = &HTML::Entities::encode($useremail); $msg .= &mt('The e-mail address you provided is already in use as a username in LON-CAPA at this institution.').'


'.&mt('You can either:').'
    '. '
  • '.&mt('Return to the [_1]log-in page[_2] and enter your password.','','').'
  • '. '
  • '.&mt('or, if you do not remember your password, visit the "[_1]Forgot your password?[_2]" page.','',''). @@ -1152,16 +1213,22 @@ sub invalid_state { if ($msgtext) { $msg .= '
    '.$msgtext; } - $msg .= &linkto_email_help($contact_email,$domdesc); + $msg .= &linkto_email_help($contact_email,$domdesc,$error); return $msg; } sub linkto_email_help { - my ($contact_email,$domdesc) = @_; + my ($contact_email,$domdesc,$error) = @_; my $msg; + my $href = '/adm/helpdesk'; if ($contact_email ne '') { my $escuri = &HTML::Entities::encode('/adm/createaccount','&<>"'); - $msg .= '
    '.&mt('You may wish to contact the [_1]LON-CAPA helpdesk[_2] for [_3].','','',$domdesc).'
    '; + $href .= '?origurl='.$escuri; + if ($error eq 'existinguser') { + my $escemail = &HTML::Entities::encode($env{'form.useremail'}); + $href .= '&useremail='.$escemail.'&useraccount='.$escemail; + } + $msg .= '
    '.&mt('You may wish to contact the [_1]LON-CAPA helpdesk[_2] for [_3].','','',$domdesc).'
    '; } else { $msg .= '
    '.&mt('You may wish to send an e-mail to the server administrator: [_1] for [_2].',$Apache::lonnet::perlvar{'AdminEmail'},$domdesc).'
    '; } @@ -1169,10 +1236,11 @@ sub linkto_email_help { } sub create_recaptcha { + my ($pubkey) = @_; my $captcha = Captcha::reCAPTCHA->new; + # generate PUBLICKEY from https://www.google.com/recaptcha return $captcha->get_options_setter({theme => 'white'})."\n". - $captcha->get_html('PUBLICKEY'); # generate public key for IP - # from http://recaptcha.net/ + $captcha->get_html($pubkey); } sub getkeys {