--- loncom/interface/domainprefs.pm 2014/03/03 18:09:24 1.160.6.35 +++ loncom/interface/domainprefs.pm 2014/02/12 20:37:42 1.224 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.35 2014/03/03 18:09:24 raeburn Exp $ +# $Id: domainprefs.pm,v 1.224 2014/02/12 20:37:42 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 => 'Updatable user data'}], + col2 => 'Updateable 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 updatable in author context'}, + col2 => 'User information updateable in author context'}, {col1 => 'Target user has role', - col2 => 'User information updatable in course context'}], + col2 => 'User information updateable 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,6 +3796,7 @@ sub print_selfcreation { } } my %radiohash; + my $rownum = 0; my $numinrow = 4; map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate; if ($position eq 'top') { @@ -3788,18 +3809,18 @@ sub print_selfcreation { 'cancreate_login' => 'off', 'cancreate_sso' => 'off', ); - my ($onclick,$itemcount); + my $itemcount = 1; + my $onclick; ($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',$$rowtotal); + 'statustocreate',$rownum); + $rownum ++; $$rowtotal ++; } } @@ -3811,13 +3832,14 @@ sub print_selfcreation { push(@{$types},'default'); $usertypes->{'default'} = $othertitle; foreach my $status (@{$types}) { + $rownum ++; $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'}, - $numinrow,$$rowtotal,$usertypes); + $numinrow,$rownum,$usertypes); $$rowtotal ++; } } } else { - my $css_class = $$rowtotal%2?' class="LC_odd_row"':''; + my $css_class = $rownum%2?' class="LC_odd_row"':''; my %choices = &Apache::lonlocal::texthash( email => 'Approved automatically', @@ -3849,32 +3871,27 @@ sub print_selfcreation { $choices{$option}.' '; } $$rowtotal ++; + $rownum ++; $datatable .= ''. &print_requestmail($dom,'selfcreation',$createsettings,$rowtotal); - $$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 ++; - } - } + $numinrow = 2; + $datatable .= &modifiable_userdata_row('cancreate','emailusername',$settings, + $numinrow,$rownum,undef,$infofields,$infotitles); + $$rowtotal ++; + $rownum ++; 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,$$rowtotal); + $emailruleorder,$numinrow,$rownum); + $rownum ++; $$rowtotal ++; } } - $datatable .= &captcha_choice('cancreate',$createsettings,$$rowtotal); + $datatable .= &captcha_choice('cancreate',$createsettings,$rownum); } return $datatable; } @@ -4840,20 +4857,11 @@ sub build_category_rows { } sub modifiable_userdata_row { - my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_; - my ($role,$rolename,$statustype); - $role = $item; + my ($context,$role,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_; + my $rolename; if ($context eq 'cancreate') { - 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'); - } - } + if ($role eq 'emailusername') { + $rolename = &mt('Data user provides'); } } elsif ($context eq 'selfcreate') { if (ref($usertypes) eq 'HASH') { @@ -4890,33 +4898,14 @@ sub modifiable_userdata_row { if (ref($settings) eq 'HASH') { if (ref($settings->{$context}) eq 'HASH') { if (ref($settings->{$context}->{$role}) eq 'HASH') { - 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" '; - } - } + foreach my $field (@fields) { + if ($settings->{$context}->{$role}->{$field}) { + $checks{$field} = ' checked="checked" '; } } } } } - for (my $i=0; $i<@fields; $i++) { my $rem = $i%($numinrow); if ($rem == 0) { @@ -4926,40 +4915,20 @@ sub modifiable_userdata_row { $output .= ''; } my $check = ' '; - 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" '; - } + 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; @@ -4992,6 +4961,7 @@ sub insttypes_row { if ($rownum ne '') { $css_class = ($rownum%2? ' class="LC_odd_row"':''); } + print STDERR "rownum ||$rownum|| an css_class ||".$css_class."||\n"; my $output = ''. ''.$lt{$context}.$showdom. ''; @@ -7692,11 +7662,6 @@ 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'}. # @@ -7748,7 +7713,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'); @@ -7764,22 +7729,20 @@ sub modify_selfcreation { my (@email_rule,%userinfo,%savecaptcha); my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info(); # -# 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. +# 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. # if (($env{'form.cancreate_email'} eq 'email') || ($env{'form.cancreate_email'} eq 'emailapproval')) { 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; - } - } + 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; } } } + # # 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 @@ -7838,6 +7801,7 @@ 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(); @@ -7850,12 +7814,14 @@ sub modify_selfcreation { # if (($env{'form.cancreate_login'}) || ($env{'form.cancreate_sso'})) { if (ref($types) eq 'ARRAY') { - if (@{$types} > 1) { + if (@{$types} > 0) { @{$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) { @@ -7908,42 +7874,17 @@ 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 (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); - } + if (!$cancreate{$item}{$curr}) { + if (!grep(/^$item$/,@{$changes{'cancreate'}})) { + push(@{$changes{'cancreate'}},$item); } } } foreach my $field (keys(%{$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); - } + if (!$curr_usercreation{'cancreate'}{$item}{$field}) { + print STDERR "field $field in cancreate but not in curr\n"; + if (!grep(/^$item$/,@{$changes{'cancreate'}})) { + push(@{$changes{'cancreate'}},$item); } } } @@ -7963,19 +7904,8 @@ sub modify_selfcreation { } } } elsif ($item eq 'emailusername') { - 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; - } - } - } - } + if (keys(%userinfo) > 0) { + push(@{$changes{'cancreate'}},$item); } } } @@ -8105,23 +8035,17 @@ sub modify_selfcreation { $chgtext .= ''; } elsif ($type eq 'emailusername') { if (ref($cancreate{'emailusername'}) eq 'HASH') { - 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}). - ''; - } 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}).'
'; + if (keys(%{$cancreate{'emailusername'}}) > 0) { + $chgtext .= &mt('When self-creating account with e-mail as username, user will provide the following information:'). + ''; + } 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') { @@ -8311,6 +8235,7 @@ sub modify_usermodification { } } } +# FIXME need to ensure selfcreate stuff is preserved my %usermodification_hash = ( usermodification => \%modifyhash, );