--- loncom/interface/domainprefs.pm 2014/01/06 14:08:31 1.160.6.33 +++ loncom/interface/domainprefs.pm 2012/12/12 12:54:01 1.177 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.160.6.33 2014/01/06 14:08:31 raeburn Exp $ +# $Id: domainprefs.pm,v 1.177 2012/12/12 12:54:01 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -45,7 +45,7 @@ described at http://www.lon-capa.org. =head1 OVERVIEW Each institution using LON-CAPA will typically have a single domain designated -for use by individuals affiliated with the institution. Accordingly, each domain +for use by individuals affliated with the institution. Accordingly, each domain may define a default set of logos and a color scheme which can be used to "brand" the LON-CAPA instance. In addition, an institution will typically have a language and timezone which are used for the majority of courses. @@ -86,7 +86,7 @@ $dom,$settings,$rowtotal,$action. $dom is the domain, $settings is a reference to a hash of current settings for the current context, $rowtotal is a reference to the scalar used to record the -number of rows displayed on the page, and $action is the context (quotas, +number of rows displayed on the page, and $action is the context (quotas, requestcourses or requestauthor). The print_quotas routine was orginally created to display/store information @@ -94,8 +94,7 @@ about default quota sizes for portfolio institutional affiliation in the domain (e.g., Faculty, Staff, Student etc.), but is now also used to manage availability of user tools: i.e., blogs, aboutme page, and portfolios, and the course request tool, -used by course owners to request creation of a course, and to display/store -default quota sizes for authoring spaces. +used by course owners to request creation of a course. Outputs: 1 @@ -103,8 +102,8 @@ $datatable - HTML containing form eleme In the case of course requests, radio buttons are displayed for each institutional affiliate type (and also default, and _LC_adv) for each of the course types -(official, unofficial, community, and textbook). In each case the radio buttons -allow the selection of one of four values: +(official, unofficial and community). In each case the radio buttons allow the +selection of one of four values: 0, approval, validate, autolimit=N (where N is blank, or a positive integer). which have the following effects: @@ -211,13 +210,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','usermodification','scantron', 'requestcourses','requestauthor','coursecategories', - 'serverstatuses','coursedefaults','usersessions'); + 'serverstatuses','helpsettings', + 'coursedefaults','usersessions'); my %existing; if (ref($domconfig{'loadbalancing'}) eq 'HASH') { %existing = %{$domconfig{'loadbalancing'}}; @@ -253,11 +254,11 @@ sub handler { col2 => 'Value'}], }, 'quotas' => - { text => 'Blogs, personal web pages, webDAV/quotas, portfolios', + { text => 'Blogs, personal web pages, webDAV, portfolios', help => 'Domain_Configuration_Quotas', header => [{col1 => 'User affiliation', col2 => 'Available tools', - col3 => 'Quotas, MB; (Authoring requires role)',}], + col3 => 'Portfolio quota',}], }, 'autoenroll' => { text => 'Auto-enrollment settings', @@ -327,9 +328,7 @@ sub handler { header => [{col1 => 'User affiliation', col2 => 'Availability/Processing of requests',}, {col1 => 'Setting', - col2 => 'Value'}, - {col1 => 'Available textbooks', - col2 => ''}], + col2 => 'Value'}], }, 'requestauthor' => {text => 'Request authoring space', @@ -356,12 +355,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', @@ -373,11 +386,11 @@ sub handler { col2 => 'Rules'}], }, 'loadbalancing' => - {text => 'Dedicated Load Balancer(s)', + {text => 'Dedicated Load Balancer', help => 'Domain_Configuration_Load_Balancing', header => [{col1 => 'Balancers', col2 => 'Default destinations', - col3 => 'User affiliation', + col3 => 'User affliation', col4 => 'Overrides'}, ], }, @@ -394,6 +407,8 @@ sub handler { }; } + + my @roles = ('student','coordinator','author','admin'); my @actions = &Apache::loncommon::get_env_multiple('form.actions'); &Apache::lonhtmlcommon::add_breadcrumb @@ -402,15 +417,9 @@ sub handler { my $confname = $dom.'-domainconfig'; if ($phase eq 'process') { - my $result = &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order, - \%prefs,\%domconfig,$confname,\@roles); - if ((ref($result) eq 'HASH') && (keys(%{$result}))) { - $r->rflush(); - &devalidate_remote_domconfs($dom,$result); - } + &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); } elsif ($phase eq 'display') { - my $js = &recaptcha_js(). - &credits_js(); + my $js = &recaptcha_js(); if ((keys(%servers) > 1) || (keys(%existing) > 0)) { my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); @@ -420,46 +429,8 @@ sub handler { &common_domprefs_js(). &Apache::loncommon::javascript_array_indexof(); } - if (grep(/^requestcourses$/,@actions)) { - my $javascript_validations; - my $coursebrowserjs=&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'}); - $js .= < -$javascript_validations - -$coursebrowserjs -END - } &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js); } else { -# check if domconfig user exists for the domain. - my $servadm = $r->dir_config('lonAdmEMail'); - my ($configuserok,$author_ok,$switchserver) = - &config_check($dom,$confname,$servadm); - unless ($configuserok eq 'ok') { - &Apache::lonconfigsettings::print_header($r,$phase,$context); - $r->print(&mt('The domain configuration user "[_1]" has yet to be created.', - $confname). - '
' - ); - if ($switchserver) { - $r->print(&mt('Ordinarily, that domain configuration user is created when the ./UPDATE script is run to install LON-CAPA for the first time.'). - '
'. - &mt('However, that does not apply when new domains are added to a multi-domain server, and ./UPDATE has not been run recently.'). - '
'. - &mt('The "[_1]" user can be created automatically when a Domain Coordinator visits the web-based "Set domain configuration" screen, in a session hosted on the primary library server.',$confname). - '
'. - &mt('To do that now, use the following link: [_1]',$switchserver) - ); - } else { - $r->print(&mt('To create that user from the command line run the ./UPDATE script found in the top level directory of the extracted LON-CAPA tarball.'). - '
'. - &mt('Once that is done, you will be able to use the web-based "Set domain configuration" to configure the domain') - ); - } - $r->print(&Apache::loncommon::end_page()); - return OK; - } if (keys(%domconfig) == 0) { my $primarylibserv = &Apache::lonnet::domain($dom,'primary'); my @ids=&Apache::lonnet::current_machine_ids(); @@ -493,27 +464,28 @@ END } } } + &Apache::lonconfigsettings::display_choices($r,$phase,$context,\@prefs_order,\%prefs); } return OK; } sub process_changes { - my ($r,$dom,$confname,$action,$roles,$values,$lastactref) = @_; + my ($r,$dom,$confname,$action,$roles,$values) = @_; my %domconfig; if (ref($values) eq 'HASH') { %domconfig = %{$values}; } my $output; if ($action eq 'login') { - $output = &modify_login($r,$dom,$confname,$lastactref,%domconfig); + $output = &modify_login($r,$dom,$confname,%domconfig); } elsif ($action eq 'rolecolors') { $output = &modify_rolecolors($r,$dom,$confname,$roles, - $lastactref,%domconfig); + %domconfig); } elsif ($action eq 'quotas') { - $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); } elsif ($action eq 'autoenroll') { - $output = &modify_autoenroll($dom,$lastactref,%domconfig); + $output = &modify_autoenroll($dom,%domconfig); } elsif ($action eq 'autoupdate') { $output = &modify_autoupdate($dom,%domconfig); } elsif ($action eq 'autocreate') { @@ -525,23 +497,25 @@ sub process_changes { } elsif ($action eq 'usermodification') { $output = &modify_usermodification($dom,%domconfig); } elsif ($action eq 'contacts') { - $output = &modify_contacts($dom,$lastactref,%domconfig); + $output = &modify_contacts($dom,%domconfig); } elsif ($action eq 'defaults') { - $output = &modify_defaults($dom,$lastactref,%domconfig); + $output = &modify_defaults($dom,$r); } elsif ($action eq 'scantron') { - $output = &modify_scantron($r,$dom,$confname,$lastactref,%domconfig); + $output = &modify_scantron($r,$dom,$confname,%domconfig); } elsif ($action eq 'coursecategories') { $output = &modify_coursecategories($dom,%domconfig); } elsif ($action eq 'serverstatuses') { $output = &modify_serverstatuses($dom,%domconfig); } elsif ($action eq 'requestcourses') { - $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); } elsif ($action eq 'requestauthor') { - $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); + } elsif ($action eq 'helpsettings') { + $output = &modify_helpsettings($r,$dom,$confname,%domconfig); } elsif ($action eq 'coursedefaults') { - $output = &modify_coursedefaults($dom,$lastactref,%domconfig); + $output = &modify_coursedefaults($dom,%domconfig); } elsif ($action eq 'usersessions') { - $output = &modify_usersessions($dom,$lastactref,%domconfig); + $output = &modify_usersessions($dom,%domconfig); } elsif ($action eq 'loadbalancing') { $output = &modify_loadbalancing($dom,%domconfig); } @@ -552,6 +526,7 @@ sub print_config_box { my ($r,$dom,$confname,$phase,$action,$item,$settings) = @_; my $rowtotal = 0; my $output; + if ($action eq 'coursecategories') { $output = &coursecategories_javascript($settings); } @@ -570,7 +545,7 @@ sub print_config_box { if ($numheaders > 1) { my $colspan = ''; my $rightcolspan = ''; - if (($action eq 'rolecolors') || ($action eq 'coursecategories') || + if (($action eq 'rolecolors') || ($action eq 'coursecategories') || (($action eq 'login') && ($numheaders < 3))) { $colspan = ' colspan="2"'; } @@ -609,6 +584,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 .= ' @@ -659,7 +636,7 @@ sub print_config_box { - '. + '. &print_usermodification('bottom',$dom,$settings,\$rowtotal); $rowtotal ++; } elsif ($action eq 'coursecategories') { @@ -675,25 +652,14 @@ sub print_config_box {
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col2'}).'
- '. + '. &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); $rowtotal ++; } else { $output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal); } } elsif ($action eq 'requestcourses') { - $output .= &print_requestmail($dom,$action,$settings,\$rowtotal). - &print_studentcode($settings,\$rowtotal).' -
'.&mt($item->{'header'}->[2]->{'col1'}).''.&mt($item->{'header'}->[2]->{'col2'}).'
'.&mt($item->{'header'}->[2]->{'col2'}).'
- - - - - - - - '. - &print_textbookcourses($dom,$settings,\$rowtotal); + $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); } elsif ($action eq 'requestauthor') { $output .= &print_requestmail($dom,$action,$settings,\$rowtotal); } elsif ($action eq 'usersessions') { @@ -709,6 +675,8 @@ sub print_config_box { '. &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'}).'
'.&mt($item->{'header'}->[2]->{'col2'}).'
@@ -796,7 +764,7 @@ sub print_config_box { } elsif ($action eq 'contacts') { $output .= &print_contacts($dom,$settings,\$rowtotal); } elsif ($action eq 'defaults') { - $output .= &print_defaults($dom,$settings,\$rowtotal); + $output .= &print_defaults($dom,\$rowtotal); } elsif ($action eq 'scantron') { $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); } elsif ($action eq 'serverstatuses') { @@ -805,8 +773,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 .= ' @@ -849,7 +815,7 @@ sub print_login { ' '. + ' value="'.$current_color.'" /> '. ' '; unless ($role eq 'login') { $datatable .= ''. @@ -1275,7 +1211,7 @@ sub display_color_options { } else { $datatable .= ' '; } - $current_color = $designs->{'fontmenu'} ? + $current_color = $designs->{'fontmenu'} ? $designs->{'fontmenu'} : $defaults->{'fontmenu'}; $datatable .= ''. ''. - &mt('Upload:').'
'; + $datatable .= '
'. + &mt('Upload:'); } } else { - $datatable .= ' '. - &mt('Upload:').'
'; + $datatable .= '
'. + &mt('Upload:'); } if ($switchserver) { $datatable .= &mt('Upload to library server: [_1]',$switchserver); @@ -1409,8 +1345,10 @@ sub display_color_options { $datatable .= ''. ''; + foreach my $item (@{$bgs}) { - $datatable .= ''. &loadbalancing_rules($dom,$intdom,$currrules{$lonhost}, $othertitle,$usertypes,$types,\%servers, @@ -3389,7 +3071,7 @@ sub loadbalancing_rules { $css_class,$balnum,$islast) = @_; my $output; my $num = 0; - my ($alltypes,$othertypes,$titles) = + my ($alltypes,$othertypes,$titles) = &loadbalancing_titles($dom,$intdom,$usertypes,$types); if ((ref($alltypes) eq 'ARRAY') && (ref($titles) eq 'HASH')) { foreach my $type (@{$alltypes}) { @@ -3398,7 +3080,7 @@ sub loadbalancing_rules { if (ref($currrules) eq 'HASH') { $current = $currrules->{$type}; } - if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) { + if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) { if ($dom ne &Apache::lonnet::host_domain($lonhost)) { $current = ''; } @@ -3419,10 +3101,8 @@ sub loadbalancing_titles { '_LC_author' => &mt('Users from [_1] with author role',$dom), '_LC_internetdom' => &mt('Users not from [_1], but from [_2]',$dom,$intdom), '_LC_external' => &mt('Users not from [_1]',$intdom), - '_LC_ipchangesso' => &mt('SSO users from [_1], with IP mismatch',$dom), - '_LC_ipchange' => &mt('Non-SSO users with IP mismatch'), ); - my @alltypes = ('_LC_adv','_LC_author','_LC_internetdom','_LC_external','_LC_ipchangesso','_LC_ipchange'); + my @alltypes = ('_LC_adv','_LC_author','_LC_internetdom','_LC_external'); if (ref($types) eq 'ARRAY') { unshift(@alltypes,@{$types},'default'); } @@ -3447,28 +3127,23 @@ sub loadbalancing_titles { sub loadbalance_rule_row { my ($type,$title,$current,$servers,$currbalancer,$lonhost,$dom, $targets_div_style,$homedom_div_style,$css_class,$balnum,$num,$islast) = @_; - my @rulenames; + my @rulenames = ('default','homeserver'); my %ruletitles = &offloadtype_text(); - if (($type eq '_LC_ipchangesso') || ($type eq '_LC_ipchange')) { - @rulenames = ('balancer','offloadedto'); + if ($type eq '_LC_external') { + push(@rulenames,'externalbalancer'); } else { - @rulenames = ('default','homeserver'); - if ($type eq '_LC_external') { - push(@rulenames,'externalbalancer'); - } else { - push(@rulenames,'specific'); - } - push(@rulenames,'none'); + push(@rulenames,'specific'); } + push(@rulenames,'none'); my $style = $targets_div_style; - if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) { + if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) { $style = $homedom_div_style; } my $space; if ($islast && $num == 1) { $space = '
 
'; } - my $output = + my $output = ''."\n". ''."\n". ''; $rownum ++; @@ -4195,8 +3856,8 @@ sub print_scantronformat { $datatable .= ''. + ''. + &mt('Custom bubblesheet format file').''. ''; } else { $datatable .= $parent - .' '; } my $depth = 1; @@ -4525,9 +4184,8 @@ sub print_serverstatuses { sub serverstatus_pages { return ('userstatus','lonstatus','loncron','server-status','codeversions', - 'checksums','clusterstatus','metadata_keywords','metadata_harvest', - 'takeoffline','takeonline','showenv','toggledebug','ping','domconf', - 'uniquecodes'); + 'clusterstatus','metadata_keywords','metadata_harvest', + 'takeoffline','takeonline','showenv','toggledebug','ping','domconf'); } sub coursecategories_javascript { @@ -4684,7 +4342,7 @@ sub build_category_rows { if (ref($cats->[$depth]{$parent}) eq 'ARRAY') { my $numchildren = @{$cats->[$depth]{$parent}}; my $css_class = $itemcount%2?' class="LC_odd_row"':''; - $text .= '
'.$choices->{$item}; +# my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'bgs'}{$item}); + $datatable .= ''; my $color = $designs->{'bgs'}{$item} ? $designs->{'bgs'}{$item} : $defaults->{'bgs'}{$item}; if ($designs->{'bgs'}{$item}) { $datatable .= ' '; @@ -1438,7 +1376,8 @@ sub display_color_options { ''; foreach my $item (@{$links}) { my $color = $designs->{'link'}{$item} ? $designs->{'link'}{$item} : $defaults->{'links'}{$item}; - $datatable .= ''; + '" size="5" /> Mb'; } $datatable .= ''; } @@ -1708,16 +1651,12 @@ sub print_quotas { } unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { $defaultquota = '20'; - $authorquota = '500'; if (ref($settings) eq 'HASH') { if (ref($settings->{'defaultquota'}) eq 'HASH') { $defaultquota = $settings->{'defaultquota'}->{'default'}; } elsif (defined($settings->{'default'})) { $defaultquota = $settings->{'default'}; } - if (ref($settings->{'authorquota'}) eq 'HASH') { - $authorquota = $settings->{'authorquota'}->{'default'}; - } } } $typecount ++; @@ -1828,19 +1767,15 @@ sub print_quotas { } $datatable .= ''; unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { - $datatable .= ''; + $defaultquota.'" size="5" /> Mb'; } $datatable .= ''; $typecount ++; $css_class = $typecount%2?' class="LC_odd_row"':''; $datatable .= ''. - ''. @@ -1967,16 +1902,35 @@ sub print_quotas { sub print_requestmail { my ($dom,$action,$settings,$rowtotal) = @_; - my ($now,$datatable,%currapp); + my ($now,$datatable,%dompersonnel,@domcoord,@currapproval,$rows); $now = time; + $rows = 0; + %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); + foreach my $server (keys(%dompersonnel)) { + foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { + my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); + if (!grep(/^$uname:$udom$/,@domcoord)) { + push(@domcoord,$uname.':'.$udom); + } + } + } if (ref($settings) eq 'HASH') { if (ref($settings->{'notify'}) eq 'HASH') { if ($settings->{'notify'}{'approval'} ne '') { - map {$currapp{$_}=1;} split(/,/,$settings->{'notify'}{'approval'}); + @currapproval = split(',',$settings->{'notify'}{'approval'}); } } } - my $numinrow = 2; + if (@currapproval) { + foreach my $dc (@currapproval) { + unless (grep(/^\Q$dc\E$/,@domcoord)) { + push(@domcoord,$dc); + } + } + } + @domcoord = sort(@domcoord); + my $numinrow = 4; + my $numdc = @domcoord; my $css_class = 'class="LC_odd_row"'; my $text; if ($action eq 'requestcourses') { @@ -1987,226 +1941,46 @@ sub print_requestmail { $datatable = ''. ' '. ' '; - $$rowtotal += $rows; - return $datatable; -} - -sub print_studentcode { - my ($settings,$rowtotal) = @_; - my $rownum = 0; - my ($output,%current); - my @crstypes = ('official','unofficial','community','textbook'); - if (ref($settings->{'uniquecode'}) eq 'HASH') { - foreach my $type (@crstypes) { - $current{$type} = $settings->{'uniquecode'}{$type}; - } - } - $output .= ''. - ''. - ''; - $$rowtotal ++; - return $output; -} - -sub print_textbookcourses { - my ($dom,$settings,$rowtotal) = @_; - my $rownum = 0; - my $css_class; - my $itemcount = 1; - my $maxnum = 0; - my $bookshash; - if (ref($settings) eq 'HASH') { - $bookshash = $settings->{'textbooks'}; - } - my %ordered; - if (ref($bookshash) eq 'HASH') { - foreach my $item (keys(%{$bookshash})) { - if (ref($bookshash->{$item}) eq 'HASH') { - my $num = $bookshash->{$item}{'order'}; - $ordered{$num} = $item; + if (@domcoord > 0) { + $datatable .= '
'.$choices->{$item}."\n"; + $datatable .= ''."\n"; + if ($designs->{'links'}{$item}) { $datatable.=' '; } @@ -1496,13 +1435,17 @@ sub login_header_options { } sub login_text_colors { - my ($img,$role,$logintext,$phase,$choices,$designs,$defaults) = @_; + my ($img,$role,$logintext,$phase,$choices,$designs) = @_; my $color_menu = ''; foreach my $item (@{$logintext}) { - $color_menu .= ''; + my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'logintext'}{$item}); + $color_menu .= ''. + ''; } $color_menu .= '
'.$choices->{$item}; - my $color = $designs->{'logintext'}{$item} ? $designs->{'logintext'}{$item} : $defaults->{'logintext'}{$item}; - $color_menu .= '
'.$link; + if ($designs->{'logintext'}{$item}) { + $color_menu .= '    '; + } + $color_menu .= '
 

'; return $color_menu; @@ -1534,12 +1477,20 @@ sub image_changes { $role.'_del_'.$img.'" value="1" />'.&mt('Delete?'). ' '.&mt('Replace:').'
'; } else { - $output .= '
'.$logincolors.&mt('Upload:').'
'; + $output .= '
'.$logincolors.&mt('Upload:').'
'; } } return $output; } +sub color_pick { + my ($phase,$role,$item,$desc,$curcol) = @_; + my $link = ''.$desc.''; + return $link; +} + sub print_quotas { my ($dom,$settings,$rowtotal,$action) = @_; my $context; @@ -1548,37 +1499,34 @@ sub print_quotas { } else { $context = $action; } - my ($datatable,$defaultquota,$authorquota,@usertools,@options,%validations); + my ($datatable,$defaultquota,@usertools,@options,%validations); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); my $typecount = 0; my ($css_class,%titles); if ($context eq 'requestcourses') { - @usertools = ('official','unofficial','community','textbook'); + @usertools = ('official','unofficial','community'); @options =('norequest','approval','validate','autolimit'); %validations = &Apache::lonnet::auto_courserequest_checks($dom); %titles = &courserequest_titles(); } elsif ($context eq 'requestauthor') { @usertools = ('author'); @options = ('norequest','approval','automatic'); - %titles = &authorrequest_titles(); + %titles = &authorrequest_titles(); } else { @usertools = ('aboutme','blog','webdav','portfolio'); %titles = &tool_titles(); } if (ref($types) eq 'ARRAY') { foreach my $type (@{$types}) { - my ($currdefquota,$currauthorquota); + my $currdefquota; unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { if (ref($settings) eq 'HASH') { if (ref($settings->{defaultquota}) eq 'HASH') { - $currdefquota = $settings->{defaultquota}->{$type}; + $currdefquota = $settings->{defaultquota}->{$type}; } else { $currdefquota = $settings->{$type}; } - if (ref($settings->{authorquota}) eq 'HASH') { - $currauthorquota = $settings->{authorquota}->{$type}; - } } } if (defined($usertypes->{$type})) { @@ -1692,15 +1640,10 @@ sub print_quotas { unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { $datatable .= - '
'. - ''.&mt('Portfolio').': '. + ''. ''.(' ' x 2). - ''.&mt('Authoring').': '. - '
'. - ''.&mt('Portfolio').': '. + $datatable .= ''. ''.(' ' x2). - ''.&mt('Authoring').': '. - '
'.&mt('LON-CAPA Advanced Users').'
'; + '
'.&mt('LON-CAPA Advanced Users').' '; if ($context eq 'requestcourses') { $datatable .= &mt('(overrides affiliation, if set)'). '
'.$text.''; - my ($numdc,$table,$rows) = &active_dc_picker($dom,$numinrow,'checkbox', - 'reqapprovalnotify',%currapp); - if ($numdc > 0) { - $datatable .= $table; - } else { - $datatable .= &mt('There are no active Domain Coordinators'); - } - $datatable .='
'.&mt('Generate unique six character code as course identifier?').''; - foreach my $type (@crstypes) { - my $check = ' '; - if ($current{$type}) { - $check = ' checked="checked" '; - } - $output .= ''.(' 'x2).' '; - } - $output .= '
'; + for (my $i=0; $i<$numdc; $i++) { + my $rem = $i%($numinrow); + if ($rem == 0) { + if ($i > 0) { + $datatable .= ''; + } + $datatable .= ''; + $rows ++; } - } - } - my $confname = $dom.'-domainconfig'; - my $switchserver = &check_switchserver($dom,$confname); - my $maxnum = scalar(keys(%ordered)); - my $datatable = &textbookcourses_javascript(\%ordered); - if (keys(%ordered)) { - my @items = sort { $a <=> $b } keys(%ordered); - for (my $i=0; $i<@items; $i++) { - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $key = $ordered{$items[$i]}; - my %coursehash=&Apache::lonnet::coursedescription($key); - my $coursetitle = $coursehash{'description'}; - my ($subject,$title,$author,$image,$imgsrc,$cdom,$cnum); - if (ref($bookshash->{$key}) eq 'HASH') { - $subject = $bookshash->{$key}->{'subject'}; - $title = $bookshash->{$key}->{'title'}; - $author = $bookshash->{$key}->{'author'}; - $image = $bookshash->{$key}->{'image'}; - if ($image ne '') { - my ($path,$imagefile) = ($image =~ m{^(.+)/([^/]+)$}); - my $imagethumb = "$path/tn-".$imagefile; - $imgsrc = ''.&mt('Textbook image').''; - } - } - my $chgstr = ' onchange="javascript:reorderBooks(this.form,'."'$key'".');"'; - $datatable .= ''. - ''."\n"; - $itemcount ++; - } - } - $css_class = $itemcount%2?' class="LC_odd_row"':''; - my $chgstr = ' onchange="javascript:reorderBooks(this.form,'."'addbook_pos'".');"'; - $datatable .= ''."\n". - ''."\n". - ''."\n"; - $itemcount ++; - return $datatable; -} - -sub textbookcourses_javascript { - my ($textbooks) = @_; - return unless(ref($textbooks) eq 'HASH'); - my $num = scalar(keys(%{$textbooks})); - my @jsarray; - foreach my $item (sort {$a <=> $b } (keys(%{$textbooks}))) { - push(@jsarray,$textbooks->{$item}); - } - my $jstext = ' var textbooks = Array('."'".join("','",@jsarray)."'".');'."\n"; - return <<"ENDSCRIPT"; - - -ENDSCRIPT + $datatable .=''; + $$rowtotal += $rows; + return $datatable; } sub print_autoenroll { @@ -2357,7 +2131,8 @@ sub print_autoupdate { sub print_autocreate { my ($dom,$settings,$rowtotal) = @_; - my (%createon,%createoff,%currhash); + my (%createon,%createoff); + my $curr_dc; my @types = ('xml','req'); if (ref($settings) eq 'HASH') { foreach my $item (@types) { @@ -2370,9 +2145,7 @@ sub print_autocreate { } } } - if ($settings->{'xmldc'} ne '') { - $currhash{$settings->{'xmldc'}} = 1; - } + $curr_dc = $settings->{'xmldc'}; } else { foreach my $item (@types) { $createoff{$item} = ' checked="checked" '; @@ -2380,7 +2153,6 @@ sub print_autocreate { } } $$rowtotal += 2; - my $numinrow = 2; my $datatable=''. ''. ''; + $$rowtotal ++ ; } else { $datatable .= $dctable.''; } - $$rowtotal += $rows; return $datatable; } @@ -2527,7 +2298,7 @@ sub print_contacts { my @contacts = ('adminemail','supportemail'); my (%checked,%to,%otheremails,%bccemails); my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail', - 'requestsmail','updatesmail','idconflictsmail'); + 'requestsmail'); foreach my $type (@mailings) { $otheremails{$type} = ''; } @@ -2563,22 +2334,21 @@ sub print_contacts { $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; $checked{'requestsmail'}{'adminemail'} = ' checked="checked" '; - $checked{'updatesmail'}{'adminemail'} = ' checked="checked" '; - $checked{'idconflictsmail'}{'adminemail'} = ' checked="checked" '; } my ($titles,$short_titles) = &contact_titles(); my $rownum = 0; my $css_class; foreach my $item (@contacts) { + $rownum ++; $css_class = $rownum%2?' class="LC_odd_row"':''; $datatable .= ''. ''; - $rownum ++; } foreach my $type (@mailings) { + $rownum ++; $css_class = $rownum%2?' class="LC_odd_row"':''; $datatable .= ''. ''."\n"; - $rownum ++; } - my %choices; - $choices{'reporterrors'} = &mt('E-mail error reports to [_1]', - &Apache::loncommon::modal_link('http://loncapa.org/core.html', - &mt('LON-CAPA core group - MSU'),600,500)); - $choices{'reportupdates'} = &mt('E-mail record of completed LON-CAPA updates to [_1]', - &Apache::loncommon::modal_link('http://loncapa.org/core.html', - &mt('LON-CAPA core group - MSU'),600,500)); - my @toggles = ('reporterrors','reportupdates'); - my %defaultchecked = ('reporterrors' => 'on', - 'reportupdates' => 'on'); - (my $reports,$rownum) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, - \%choices,$rownum); - $datatable .= $reports; $$rowtotal += $rownum; return $datatable; } @@ -2637,8 +2393,7 @@ sub print_helpsettings { } sub radiobutton_prefs { - my ($settings,$toggles,$defaultchecked,$choices,$itemcount,$onclick, - $additional) = @_; + my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_; return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') && (ref($choices) eq 'HASH')); @@ -2664,22 +2419,17 @@ sub radiobutton_prefs { } } } - if ($onclick) { - $onclick = ' onclick="'.$onclick.'"'; - } foreach my $item (@{$toggles}) { $css_class = $itemcount%2?' class="LC_odd_row"':''; $datatable .= - ''. ''. + $checkedoff{$item}.' value="0" />'.&mt('No').''. + ''. ''; $itemcount ++; } @@ -2688,108 +2438,42 @@ sub radiobutton_prefs { sub print_coursedefaults { my ($position,$dom,$settings,$rowtotal) = @_; - my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles); + my ($css_class,$datatable); my $itemcount = 1; - my %choices = &Apache::lonlocal::texthash ( - canuse_pdfforms => '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', - ); - my %staticdefaults = ( - anonsurvey_threshold => 10, - uploadquota => 500, - ); if ($position eq 'top') { + my (%checkedon,%checkedoff,%choices,%defaultchecked,@toggles); + %choices = + &Apache::lonlocal::texthash ( + canuse_pdfforms => 'Course/Community users can create/upload PDF forms', + ); %defaultchecked = ('canuse_pdfforms' => 'off'); - @toggles = ('canuse_pdfforms'); + @toggles = ('canuse_pdfforms',); ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, \%choices,$itemcount); + $$rowtotal += $itemcount; } else { $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; - my ($currdefresponder,$def_official_credits,$def_unofficial_credits,$def_textbook_credits, - %curruploadquota); - my $currusecredits = 0; - my @types = ('official','unofficial','community','textbook'); + my %choices = + &Apache::lonlocal::texthash ( + anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', + ); + my $currdefresponder; if (ref($settings) eq 'HASH') { $currdefresponder = $settings->{'anonsurvey_threshold'}; - if (ref($settings->{'uploadquota'}) eq 'HASH') { - foreach my $type (keys(%{$settings->{'uploadquota'}})) { - $curruploadquota{$type} = $settings->{'uploadquota'}{$type}; - } - } - if (ref($settings->{'coursecredits'}) eq 'HASH') { - $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; - } - } } if (!$currdefresponder) { - $currdefresponder = $staticdefaults{'anonsurvey_threshold'}; + $currdefresponder = 10; } elsif ($currdefresponder < 1) { $currdefresponder = 1; } - foreach my $type (@types) { - if ($curruploadquota{$type} eq '') { - $curruploadquota{$type} = $staticdefaults{'uploadquota'}; - } - } $datatable .= - ''. ''."\n". - ''. - ''."\n"; - $itemcount += 2; - my $onclick = 'toggleCredits(this.form);'; - my $display = 'none'; - if ($currusecredits) { - $display = 'block'; - } - my $additional = '
'. - ''. - &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 = { - 'coursecredits' => $currusecredits, - }; - (my $table,$itemcount) = - &radiobutton_prefs($current,\@toggles,\%defaultchecked, - \%choices,$itemcount,$onclick,$additional); - $datatable .= $table; + ''; } - $$rowtotal += $itemcount; return $datatable; } @@ -3080,10 +2764,7 @@ sub spares_row { $css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; $datatable .= ' '."\n"; my (%current,%canselect); my @choices = &possible_newspares($server,$spareid->{$server},$serverhomes,$altids); @@ -3219,7 +2900,7 @@ sub print_loadbalancing { } my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - my $rownum = 8; + my $rownum = 6; if (ref($types) eq 'ARRAY') { $rownum += scalar(@{$types}); } @@ -3250,7 +2931,7 @@ sub print_loadbalancing { ''; @@ -3332,6 +3013,7 @@ sub print_loadbalancing { '
' - .''.(' 'x2). - ''. - ''.&mt('Subject:').' '. - (' 'x2). - ''.&mt('Title:').' '. - (' 'x2). - ''.&mt('Author(s):').' '. - (' 'x2). - ''.&mt('Thumbnail:'); - if ($image) { - $datatable .= ''. - $imgsrc. - ' '. - ' '.&mt('Replace:').' '; + my $check = ' '; + if (grep(/^\Q$domcoord[$i]\E$/,@currapproval)) { + $check = ' checked="checked" '; } - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); + my ($uname,$udom) = split(':',$domcoord[$i]); + my $fullname = &Apache::loncommon::plainname($uname,$udom); + if ($i == $numdc-1) { + my $colsleft = $numinrow-$rem; + if ($colsleft > 1) { + $datatable .= ''; + } else { + $datatable .= ''; + } } else { - $datatable .= ''; + $datatable .= ''; } - $datatable .= ' '. - ''.&mt('LON-CAPA course:').' '. - $coursetitle.'
'."\n". - ''."\n". - ' '."\n". - ''.&mt('Add').''. - ''.&mt('Subject:').' '."\n". - (' 'x2). - ''.&mt('Title:').' '."\n". - (' 'x2). - ''.&mt('Author(s):').' '."\n". - (' 'x2). - ''.&mt('Image:').' '; - if ($switchserver) { - $datatable .= &mt('Upload to library server: [_1]',$switchserver); - } else { - $datatable .= ''; - } - $datatable .= ''."\n". - ''.&mt('LON-CAPA course:').' '. - &Apache::loncommon::select_dom_form($env{'request.role.domain'},'addbook_cdom'). - ''. - &Apache::loncommon::selectcourse_link - ('display','addbook_cnum','addbook_cdom',undef,undef,undef,'Course'); - '
'.&mt('Create pending official courses from XML files').' '. ''; - my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio', - 'autocreate_xmldc',%currhash); + my ($numdc,$dctable) = &active_dc_picker($dom,$curr_dc); if ($numdc > 1) { $datatable .= '
'. &mt('Course creation processed as: (choose Dom. Coord.)'). ''.$dctable.'
'.$titles->{$item}. ''. '
'. @@ -2601,21 +2371,7 @@ sub print_contacts { 'value="'.$bccemails{$type}.'" />'; } $datatable .= '
'. - ''.$choices->{$item}. + ''.$choices->{$item}. ''. ' '. - ''.$additional. - '
'. - $choices{'anonsurvey_threshold'}. + ''.$choices{'anonsurvey_threshold'}. ''. ''. - '
'. - $choices{'uploadquota'}. - ''. - ''; - foreach my $type (@types) { - $datatable .= ''; - } - $datatable .= '
'.&mt($type).'
'. - '
- '. - &mt('[_1] when busy, offloads to:' - ,''.$server.''). - "\n"; + '.$server.' when busy, offloads to:'. '

'; if ($lonhost eq '') { - $datatable .= ''; + $datatable .= ''; if (keys(%currbalancer) > 0) { $datatable .= &mt('Add balancer:'); } else { @@ -3266,7 +2947,7 @@ sub print_loadbalancing { next if ($currbalancer{$server}); $datatable .= ''."\n"; } - $datatable .= + $datatable .= ''."\n". ' '."\n"; } else { @@ -3305,7 +2986,7 @@ sub print_loadbalancing { if (exists($currbalancer{$spares[$i]})) { $disabled = ' disabled="disabled"'; } - $targettable .= + $targettable .= '

'.$targettable.'

'; } } + my $cssidx = $balnum%2; $datatable .= '
'.$space. '
'.$title.'
'.$space. @@ -3488,7 +3163,7 @@ sub loadbalance_rule_row { unless ($checked) { $default = ' selected="selected"'; } - $extra = + $extra = ': 
'."\n". ''.$pubtext.' '."\n". @@ -3983,18 +3652,10 @@ sub print_usermodification { } sub print_defaults { - my ($dom,$settings,$rowtotal) = @_; + my ($dom,$rowtotal) = @_; my @items = ('auth_def','auth_arg_def','lang_def','timezone_def', 'datelocale_def','portal_def'); - my %defaults; - if (ref($settings) eq 'HASH') { - %defaults = %{$settings}; - } else { - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); - foreach my $item (@items) { - $defaults{$item} = $domdefaults{$item}; - } - } + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); my $titles = &defaults_titles($dom); my $rownum = 0; my ($datatable,$css_class); @@ -4018,7 +3679,7 @@ sub print_defaults { my %authnames = &authtype_names(); foreach my $auth (@authtypes) { my $checked = ' '; - if ($defaults{$item} eq $auth) { + if ($domdefaults{$item} eq $auth) { $checked = ' checked="checked" '; } $datatable .= '
'.&mt('Default in use:').'
'. ''; if ($scantronurl) { - $datatable .= &Apache::loncommon::modal_link($scantronurl,&mt('Default bubblesheet format file'),600,500, - undef,undef,undef,undef,'background-color:#ffffff'); + $datatable .= ''. + &mt('Default bubblesheet format file').''; } else { $datatable = &mt('File unavailable for display'); } @@ -4221,12 +3882,11 @@ sub print_scantronformat { } $datatable .= '
'.$errorstr.' '; } elsif ($scantronurl) { - my $link = &Apache::loncommon::modal_link($scantronurl,&mt('Custom bubblesheet format file'),600,500, - undef,undef,undef,undef,'background-color:#ffffff'); $datatable .= ''. - $link. - ' '. &mt('Replace:').'
'; } @@ -4380,7 +4040,7 @@ sub print_coursecategories { } $datatable .= ''; } - $datatable .= '
'; + $datatable .= ''; if ($parent eq 'instcode' || $parent eq 'communities') { $datatable .= '' .$default_names{$parent}.''; @@ -4410,8 +4070,7 @@ sub print_coursecategories { $datatable .= ''; + $text .= ''; } + $datatable .= '
'; my ($idxnum,$parent_name,$parent_item); my $higher = $depth - 1; if ($higher == 0) { @@ -4976,12 +4634,11 @@ sub usertype_update_row { } sub modify_login { - my ($r,$dom,$confname,$lastactref,%domconfig) = @_; + my ($r,$dom,$confname,%domconfig) = @_; my ($resulttext,$errors,$colchgtext,%changes,%colchanges,%newfile,%newurl, %curr_loginvia,%loginhash,@currlangs,@newlangs,$addedfile,%title,@offon); %title = ( coursecatalog => 'Display course catalog', adminmail => 'Display administrator E-mail address', - helpdesk => 'Display "Contact Helpdesk" link', newuser => 'Link for visitors to create a user account', loginheader => 'Log-in box header'); @offon = ('off','on'); @@ -4994,7 +4651,7 @@ sub modify_login { } ($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'], \%domconfig,\%loginhash); - my @toggles = ('coursecatalog','adminmail','helpdesk','newuser'); + my @toggles = ('coursecatalog','adminmail','newuser'); foreach my $item (@toggles) { $loginhash{login}{$item} = $env{'form.'.$item}; } @@ -5156,7 +4813,7 @@ sub modify_login { } else { my $puberror = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$newfile{$lang},$result); $errors .= '
  • '.$puberror.'
  • '; - if ((grep(/^\Q$lang\E$/,@currlangs)) && + if ((grep(/^\Q$lang\E$/,@currlangs)) && (!grep(/^\Q$lang\E$/,@delurls))) { $loginhash{'login'}{'helpurl'}{$lang} = $domconfig{'login'}{'helpurl'}{$lang}; @@ -5182,10 +4839,9 @@ sub modify_login { my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash, $dom); if ($putresult eq 'ok') { - my @toggles = ('coursecatalog','adminmail','helpdesk','newuser'); + my @toggles = ('coursecatalog','adminmail','newuser'); my %defaultchecked = ( 'coursecatalog' => 'on', - 'helpdesk' => 'on', 'adminmail' => 'off', 'newuser' => 'off', ); @@ -5214,9 +4870,6 @@ sub modify_login { } if (keys(%changes) > 0 || $colchgtext) { &Apache::loncommon::devalidate_domconfig_cache($dom); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domainconfig'} = 1; - } $resulttext = &mt('Changes made:').'
      '; foreach my $item (sort(keys(%changes))) { if ($item eq 'loginvia') { @@ -5276,7 +4929,7 @@ sub modify_login { } } elsif ($item eq 'captcha') { if (ref($loginhash{'login'}) eq 'HASH') { - my $chgtxt; + my $chgtxt; if ($loginhash{'login'}{$item} eq 'notused') { $chgtxt .= &mt('No CAPTCHA validation in use for helpdesk form.'); } else { @@ -5337,7 +4990,7 @@ sub color_font_choices { links => "Link colors", images => "Images", font => "Font color", - fontmenu => "Font menu", + fontmenu => "Font Menu", pgbg => "Page", tabbg => "Header", sidebg => "Border", @@ -5349,7 +5002,7 @@ sub color_font_choices { } sub modify_rolecolors { - my ($r,$dom,$confname,$roles,$lastactref,%domconfig) = @_; + my ($r,$dom,$confname,$roles,%domconfig) = @_; my ($resulttext,%rolehash); $rolehash{'rolecolors'} = {}; if (ref($domconfig{'rolecolors'}) ne 'HASH') { @@ -5364,9 +5017,6 @@ sub modify_rolecolors { if ($putresult eq 'ok') { if (keys(%changes) > 0) { &Apache::loncommon::devalidate_domconfig_cache($dom); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domainconfig'} = 1; - } $resulttext = &display_colorchgs($dom,\%changes,$roles, $rolehash{'rolecolors'}); } else { @@ -5392,45 +5042,24 @@ sub modify_colors { my @images; my $servadm = $r->dir_config('lonAdmEMail'); my $errors; - my %defaults; foreach my $role (@{$roles}) { if ($role eq 'login') { %choices = &login_choices(); @logintext = ('textcol','bgcol'); } else { %choices = &color_font_choices(); + $confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'}; } if ($role eq 'login') { @images = ('img','logo','domlogo','login'); @bgs = ('pgbg','mainbg','sidebg'); } else { @images = ('img'); - @bgs = ('pgbg','tabbg','sidebg'); + @bgs = ('pgbg','tabbg','sidebg'); } - my %defaults = &role_defaults($role,\@bgs,\@links,\@images,\@logintext); - unless ($env{'form.'.$role.'_font'} eq $defaults{'font'}) { - $confhash->{$role}{'font'} = $env{'form.'.$role.'_font'}; - } - if ($role eq 'login') { - foreach my $item (@logintext) { - unless ($env{'form.'.$role.'_'.$item} eq $defaults{'logintext'}{$item}) { - $confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item}; - } - } - } else { - unless($env{'form.'.$role.'_fontmenu'} eq $defaults{'fontmenu'}) { - $confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'}; - } - } - foreach my $item (@bgs) { - unless ($env{'form.'.$role.'_'.$item} eq $defaults{'bgs'}{$item} ) { - $confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item}; - } - } - foreach my $item (@links) { - unless ($env{'form.'.$role.'_'.$item} eq $defaults{'links'}{$item}) { - $confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item}; - } + $confhash->{$role}{'font'} = $env{'form.'.$role.'_font'}; + foreach my $item (@bgs,@links,@logintext) { + $confhash->{$role}{$item} = $env{'form.'.$role.'_'.$item}; } my ($configuserok,$author_ok,$switchserver) = &config_check($dom,$confname,$servadm); @@ -5778,7 +5407,7 @@ sub publishlogo { # See if there is anything left unless ($fname) { return ('error: no uploaded file'); } $fname="$subdir/$fname"; - my $docroot=$r->dir_config('lonDocRoot'); + my $docroot=$r->dir_config('lonDocRoot'); my $filepath="$docroot/priv"; my $relpath = "$dom/$confname"; my ($fnamepath,$file,$fetchthumb); @@ -5798,19 +5427,19 @@ sub publishlogo { if ($file=~/\.(\w+)$/ && (&Apache::loncommon::fileembstyle($1) eq 'hdn')) { $output = - &mt('Invalid file extension ([_1]) - reserved for internal use.',$1); + &mt('Invalid file extension ([_1]) - reserved for LONCAPA use.',$1); } elsif ($file=~/\.(\w+)$/ && !defined(&Apache::loncommon::fileembstyle($1))) { $output = &mt('Unrecognized file extension ([_1]) - rename the file with a proper extension and re-upload.',$1); } elsif ($file=~/\.(\d+)\.(\w+)$/) { - $output = &mt('Filename not allowed - rename the file to remove the number immediately before the file extension([_1]) and re-upload.',$2); + $output = &mt('File name not allowed - rename the file to remove the number immediately before the file extension([_1]) and re-upload.',$2); } elsif (-d "$filepath/$file") { - $output = &mt('Filename is a directory name - rename the file and re-upload'); + $output = &mt('File name is a directory name - rename the file and re-upload'); } else { my $source = $filepath.'/'.$file; my $logfile; if (!open($logfile,">>$source".'.log')) { - return (&mt('No write permission to Authoring Space')); + return (&mt('No write permission to Construction Space')); } print $logfile "\n================= Publish ".localtime()." ================\n". @@ -5957,7 +5586,7 @@ sub write_metadata { print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file; my $mfh; if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) { - foreach (sort(keys(%metadatafields))) { + foreach (sort keys %metadatafields) { unless ($_=~/\./) { my $unikey=$_; $unikey=~/^([A-Za-z]+)/; @@ -6041,31 +5670,27 @@ sub check_switchserver { my @ids=&Apache::lonnet::current_machine_ids(); foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } if (!$allowed) { - $switchserver=''.&mt('Switch Server').''; + $switchserver=''.&mt('Switch Server').''; } return $switchserver; } sub modify_quotas { - my ($r,$dom,$action,$lastactref,%domconfig) = @_; + my ($dom,$action,%domconfig) = @_; my ($context,@usertools,@options,%validations,%titles,%confhash,%toolshash, - %limithash,$toolregexp,%conditions,$resulttext,%changes,$confname,$configuserok, - $author_ok,$switchserver,$errors); + %limithash,$toolregexp,%conditions,$resulttext,%changes); if ($action eq 'quotas') { $context = 'tools'; } else { $context = $action; } if ($context eq 'requestcourses') { - @usertools = ('official','unofficial','community','textbook'); + @usertools = ('official','unofficial','community'); @options =('norequest','approval','validate','autolimit'); %validations = &Apache::lonnet::auto_courserequest_checks($dom); %titles = &courserequest_titles(); $toolregexp = join('|',@usertools); %conditions = &courserequest_conditions(); - $confname = $dom.'-domainconfig'; - my $servadm = $r->dir_config('lonAdmEMail'); - ($configuserok,$author_ok,$switchserver) = &config_check($dom,$confname,$servadm); } elsif ($context eq 'requestauthor') { @usertools = ('author'); %titles = &authorrequest_titles(); @@ -6073,7 +5698,7 @@ sub modify_quotas { @usertools = ('aboutme','blog','webdav','portfolio'); %titles = &tool_titles(); } - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); foreach my $key (keys(%env)) { if ($context eq 'requestcourses') { @@ -6093,9 +5718,8 @@ sub modify_quotas { } else { if ($key =~ /^form\.quota_(.+)$/) { $confhash{'defaultquota'}{$1} = $env{$key}; - } elsif ($key =~ /^form\.authorquota_(.+)$/) { - $confhash{'authorquota'}{$1} = $env{$key}; - } elsif ($key =~ /^form\.\Q$context\E_(.+)$/) { + } + if ($key =~ /^form\.\Q$context\E_(.+)$/) { @{$toolshash{$1}} = &Apache::loncommon::get_env_multiple($key); } } @@ -6104,36 +5728,6 @@ sub modify_quotas { my @approvalnotify = &Apache::loncommon::get_env_multiple('form.reqapprovalnotify'); @approvalnotify = sort(@approvalnotify); $confhash{'notify'}{'approval'} = join(',',@approvalnotify); - my @crstypes = ('official','unofficial','community','textbook'); - my @hasuniquecode = &Apache::loncommon::get_env_multiple('form.uniquecode'); - foreach my $type (@hasuniquecode) { - if (grep(/^\Q$type\E$/,@crstypes)) { - $confhash{'uniquecode'}{$type} = 1; - } - } - my ($newbook,@allpos); - if ($context eq 'requestcourses') { - if ($env{'form.addbook'}) { - if (($env{'form.addbook_cnum'} =~ /^$match_courseid$/) && - ($env{'form.addbook_cdom'} =~ /^$match_domain$/)) { - if (&Apache::lonnet::homeserver($env{'form.addbook_cnum'}, - $env{'form.addbook_cdom'}) eq 'no_host') { - $errors .= '
    • '.&mt('Invalid LON-CAPA course for textbook'). - '
    • '; - } else { - $newbook = $env{'form.addbook_cdom'}.'_'.$env{'form.addbook_cnum'}; - my $position = $env{'form.addbook_pos'}; - $position =~ s/\D+//g; - if ($position ne '') { - $allpos[$position] = $newbook; - } - } - } else { - $errors .= '
    • '.&mt('Invalid LON-CAPA course for textbook'). - '
    • '; - } - } - } if (ref($domconfig{$action}) eq 'HASH') { if (ref($domconfig{$action}{'notify'}) eq 'HASH') { if ($domconfig{$action}{'notify'}{'approval'} ne $confhash{'notify'}{'approval'}) { @@ -6144,135 +5738,13 @@ sub modify_quotas { $changes{'notify'}{'approval'} = 1; } } - if (ref($domconfig{$action}{'uniquecode'}) eq 'HASH') { - if (ref($confhash{'uniquecode'}) eq 'HASH') { - foreach my $crstype (keys(%{$domconfig{$action}{'uniquecode'}})) { - unless ($confhash{'uniquecode'}{$crstype}) { - $changes{'uniquecode'} = 1; - } - } - unless ($changes{'uniquecode'}) { - foreach my $crstype (keys(%{$confhash{'uniquecode'}})) { - unless ($domconfig{$action}{'uniquecode'}{$crstype}) { - $changes{'uniquecode'} = 1; - } - } - } - } else { - $changes{'uniquecode'} = 1; - } - } elsif (ref($confhash{'uniquecode'}) eq 'HASH') { - $changes{'uniquecode'} = 1; - } - if ($context eq 'requestcourses') { - if (ref($domconfig{$action}{'textbooks'}) eq 'HASH') { - my %deletions; - my @todelete = &Apache::loncommon::get_env_multiple('form.book_del'); - if (@todelete) { - map { $deletions{$_} = 1; } @todelete; - } - my %imgdeletions; - my @todeleteimages = &Apache::loncommon::get_env_multiple('form.book_image_del'); - if (@todeleteimages) { - map { $imgdeletions{$_} = 1; } @todeleteimages; - } - my $maxnum = $env{'form.book_maxnum'}; - for (my $i=0; $i<=$maxnum; $i++) { - my $key = $env{'form.book_id_'.$i}; - if (ref($domconfig{$action}{'textbooks'}{$key}) eq 'HASH') { - if ($deletions{$key}) { - if ($domconfig{$action}{'textbooks'}{$key}{'image'}) { - #FIXME need to obsolete item in RES space - } - next; - } else { - my $newpos = $env{'form.'.$key}; - $newpos =~ s/\D+//g; - foreach my $item ('subject','title','author') { - $confhash{'textbooks'}{$key}{$item} = $env{'form.book_'.$item.'_'.$i}; - if ($domconfig{$action}{'textbooks'}{$key}{$item} ne $confhash{'textbooks'}{$key}{$item}) { - $changes{'textbooks'}{$key} = 1; - } - } - $allpos[$newpos] = $key; - } - if ($imgdeletions{$key}) { - $changes{'textbooks'}{$key} = 1; - #FIXME need to obsolete item in RES space - } elsif ($env{'form.book_image_'.$i.'.filename'}) { - my ($cdom,$cnum) = split(/_/,$key); - my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,'book_image_'.$i, - $cdom,$cnum,$configuserok, - $switchserver,$author_ok); - if ($imgurl) { - $confhash{'textbooks'}{$key}{'image'} = $imgurl; - $changes{'textbooks'}{$key} = 1; - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '
    • '.$error.'
    • '; - } - } elsif ($domconfig{$action}{'textbooks'}{$key}{'image'}) { - $confhash{'textbooks'}{$key}{'image'} = - $domconfig{$action}{'textbooks'}{$key}{'image'}; - } - } - } - } - } } else { if ($confhash{'notify'}{'approval'}) { $changes{'notify'}{'approval'} = 1; } - if (ref($confhash{'uniquecode'} eq 'HASH')) { - $changes{'uniquecode'} = 1; - } - } - if ($context eq 'requestcourses') { - if ($newbook) { - $changes{'textbooks'}{$newbook} = 1; - foreach my $item ('subject','title','author') { - $env{'form.addbook_'.$item} =~ s/(`)/'/g; - if ($env{'form.addbook_'.$item}) { - $confhash{'textbooks'}{$newbook}{$item} = $env{'form.addbook_'.$item}; - } - } - if ($env{'form.addbook_image.filename'} ne '') { - my ($cdom,$cnum) = split(/_/,$newbook); - my ($imageurl,$error) = - &process_textbook_image($r,$dom,$confname,'addbook_image',$cdom,$cnum,$configuserok, - $switchserver,$author_ok); - if ($imageurl) { - $confhash{'textbooks'}{$newbook}{'image'} = $imageurl; - } - if ($error) { - &Apache::lonnet::logthis($error); - $errors .= '
    • '.$error.'
    • '; - } - } - } - if (@allpos > 0) { - my $idx = 0; - foreach my $item (@allpos) { - if ($item ne '') { - $confhash{'textbooks'}{$item}{'order'} = $idx; - if (ref($domconfig{$action}) eq 'HASH') { - if (ref($domconfig{$action}{'textbooks'}) eq 'HASH') { - if (ref($domconfig{$action}{'textbooks'}{$item}) eq 'HASH') { - if ($domconfig{$action}{'textbooks'}{$item}{'order'} ne $idx) { - $changes{'textbooks'}{$item} = 1; - } - } - } - } - $idx ++; - } - } - } } } else { $confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; - $confhash{'authorquota'}{'default'} = $env{'form.authorquota'}; } foreach my $item (@usertools) { foreach my $type (@{$types},'default','_LC_adv') { @@ -6360,17 +5832,6 @@ sub modify_quotas { } } } - if (ref($domconfig{'quotas'}{'authorquota'}) eq 'HASH') { - foreach my $key (keys(%{$domconfig{'quotas'}{'authorquota'}})) { - if (exists($confhash{'authorquota'}{$key})) { - if ($confhash{'authorquota'}{$key} ne $domconfig{'quotas'}{'authorquota'}{$key}) { - $changes{'authorquota'}{$key} = 1; - } - } else { - $confhash{'authorquota'}{$key} = $domconfig{'quotas'}{'authorquota'}{$key}; - } - } - } } if (ref($confhash{'defaultquota'}) eq 'HASH') { foreach my $key (keys(%{$confhash{'defaultquota'}})) { @@ -6389,30 +5850,13 @@ sub modify_quotas { } } } - if (ref($confhash{'authorquota'}) eq 'HASH') { - foreach my $key (keys(%{$confhash{'authorquota'}})) { - if (ref($domconfig{'quotas'}) eq 'HASH') { - if (ref($domconfig{'quotas'}{'authorquota'}) eq 'HASH') { - if (!exists($domconfig{'quotas'}{'authorquota'}{$key})) { - $changes{'authorquota'}{$key} = 1; - } - } else { - $changes{'authorquota'}{$key} = 1; - } - } else { - $changes{'authorquota'}{$key} = 1; - } - } - } } if ($context eq 'requestauthor') { $domdefaults{'requestauthor'} = \%confhash; } else { foreach my $key (keys(%confhash)) { - unless (($context eq 'requestcourses') && ($key eq 'textbooks')) { - $domdefaults{$key} = $confhash{$key}; - } + $domdefaults{$key} = $confhash{$key}; } } @@ -6425,11 +5869,9 @@ sub modify_quotas { if (keys(%changes) > 0) { my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } + $resulttext = &mt('Changes made:').'
        '; - unless (($context eq 'requestcourses') || + unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { if (ref($changes{'defaultquota'}) eq 'HASH') { $resulttext .= '
      • '.&mt('Portfolio default quotas').'
          '; @@ -6439,20 +5881,7 @@ sub modify_quotas { if ($type eq 'default') { $typetitle = $othertitle; } - $resulttext .= '
        • '.&mt('[_1] set to [_2] MB',$typetitle,$confhash{'defaultquota'}{$type}).'
        • '; - } - } - $resulttext .= '
      • '; - } - if (ref($changes{'authorquota'}) eq 'HASH') { - $resulttext .= '
      • '.&mt('Authoring space default quotas').'
          '; - foreach my $type (@{$types},'default') { - if (defined($changes{'authorquota'}{$type})) { - my $typetitle = $usertypes->{$type}; - if ($type eq 'default') { - $typetitle = $othertitle; - } - $resulttext .= '
        • '.&mt('[_1] set to [_2] MB',$typetitle,$confhash{'authorquota'}{$type}).'
        • '; + $resulttext .= '
        • '.&mt('[_1] set to [_2] Mb',$typetitle,$confhash{'defaultquota'}{$type}).'
        • '; } } $resulttext .= '
      • '; @@ -6463,7 +5892,7 @@ sub modify_quotas { my (%haschgs,%inconf); if ($context eq 'requestauthor') { %haschgs = %changes; - %inconf = %confhash; + %inconf = %confhash; } else { if (ref($changes{$item}) eq 'HASH') { %haschgs = %{$changes{$item}}; @@ -6477,7 +5906,7 @@ sub modify_quotas { &Apache::lonnet::usertools_access($env{'user.name'}, $env{'user.domain'}, $item,'reload',$context); - if (($context eq 'requestcourses') || + if (($context eq 'requestcourses') || ($context eq 'requestauthor')) { if ($env{'environment.canrequest.'.$item} ne $newacc) { $newenv{'environment.canrequest.'.$item} = $newacc; @@ -6549,42 +5978,6 @@ sub modify_quotas { } } } - if ($action eq 'requestcourses') { - my @offon = ('off','on'); - if ($changes{'uniquecode'}) { - if (ref($confhash{'uniquecode'}) eq 'HASH') { - my $codestr = join(' ',map{ &mt($_); } sort(keys(%{$confhash{'uniquecode'}}))); - $resulttext .= '
      • '. - &mt('Generation of six character code as course identifier for distribution to students set to on for: [_1].',''.$codestr.''). - '
      • '; - } else { - $resulttext .= '
      • '.&mt('Generation of six character code as course identifier for distribution to students set to off.'). - '
      • '; - } - } - if (ref($changes{'textbooks'}) eq 'HASH') { - $resulttext .= '
      • '.&mt('Available textbooks updated').'
          '; - foreach my $key (sort(keys(%{$changes{'textbooks'}}))) { - my %coursehash = &Apache::lonnet::coursedescription($key); - my $coursetitle = $coursehash{'description'}; - my $position = $confhash{'textbooks'}{$key}{'order'} + 1; - $resulttext .= '
        • '; - foreach my $item ('subject','title','author') { - my $name = $item.':'; - $name =~ s/^(\w)/\U$1/; - $resulttext .= &mt($name).' '.$confhash{'textbooks'}{$key}{$item}.'
          '; - } - $resulttext .= ' '.&mt('Order: [_1]',$position).'
          '; - if ($confhash{'textbooks'}{$key}{'image'}) { - $resulttext .= ' '.&mt('Image: [_1]', - 'Textbook cover').'
          '; - } - $resulttext .= ' '.&mt('LON-CAPA Course: [_1]',$coursetitle).'
        • '; - } - $resulttext .= '
      • '; - } - } $resulttext .= '
      '; if (keys(%newenv)) { &Apache::lonnet::appenv(\%newenv); @@ -6602,42 +5995,11 @@ sub modify_quotas { $resulttext = ''. &mt('An error occurred: [_1]',$putresult).''; } - if ($errors) { - $resulttext .= '

      '.&mt('The following errors occurred when modifying Textbook settings.'). - '

        '.$errors.'

      '; - } return $resulttext; } -sub process_textbook_image { - my ($r,$dom,$confname,$caller,$cdom,$cnum,$configuserok,$switchserver,$author_ok) = @_; - my $filename = $env{'form.'.$caller.'.filename'}; - my ($error,$url); - my ($width,$height) = (50,50); - if ($configuserok eq 'ok') { - if ($switchserver) { - $error = &mt('Upload of textbook image is not permitted to this server: [_1]', - $switchserver); - } elsif ($author_ok eq 'ok') { - my ($result,$imageurl) = - &publishlogo($r,'upload',$caller,$dom,$confname, - "textbooks/$dom/$cnum/cover",$width,$height); - if ($result eq 'ok') { - $url = $imageurl; - } else { - $error = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$filename,$result); - } - } else { - $error = &mt("Upload of [_1] failed because an author role could not be assigned to a Domain Configuration user ([_2]) in domain: [_3]. Error was: [_4].",$filename,$confname,$dom,$author_ok); - } - } else { - $error = &mt("Upload of [_1] failed because a Domain Configuration user ([_2]) could not be created in domain: [_3]. Error was: [_4].",$filename,$confname,$dom,$configuserok); - } - return ($url,$error); -} - sub modify_autoenroll { - my ($dom,$lastactref,%domconfig) = @_; + my ($dom,%domconfig) = @_; my ($resulttext,%changes); my %currautoenroll; if (ref($domconfig{'autoenroll'}) eq 'HASH') { @@ -6705,9 +6067,6 @@ sub modify_autoenroll { if ($changes{'coowners'}) { $resulttext .= '
    • '.&mt("$title{'coowners'} set to $offon[$env{'form.autoassign_coowners'}]").'
    • '; &Apache::loncommon::devalidate_domconfig_cache($dom); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domainconfig'} = 1; - } } $resulttext .= '
    '; } else { @@ -6958,16 +6317,13 @@ sub modify_autocreate { foreach my $item (@types) { if ($changes{$item}) { my $newtxt = $offon[$newvals{$item}]; - $resulttext .= '
  • '. - &mt("$title{$item} set to [_1]$newtxt [_2]", - '',''). - '
  • '; + $resulttext .= '
  • '.&mt("$title{$item} set to [_1]$newtxt [_2]",'','').'
  • '; } } if ($changes{'xmldc'}) { my ($dcname,$dcdom) = split(':',$newvals{'xmldc'}); my $newtxt = &Apache::loncommon::plainname($dcname,$dcdom); - $resulttext .= '
  • '.&mt("$title{'xmldc'} set to [_1]",''.$newtxt.'').'
  • '; + $resulttext .= '
  • '.&mt("$title{'xmldc'} set to [_1]$newtxt [_2]",'','').'
  • '; } $resulttext .= ''; } else { @@ -7113,11 +6469,7 @@ sub modify_directorysrch { } else { $chgtext =~ s/\; $//; } - $resulttext .= - '
  • '. - &mt("Users from domain '[_1]' permitted to search the institutional directory set to: [_2]", - ''.$dom.'',$chgtext). - '
  • '; + $resulttext .= '
  • '.&mt("Users from domain '[_1]' permitted to search the institutional directory set to: [_2]",$dom,$chgtext).'
  • '; } } } @@ -7145,7 +6497,7 @@ sub modify_directorysrch { } } $chgtext =~ s/\; $//; - $resulttext .= '
  • '.&mt($title{'searchtypes'}.' set to: "[_1]"',$chgtext).'
  • '; + $resulttext .= '
  • '.&mt("$title{'searchtypes'} set to: \"[_1]\"",$chgtext).'
  • '; } $resulttext .= ''; } else { @@ -7159,7 +6511,7 @@ sub modify_directorysrch { } sub modify_contacts { - my ($dom,$lastactref,%domconfig) = @_; + my ($dom,%domconfig) = @_; my ($resulttext,%currsetting,%newsetting,%changes,%contacts_hash); if (ref($domconfig{'contacts'}) eq 'HASH') { foreach my $key (keys(%{$domconfig{'contacts'}})) { @@ -7169,8 +6521,7 @@ sub modify_contacts { my (%others,%to,%bcc); my @contacts = ('supportemail','adminemail'); my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail', - 'requestsmail','updatesmail','idconflictsmail'); - my @toggles = ('reporterrors','reportupdates'); + 'requestsmail'); foreach my $type (@mailings) { @{$newsetting{$type}} = &Apache::loncommon::get_env_multiple('form.'.$type); @@ -7192,11 +6543,6 @@ sub modify_contacts { $to{$item} = $env{'form.'.$item}; $contacts_hash{'contacts'}{$item} = $to{$item}; } - foreach my $item (@toggles) { - if ($env{'form.'.$item} =~ /^(0|1)$/) { - $contacts_hash{'contacts'}{$item} = $env{'form.'.$item}; - } - } if (keys(%currsetting) > 0) { foreach my $item (@contacts) { if ($to{$item} ne $currsetting{$item}) { @@ -7231,11 +6577,10 @@ sub modify_contacts { $default{'helpdeskmail'} = 'supportemail'; $default{'lonstatusmail'} = 'adminemail'; $default{'requestsmail'} = 'adminemail'; - $default{'updatesmail'} = 'adminemail'; foreach my $item (@contacts) { if ($to{$item} ne $default{$item}) { $changes{$item} = 1; - } + } } foreach my $type (@mailings) { if ((@{$newsetting{$type}} != 1) || ($newsetting{$type}[0] ne $default{$type})) { @@ -7252,22 +6597,10 @@ sub modify_contacts { } } } - foreach my $item (@toggles) { - if (($env{'form.'.$item} == 1) && ($currsetting{$item} == 0)) { - $changes{$item} = 1; - } elsif ((!$env{'form.'.$item}) && - (($currsetting{$item} eq '') || ($currsetting{$item} == 1))) { - $changes{$item} = 1; - } - } my $putresult = &Apache::lonnet::put_dom('configuration',\%contacts_hash, $dom); if ($putresult eq 'ok') { if (keys(%changes) > 0) { - &Apache::loncommon::devalidate_domconfig_cache($dom); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domainconfig'} = 1; - } my ($titles,$short_titles) = &contact_titles(); $resulttext = &mt('Changes made:').'
      '; foreach my $item (@contacts) { @@ -7298,23 +6631,6 @@ sub modify_contacts { $resulttext .= ''; } } - my @offon = ('off','on'); - if ($changes{'reporterrors'}) { - $resulttext .= '
    • '. - &mt('E-mail error reports to [_1] set to "'. - $offon[$env{'form.reporterrors'}].'".', - &Apache::loncommon::modal_link('http://loncapa.org/core.html', - &mt('LON-CAPA core group - MSU'),600,500)). - '
    • '; - } - if ($changes{'reportupdates'}) { - $resulttext .= '
    • '. - &mt('E-mail record of completed LON-CAPA updates to [_1] set to "'. - $offon[$env{'form.reportupdates'}].'".', - &Apache::loncommon::modal_link('http://loncapa.org/core.html', - &mt('LON-CAPA core group - MSU'),600,500)). - '
    • '; - } $resulttext .= '
    '; } else { $resulttext = &mt('No changes made to contact information'); @@ -7342,7 +6658,7 @@ sub modify_usercreation { foreach my $item(@contexts) { if ($item eq 'selfcreate') { @{$cancreate{$item}} = &Apache::loncommon::get_env_multiple('form.can_createuser_'.$item); - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth'))) { if (ref($cancreate{$item}) eq 'ARRAY') { if (grep(/^login$/,@{$cancreate{$item}})) { @@ -7615,7 +6931,7 @@ sub modify_usercreation { if ($captchas{$cancreate{$type}}) { $chgtext .= &mt("Validation for self-creation screen set to $captchas{$cancreate{$type}}."); } else { - $chgtext .= &mt('Validation for self-creation screen set to unknown type.'); + $chgtext .= &mt('Validation for self-creation screen set to unknown type.'); } } } elsif ($type eq 'recaptchakeys') { @@ -7743,7 +7059,7 @@ sub process_captcha { $newsettings->{'captcha'} = 'original'; } if ($current->{'captcha'} ne $newsettings->{'captcha'}) { - if ($container eq 'cancreate') { + if ($container eq 'cancreate') { if (ref($changes->{'cancreate'}) eq 'ARRAY') { push(@{$changes->{'cancreate'}},'captcha'); } elsif (!defined($changes->{'cancreate'})) { @@ -7767,12 +7083,10 @@ sub process_captcha { if (ref($current->{'recaptchakeys'}) eq 'HASH') { $currpub = $current->{'recaptchakeys'}{'public'}; $currpriv = $current->{'recaptchakeys'}{'private'}; - unless ($newsettings->{'captcha'} eq 'recaptcha') { - $newsettings->{'recaptchakeys'} = { - public => '', - private => '', - } - } + $newsettings->{'recaptchakeys'} = { + public => '', + private => '', + } } if (($newpub ne $currpub) || ($newpriv ne $currpriv)) { if ($container eq 'cancreate') { @@ -7782,7 +7096,7 @@ sub process_captcha { $changes->{'cancreate'} = ['recaptchakeys']; } } else { - $changes->{'recaptchakeys'} = 1; + $changes->{'recaptchakeys'} = 1; } } return; @@ -7909,9 +7223,9 @@ sub modify_usermodification { } sub modify_defaults { - my ($dom,$lastactref,%domconfig) = @_; + my ($dom,$r) = @_; my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors); - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def','portal_def'); my @authtypes = ('internal','krb4','krb5','localauth'); foreach my $item (@items) { @@ -7971,7 +7285,7 @@ sub modify_defaults { if ($putresult eq 'ok') { if (keys(%changes) > 0) { $resulttext = &mt('Changes made:').'
      '; - my $version = &Apache::lonnet::get_server_loncaparev($dom); + my $version = $r->dir_config('lonVersion'); my $mailmsgtext = "Changes made to domain settings in a LON-CAPA installation - domain: $dom (running version: $version) - dns_domain.tab needs to be updated with the following changes, to support legacy 2.4, 2.5 and 2.6 versions of LON-CAPA.\n\n"; foreach my $item (sort(keys(%changes))) { my $value = $env{'form.'.$item}; @@ -7994,21 +7308,9 @@ sub modify_defaults { $mailmsgtext .= "\n"; my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } if ($changes{'auth_def'} || $changes{'auth_arg_def'} || $changes{'lang_def'} || $changes{'datelocale_def'}) { - my $notify = 1; - if (ref($domconfig{'contacts'}) eq 'HASH') { - if ($domconfig{'contacts'}{'reportupdates'} == 0) { - $notify = 0; - } - } - if ($notify) { - &Apache::lonmsg::sendemail('installrecord@loncapa.org', - "LON-CAPA Domain Settings Change - $dom", - $mailmsgtext); - } + my $sysmail = $r->dir_config('lonSysEMail'); + &Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext); } } else { $resulttext = &mt('No changes made to default authentication/language/timezone settings'); @@ -8028,7 +7330,7 @@ sub modify_defaults { } sub modify_scantron { - my ($r,$dom,$confname,$lastactref,%domconfig) = @_; + my ($r,$dom,$confname,%domconfig) = @_; my ($resulttext,%confhash,%changes,$errors); my $custom = 'custom.tab'; my $default = 'default.tab'; @@ -8089,9 +7391,6 @@ sub modify_scantron { } $resulttext .= '
    '; &Apache::loncommon::devalidate_domconfig_cache($dom); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domainconfig'} = 1; - } } else { $resulttext = &mt('No changes made to bubblesheet format file'); } @@ -8482,7 +7781,7 @@ sub modify_helpsettings { $changes{$item} = 1; } } - if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) { + if (($env{'form.'.$item} eq '0') || ($env{'form.'.$item} eq '1')) { $helphash{'helpsettings'}{$item} = $env{'form.'.$item}; } } @@ -8515,17 +7814,11 @@ sub modify_helpsettings { } sub modify_coursedefaults { - my ($dom,$lastactref,%domconfig) = @_; + my ($dom,%domconfig) = @_; my ($resulttext,$errors,%changes,%defaultshash); my %defaultchecked = ('canuse_pdfforms' => 'off'); + my @offon = ('off','on'); 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, - ); $defaultshash{'coursedefaults'} = {}; @@ -8541,7 +7834,7 @@ sub modify_coursedefaults { if (($domconfig{'coursedefaults'}{$item} eq '') && ($env{'form.'.$item} eq '0')) { $changes{$item} = 1; - } elsif ($domconfig{'coursedefaults'}{$item} ne $env{'form.'.$item}) { + } elsif ($domconfig{'coursdefaults'}{$item} ne $env{'form.'.$item}) { $changes{$item} = 1; } } elsif ($defaultchecked{$item} eq 'off') { @@ -8554,90 +7847,28 @@ sub modify_coursedefaults { } $defaultshash{'coursedefaults'}{$item} = $env{'form.'.$item}; } - foreach my $item (@numbers) { - my ($currdef,$newdef); - $newdef = $env{'form.'.$item}; - if ($item eq 'anonsurvey_threshold') { - $currdef = $domconfig{'coursedefaults'}{$item}; - $newdef =~ s/\D//g; - if ($newdef eq '' || $newdef < 1) { - $newdef = 1; - } - $defaultshash{'coursedefaults'}{$item} = $newdef; - } else { - my ($type) = ($item =~ /^\Quploadquota_\E(\w+)$/); - if (ref($domconfig{'coursedefaults'}{'uploadquota'}) eq 'HASH') { - $currdef = $domconfig{'coursedefaults'}{'uploadquota'}{$type}; - } - $newdef =~ s/[^\w.\-]//g; - $defaultshash{'coursedefaults'}{'uploadquota'}{$type} = $newdef; - } - if ($currdef ne $newdef) { - my $staticdef; - if ($item eq 'anonsurvey_threshold') { - unless (($currdef eq '') && ($newdef == $staticdefaults{$item})) { - $changes{$item} = 1; - } - } else { - unless (($currdef eq '') && ($newdef == $staticdefaults{'uploadquota'})) { - $changes{'uploadquota'} = 1; - } - } + my $currdefresponder = $domconfig{'coursedefaults'}{'anonsurvey_threshold'}; + my $newdefresponder = $env{'form.anonsurvey_threshold'}; + $newdefresponder =~ s/\D//g; + if ($newdefresponder eq '' || $newdefresponder < 1) { + $newdefresponder = 1; + } + $defaultshash{'coursedefaults'}{'anonsurvey_threshold'} = $newdefresponder; + if ($currdefresponder ne $newdefresponder) { + unless ($currdefresponder eq '' && $newdefresponder == 10) { + $changes{'anonsurvey_threshold'} = 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, $dom); 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'}) { - $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; - } - if ($changes{'coursecredits'}) { - if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { - $domdefaults{'officialcredits'} = - $defaultshash{'coursedefaults'}{'coursecredits'}{'official'}; - $domdefaults{'unofficialcredits'} = - $defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}; - $domdefaults{'textbookcredits'} = - $domdefaults{'coursedefaults'}{'coursecredits'}{'textbook'}; - } - } - if ($changes{'uploadquota'}) { - if (ref($defaultshash{'coursedefaults'}{'uploadquota'}) eq 'HASH') { - foreach my $type (@types) { - $domdefaults{$type.'quota'}=$defaultshash{'coursedefaults'}{'uploadquota'}{$type}; - } - } - } + if ($changes{'canuse_pdfforms'}) { + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); + $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'}; my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } } $resulttext = &mt('Changes made:').'
      '; foreach my $item (sort(keys(%changes))) { @@ -8648,37 +7879,7 @@ sub modify_coursedefaults { $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'}).'
    • '; - } elsif ($item eq 'uploadquota') { - if (ref($defaultshash{'coursedefaults'}{'uploadquota'}) eq 'HASH') { - $resulttext .= '
    • '.&mt('Default quota for content uploaded to a course/community via Course Editor set as follows:').'
        '. - '
      • '.&mt('Official courses: [_1] MB',''.$defaultshash{'coursedefaults'}{'uploadquota'}{'official'}.'').'
      • '. - '
      • '.&mt('Unofficial courses: [_1] MB',''.$defaultshash{'coursedefaults'}{'uploadquota'}{'unofficial'}.'').'
      • '. - '
      • '.&mt('Textbook courses: [_1] MB',''.$defaultshash{'coursedefaults'}{'uploadquota'}{'textbook'}.'').'
      • '. - - '
      • '.&mt('Communities: [_1] MB',''.$defaultshash{'coursedefaults'}{'uploadquota'}{'community'}.'').'
      • '. - '
      '. - '
    • '; - } else { - $resulttext .= '
    • '.&mt('Default quota for content uploaded via Course Editor remains default: [_1] MB',$staticdefaults{'uploadquota'}).'
    • '; - } - } elsif ($item eq 'coursecredits') { - if (ref($defaultshash{'coursedefaults'}{'coursecredits'}) eq 'HASH') { - if (($domdefaults{'officialcredits'} eq '') && - ($domdefaults{'unofficialcredits'} eq '') && - ($domdefaults{'textbookcredits'} eq '')) { - $resulttext .= '
    • '.&mt('Student credits not in use for courses in this domain').'
    • '; - } else { - $resulttext .= '
    • '.&mt('Student credits can be set per course by a Domain Coordinator, with the following defaults applying:').'
        '. - '
      • '.&mt('Official courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'official'}).'
      • '. - '
      • '.&mt('Unofficial courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'unofficial'}).'
      • '. - '
      • '.&mt('Textbook courses: [_1]',$defaultshash{'coursedefaults'}{'coursecredits'}{'textbook'}).'
      • '. - '
      '. - '
    • '; - } - } else { - $resulttext .= '
    • '.&mt('Student credits not in use for courses in this domain').'
    • '; - } + $resulttext .= '
    • '.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).'
    • '; } } $resulttext .= '
    '; @@ -8693,7 +7894,7 @@ sub modify_coursedefaults { } sub modify_usersessions { - my ($dom,$lastactref,%domconfig) = @_; + my ($dom,%domconfig) = @_; my @hostingtypes = ('version','excludedomain','includedomain'); my @offloadtypes = ('primary','default'); my %types = ( @@ -8710,7 +7911,7 @@ sub modify_usersessions { foreach my $prefix (@prefixes) { $defaultshash{'usersessions'}{$prefix} = {}; } - my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); + my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); my $resulttext; my %iphost = &Apache::lonnet::get_iphost(); foreach my $prefix (@prefixes) { @@ -8886,9 +8087,6 @@ sub modify_usersessions { } my $cachetime = 24*60*60; &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); - if (ref($lastactref) eq 'HASH') { - $lastactref->{'domdefaults'} = 1; - } if (keys(%changes) > 0) { my %lt = &usersession_titles(); $resulttext = &mt('Changes made:').'
      '; @@ -8900,8 +8098,7 @@ sub modify_usersessions { foreach my $lonhost (sort(keys(%{$changes{$prefix}}))) { $resulttext .= '
    • '.$lonhost.' '; my $lonhostdom = &Apache::lonnet::host_domain($lonhost); - my $cachekey = &escape('spares').':'.&escape($lonhostdom); - &Apache::lonnet::remote_devalidate_cache($lonhost,[$cachekey]); + &Apache::lonnet::remote_devalidate_cache($lonhost,'spares',$lonhostdom); if (ref($changes{$prefix}{$lonhost}) eq 'HASH') { foreach my $type (@{$types{$prefix}}) { if ($changes{$prefix}{$lonhost}{$type}) { @@ -8991,7 +8188,7 @@ sub modify_loadbalancing { if ($balancer eq '') { next; } - if (!exists($servers{$balancer})) { + if (!exists($servers{$balancer})) { if (exists($currbalancer{$balancer})) { push(@{$changes{'delete'}},$balancer); } @@ -9042,14 +8239,14 @@ sub modify_loadbalancing { } } else { if (ref($defaultshash{'loadbalancing'}{$balancer}) eq 'HASH') { - foreach my $sparetype (@sparestypes) { + foreach my $sparetype (@sparestypes) { if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') { if (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}} > 0) { $changes{'curr'}{$balancer}{'targets'} = 1; } } } - } + } } my $ishomedom; if (&Apache::lonnet::host_domain($balancer) eq $dom) { @@ -9058,7 +8255,7 @@ sub modify_loadbalancing { if (ref($alltypes) eq 'ARRAY') { foreach my $type (@{$alltypes}) { my $rule; - unless ((($type eq '_LC_external') || ($type eq '_LC_internetdom')) && + unless ((($type eq '_LC_external') || ($type eq '_LC_internetdom')) && (!$ishomedom)) { $rule = $env{'form.loadbalancing_rules_'.$i.'_'.$type}; } @@ -9083,17 +8280,17 @@ sub modify_loadbalancing { } my $putresult = &Apache::lonnet::put_dom('configuration', \%defaultshash,$dom); + if ($putresult eq 'ok') { if (keys(%changes) > 0) { if (ref($changes{'delete'}) eq 'ARRAY') { foreach my $balancer (sort(@{$changes{'delete'}})) { $resulttext .= '
    • '.&mt('Load Balancing discontinued for: [_1]',$balancer).'
    • '; - my $cachekey = &escape('loadbalancing').':'.&escape($dom); - &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]); + &Apache::lonnet::remote_devalidate_cache($balancer,'loadbalancing',$dom); } } if (ref($changes{'add'}) eq 'ARRAY') { - foreach my $balancer (sort(@{$changes{'add'}})) { + foreach my $balancer (sort(@{$changes{'add'}})) { $resulttext .= '
    • '.&mt('Load Balancing enabled for: [_1]',$balancer); } } @@ -9134,19 +8331,17 @@ sub modify_loadbalancing { my $balancetext; if ($rule eq '') { $balancetext = $ruletitles{'default'}; - } elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer') || - ($rule eq 'balancer') || ($rule eq 'offloadedto')) { + } elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer')) { $balancetext = $ruletitles{$rule}; } else { $balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type}); } - $resulttext .= '
    • '.&mt('Load Balancer: [_1] -- balancing for [_2] set to - "[_3]"',$balancer,$titles->{$type},$balancetext).'
    • '; + $resulttext .= '
    • '.&mt('Load Balancer: [_1] -- balancing for [_2] set to - "[_3]"',$balancer,$titles->{$type},$balancetext).'
    • '; } } } } - my $cachekey = &escape('loadbalancing').':'.&escape($dom); - &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]); + &Apache::lonnet::remote_devalidate_cache($balancer,'loadbalancing',$dom); } } if ($resulttext ne '') { @@ -9209,104 +8404,73 @@ sub recurse_cat_deletes { sub get_active_dcs { my ($dom) = @_; - my $now = time; - my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc'],$now,$now); + my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']); my %domcoords; my $numdcs = 0; + my $now = time; foreach my $server (keys(%dompersonnel)) { foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); - $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; + my ($end,$start) = split(':',$dompersonnel{$server}{$user}); + if (($end eq '') || ($end == 0) || ($end > $now)) { + if ($start <= $now) { + $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user}; + } + } } } return %domcoords; } sub active_dc_picker { - my ($dom,$numinrow,$inputtype,$name,%currhash) = @_; + my ($dom,$curr_dc) = @_; my %domcoords = &get_active_dcs($dom); - my @domcoord = keys(%domcoords); - if (keys(%currhash)) { - foreach my $dc (keys(%currhash)) { - unless (exists($domcoords{$dc})) { - push(@domcoord,$dc); - } - } - } - @domcoord = sort(@domcoord); - my $numdcs = scalar(@domcoord); - my $rows = 0; - my $table; + my @dcs = sort(keys(%domcoords)); + my $numdcs = scalar(@dcs); + my $datatable; + my $numinrow = 2; if ($numdcs > 1) { - $table = '
    '; - for (my $i=0; $i<@domcoord; $i++) { + $datatable = '
    '; + for (my $i=0; $i<@dcs; $i++) { my $rem = $i%($numinrow); if ($rem == 0) { if ($i > 0) { - $table .= ''; + $datatable .= ''; } - $table .= ''; - $rows ++; + $datatable .= ''; } - my $check = ''; - if ($inputtype eq 'radio') { - if (keys(%currhash) == 0) { - if (!$i) { - $check = ' checked="checked"'; - } - } elsif (exists($currhash{$domcoord[$i]})) { - $check = ' checked="checked"'; - } - } else { - if (exists($currhash{$domcoord[$i]})) { - $check = ' checked="checked"'; + my $check = ' '; + if ($curr_dc eq '') { + if (!$i) { + $check = ' checked="checked" '; } + } elsif ($dcs[$i] eq $curr_dc) { + $check = ' checked="checked" '; } - if ($i == @domcoord - 1) { + if ($i == @dcs - 1) { my $colsleft = $numinrow - $rem; if ($colsleft > 1) { - $table .= ''; - } - $table .= '
    '; + $datatable .= ''; } else { - $table .= ''; + $datatable .= ''; } } else { - $table .= ''; - } - my ($dcname,$dcdom) = split(':',$domcoord[$i]); - my $user = &Apache::loncommon::plainname($dcname,$dcdom); - $table .= '
    '; - } elsif ($numdcs == 1) { - my ($dcname,$dcdom) = split(':',$domcoord[0]); - my $user = &Apache::loncommon::plainname($dcname,$dcdom); - if ($inputtype eq 'radio') { - $table .= ''.$user; - if ($user ne $dcname.':'.$dcdom) { - $table .= ' ('.$dcname.':'.$dcdom.')'; - } - } else { - my $check; - if (exists($currhash{$domcoord[0]})) { - $check = ' checked="checked"'; - } - $table .= '
    '; } - $table .= ''; - $rows ++; + my ($dcname,$dcdom) = split(':',$dcs[$i]); + $datatable .= '
    '; + } elsif (@dcs) { + $datatable .= ''; } - return ($numdcs,$table,$rows); + return ($numdcs,$datatable); } sub usersession_titles { @@ -9378,7 +8542,7 @@ sub lonbalance_targets_js { } &get_loadbalancers_config($servers,\%existing,\%currbalancer, \%currtargets,\%currrules); - my $balancers = join("','",sort(keys(%currbalancer))); + my $balancers = join("','",sort(keys(%currbalancer))); return <<"END"; - -END - -} - sub captcha_phrases { return &Apache::lonlocal::texthash ( priv => 'Private key', @@ -9877,28 +9009,4 @@ sub captcha_phrases { ); } -sub devalidate_remote_domconfs { - my ($dom,$cachekeys) = @_; - return unless (ref($cachekeys) eq 'HASH'); - my %servers = &Apache::lonnet::internet_dom_servers($dom); - my %thismachine; - map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids(); - my @posscached = ('domainconfig','domdefaults'); - if (keys(%servers) > 1) { - foreach my $server (keys(%servers)) { - next if ($thismachine{$server}); - my @cached; - foreach my $name (@posscached) { - if ($cachekeys->{$name}) { - push(@cached,&escape($name).':'.&escape($dom)); - } - } - if (@cached) { - &Apache::lonnet::remote_devalidate_cache($server,\@cached); - } - } - } - return; -} - 1; 500 Internal Server Error

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.