version 1.164, 2012/08/21 21:12:08
|
version 1.165, 2012/08/25 04:34:44
|
Line 410 sub handler {
|
Line 410 sub handler {
|
if ($phase eq 'process') { |
if ($phase eq 'process') { |
&Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); |
&Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); |
} elsif ($phase eq 'display') { |
} elsif ($phase eq 'display') { |
my $js; |
my $js = &recaptcha_js(); |
if (keys(%servers) > 1) { |
if (keys(%servers) > 1) { |
my ($othertitle,$usertypes,$types) = |
my ($othertitle,$usertypes,$types) = |
&Apache::loncommon::sorted_inst_types($dom); |
&Apache::loncommon::sorted_inst_types($dom); |
Line 2350 sub print_helpsettings {
|
Line 2350 sub print_helpsettings {
|
$datatable .= '</span></td></tr>'; |
$datatable .= '</span></td></tr>'; |
|
|
} |
} |
|
|
return $datatable; |
return $datatable; |
|
|
} |
} |
|
|
|
|
Line 3266 sub print_usercreation {
|
Line 3264 sub print_usercreation {
|
} |
} |
my ($othertitle,$usertypes,$types) = |
my ($othertitle,$usertypes,$types) = |
&Apache::loncommon::sorted_inst_types($dom); |
&Apache::loncommon::sorted_inst_types($dom); |
|
my $createsettings; |
|
if (ref($settings) eq 'HASH') { |
|
$createsettings = $settings->{cancreate}; |
|
} |
if (ref($usertypes) eq 'HASH') { |
if (ref($usertypes) eq 'HASH') { |
if (keys(%{$usertypes}) > 0) { |
if (keys(%{$usertypes}) > 0) { |
my $createsettings; |
|
if (ref($settings) eq 'HASH') { |
|
$createsettings = $settings->{cancreate}; |
|
} |
|
$datatable .= &insttypes_row($createsettings,$types,$usertypes, |
$datatable .= &insttypes_row($createsettings,$types,$usertypes, |
$dom,$numinrow,$othertitle, |
$dom,$numinrow,$othertitle, |
'statustocreate'); |
'statustocreate'); |
$$rowtotal ++; |
$$rowtotal ++; |
} |
} |
} |
} |
|
$datatable .= &captcha_choice('cancreate',$createsettings); |
} else { |
} else { |
my @contexts = ('author','course','domain'); |
my @contexts = ('author','course','domain'); |
my @authtypes = ('int','krb4','krb5','loc'); |
my @authtypes = ('int','krb4','krb5','loc'); |
Line 3329 sub print_usercreation {
|
Line 3328 sub print_usercreation {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
|
sub captcha_choice { |
|
my ($context,$settings) = @_; |
|
my ($keyentry,$currpub,$currpriv,%checked,$rowname,$pubtext,$privtext); |
|
my %lt = &captcha_phrases(); |
|
$keyentry = 'hidden'; |
|
if ($context eq 'cancreate') { |
|
$rowname = &mt('CAPTCHA validation (e-mail as username)'); |
|
} elsif ($context eq 'help') { |
|
$rowname = &mt('CAPTCHA validation'); |
|
} |
|
if (ref($settings) eq 'HASH') { |
|
if ($settings->{'captcha'}) { |
|
$checked{$settings->{'captcha'}} = ' checked="checked"'; |
|
} else { |
|
$checked{'original'} = ' checked="checked"'; |
|
} |
|
if ($settings->{'captcha'} eq 'recaptcha') { |
|
$pubtext = $lt{'pub'}; |
|
$privtext = $lt{'priv'}; |
|
$keyentry = 'text'; |
|
} |
|
if (ref($settings->{'recaptchakeys'}) eq 'HASH') { |
|
$currpub = $settings->{'recaptchakeys'}{'public'}; |
|
$currpriv = $settings->{'recaptchakeys'}{'private'}; |
|
} |
|
} else { |
|
$checked{'original'} = ' checked="checked"'; |
|
} |
|
my $output = '<tr class="LC_odd_row">'. |
|
'<td class="LC_left_item">'.$rowname.'</td><td class="LC_right_item" colspan="2">'."\n". |
|
'<table><tr><td>'."\n"; |
|
foreach my $option ('original','recaptcha','notused') { |
|
$output .= '<span class="LC_nobreak"><label><input type="radio" name="'.$context.'_captcha" value="'. |
|
$option.'" '.$checked{$option}.' onchange="javascript:updateCaptcha('."this,'$context'".');" />'. |
|
$lt{$option}.'</label></span>'; |
|
unless ($option eq 'notused') { |
|
$output .= (' 'x2)."\n"; |
|
} |
|
} |
|
# |
|
# Note: If reCAPTCHA is to be used for LON-CAPA servers in a domain, a domain coordinator should visit: |
|
# https://www.google.com/recaptcha and generate a Public and Private key. For domains with multiple |
|
# servers a single key pair will be used for all servers, so the internet domain (e.g., yourcollege.edu) |
|
# specified for use with the key should be broad enough to accommodate all servers in the LON-CAPA domain. |
|
# |
|
$output .= '</td></tr>'."\n". |
|
'<tr><td>'."\n". |
|
'<span class="LC_nobreak"><span id="'.$context.'_recaptchapubtxt">'.$pubtext.'</span> '."\n". |
|
'<input type="'.$keyentry.'" id="'.$context.'_recaptchapub" name="'.$context.'_recaptchapub" value="'. |
|
$currpub.'" size="40" /></span><br />'."\n". |
|
'<span class="LC_nobreak"><span id="'.$context.'_recaptchaprivtxt">'.$privtext.'</span> '."\n". |
|
'<input type="'.$keyentry.'" id="'.$context.'_recaptchapriv" name="'.$context.'_recaptchapriv" value="'. |
|
$currpriv.'" size="40" /></span></td></tr></table>'."\n". |
|
'</td></tr>'; |
|
return $output; |
|
} |
|
|
sub user_formats_row { |
sub user_formats_row { |
my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount) = @_; |
my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount) = @_; |
my $output; |
my $output; |
Line 4293 sub insttypes_row {
|
Line 4349 sub insttypes_row {
|
if ($context eq 'cansearch') { |
if ($context eq 'cansearch') { |
$showdom = ' ('.$dom.')'; |
$showdom = ' ('.$dom.')'; |
} |
} |
|
my $class = 'LC_left_item'; |
|
if ($context eq 'statustocreate') { |
|
$class = 'LC_right_item'; |
|
} |
my $output = '<tr class="LC_odd_row">'. |
my $output = '<tr class="LC_odd_row">'. |
'<td>'.$lt{$context}.$showdom. |
'<td>'.$lt{$context}.$showdom. |
'</td><td class="LC_left_item" colspan="2"><table>'; |
'</td><td class="'.$class.'" colspan="2"><table>'; |
my $rem; |
my $rem; |
if (ref($types) eq 'ARRAY') { |
if (ref($types) eq 'ARRAY') { |
for (my $i=0; $i<@{$types}; $i++) { |
for (my $i=0; $i<@{$types}; $i++) { |
Line 6317 sub modify_usercreation {
|
Line 6377 sub modify_usercreation {
|
} |
} |
push(@contexts,'statustocreate'); |
push(@contexts,'statustocreate'); |
} |
} |
|
&process_captcha('cancreate',\%changes,\%cancreate,\%curr_usercreation); |
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') { |
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') { |
foreach my $item (@contexts) { |
foreach my $item (@contexts) { |
if (($item eq 'selfcreate') || ($item eq 'statustocreate')) { |
if (($item eq 'selfcreate') || ($item eq 'statustocreate')) { |
Line 6499 sub modify_usercreation {
|
Line 6560 sub modify_usercreation {
|
my %lt = &usercreation_types(); |
my %lt = &usercreation_types(); |
foreach my $type (@{$changes{'cancreate'}}) { |
foreach my $type (@{$changes{'cancreate'}}) { |
my $chgtext; |
my $chgtext; |
unless ($type eq 'statustocreate') { |
unless (($type eq 'statustocreate') || ($type eq 'captcha') || ($type eq 'recaptchakeys')) { |
$chgtext = $lt{$type}.', '; |
$chgtext = $lt{$type}.', '; |
} |
} |
if ($type eq 'selfcreate') { |
if ($type eq 'selfcreate') { |
Line 6558 sub modify_usercreation {
|
Line 6619 sub modify_usercreation {
|
} |
} |
} |
} |
} |
} |
|
} elsif ($type eq 'captcha') { |
|
if ($cancreate{$type} eq 'notused') { |
|
$chgtext .= &mt('No CAPTCHA validation in use for self-creation screen.'); |
|
} else { |
|
my %captchas = &captcha_phrases(); |
|
if ($captchas{$cancreate{$type}}) { |
|
$chgtext .= &mt("Validation for self-creation screen set to $captchas{$cancreate{$type}}."); |
|
} else { |
|
$chgtext .= &mt('Validation for self-creation screen set to unknown type.'); |
|
} |
|
} |
|
} elsif ($type eq 'recaptchakeys') { |
|
my ($privkey,$pubkey); |
|
if (ref($cancreate{$type}) eq 'HASH') { |
|
$pubkey = $cancreate{$type}{'public'}; |
|
$privkey = $cancreate{$type}{'private'}; |
|
} |
|
$chgtext .= &mt('ReCAPTCHA keys changes').'<ul>'; |
|
if (!$pubkey) { |
|
$chgtext .= '<li>'.&mt('Public key deleted').'</li>'; |
|
} else { |
|
$chgtext .= '<li>'.&mt('Public key set to [_1]',$pubkey).'</li>'; |
|
} |
|
if (!$privkey) { |
|
$chgtext .= '<li>'.&mt('Private key deleted').'</li>'; |
|
} else { |
|
$chgtext .= '<li>'.&mt('Private key set to [_1]',$pubkey).'</li>'; |
|
} |
|
$chgtext .= '</ul>'; |
} else { |
} else { |
if ($cancreate{$type} eq 'none') { |
if ($cancreate{$type} eq 'none') { |
$chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.'); |
$chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.'); |
Line 6657 sub modify_usercreation {
|
Line 6747 sub modify_usercreation {
|
return $resulttext; |
return $resulttext; |
} |
} |
|
|
|
sub process_captcha { |
|
my ($container,$changes,$newsettings,$current) = @_; |
|
return unless ((ref($changes) eq 'HASH') && (ref($newsettings) eq 'HASH') || (ref($current) eq 'HASH')); |
|
$newsettings->{'captcha'} = $env{'form.'.$container.'_captcha'}; |
|
unless ($newsettings->{'captcha'} eq 'recaptcha' || $newsettings->{'captcha'} eq 'notused') { |
|
$newsettings->{'captcha'} = 'original'; |
|
} |
|
if ($current->{'captcha'} ne $newsettings->{'captcha'}) { |
|
if (ref($changes->{'cancreate'}) eq 'ARRAY') { |
|
push(@{$changes->{'cancreate'}},'captcha'); |
|
} elsif (!defined($changes->{'cancreate'})) { |
|
$changes->{'cancreate'} = ['captcha']; |
|
} |
|
} |
|
my ($newpub,$newpriv,$currpub,$currpriv); |
|
if ($newsettings->{'captcha'} eq 'recaptcha') { |
|
$newpub = $env{'form.'.$container.'_recaptchapub'}; |
|
$newpriv = $env{'form.'.$container.'_recaptchapriv'}; |
|
} |
|
$newsettings->{'recaptchakeys'} = { |
|
public => $newpub, |
|
private => $newpriv, |
|
}; |
|
if (ref($current->{'recaptchakeys'}) eq 'HASH') { |
|
$currpub = $current->{'recaptchakeys'}{'public'}; |
|
$currpriv = $current->{'recaptchakeys'}{'private'}; |
|
} |
|
if (($newpub ne $currpub) || ($newpriv ne $currpriv)) { |
|
if (ref($changes->{'cancreate'}) eq 'ARRAY') { |
|
push(@{$changes->{'cancreate'}},'recaptchakeys'); |
|
} elsif (!defined($changes->{'cancreate'})) { |
|
$changes->{'cancreate'} = ['recaptchakeys']; |
|
} |
|
} |
|
return; |
|
} |
|
|
sub modify_usermodification { |
sub modify_usermodification { |
my ($dom,%domconfig) = @_; |
my ($dom,%domconfig) = @_; |
my ($resulttext,%curr_usermodification,%changes); |
my ($resulttext,%curr_usermodification,%changes); |
Line 8422 END
|
Line 8549 END
|
|
|
} |
} |
|
|
|
sub recaptcha_js { |
|
my %lt = &captcha_phrases(); |
|
return <<"END"; |
|
|
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
function updateCaptcha(caller,context) { |
|
var privitem; |
|
var pubitem; |
|
var privtext; |
|
var pubtext; |
|
if (document.getElementById(context+'_recaptchapub')) { |
|
pubitem = document.getElementById(context+'_recaptchapub'); |
|
} else { |
|
return; |
|
} |
|
if (document.getElementById(context+'_recaptchapriv')) { |
|
privitem = document.getElementById(context+'_recaptchapriv'); |
|
} else { |
|
return; |
|
} |
|
if (document.getElementById(context+'_recaptchapubtxt')) { |
|
pubtext = document.getElementById(context+'_recaptchapubtxt'); |
|
} else { |
|
return; |
|
} |
|
if (document.getElementById(context+'_recaptchaprivtxt')) { |
|
privtext = document.getElementById(context+'_recaptchaprivtxt'); |
|
} else { |
|
return; |
|
} |
|
if (caller.checked) { |
|
if (caller.value == 'recaptcha') { |
|
pubitem.type = 'text'; |
|
privitem.type = 'text'; |
|
pubitem.size = '40'; |
|
privitem.size = '40'; |
|
pubtext.innerHTML = "$lt{'pub'}"; |
|
privtext.innerHTML = "$lt{'priv'}"; |
|
} else { |
|
pubitem.type = 'hidden'; |
|
privitem.type = 'hidden'; |
|
pubtext.innerHTML = ''; |
|
privtext.innerHTML = ''; |
|
} |
|
} |
|
return; |
|
} |
|
|
|
// ]]> |
|
</script> |
|
|
|
END |
|
|
|
} |
|
|
|
sub captcha_phrases { |
|
return &Apache::lonlocal::texthash ( |
|
priv => 'Private key', |
|
pub => 'Public key', |
|
original => 'original (CAPTCHA)', |
|
recaptcha => 'successor (ReCAPTCHA)', |
|
notused => 'unused', |
|
); |
|
} |
|
|
1; |
1; |