--- loncom/interface/domainprefs.pm 2014/02/15 17:07:19 1.160.6.34
+++ loncom/interface/domainprefs.pm 2014/03/17 02:36:56 1.229
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.34 2014/02/15 17:07:19 raeburn Exp $
+# $Id: domainprefs.pm,v 1.229 2014/03/17 02:36:56 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -211,13 +211,15 @@ sub handler {
'quotas','autoenroll','autoupdate','autocreate',
'directorysrch','usercreation','usermodification',
'contacts','defaults','scantron','coursecategories',
- 'serverstatuses','requestcourses','coursedefaults',
- 'usersessions','loadbalancing','requestauthor'],$dom);
+ 'serverstatuses','requestcourses','helpsettings',
+ 'coursedefaults','usersessions','loadbalancing',
+ 'requestauthor'],$dom);
my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
'autoupdate','autocreate','directorysrch','contacts',
'usercreation','selfcreation','usermodification','scantron',
'requestcourses','requestauthor','coursecategories',
- 'serverstatuses','coursedefaults','usersessions');
+ 'serverstatuses','helpsettings',
+ 'coursedefaults','usersessions');
my %existing;
if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
%existing = %{$domconfig{'loadbalancing'}};
@@ -273,7 +275,7 @@ sub handler {
{col1 => 'Setting',
col2 => 'Affiliation'},
{col1 => 'User population',
- col2 => 'Updateable user data'}],
+ col2 => 'Updatable user data'}],
},
'autocreate' =>
{ text => 'Auto-course creation settings',
@@ -317,9 +319,9 @@ sub handler {
{ text => 'User modification',
help => 'Domain_Configuration_User_Modification',
header => [{col1 => 'Target user has role',
- col2 => 'User information updateable in author context'},
+ col2 => 'User information updatable in author context'},
{col1 => 'Target user has role',
- col2 => 'User information updateable in course context'}],
+ col2 => 'User information updatable in course context'}],
},
'scantron' =>
{ text => 'Bubblesheet format file',
@@ -363,12 +365,26 @@ sub handler {
col3 => 'Specific IPs',
}],
},
- 'coursedefaults' =>
+ 'helpsettings' =>
+ {text => 'Help page settings',
+ help => 'Domain_Configuration_Help_Settings',
+ header => [{col1 => 'Help Settings (logged-in users)',
+ col2 => 'Value'}],
+ },
+ 'coursedefaults' =>
{text => 'Course/Community defaults',
help => 'Domain_Configuration_Course_Defaults',
- header => [{col1 => 'Defaults which can be overridden for each course by a DC',
+ header => [{col1 => 'Defaults which can be overridden in each course by a CC',
+ col2 => 'Value',},
+ {col1 => 'Defaults which can be overridden for each course by a DC',
col2 => 'Value',},],
},
+ 'privacy' =>
+ {text => 'User Privacy',
+ help => 'Domain_Configuration_User_Privacy',
+ header => [{col1 => 'Setting',
+ col2 => 'Value',}],
+ },
'usersessions' =>
{text => 'User session hosting/offloading',
help => 'Domain_Configuration_User_Sessions',
@@ -547,6 +563,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 'usersessions') {
@@ -620,6 +638,8 @@ sub print_config_box {
$output .= &print_usersessions('top',$dom,$settings,\$rowtotal);
} elsif ($action eq 'rolecolors') {
$output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
+ } elsif ($action eq 'coursedefaults') {
+ $output .= &print_coursedefaults('top',$dom,$settings,\$rowtotal);
}
$output .= '
@@ -723,6 +743,8 @@ sub print_config_box {
'.&mt($item->{'header'}->[2]->{'col2'}).'
'.
&print_usersessions('bottom',$dom,$settings,\$rowtotal);
$rowtotal ++;
+ } elsif ($action eq 'coursedefaults') {
+ $output .= &print_coursedefaults('bottom',$dom,$settings,\$rowtotal);
} elsif ($action eq 'rolecolors') {
$output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
@@ -819,8 +841,6 @@ sub print_config_box {
$output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal);
} elsif ($action eq 'loadbalancing') {
$output .= &print_loadbalancing($dom,$settings,\$rowtotal);
- } elsif ($action eq 'coursedefaults') {
- $output .= &print_coursedefaults('bottom',$dom,$settings,\$rowtotal);
}
}
$output .= '
@@ -3776,7 +3796,6 @@ sub print_selfcreation {
}
}
my %radiohash;
- my $rownum = 0;
my $numinrow = 4;
map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate;
if ($position eq 'top') {
@@ -3789,18 +3808,18 @@ sub print_selfcreation {
'cancreate_login' => 'off',
'cancreate_sso' => 'off',
);
- my $itemcount = 1;
- my $onclick;
+ my ($onclick,$itemcount);
($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked,
\%choices,$itemcount,$onclick);
+ $$rowtotal += $itemcount;
+
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
if (ref($usertypes) eq 'HASH') {
if (keys(%{$usertypes}) > 0) {
$datatable .= &insttypes_row($createsettings,$types,$usertypes,
$dom,$numinrow,$othertitle,
- 'statustocreate',$rownum);
- $rownum ++;
+ 'statustocreate',$$rowtotal);
$$rowtotal ++;
}
}
@@ -3812,14 +3831,13 @@ sub print_selfcreation {
push(@{$types},'default');
$usertypes->{'default'} = $othertitle;
foreach my $status (@{$types}) {
- $rownum ++;
$datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'},
- $numinrow,$rownum,$usertypes);
+ $numinrow,$$rowtotal,$usertypes);
$$rowtotal ++;
}
}
} else {
- my $css_class = $rownum%2?' class="LC_odd_row"':'';
+ my $css_class = $$rowtotal%2?' class="LC_odd_row"':'';
my %choices =
&Apache::lonlocal::texthash(
email => 'Approved automatically',
@@ -3851,27 +3869,32 @@ sub print_selfcreation {
$choices{$option}.' ';
}
$$rowtotal ++;
- $rownum ++;
$datatable .= ''.
&print_requestmail($dom,'selfcreation',$createsettings,$rowtotal);
- $rownum ++;
- my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
- $numinrow = 2;
- $datatable .= &modifiable_userdata_row('cancreate','emailusername',$settings,
- $numinrow,$rownum,undef,$infofields,$infotitles);
$$rowtotal ++;
- $rownum ++;
+ my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
+ $numinrow = 1;
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ $usertypes->{'default'} = $othertitle;
+ if (ref($types) eq 'ARRAY') {
+ push(@{$types},'default');
+ $usertypes->{'default'} = $othertitle;
+ foreach my $status (@{$types}) {
+ $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,
+ $numinrow,$$rowtotal,$usertypes,$infofields,$infotitles);
+ $$rowtotal ++;
+ }
+ }
my ($emailrules,$emailruleorder) =
&Apache::lonnet::inst_userrules($dom,'email');
if (ref($emailrules) eq 'HASH') {
if (keys(%{$emailrules}) > 0) {
$datatable .= &user_formats_row('email',$settings,$emailrules,
- $emailruleorder,$numinrow,$rownum);
- $rownum ++;
+ $emailruleorder,$numinrow,$$rowtotal);
$$rowtotal ++;
}
}
- $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
+ $datatable .= &captcha_choice('cancreate',$createsettings,$$rowtotal);
}
return $datatable;
}
@@ -4606,7 +4629,7 @@ sub serverstatus_pages {
return ('userstatus','lonstatus','loncron','server-status','codeversions',
'checksums','clusterstatus','metadata_keywords','metadata_harvest',
'takeoffline','takeonline','showenv','toggledebug','ping','domconf',
- 'uniquecodes');
+ 'uniquecodes','diskusage');
}
sub coursecategories_javascript {
@@ -4837,11 +4860,20 @@ sub build_category_rows {
}
sub modifiable_userdata_row {
- my ($context,$role,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
- my $rolename;
+ my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
+ my ($role,$rolename,$statustype);
+ $role = $item;
if ($context eq 'cancreate') {
- if ($role eq 'emailusername') {
- $rolename = &mt('Data user provides');
+ if ($item =~ /^emailusername_(.+)$/) {
+ $statustype = $1;
+ $role = 'emailusername';
+ if (ref($usertypes) eq 'HASH') {
+ if ($usertypes->{$statustype}) {
+ $rolename = &mt('Data provided by [_1]',$usertypes->{$statustype});
+ } else {
+ $rolename = &mt('Data provided by user');
+ }
+ }
}
} elsif ($context eq 'selfcreate') {
if (ref($usertypes) eq 'HASH') {
@@ -4878,14 +4910,33 @@ sub modifiable_userdata_row {
if (ref($settings) eq 'HASH') {
if (ref($settings->{$context}) eq 'HASH') {
if (ref($settings->{$context}->{$role}) eq 'HASH') {
- foreach my $field (@fields) {
- if ($settings->{$context}->{$role}->{$field}) {
- $checks{$field} = ' checked="checked" ';
+ my $hashref = $settings->{$context}->{$role};
+ if ($role eq 'emailusername') {
+ if ($statustype) {
+ if (ref($settings->{$context}->{$role}->{$statustype}) eq 'HASH') {
+ $hashref = $settings->{$context}->{$role}->{$statustype};
+ if (ref($hashref) eq 'HASH') {
+ foreach my $field (@fields) {
+ if ($hashref->{$field}) {
+ $checks{$field} = $hashref->{$field};
+ }
+ }
+ }
+ }
+ }
+ } else {
+ if (ref($hashref) eq 'HASH') {
+ foreach my $field (@fields) {
+ if ($hashref->{$field}) {
+ $checks{$field} = ' checked="checked" ';
+ }
+ }
}
}
}
}
}
+
for (my $i=0; $i<@fields; $i++) {
my $rem = $i%($numinrow);
if ($rem == 0) {
@@ -4895,20 +4946,40 @@ sub modifiable_userdata_row {
$output .= '
';
}
my $check = ' ';
- if (exists($checks{$fields[$i]})) {
- $check = $checks{$fields[$i]}
- } else {
- if ($role eq 'st') {
- if (ref($settings) ne 'HASH') {
- $check = ' checked="checked" ';
+ unless ($role eq 'emailusername') {
+ if (exists($checks{$fields[$i]})) {
+ $check = $checks{$fields[$i]}
+ } else {
+ if ($role eq 'st') {
+ if (ref($settings) ne 'HASH') {
+ $check = ' checked="checked" ';
+ }
}
}
}
$output .= '
'.
- '
';
+ '';
+ if ($role eq 'emailusername') {
+ unless ($checks{$fields[$i]} =~ /^(required|optional)$/) {
+ $checks{$fields[$i]} = 'omit';
+ }
+ foreach my $option ('required','optional','omit') {
+ my $checked='';
+ if ($checks{$fields[$i]} eq $option) {
+ $checked='checked="checked" ';
+ }
+ $output .= ''.(' ' x2);
+ }
+ $output .= ''.$fieldtitles{$fields[$i]}.'';
+ } else {
+ $output .= '';
+ }
+ $output .= '';
$rem = @fields%($numinrow);
}
my $colsleft = $numinrow - $rem;
@@ -7641,6 +7712,11 @@ sub modify_selfcreation {
my ($dom,%domconfig) = @_;
my ($resulttext,$warningmsg,%curr_usercreation,%curr_usermodify,%changes,%cancreate);
my (%save_usercreate,%save_usermodify);
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ if (ref($types) eq 'ARRAY') {
+ $usertypes->{'default'} = $othertitle;
+ push(@{$types},'default');
+ }
#
# Retrieve current domain configuration for self-creation of usernames from $domconfig{'usercreation'}.
#
@@ -7692,7 +7768,7 @@ sub modify_selfcreation {
# Populate $cancreate{'selfcreate'} array reference with types of user, for which self-creation of user accounts
# is permitted.
#
- foreach my $item ('login','sso','email') {
+ foreach my $item ('login','sso','email') {
if ($item eq 'email') {
if ($env{'form.cancreate_email'} eq 'email') {
push(@{$cancreate{'selfcreate'}},'email');
@@ -7708,20 +7784,22 @@ sub modify_selfcreation {
my (@email_rule,%userinfo,%savecaptcha);
my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
#
-# Populate $cancreate{'emailusername'} hash ref with information types (if new user will provide data
-# value set to one), if self-creation with e-mail address permitted.
+# Populate $cancreate{'emailusername'}{$type} hash ref with information fields (if new user will provide data
+# value set to one), if self-creation with e-mail address permitted, where $type is user type: faculty, staff, student etc.
#
if (($env{'form.cancreate_email'} eq 'email') || ($env{'form.cancreate_email'} eq 'emailapproval')) {
- push(@contexts,'emailusername');
- map { $userinfo{$_} = 1; } &Apache::loncommon::get_env_multiple('form.canmodify_emailusername');
- if (ref($infofields) eq 'ARRAY') {
- foreach my $field (@{$infofields}) {
- if ($userinfo{$field}) {
- $cancreate{'emailusername'}{$field} = 1;
+ push(@contexts,'emailusername');
+ if (ref($types) eq 'ARRAY') {
+ foreach my $type (@{$types}) {
+ if (ref($infofields) eq 'ARRAY') {
+ foreach my $field (@{$infofields}) {
+ if ($env{'form.canmodify_emailusername_'.$type.'_'.$field} =~ /^(required|optional)$/) {
+ $cancreate{'emailusername'}{$type}{$field} = $1;
+ }
+ }
}
}
}
-
#
# Populate $cancreate{'notify'} hash ref with names of Domain Coordinators who are to be notified of
# queued requests for self-creation of account using e-mail address as username
@@ -7780,7 +7858,6 @@ sub modify_selfcreation {
&mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.');
}
}
- my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
my @fields = ('lastname','firstname','middlename','generation',
'permanentemail','id');
my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
@@ -7793,14 +7870,12 @@ sub modify_selfcreation {
#
if (($env{'form.cancreate_login'}) || ($env{'form.cancreate_sso'})) {
if (ref($types) eq 'ARRAY') {
- if (@{$types} > 0) {
+ if (@{$types} > 1) {
@{$cancreate{'statustocreate'}} = &Apache::loncommon::get_env_multiple('form.statustocreate');
push(@contexts,'statustocreate');
} else {
undef($cancreate{'statustocreate'});
}
- push(@{$types},'default');
- $usertypes->{'default'} = $othertitle;
foreach my $type (@{$types}) {
my @modifiable = &Apache::loncommon::get_env_multiple('form.canmodify_'.$type);
foreach my $field (@fields) {
@@ -7853,16 +7928,42 @@ sub modify_selfcreation {
} elsif (ref($curr_usercreation{'cancreate'}{$item}) eq 'HASH') {
if (ref($cancreate{$item}) eq 'HASH') {
foreach my $curr (keys(%{$curr_usercreation{'cancreate'}{$item}})) {
- if (!$cancreate{$item}{$curr}) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($curr_usercreation{'cancreate'}{$item}{$curr}) eq 'HASH') {
+ foreach my $field (keys(%{$curr_usercreation{'cancreate'}{$item}{$curr}})) {
+ unless ($curr_usercreation{'cancreate'}{$item}{$curr}{$field} eq $cancreate{$item}{$curr}{$field}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ } else {
+ if (!$cancreate{$item}{$curr}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
}
}
foreach my $field (keys(%{$cancreate{$item}})) {
- if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
- if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($cancreate{$item}{$field}) eq 'HASH') {
+ foreach my $inner (keys(%{$cancreate{$item}{$field}})) {
+ if (ref($curr_usercreation{'cancreate'}{$item}{$field}) eq 'HASH') {
+ unless ($curr_usercreation{'cancreate'}{$item}{$field}{$inner} eq $cancreate{$item}{$field}{$inner}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ } else {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ }
+ }
+ } else {
+ if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
}
}
}
@@ -7882,8 +7983,19 @@ sub modify_selfcreation {
}
}
} elsif ($item eq 'emailusername') {
- if (keys(%userinfo) > 0) {
- push(@{$changes{'cancreate'}},$item);
+ if (ref($cancreate{$item}) eq 'HASH') {
+ foreach my $type (keys(%{$cancreate{$item}})) {
+ if (ref($cancreate{$item}{$type}) eq 'HASH') {
+ foreach my $field (keys(%{$cancreate{$item}{$type}})) {
+ if ($cancreate{$item}{$type}{$field}) {
+ if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+ push(@{$changes{'cancreate'}},$item);
+ }
+ last;
+ }
+ }
+ }
+ }
}
}
}
@@ -8013,17 +8125,23 @@ sub modify_selfcreation {
$chgtext .= '';
} elsif ($type eq 'emailusername') {
if (ref($cancreate{'emailusername'}) eq 'HASH') {
- if (keys(%{$cancreate{'emailusername'}}) > 0) {
- $chgtext .= &mt('When self-creating account with e-mail as username, user will provide the following information:').
- '
';
- foreach my $field (@{$infofields}) {
- if ($cancreate{'emailusername'}{$field}) {
- $chgtext .= '
'.$infotitles->{$field}.'
';
+ if (ref($types) eq 'ARRAY') {
+ foreach my $type (@{$types}) {
+ if (ref($cancreate{'emailusername'}{$type}) eq 'HASH') {
+ if (keys(%{$cancreate{'emailusername'}{$type}}) > 0) {
+ $chgtext .= &mt('When self-creating account with e-mail as username, the following information will be provided by [_1]:',$usertypes->{$type}).
+ '
';
+ foreach my $field (@{$infofields}) {
+ if ($cancreate{'emailusername'}{$type}{$field}) {
+ $chgtext .= '
'.$infotitles->{$field}.'
';
+ }
+ }
+ }
+ $chgtext .= '
';
+ } else {
+ $chgtext .= &mt('When self creating account with e-mail as username, no information besides e-mail address will be provided by [_1].',$usertypes->{$type}).' ';
}
}
- $chgtext .= '
';
- } else {
- $chgtext .= &mt('When self creating account with e-mail as username, user will not provide any information besides e-mail address');
}
}
} elsif ($type eq 'notify') {