--- loncom/interface/domainprefs.pm 2015/03/13 13:53:07 1.160.6.58
+++ loncom/interface/domainprefs.pm 2014/07/15 21:51:47 1.249
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.58 2015/03/13 13:53:07 raeburn Exp $
+# $Id: domainprefs.pm,v 1.249 2014/07/15 21:51:47 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -213,15 +213,15 @@ sub handler {
'quotas','autoenroll','autoupdate','autocreate',
'directorysrch','usercreation','usermodification',
'contacts','defaults','scantron','coursecategories',
- 'serverstatuses','requestcourses','coursedefaults',
- 'usersessions','loadbalancing','requestauthor',
- 'selfenrollment','inststatus'],$dom);
+ 'serverstatuses','requestcourses','helpsettings',
+ 'coursedefaults','usersessions','loadbalancing',
+ 'requestauthor','selfenrollment','inststatus'],$dom);
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
'autoupdate','autocreate','directorysrch','contacts',
'usercreation','selfcreation','usermodification','scantron',
'requestcourses','requestauthor','coursecategories',
- 'serverstatuses','coursedefaults','selfenrollment',
- 'usersessions');
+ 'serverstatuses','helpsettings',
+ 'coursedefaults','selfenrollment','usersessions');
my %existing;
if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
%existing = %{$domconfig{'loadbalancing'}};
@@ -250,8 +250,6 @@ sub handler {
header => [{col1 => 'Log-in Page Items',
col2 => '',},
{col1 => 'Log-in Help',
- col2 => 'Value'},
- {col1 => 'Custom HTML in document head',
col2 => 'Value'}],
print => \&print_login,
modify => \&modify_login,
@@ -411,6 +409,14 @@ sub handler {
print => \&print_serverstatuses,
modify => \&modify_serverstatuses,
},
+ 'helpsettings' =>
+ {text => 'Help page settings',
+ help => 'Domain_Configuration_Help_Settings',
+ header => [{col1 => 'Help Settings (logged-in users)',
+ col2 => 'Value'}],
+ print => \&print_helpsettings,
+ modify => \&modify_helpsettings,
+ },
'coursedefaults' =>
{text => 'Course/Community defaults',
help => 'Domain_Configuration_Course_Defaults',
@@ -433,6 +439,14 @@ sub handler {
print => \&print_selfenrollment,
modify => \&modify_selfenrollment,
},
+ 'privacy' =>
+ {text => 'User Privacy',
+ help => 'Domain_Configuration_User_Privacy',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ print => \&print_privacy,
+ modify => \&modify_privacy,
+ },
'usersessions' =>
{text => 'User session hosting/offloading',
help => 'Domain_Configuration_User_Sessions',
@@ -465,8 +479,6 @@ sub handler {
{col1 => 'Log-in Page Items',
col2 => ''},
{col1 => 'Log-in Help',
- col2 => 'Value'},
- {col1 => 'Custom HTML in document head',
col2 => 'Value'}],
print => \&print_login,
modify => \&modify_login,
@@ -619,6 +631,8 @@ sub process_changes {
$output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig);
} elsif ($action eq 'requestauthor') {
$output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig);
+ } elsif ($action eq 'helpsettings') {
+ $output = &modify_helpsettings($r,$dom,$confname,%domconfig);
} elsif ($action eq 'coursedefaults') {
$output = &modify_coursedefaults($dom,$lastactref,%domconfig);
} elsif ($action eq 'selfenrollment') {
@@ -656,7 +670,7 @@ sub print_config_box {
my $colspan = '';
my $rightcolspan = '';
if (($action eq 'rolecolors') || ($action eq 'defaults') ||
- (($action eq 'login') && ($numheaders < 4))) {
+ (($action eq 'login') && ($numheaders < 3))) {
$colspan = ' colspan="2"';
}
if ($action eq 'usersessions') {
@@ -678,7 +692,7 @@ sub print_config_box {
} elsif ($action eq 'coursecategories') {
$output .= $item->{'print'}->('top',$dom,$item,$settings,\$rowtotal);
} elsif ($action eq 'login') {
- if ($numheaders == 4) {
+ if ($numheaders == 3) {
$colspan = ' colspan="2"';
$output .= &print_login('service',$dom,$confname,$phase,$settings,\$rowtotal);
} else {
@@ -731,7 +745,7 @@ sub print_config_box {
($action eq 'defaults')) {
$output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
} elsif ($action eq 'login') {
- if ($numheaders == 4) {
+ if ($numheaders == 3) {
$output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal).'
@@ -747,27 +761,6 @@ sub print_config_box {
} else {
$output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal);
}
- $output .= '
-
-
-
-
-
-
- ';
- if ($numheaders == 4) {
- $output .= '
- '.&mt($item->{'header'}->[3]->{'col1'}).'
- '.&mt($item->{'header'}->[3]->{'col2'}).'
- ';
- } else {
- $output .= '
- '.&mt($item->{'header'}->[2]->{'col1'}).'
- '.&mt($item->{'header'}->[2]->{'col2'}).'
- ';
- }
- $rowtotal ++;
- $output .= &print_login('headtag',$dom,$confname,$phase,$settings,\$rowtotal);
} elsif ($action eq 'requestcourses') {
$output .= &print_requestmail($dom,$action,$settings,\$rowtotal);
$rowtotal ++;
@@ -892,8 +885,6 @@ sub print_config_box {
$output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
} elsif ($action eq 'helpsettings') {
$output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal);
- } elsif ($action eq 'coursedefaults') {
- $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
}
}
$output .= '
@@ -1190,57 +1181,6 @@ sub print_login {
$itemcount ++;
}
$datatable .= &captcha_choice('login',$settings,$itemcount);
- } elsif ($caller eq 'headtag') {
- my %domservers = &Apache::lonnet::get_servers($dom);
- my $choice = $choices{'headtag'};
- $css_class = ' class="LC_odd_row"';
- $datatable .= ''.$choice.' '.
- ' ';
}
return $datatable;
}
@@ -1274,9 +1214,6 @@ sub login_choices {
link => "Link",
alink => "Active link",
vlink => "Visited link",
- headtag => "Custom markup",
- action => "Action",
- current => "Current",
);
return %choices;
}
@@ -2828,7 +2765,7 @@ sub print_helpsettings {
sub radiobutton_prefs {
my ($settings,$toggles,$defaultchecked,$choices,$itemcount,$onclick,
- $additional,$align) = @_;
+ $additional) = @_;
return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') &&
(ref($choices) eq 'HASH'));
@@ -2862,14 +2799,8 @@ sub radiobutton_prefs {
$datatable .=
''.
''.$choices->{$item}.
- ' ';
- if ($align eq 'left') {
- $datatable .= '';
- } else {
- $datatable .= ' ';
- }
- $datatable .=
- ''.
+ ' '.
+ ''.
' '.&mt('Yes').
' 'Course/Community users can create/upload PDF forms',
uploadquota => 'Default quota for files uploaded directly to course/community using Course Editor (MB)',
anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys',
coursecredits => 'Credits can be specified for courses',
- uselcmath => 'Math preview uses LON-CAPA previewer (javascript) in place of DragMath (Java)',
- usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)',
- postsubmit => 'Disable submit button/keypress following student submission',
);
my %staticdefaults = (
anonsurvey_threshold => 10,
uploadquota => 500,
- postsubmit => 60,
);
if ($position eq 'top') {
- %defaultchecked = (
- 'uselcmath' => 'on',
- 'usejsme' => 'on',
- );
- @toggles = ('uselcmath','usejsme');
+ %defaultchecked = ('canuse_pdfforms' => 'off');
+ @toggles = ('canuse_pdfforms');
($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
- \%choices,$itemcount);
+ \%choices,$itemcount);
} else {
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
- my ($currdefresponder,%defcredits,%curruploadquota,%deftimeout);
+ my ($currdefresponder,$def_official_credits,$def_unofficial_credits,$def_textbook_credits,
+ %curruploadquota);
my $currusecredits = 0;
- my $postsubmitclient = 1;
my @types = ('official','unofficial','community','textbook');
if (ref($settings) eq 'HASH') {
$currdefresponder = $settings->{'anonsurvey_threshold'};
@@ -2921,41 +2846,13 @@ sub print_coursedefaults {
}
}
if (ref($settings->{'coursecredits'}) eq 'HASH') {
- foreach my $type (@types) {
- next if ($type eq 'community');
- $defcredits{$type} = $settings->{'coursecredits'}->{$type};
- if ($defcredits{$type} ne '') {
- $currusecredits = 1;
- }
- }
- }
- if (ref($settings->{'postsubmit'}) eq 'HASH') {
- if ($settings->{'postsubmit'}->{'client'} eq 'off') {
- $postsubmitclient = 0;
- foreach my $type (@types) {
- $deftimeout{$type} = $staticdefaults{'postsubmit'};
- }
- } else {
- foreach my $type (@types) {
- if (ref($settings->{'postsubmit'}->{'timeout'}) eq 'HASH') {
- if ($settings->{'postsubmit'}->{'timeout'}->{$type} =~ /^\d+$/) {
- $deftimeout{$type} = $settings->{'postsubmit'}->{'timeout'}->{$type};
- } else {
- $deftimeout{$type} = $staticdefaults{'postsubmit'};
- }
- } else {
- $deftimeout{$type} = $staticdefaults{'postsubmit'};
- }
- }
+ $def_official_credits = $settings->{'coursecredits'}->{'official'};
+ $def_unofficial_credits = $settings->{'coursecredits'}->{'unofficial'};
+ $def_textbook_credits = $settings->{'coursecredits'}->{'textbook'};
+ if (($def_official_credits ne '') || ($def_unofficial_credits ne '') ||
+ ($def_textbook_credits ne '')) {
+ $currusecredits = 1;
}
- } else {
- foreach my $type (@types) {
- $deftimeout{$type} = $staticdefaults{'postsubmit'};
- }
- }
- } else {
- foreach my $type (@types) {
- $deftimeout{$type} = $staticdefaults{'postsubmit'};
}
}
if (!$currdefresponder) {
@@ -2996,14 +2893,21 @@ sub print_coursedefaults {
$display = 'block';
}
my $additional = ''.
- '
'.&mt('Default credits').' '."\n";
+ ''.
+ &mt('Default credits for official courses [_1]',
+ ' ').
+ ' '.
+ ''.
+ &mt('Default credits for unofficial courses [_1]',
+ ' ').
+ ' '.
+ ''.
+ &mt('Default credits for textbook courses [_1]',
+ ' ').
+ ' '."\n";
%defaultchecked = ('coursecredits' => 'off');
@toggles = ('coursecredits');
my $current = {
@@ -3011,30 +2915,9 @@ sub print_coursedefaults {
};
(my $table,$itemcount) =
&radiobutton_prefs($current,\@toggles,\%defaultchecked,
- \%choices,$itemcount,$onclick,$additional,'left');
- $datatable .= $table;
- $onclick = "toggleDisplay(this.form,'studentsubmission');";
- my $display = 'none';
- if ($postsubmitclient) {
- $display = 'block';
- }
- $additional = ''.
- '
'.&mt('Number of seconds submit is disabled').' '."\n";
- %defaultchecked = ('postsubmit' => 'on');
- @toggles = ('postsubmit');
- my $current = {
- 'postsubmit' => $postsubmitclient,
- };
- ($table,$itemcount) =
- &radiobutton_prefs($current,\@toggles,\%defaultchecked,
- \%choices,$itemcount,$onclick,$additional,'left');
+ \%choices,$itemcount,$onclick,$additional);
$datatable .= $table;
+ $itemcount ++;
}
$$rowtotal += $itemcount;
return $datatable;
@@ -3778,10 +3661,9 @@ sub print_loadbalancing {
$disabled = ' disabled="disabled"';
}
$targettable .=
- ''.
- ' '.$chkboxval.
- ' ';
+ ' ';
my $rem = $i%($numinrow);
if ($rem == 0) {
if (($i > 0) && ($i < $numspares-1)) {
@@ -3871,7 +3753,7 @@ sub loadbalancing_rules {
if (ref($currrules) eq 'HASH') {
$current = $currrules->{$type};
}
- if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) {
+ if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) {
if ($dom ne &Apache::lonnet::host_domain($lonhost)) {
$current = '';
}
@@ -3923,7 +3805,7 @@ sub loadbalance_rule_row {
my @rulenames;
my %ruletitles = &offloadtype_text();
if (($type eq '_LC_ipchangesso') || ($type eq '_LC_ipchange')) {
- @rulenames = ('balancer','offloadedto','specific');
+ @rulenames = ('balancer','offloadedto');
} else {
@rulenames = ('default','homeserver');
if ($type eq '_LC_external') {
@@ -3934,7 +3816,7 @@ sub loadbalance_rule_row {
push(@rulenames,'none');
}
my $style = $targets_div_style;
- if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) {
+ if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) {
$style = $homedom_div_style;
}
my $space;
@@ -3985,13 +3867,8 @@ sub loadbalance_rule_row {
' ';
- if (($rulenames[$i] eq 'specific') && ($type =~ /^_LC_ipchange/)) {
- $output .= $ruletitles{'particular'};
- } else {
- $output .= $ruletitles{$rulenames[$i]};
- }
- $output .= ''.$extra.' '."\n";
+ ')"'.$checked.' /> '.$ruletitles{$rulenames[$i]}.
+ ''.$extra.' '."\n";
}
$output .= ' '."\n";
return $output;
@@ -4006,7 +3883,6 @@ sub offloadtype_text {
'none' => 'No offload',
'balancer' => 'Session hosted on Load Balancer, after re-authentication',
'offloadedto' => 'Session hosted on offload server, after re-authentication',
- 'particular' => 'Session hosted (after re-auth) on server:',
);
return %ruletitles;
}
@@ -5296,7 +5172,7 @@ sub serverstatus_pages {
sub defaults_javascript {
my ($settings) = @_;
- return unless (ref($settings) eq 'HASH');
+ return unless (ref($settings) eq 'HASH');
if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH')) {
my $maxnum = scalar(@{$settings->{'inststatusorder'}});
if ($maxnum eq '') {
@@ -5896,7 +5772,6 @@ sub modify_login {
}
my %servers = &Apache::lonnet::internet_dom_servers($dom);
- my %domservers = &Apache::lonnet::get_servers($dom);
my @loginvia_attribs = ('serverpath','custompath','exempt');
if (keys(%servers) > 1) {
foreach my $lonhost (keys(%servers)) {
@@ -5939,7 +5814,22 @@ sub modify_login {
$changes{'loginvia'}{$lonhost} = 1;
}
if ($item eq 'exempt') {
- $new = &check_exempt_addresses($new);
+ $new =~ s/^\s+//;
+ $new =~ s/\s+$//;
+ my @poss_ips = split(/\s*[,:]\s*/,$new);
+ my @okips;
+ foreach my $ip (@poss_ips) {
+ if ($ip =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) {
+ if (($1 <= 255) && ($2 <= 255) && ($3 <= 255) && ($4 <= 255)) {
+ push(@okips,$ip);
+ }
+ }
+ }
+ if (@okips > 0) {
+ $new = join(',',@okips);
+ } else {
+ $new = '';
+ }
}
$loginhash{login}{loginvia}{$lonhost}{$item} = $new;
}
@@ -6051,85 +5941,6 @@ sub modify_login {
$errors .= ''.$error.' ';
}
}
-
- my (%currheadtagurls,%currexempt,@newhosts,%newheadtagurls,%possexempt);
- if (ref($domconfig{'login'}) eq 'HASH') {
- if (ref($domconfig{'login'}{'headtag'}) eq 'HASH') {
- foreach my $lonhost (keys(%{$domconfig{'login'}{'headtag'}})) {
- if ($domservers{$lonhost}) {
- if (ref($domconfig{'login'}{'headtag'}{$lonhost}) eq 'HASH') {
- $currheadtagurls{$lonhost} = $domconfig{'login'}{'headtag'}{$lonhost}{'url'};
- $currexempt{$lonhost} = $domconfig{'login'}{'headtagexempt'}{$lonhost}{'exempt'}
- }
- }
- }
- }
- }
- my @delheadtagurls = &Apache::loncommon::get_env_multiple('form.loginheadtag_del');
- foreach my $lonhost (sort(keys(%domservers))) {
- if (grep(/^\Q$lonhost\E$/,@delheadtagurls)) {
- $changes{'headtag'}{$lonhost} = 1;
- } else {
- if ($env{'form.loginheadtagexempt_'.$lonhost}) {
- $possexempt{$lonhost} = &check_exempt_addresses($env{'form.loginheadtagexempt_'.$lonhost});
- }
- if ($env{'form.loginheadtag_'.$lonhost.'.filename'}) {
- push(@newhosts,$lonhost);
- } elsif ($currheadtagurls{$lonhost}) {
- $loginhash{'login'}{'headtag'}{$lonhost}{'url'} = $currheadtagurls{$lonhost};
- if ($currexempt{$lonhost}) {
- if ((!exists($possexempt{$lonhost})) || ($possexempt{$lonhost} ne $currexempt{$lonhost})) {
- $changes{'headtag'}{$lonhost} = 1;
- }
- } elsif ($possexempt{$lonhost}) {
- $changes{'headtag'}{$lonhost} = 1;
- }
- if ($possexempt{$lonhost}) {
- $loginhash{'login'}{'headtag'}{$lonhost}{'exempt'} = $possexempt{$lonhost};
- }
- }
- }
- }
- if (@newhosts) {
- my $error;
- my ($configuserok,$author_ok,$switchserver) = &config_check($dom,$confname,$servadm);
- if ($configuserok eq 'ok') {
- if ($switchserver) {
- $error = &mt("Upload of custom markup is not permitted to this server: [_1]",$switchserver);
- } elsif ($author_ok eq 'ok') {
- foreach my $lonhost (@newhosts) {
- my $formelem = 'loginheadtag_'.$lonhost;
- (my $result,$newheadtagurls{$lonhost}) = &publishlogo($r,'upload',$formelem,$dom,$confname,
- "login/headtag/$lonhost",'','',
- $env{'form.loginheadtag_'.$lonhost.'.filename'});
- if ($result eq 'ok') {
- $loginhash{'login'}{'headtag'}{$lonhost}{'url'} = $newheadtagurls{$lonhost};
- $changes{'headtag'}{$lonhost} = 1;
- if ($possexempt{$lonhost}) {
- $loginhash{'login'}{'headtag'}{$lonhost}{'exempt'} = $possexempt{$lonhost};
- }
- } else {
- my $puberror = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",
- $newheadtagurls{$lonhost},$result);
- $errors .= ''.$puberror.' ';
- if ((grep(/^\Q$lonhost\E$/,keys(%currheadtagurls))) &&
- (!grep(/^\Q$lonhost\E$/,@delheadtagurls))) {
- $loginhash{'login'}{'headtag'}{$lonhost} = $currheadtagurls{$lonhost};
- }
- }
- }
- } else {
- $error = &mt("Upload of custom markup file(s) failed because an author role could not be assigned to a Domain Configuration user ([_1]) in domain: [_2]. Error was: [_3].",$confname,$dom,$author_ok);
- }
- } else {
- $error = &mt("Upload of custom markup file(s) failed because a Domain Configuration user ([_1]) could not be created in domain: [_2]. Error was: [_3].",$confname,$dom,$configuserok);
- }
- if ($error) {
- &Apache::lonnet::logthis($error);
- $errors .= ''.$error.' ';
- }
- }
-
&process_captcha('login',\%changes,$loginhash{'login'},$domconfig{'login'});
my $defaulthelpfile = '/adm/loginproblems.html';
@@ -6230,25 +6041,6 @@ sub modify_login {
}
}
}
- } elsif ($item eq 'headtag') {
- if (ref($changes{$item}) eq 'HASH') {
- foreach my $lonhost (sort(keys(%{$changes{$item}}))) {
- if (grep(/^\Q$lonhost\E$/,@delheadtagurls)) {
- $resulttext .= ''.&mt('custom markup file removed for [_1]',$domservers{$lonhost}).' ';
- } elsif (ref($loginhash{'login'}{'headtag'}{$lonhost}) eq 'HASH') {
- $resulttext .= ''.&mt('custom markup').' '.&mt('(for [_1])',$servers{$lonhost}).' ';
- if ($possexempt{$lonhost}) {
- $resulttext .= &mt('not included for client IP(s): [_1]',$possexempt{$lonhost});
- } else {
- $resulttext .= &mt('included for any client IP');
- }
- $resulttext .= ' ';
- }
- }
- }
} elsif ($item eq 'captcha') {
if (ref($loginhash{'login'}) eq 'HASH') {
my $chgtxt;
@@ -6280,7 +6072,7 @@ sub modify_login {
if (!$privkey) {
$chgtxt .= ''.&mt('Private key deleted').' ';
} else {
- $chgtxt .= ''.&mt('Private key set to [_1]',$privkey).' ';
+ $chgtxt .= ''.&mt('Private key set to [_1]',$pubkey).' ';
}
$chgtxt .= '';
$resulttext .= ''.$chgtxt.' ';
@@ -6304,27 +6096,6 @@ sub modify_login {
return $resulttext;
}
-sub check_exempt_addresses {
- my ($iplist) = @_;
- $iplist =~ s/^\s+//;
- $iplist =~ s/\s+$//;
- my @poss_ips = split(/\s*[,:]\s*/,$iplist);
- my (@okips,$new);
- foreach my $ip (@poss_ips) {
- if ($ip =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) {
- if (($1 <= 255) && ($2 <= 255) && ($3 <= 255) && ($4 <= 255)) {
- push(@okips,$ip);
- }
- }
- }
- if (@okips > 0) {
- $new = join(',',@okips);
- } else {
- $new = '';
- }
- return $new;
-}
-
sub color_font_choices {
my %choices =
&Apache::lonlocal::texthash (
@@ -7213,7 +6984,7 @@ sub modify_quotas {
my $newpos = $env{'form.'.$itemid};
$newpos =~ s/\D+//g;
foreach my $item ('subject','title','publisher','author') {
- next if ((($item eq 'author') || ($item eq 'publisher')) &&
+ next if ((($item eq 'author') || ($item eq 'publisher')) &&
($type eq 'templates'));
$confhash{$type}{$key}{$item} = $env{'form.'.$type.'_'.$item.'_'.$i};
if ($domconfig{$action}{$type}{$key}{$item} ne $confhash{$type}{$key}{$item}) {
@@ -9305,8 +9076,8 @@ sub process_captcha {
if ($newsettings->{'captcha'} eq 'recaptcha') {
$newpub = $env{'form.'.$container.'_recaptchapub'};
$newpriv = $env{'form.'.$container.'_recaptchapriv'};
- $newpub =~ s/[^\w\-]//g;
- $newpriv =~ s/[^\w\-]//g;
+ $newpub =~ s/\W//g;
+ $newpriv =~ s/\W//g;
$newsettings->{'recaptchakeys'} = {
public => $newpub,
private => $newpriv,
@@ -10213,18 +9984,14 @@ sub modify_helpsettings {
sub modify_coursedefaults {
my ($dom,$lastactref,%domconfig) = @_;
my ($resulttext,$errors,%changes,%defaultshash);
- my %defaultchecked = (
- 'uselcmath' => 'on',
- 'usejsme' => 'on'
- );
- my @toggles = ('uselcmath','usejsme');
+ my %defaultchecked = ('canuse_pdfforms' => 'off');
+ my @toggles = ('canuse_pdfforms');
my @numbers = ('anonsurvey_threshold','uploadquota_official','uploadquota_unofficial',
'uploadquota_community','uploadquota_textbook');
my @types = ('official','unofficial','community','textbook');
my %staticdefaults = (
anonsurvey_threshold => 10,
uploadquota => 500,
- postsubmit => 60,
);
$defaultshash{'coursedefaults'} = {};
@@ -10286,81 +10053,26 @@ sub modify_coursedefaults {
}
}
- my %credits;
- foreach my $type (@types) {
- unless ($type eq 'community') {
- $credits{$type} = $env{'form.'.$type.'_credits'};
- $credits{$type} =~ s/[^\d.]+//g;
- }
- }
- if ((ref($domconfig{'coursedefaults'}{'coursecredits'}) ne 'HASH') &&
- ($env{'form.coursecredits'} eq '1')) {
- $changes{'coursecredits'} = 1;
- foreach my $type (keys(%credits)) {
- $defaultshash{'coursedefaults'}{'coursecredits'}{$type} = $credits{$type};
- }
- } else {
- if ($env{'form.coursecredits'} eq '1') {
- foreach my $type (@types) {
- unless ($type eq 'community') {
- if ($domconfig{'coursedefaults'}{'coursecredits'}{$type} ne $credits{$type}) {
- $changes{'coursecredits'} = 1;
- }
- $defaultshash{'coursedefaults'}{'coursecredits'}{$type} = $credits{$type};
- }
- }
- } elsif (ref($domconfig{'coursedefaults'}{'coursecredits'}) eq 'HASH') {
- foreach my $type (@types) {
- unless ($type eq 'community') {
- if ($domconfig{'coursedefaults'}{'coursecredits'}{$type}) {
- $changes{'coursecredits'} = 1;
- last;
- }
- }
- }
- }
- }
- if ($env{'form.postsubmit'} eq '1') {
- $defaultshash{'coursedefaults'}{'postsubmit'}{'client'} = 'on';
- my %currtimeout;
- if (ref($domconfig{'coursedefaults'}{'postsubmit'}) eq 'HASH') {
- if ($domconfig{'coursedefaults'}{'postsubmit'}{'client'} eq 'off') {
- $changes{'postsubmit'} = 1;
- }
- if (ref($domconfig{'coursedefaults'}{'postsubmit'}{'timeout'}) eq 'HASH') {
- %currtimeout = %{$domconfig{'coursedefaults'}{'postsubmit'}{'timeout'}};
- }
- } else {
- $changes{'postsubmit'} = 1;
- }
- foreach my $type (@types) {
- my $timeout = $env{'form.'.$type.'_timeout'};
- $timeout =~ s/\D//g;
- if ($timeout == $staticdefaults{'postsubmit'}) {
- $timeout = '';
- } elsif (($timeout eq '') || ($timeout =~ /^0+$/)) {
- $timeout = '0';
- }
- unless ($timeout eq '') {
- $defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}{$type} = $timeout;
- }
- if (exists($currtimeout{$type})) {
- if ($timeout ne $currtimeout{$type}) {
- $changes{'postsubmit'} = 1;
- }
- } elsif ($timeout ne '') {
- $changes{'postsubmit'} = 1;
- }
- }
- } else {
- $defaultshash{'coursedefaults'}{'postsubmit'}{'client'} = 'off';
- if (ref($domconfig{'coursedefaults'}{'postsubmit'}) eq 'HASH') {
- if ($domconfig{'coursedefaults'}{'postsubmit'}{'client'} eq 'on') {
- $changes{'postsubmit'} = 1;
- }
- } else {
- $changes{'postsubmit'} = 1;
- }
+ my $officialcreds = $env{'form.official_credits'};
+ $officialcreds =~ s/[^\d.]+//g;
+ my $unofficialcreds = $env{'form.unofficial_credits'};
+ $unofficialcreds =~ s/[^\d.]+//g;
+ my $textbookcreds = $env{'form.textbook_credits'};
+ $textbookcreds =~ s/[^\d.]+//g;
+ if (ref($domconfig{'coursedefaults'}{'coursecredits'} ne 'HASH') &&
+ ($env{'form.coursecredits'} eq '1')) {
+ $changes{'coursecredits'} = 1;
+ } else {
+ if (($domconfig{'coursedefaults'}{'coursecredits'}{'official'} ne $officialcreds) ||
+ ($domconfig{'coursedefaults'}{'coursecredits'}{'unofficial'} ne $unofficialcreds) ||
+ ($domconfig{'coursedefaults'}{'coursecredits'}{'textbook'} ne $textbookcreds)) {
+ $changes{'coursecredits'} = 1;
+ }
+ }
+ $defaultshash{'coursedefaults'}{'coursecredits'} = {
+ official => $officialcreds,
+ unofficial => $unofficialcreds,
+ textbook => $textbookcreds,
}
}
my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,
@@ -10368,30 +10080,19 @@ sub modify_coursedefaults {
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
- if (($changes{'uploadquota'}) || ($changes{'postsubmit'}) ||
- ($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'})) {
- foreach my $item ('uselcmath','usejsme') {
- if ($changes{$item}) {
- $domdefaults{$item}=$defaultshash{'coursedefaults'}{$item};
- }
+ if (($changes{'canuse_pdfforms'}) || ($changes{'coursecredits'}) ||
+ ($changes{'uploadquota'})) {
+ if ($changes{'canuse_pdfforms'}) {
+ $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'};
}
if ($changes{'coursecredits'}) {
if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') {
- foreach my $type (keys(%{$defaultshash{'coursedefaults'}{'coursecredits'}})) {
- $domdefaults{$type.'credits'} =
- $defaultshash{'coursedefaults'}{'coursecredits'}{$type};
- }
- }
- }
- if ($changes{'postsubmit'}) {
- if (ref($defaultshash{'coursedefaults'}{'postsubmit'}) eq 'HASH') {
- $domdefaults{'postsubmit'} = $defaultshash{'coursedefaults'}{'postsubmit'}{'client'};
- if (ref($defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}) eq 'HASH') {
- foreach my $type (keys(%{$defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}})) {
- $domdefaults{$type.'postsubtimeout'} =
- $defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}{$type};
- }
- }
+ $domdefaults{'officialcredits'} =
+ $defaultshash{'coursedefaults'}{'coursecredits'}{'official'};
+ $domdefaults{'unofficialcredits'} =
+ $defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'};
+ $domdefaults{'textbookcredits'} =
+ $domdefaults{'coursedefaults'}{'coursecredits'}{'textbook'};
}
}
if ($changes{'uploadquota'}) {
@@ -10409,17 +10110,11 @@ sub modify_coursedefaults {
}
$resulttext = &mt('Changes made:').'';
foreach my $item (sort(keys(%changes))) {
- if ($item eq 'uselcmath') {
+ if ($item eq 'canuse_pdfforms') {
if ($env{'form.'.$item} eq '1') {
- $resulttext .= ''.&mt('Math preview uses LON-CAPA previewer (javascript), if supported by browser.').' ';
+ $resulttext .= ''.&mt("Course/Community users can create/upload PDF forms set to 'on'").' ';
} else {
- $resulttext .= ''.&mt('Math preview uses DragMath (Java), if supported by client OS.').' ';
- }
- } elsif ($item eq 'usejsme') {
- if ($env{'form.'.$item} eq '1') {
- $resulttext .= ''.&mt('Molecule editor uses JSME (HTML5), if supported by browser.').' ';
- } else {
- $resulttext .= ''.&mt('Molecule editor uses JME (Java), if supported by client OS.').' ';
+ $resulttext .= ''.&mt('Course/Community users can create/upload PDF forms set to "off"').' ';
}
} elsif ($item eq 'anonsurvey_threshold') {
$resulttext .= ''.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).' ';
@@ -10436,42 +10131,6 @@ sub modify_coursedefaults {
} else {
$resulttext .= ''.&mt('Default quota for content uploaded via Course Editor remains default: [_1] MB',$staticdefaults{'uploadquota'}).' ';
}
- } elsif ($item eq 'postsubmit') {
- if ($domdefaults{'postsubmit'} eq 'off') {
- $resulttext .= ''.&mt('Submit button(s) remain enabled on page after student makes submission.');
- } else {
- $resulttext .= ' '.&mt('Submit button(s) disabled on page after student makes submission').'; ';
- if (ref($defaultshash{'coursedefaults'}{'postsubmit'}) eq 'HASH') {
- $resulttext .= &mt('durations:').'';
- foreach my $type (@types) {
- $resulttext .= '';
- my $timeout;
- if (ref($defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}) eq 'HASH') {
- $timeout = $defaultshash{'coursedefaults'}{'postsubmit'}{'timeout'}{$type};
- }
- my $display;
- if ($timeout eq '0') {
- $display = &mt('unlimited');
- } elsif ($timeout eq '') {
- $display = &mt('[quant,_1,second] (default)',$staticdefaults{'postsubmit'});
- } else {
- $display = &mt('[quant,_1,second]',$timeout);
- }
- if ($type eq 'community') {
- $resulttext .= &mt('Communities');
- } elsif ($type eq 'official') {
- $resulttext .= &mt('Official courses');
- } elsif ($type eq 'unofficial') {
- $resulttext .= &mt('Unofficial courses');
- } elsif ($type eq 'textbook') {
- $resulttext .= &mt('Textbook courses');
- }
- $resulttext .= ' -- '.$display.' ';
- }
- $resulttext .= ' ';
- }
- $resulttext .= ' ';
- }
} elsif ($item eq 'coursecredits') {
if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') {
if (($domdefaults{'officialcredits'} eq '') &&
@@ -11021,7 +10680,6 @@ sub modify_loadbalancing {
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($dom);
my %servers = &Apache::lonnet::internet_dom_servers($dom);
- my %libraryservers = &Apache::lonnet::get_servers($dom,'library');
my @sparestypes = ('primary','default');
my %typetitles = &sparestype_titles();
my $resulttext;
@@ -11113,10 +10771,7 @@ sub modify_loadbalancing {
$rule = $env{'form.loadbalancing_rules_'.$i.'_'.$type};
}
if ($rule eq 'specific') {
- my $specifiedhost = $env{'form.loadbalancing_singleserver_'.$i.'_'.$type};
- if (exists($servers{$specifiedhost})) {
- $rule = $specifiedhost;
- }
+ $rule = $env{'form.loadbalancing_singleserver_'.$i.'_'.$type};
}
$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type} = $rule;
if (ref($currrules{$balancer}) eq 'HASH') {
@@ -11138,22 +10793,20 @@ sub modify_loadbalancing {
\%defaultshash,$dom);
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
- my %toupdate;
if (ref($changes{'delete'}) eq 'ARRAY') {
foreach my $balancer (sort(@{$changes{'delete'}})) {
$resulttext .= ''.&mt('Load Balancing discontinued for: [_1]',$balancer).' ';
- $toupdate{$balancer} = 1;
+ my $cachekey = &escape('loadbalancing').':'.&escape($dom);
+ &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]);
}
}
if (ref($changes{'add'}) eq 'ARRAY') {
foreach my $balancer (sort(@{$changes{'add'}})) {
$resulttext .= ''.&mt('Load Balancing enabled for: [_1]',$balancer);
- $toupdate{$balancer} = 1;
}
}
if (ref($changes{'curr'}) eq 'HASH') {
foreach my $balancer (sort(keys(%{$changes{'curr'}}))) {
- $toupdate{$balancer} = 1;
if (ref($changes{'curr'}{$balancer}) eq 'HASH') {
if ($changes{'curr'}{$balancer}{'targets'}) {
my %offloadstr;
@@ -11190,38 +10843,8 @@ sub modify_loadbalancing {
if ($rule eq '') {
$balancetext = $ruletitles{'default'};
} elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer') ||
- ($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
- if (($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
- foreach my $sparetype (@sparestypes) {
- if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') {
- map { $toupdate{$_} = 1; } (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}});
- }
- }
- foreach my $item (@{$alltypes}) {
- next if ($item =~ /^_LC_ipchange/);
- my $hasrule = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$item};
- if ($hasrule eq 'homeserver') {
- map { $toupdate{$_} = 1; } (keys(%libraryservers));
- } else {
- unless (($hasrule eq 'default') || ($hasrule eq 'none') || ($hasrule eq 'externalbalancer')) {
- if ($servers{$hasrule}) {
- $toupdate{$hasrule} = 1;
- }
- }
- }
- }
- if (($rule eq 'balancer') || ($rule eq 'offloadedto')) {
- $balancetext = $ruletitles{$rule};
- } else {
- my $receiver = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type};
- $balancetext = $ruletitles{'particular'}.' '.$receiver;
- if ($receiver) {
- $toupdate{$receiver};
- }
- }
- } else {
- $balancetext = $ruletitles{$rule};
- }
+ ($rule eq 'balancer') || ($rule eq 'offloadedto')) {
+ $balancetext = $ruletitles{$rule};
} else {
$balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type});
}
@@ -11230,25 +10853,8 @@ sub modify_loadbalancing {
}
}
}
- if (keys(%toupdate)) {
- my %thismachine;
- my $updatedhere;
- my $cachetime = 60*60*24;
- map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
- foreach my $lonhost (keys(%toupdate)) {
- if ($thismachine{$lonhost}) {
- unless ($updatedhere) {
- &Apache::lonnet::do_cache_new('loadbalancing',$dom,
- $defaultshash{'loadbalancing'},
- $cachetime);
- $updatedhere = 1;
- }
- } else {
- my $cachekey = &escape('loadbalancing').':'.&escape($dom);
- &Apache::lonnet::remote_devalidate_cache($lonhost,[$cachekey]);
- }
- }
- }
+ my $cachekey = &escape('loadbalancing').':'.&escape($dom);
+ &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]);
}
}
if ($resulttext ne '') {
@@ -11948,9 +11554,6 @@ function toggleDisplay(domForm,caller) {
if (caller == 'emailoptions') {
optionsElement = domForm.cancreate_email;
}
- if (caller == 'studentsubmission') {
- optionsElement = domForm.postsubmit;
- }
if (optionsElement.length) {
var currval;
for (var i=0; i