--- loncom/interface/domainprefs.pm 2012/08/21 21:12:08 1.164
+++ loncom/interface/domainprefs.pm 2012/08/25 04:34:44 1.165
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.164 2012/08/21 21:12:08 raeburn Exp $
+# $Id: domainprefs.pm,v 1.165 2012/08/25 04:34:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -410,7 +410,7 @@ sub handler {
if ($phase eq 'process') {
&Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles);
} elsif ($phase eq 'display') {
- my $js;
+ my $js = &recaptcha_js();
if (keys(%servers) > 1) {
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($dom);
@@ -2350,9 +2350,7 @@ sub print_helpsettings {
$datatable .= '';
}
-
return $datatable;
-
}
@@ -3266,18 +3264,19 @@ sub print_usercreation {
}
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($dom);
+ my $createsettings;
+ if (ref($settings) eq 'HASH') {
+ $createsettings = $settings->{cancreate};
+ }
if (ref($usertypes) eq 'HASH') {
if (keys(%{$usertypes}) > 0) {
- my $createsettings;
- if (ref($settings) eq 'HASH') {
- $createsettings = $settings->{cancreate};
- }
$datatable .= &insttypes_row($createsettings,$types,$usertypes,
$dom,$numinrow,$othertitle,
'statustocreate');
$$rowtotal ++;
}
}
+ $datatable .= &captcha_choice('cancreate',$createsettings);
} else {
my @contexts = ('author','course','domain');
my @authtypes = ('int','krb4','krb5','loc');
@@ -3329,6 +3328,63 @@ sub print_usercreation {
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 = '
'.
+ ''.$rowname.' | '."\n".
+ ''."\n".
+ ' |
';
+ return $output;
+}
+
sub user_formats_row {
my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount) = @_;
my $output;
@@ -4293,9 +4349,13 @@ sub insttypes_row {
if ($context eq 'cansearch') {
$showdom = ' ('.$dom.')';
}
+ my $class = 'LC_left_item';
+ if ($context eq 'statustocreate') {
+ $class = 'LC_right_item';
+ }
my $output = ''.
''.$lt{$context}.$showdom.
- ' | ';
+ '';
my $rem;
if (ref($types) eq 'ARRAY') {
for (my $i=0; $i<@{$types}; $i++) {
@@ -6317,6 +6377,7 @@ sub modify_usercreation {
}
push(@contexts,'statustocreate');
}
+ &process_captcha('cancreate',\%changes,\%cancreate,\%curr_usercreation);
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
foreach my $item (@contexts) {
if (($item eq 'selfcreate') || ($item eq 'statustocreate')) {
@@ -6499,7 +6560,7 @@ sub modify_usercreation {
my %lt = &usercreation_types();
foreach my $type (@{$changes{'cancreate'}}) {
my $chgtext;
- unless ($type eq 'statustocreate') {
+ unless (($type eq 'statustocreate') || ($type eq 'captcha') || ($type eq 'recaptchakeys')) {
$chgtext = $lt{$type}.', ';
}
if ($type eq 'selfcreate') {
@@ -6558,6 +6619,35 @@ 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').'';
+ if (!$pubkey) {
+ $chgtext .= '- '.&mt('Public key deleted').'
';
+ } else {
+ $chgtext .= '- '.&mt('Public key set to [_1]',$pubkey).'
';
+ }
+ if (!$privkey) {
+ $chgtext .= '- '.&mt('Private key deleted').'
';
+ } else {
+ $chgtext .= '- '.&mt('Private key set to [_1]',$pubkey).'
';
+ }
+ $chgtext .= ' ';
} else {
if ($cancreate{$type} eq 'none') {
$chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.');
@@ -6657,6 +6747,43 @@ sub modify_usercreation {
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 {
my ($dom,%domconfig) = @_;
my ($resulttext,%curr_usermodification,%changes);
@@ -8422,4 +8549,71 @@ END
}
+sub recaptcha_js {
+ my %lt = &captcha_phrases();
+ return <<"END";
+
+
+
+END
+
+}
+
+sub captcha_phrases {
+ return &Apache::lonlocal::texthash (
+ priv => 'Private key',
+ pub => 'Public key',
+ original => 'original (CAPTCHA)',
+ recaptcha => 'successor (ReCAPTCHA)',
+ notused => 'unused',
+ );
+}
+
1;
| |