--- loncom/interface/domainprefs.pm 2014/02/12 20:37:42 1.224 +++ loncom/interface/domainprefs.pm 2014/03/29 20:25:28 1.230 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.224 2014/02/12 20:37:42 raeburn Exp $ +# $Id: domainprefs.pm,v 1.230 2014/03/29 20:25:28 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -239,6 +239,8 @@ sub handler { col2 => '',}, {col1 => 'Administrator Settings', col2 => '',}], + print => \&print_rolecolors, + modify => \&modify_rolecolors, }, 'login' => { text => 'Log-in page options', @@ -247,12 +249,16 @@ sub handler { col2 => '',}, {col1 => 'Log-in Help', col2 => 'Value'}], + print => \&print_login, + modify => \&modify_login, }, 'defaults' => { text => 'Default authentication/language/timezone/portal', help => 'Domain_Configuration_LangTZAuth', header => [{col1 => 'Setting', col2 => 'Value'}], + print => \&print_defaults, + modify => \&modify_defaults, }, 'quotas' => { text => 'Blogs, personal web pages, webDAV/quotas, portfolios', @@ -260,12 +266,16 @@ sub handler { header => [{col1 => 'User affiliation', col2 => 'Available tools', col3 => 'Quotas, MB; (Authoring requires role)',}], + print => \&print_quotas, + modify => \&modify_quotas, }, 'autoenroll' => { text => 'Auto-enrollment settings', help => 'Domain_Configuration_Auto_Enrollment', header => [{col1 => 'Configuration setting', col2 => 'Value(s)'}], + print => \&print_autoenroll, + modify => \&modify_autoenroll, }, 'autoupdate' => { text => 'Auto-update settings', @@ -275,25 +285,33 @@ sub handler { {col1 => 'Setting', col2 => 'Affiliation'}, {col1 => 'User population', - col2 => 'Updateable user data'}], + col2 => 'Updatable user data'}], + print => \&print_autoupdate, + modify => \&modify_autoupdate, }, 'autocreate' => { text => 'Auto-course creation settings', help => 'Domain_Configuration_Auto_Creation', header => [{col1 => 'Configuration Setting', col2 => 'Value',}], + print => \&print_autocreate, + modify => \&modify_autocreate, }, 'directorysrch' => { text => 'Institutional directory searches', help => 'Domain_Configuration_InstDirectory_Search', header => [{col1 => 'Setting', col2 => 'Value',}], + print => \&print_directorysrch, + modify => \&modify_directorysrch, }, 'contacts' => { text => 'Contact Information', help => 'Domain_Configuration_Contact_Info', header => [{col1 => 'Setting', col2 => 'Value',}], + print => \&print_contacts, + modify => \&modify_contacts, }, 'usercreation' => { text => 'User creation', @@ -304,6 +322,8 @@ sub handler { col2 => 'Usernames which may be created',}, {col1 => 'Context', col2 => 'Assignable authentication types'}], + print => \&print_usercreation, + modify => \&modify_usercreation, }, 'selfcreation' => { text => 'Users self-creating accounts', @@ -314,14 +334,18 @@ sub handler { col2 => 'Information user can enter'}, {col1 => 'Self-creation with e-mail as username', col2 => 'Settings'}], + print => \&print_selfcreation, + modify => \&modify_selfcreation, }, 'usermodification' => { 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'}], + print => \&print_usermodification, + modify => \&modify_usermodification, }, 'scantron' => { text => 'Bubblesheet format file', @@ -329,6 +353,8 @@ sub handler { header => [ {col1 => 'Item', col2 => '', }], + print => \&print_scantron, + modify => \&modify_scantron, }, 'requestcourses' => {text => 'Request creation of courses', @@ -339,6 +365,8 @@ sub handler { col2 => 'Value'}, {col1 => 'Available textbooks', col2 => ''}], + print => \&print_quotas, + modify => \&modify_quotas, }, 'requestauthor' => {text => 'Request Authoring Space', @@ -347,6 +375,8 @@ sub handler { col2 => 'Availability/Processing of requests',}, {col1 => 'Setting', col2 => 'Value'}], + print => \&print_quotas, + modify => \&modify_quotas, }, 'coursecategories' => { text => 'Cataloging of courses/communities', @@ -356,6 +386,8 @@ sub handler { {col1 => 'Categories', col2 => '', }], + print => \&print_coursecategories, + modify => \&modify_coursecategories, }, 'serverstatuses' => {text => 'Access to server status pages', @@ -364,12 +396,16 @@ sub handler { col2 => 'Other named users', col3 => 'Specific IPs', }], + 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', @@ -378,12 +414,16 @@ sub handler { col2 => 'Value',}, {col1 => 'Defaults which can be overridden for each course by a DC', col2 => 'Value',},], + print => \&print_coursedefaults, + modify => \&modify_coursedefaults, }, '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', @@ -394,6 +434,8 @@ sub handler { col2 => 'Rules'}, {col1 => "Hosting domain's own users elsewhere", col2 => 'Rules'}], + print => \&print_usersessions, + modify => \&modify_usersessions, }, 'loadbalancing' => {text => 'Dedicated Load Balancer(s)', @@ -403,6 +445,8 @@ sub handler { col3 => 'User affiliation', col4 => 'Overrides'}, ], + print => \&print_loadbalancing, + modify => \&modify_loadbalancing, }, ); if (keys(%servers) > 1) { @@ -414,6 +458,8 @@ sub handler { col2 => ''}, {col1 => 'Log-in Help', col2 => 'Value'}], + print => \&print_login, + modify => \&modify_login, }; } @@ -613,16 +659,12 @@ sub print_config_box { '.&mt($item->{'header'}->[0]->{'col2'}).' '; $rowtotal ++; - if ($action eq 'autoupdate') { - $output .= &print_autoupdate('top',$dom,$settings,\$rowtotal); - } elsif ($action eq 'usercreation') { - $output .= &print_usercreation('top',$dom,$settings,\$rowtotal); - } elsif ($action eq 'selfcreation') { - $output .= &print_selfcreation('top',$dom,$settings,\$rowtotal); - } elsif ($action eq 'usermodification') { - $output .= &print_usermodification('top',$dom,$settings,\$rowtotal); + if (($action eq 'autoupdate') || ($action eq 'usercreation') || ($action eq 'selfcreation') || + ($action eq 'usermodification') || ($action eq 'coursedefaults') || + ($action eq 'selfenrollment') || ($action eq 'usersessions')) { + $output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); } elsif ($action eq 'coursecategories') { - $output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal); + $output .= $item->{'print'}->('top',$dom,$item,$settings,\$rowtotal); } elsif ($action eq 'login') { if ($numheaders == 3) { $colspan = ' colspan="2"'; @@ -630,16 +672,10 @@ sub print_config_box { } else { $output .= &print_login('page',$dom,$confname,$phase,$settings,\$rowtotal); } - } elsif ($action eq 'requestcourses') { - $output .= &print_quotas($dom,$settings,\$rowtotal,$action); - } elsif ($action eq 'requestauthor') { + } elsif (($action eq 'requestcourses') || ($action eq 'requestauthor')) { $output .= &print_quotas($dom,$settings,\$rowtotal,$action); - } elsif ($action eq 'usersessions') { - $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 .= ' @@ -649,39 +685,14 @@ sub print_config_box { - '; - $output .= ' + '; $rowtotal ++; - if ($action eq 'autoupdate') { - $output .= &print_autoupdate('middle',$dom,$settings,\$rowtotal).' -
'.&mt($item->{'header'}->[1]->{'col1'}).''.&mt($item->{'header'}->[1]->{'col1'}).' '.&mt($item->{'header'}->[1]->{'col2'}).'
- - - - - - - - '. - &print_autoupdate('bottom',$dom,$settings,\$rowtotal); - $rowtotal ++; - } elsif ($action eq 'usercreation') { - $output .= &print_usercreation('middle',$dom,$settings,\$rowtotal).' -
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
- - - - - - - - '. - &print_usercreation('bottom',$dom,$settings,\$rowtotal); - $rowtotal ++; - } elsif ($action eq 'selfcreation') { - $output .= &print_selfcreation('middle',$dom,$settings,\$rowtotal).' + if (($action eq 'autoupdate') || ($action eq 'usercreation') || + ($action eq 'selfcreation') || ($action eq 'selfenrollment') || + ($action eq 'usersessions')) { + $output .= $item->{'print'}->('middle',$dom,$settings,\$rowtotal).'
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
@@ -691,11 +702,11 @@ sub print_config_box { '.&mt($item->{'header'}->[2]->{'col1'}).' '.&mt($item->{'header'}->[2]->{'col2'}).' - '. - &print_selfcreation('bottom',$dom,$settings,\$rowtotal); + '."\n". + $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); $rowtotal ++; - } elsif ($action eq 'usermodification') { - $output .= &print_usermodification('middle',$dom,$settings,\$rowtotal); + } elsif (($action eq 'usermodification') || ($action eq 'coursedefaults')) { + $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); } elsif ($action eq 'coursecategories') { $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); } elsif ($action eq 'login') { @@ -730,21 +741,6 @@ sub print_config_box { &print_textbookcourses($dom,$settings,\$rowtotal); } elsif ($action eq 'requestauthor') { $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); - } elsif ($action eq 'usersessions') { - $output .= &print_usersessions('middle',$dom,$settings,\$rowtotal).' - - - - - - - - - '. - &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).'
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
@@ -823,24 +819,14 @@ sub print_config_box { $rowtotal ++; if ($action eq 'quotas') { $output .= &print_quotas($dom,$settings,\$rowtotal,$action); - } elsif ($action eq 'autoenroll') { - $output .= &print_autoenroll($dom,$settings,\$rowtotal); - } elsif ($action eq 'autocreate') { - $output .= &print_autocreate($dom,$settings,\$rowtotal); - } elsif ($action eq 'directorysrch') { - $output .= &print_directorysrch($dom,$settings,\$rowtotal); - } elsif ($action eq 'contacts') { - $output .= &print_contacts($dom,$settings,\$rowtotal); - } elsif ($action eq 'defaults') { - $output .= &print_defaults($dom,$settings,\$rowtotal); + } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') || ($action eq 'directorysrch') || + ($action eq 'contacts') || ($action eq 'defaults') || ($action eq 'serverstatuses') || + ($action eq 'loadbalancing')) { + $output .= $item->{'print'}->($dom,$settings,\$rowtotal); } elsif ($action eq 'scantron') { $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); - } elsif ($action eq 'serverstatuses') { - $output .= &print_serverstatuses($dom,$settings,\$rowtotal); } elsif ($action eq 'helpsettings') { $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal); - } elsif ($action eq 'loadbalancing') { - $output .= &print_loadbalancing($dom,$settings,\$rowtotal); } } $output .= ' @@ -2782,19 +2768,21 @@ sub print_coursedefaults { ''. ''. - ''."\n". - ''. - $choices{'uploadquota'}. - ''. - ''. - ''; + ''."\n"; + $itemcount ++; + $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; + $datatable .= ''. + ''."\n"; - $itemcount += 2; + $itemcount ++; my $onclick = 'toggleCredits(this.form);'; my $display = 'none'; if ($currusecredits) { @@ -2825,6 +2813,7 @@ sub print_coursedefaults { &radiobutton_prefs($current,\@toggles,\%defaultchecked, \%choices,$itemcount,$onclick,$additional); $datatable .= $table; + $itemcount ++; } $$rowtotal += $itemcount; return $datatable; @@ -3796,7 +3785,6 @@ sub print_selfcreation { } } my %radiohash; - my $rownum = 0; my $numinrow = 4; map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate; if ($position eq 'top') { @@ -3809,18 +3797,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 ++; } } @@ -3832,14 +3820,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', @@ -3871,27 +3858,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; } @@ -4068,7 +4060,7 @@ sub print_usermodification { $$rowtotal ++; $rowcount ++; } - } elsif ($position eq 'middle') { + } elsif ($position eq 'bottom') { $context = 'course'; $rowcount = 0; foreach my $role ('st','ep','ta','in','cr') { @@ -4626,7 +4618,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 { @@ -4857,11 +4849,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') { @@ -4898,14 +4899,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) { @@ -4915,20 +4935,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; @@ -4961,7 +5001,6 @@ 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 = ''. '
'. + $choices{'uploadquota'}. + ''. + ''; foreach my $type (@types) { $datatable .= ''; } $datatable .= '
'.&mt($type).'
'. '
'. - ''.$lt{$context}.$showdom. ''; @@ -7662,6 +7701,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'}. # @@ -7713,7 +7757,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'); @@ -7729,20 +7773,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 @@ -7801,7 +7847,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(); @@ -7814,14 +7859,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) { @@ -7874,17 +7917,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}) { - print STDERR "field $field in cancreate but not in curr\n"; - 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); + } } } } @@ -7904,8 +7972,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; + } + } + } + } } } } @@ -8035,17 +8114,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') { @@ -8235,7 +8320,6 @@ sub modify_usermodification { } } } -# FIXME need to ensure selfcreate stuff is preserved my %usermodification_hash = ( usermodification => \%modifyhash, ); @@ -8988,7 +9072,8 @@ sub modify_coursedefaults { if ($putresult eq 'ok') { if (keys(%changes) > 0) { my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); - if (($changes{'canuse_pdfforms'}) || ($changes{'coursecredits'}) || ($changes{'uploadquota'})) { + if (($changes{'canuse_pdfforms'}) || ($changes{'coursecredits'}) || + ($changes{'uploadquota'})) { if ($changes{'canuse_pdfforms'}) { $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; }