--- loncom/interface/domainprefs.pm 2008/12/11 11:02:25 1.75 +++ loncom/interface/domainprefs.pm 2009/04/24 04:58:27 1.94 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.75 2008/12/11 11:02:25 bisitz Exp $ +# $Id: domainprefs.pm,v 1.94 2009/04/24 04:58:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,9 +37,10 @@ use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; use Apache::lonmsg(); +use Apache::lonconfigsettings; use LONCAPA qw(:DEFAULT :match); use LONCAPA::Enrollment; -use LONCAPA::loncgi(); +use LONCAPA::lonauthcgi(); use File::Copy; use Locale::Language; use DateTime::TimeZone; @@ -53,6 +54,7 @@ sub handler { return OK; } + my $context = 'domain'; my $dom = $env{'request.role.domain'}; my $domdesc = &Apache::lonnet::domain($dom,'description'); if (&Apache::lonnet::allowed('mau',$dom)) { @@ -74,11 +76,12 @@ sub handler { &Apache::lonnet::get_dom('configuration',['login','rolecolors', 'quotas','autoenroll','autoupdate','directorysrch', 'usercreation','usermodification','contacts','defaults', - 'scantron','coursecategories','serverstatuses'],$dom); + 'scantron','coursecategories','serverstatuses', + 'requestcourses'],$dom); my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll', 'autoupdate','directorysrch','contacts', 'usercreation','usermodification','scantron', - 'coursecategories','serverstatuses'); + 'requestcourses','coursecategories','serverstatuses'); my %prefs = ( 'rolecolors' => { text => 'Default color schemes', @@ -105,9 +108,9 @@ sub handler { col2 => 'Value'}], }, 'quotas' => - { text => 'User blogs, home pages and portfolios', + { text => 'User blogs, personal information pages and portfolios', help => 'Domain_Configuration_Quotas', - header => [{col1 => 'User type', + header => [{col1 => 'User affiliation', col2 => 'Available tools', col3 => 'Portfolio quota',}], }, @@ -165,6 +168,12 @@ sub handler { col2 => '', }], }, + 'requestcourses' => + {text => 'Request creation of courses', + help => 'Domain_Configuration_Request_Courses', + header => [{col1 => 'User affiliation', + col2 => 'Requestable course types',}], + }, 'coursecategories' => { text => 'Cataloging of courses', help => 'Domain_Configuration_Cataloging_Courses', @@ -175,7 +184,7 @@ sub handler { }], }, 'serverstatuses' => - {text => 'Access to Server Status Pages', + {text => 'Access to server status pages', help => 'Domain_Configuration_Server_Status', header => [{col1 => 'Status Page', col2 => 'Other named users', @@ -190,98 +199,10 @@ sub handler { text=>"Pick functionality"}); my $confname = $dom.'-domainconfig'; if ($phase eq 'process') { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:changePage(document.$phase,'display')", - text=>"Domain Configuration"}, - {href=>"javascript:changePage(document.$phase,'$phase')", - text=>"Updated"}); - &print_header($r,$phase); - foreach my $item (@prefs_order) { - if (grep(/^\Q$item\E$/,@actions)) { - $r->print('

'.&mt($prefs{$item}{'text'}).'

'. - &process_changes($r,$dom,$confname,$item, - \@roles,%domconfig)); - } - } - $r->print('

'); - &print_footer($r,$phase,'display','Back to configuration display', - \@actions); - $r->print('

'); + &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles); } elsif ($phase eq 'display') { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:changePage(document.$phase,'display')", - text=>"Domain Configuration"}); - &print_header($r,$phase); - if (@actions > 0) { - my $rowsum = 0; - my (%output,%rowtotal,@items); - my $halfway = @actions/2; - foreach my $item (@prefs_order) { - if (grep(/^\Q$item\E$/,@actions)) { - push(@items,$item); - ($output{$item},$rowtotal{$item}) = - &print_config_box($r,$dom,$confname,$phase, - $item,$prefs{$item}, - $domconfig{$item}); - $rowsum += $rowtotal{$item}; - } - } - my $colend; - my $halfway = $rowsum/2; - my $aggregate = 0; - my $sumleft = 0; - my $sumright = 0; - my $crossover; - for (my $i=0; $i<@items; $i++) { - $aggregate += $rowtotal{$items[$i]}; - if ($aggregate > $halfway) { - $crossover = $i; - last; - } - } - for (my $i=0; $i<$crossover; $i++) { - $sumleft += $rowtotal{$items[$i]}; - } - for (my $i=$crossover+1; $i<@items; $i++) { - $sumright += $rowtotal{$items[$i]}; - } - if ((@items > 1) && ($env{'form.numcols'} == 2)) { - my $sumdiff = $sumright - $sumleft; - if ($sumdiff > 0) { - $colend = $crossover + 1; - } else { - $colend = $crossover; - } - } else { - $colend = @items; - } - $r->print('

'); - for (my $i=0; $i<$colend; $i++) { - $r->print($output{$items[$i]}); - } - $r->print(''); - if ($colend < @items) { - for (my $i=$colend; $i<@items; $i++) { - $r->print($output{$items[$i]}); - } - } - $r->print('

'); - $r->print(&print_footer($r,$phase,'process','Save',\@actions)); - } else { - $r->print(''. - ''."\n". - ''.&mt('No settings chosen'). - ''); - } - $r->print(''); - $r->print(&Apache::loncommon::end_page()); + &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname); } else { - if ($phase eq '') { - $phase = 'pickactions'; - } - my %helphash; - &print_header($r,$phase); if (keys(%domconfig) == 0) { my $primarylibserv = &Apache::lonnet::domain($dom,'primary'); my @ids=&Apache::lonnet::current_machine_ids(); @@ -300,6 +221,7 @@ sub handler { } } if ($custom_img_count > 0) { + &Apache::lonconfigsettings::print_header($r,$phase,$context); my $switch_server = &check_switchserver($dom,$confname); $r->print( &mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').'
'. @@ -309,53 +231,22 @@ sub handler { if ($switch_server) { $r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom)); } + $r->print(&Apache::loncommon::end_page()); return OK; } } } - $r->print('

'.&mt('Functionality to display/modify').'

'); - $r->print(''."\n".'

  '. - '

'); - my ($numitems,$midpoint,$seconddiv,$count); - $numitems = @prefs_order; - $midpoint = int($numitems/2); - if ($numitems%2) { - $midpoint ++; - } - $count = 0; - foreach my $item (@prefs_order) { - $r->print('

'. - &Apache::loncommon::help_open_topic($prefs{$item}->{'help'}). - '

'); - $count ++; - if ((!$seconddiv) && ($count >= $midpoint)) { - $r->print('
'."\n".'
'."\n"); - $seconddiv = 1; - } - } - $r->print('

'. - &mt('Display options').'

'."\n". - '

'.&mt('Display using: ')."\n". - '  

'); - $r->print(&print_footer($r,$phase,'display','Go')); - $r->print(''); - $r->print(&Apache::loncommon::end_page()); + &Apache::lonconfigsettings::display_choices($r,$phase,$context,\@prefs_order,\%prefs); } return OK; } sub process_changes { - my ($r,$dom,$confname,$action,$roles,%domconfig) = @_; + 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,%domconfig); @@ -363,7 +254,7 @@ sub process_changes { $output = &modify_rolecolors($r,$dom,$confname,$roles, %domconfig); } elsif ($action eq 'quotas') { - $output = &modify_quotas($dom,%domconfig); + $output = &modify_quotas($dom,$action,%domconfig); } elsif ($action eq 'autoenroll') { $output = &modify_autoenroll($dom,%domconfig); } elsif ($action eq 'autoupdate') { @@ -384,6 +275,8 @@ sub process_changes { $output = &modify_coursecategories($dom,%domconfig); } elsif ($action eq 'serverstatuses') { $output = &modify_serverstatuses($dom,%domconfig); + } elsif ($action eq 'requestcourses') { + $output = &modify_quotas($dom,$action,%domconfig); } return $output; } @@ -394,7 +287,7 @@ sub print_config_box { my $output; if ($action eq 'coursecategories') { $output = &coursecategories_javascript($settings); - } + } $output .= ' @@ -544,7 +437,7 @@ sub print_config_box { if ($action eq 'login') { $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal); } elsif ($action eq 'quotas') { - $output .= &print_quotas($dom,$settings,\$rowtotal); + $output .= &print_quotas($dom,$settings,\$rowtotal,$action); } elsif ($action eq 'autoenroll') { $output .= &print_autoenroll($dom,$settings,\$rowtotal); } elsif ($action eq 'directorysrch') { @@ -557,6 +450,8 @@ sub print_config_box { $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal); } elsif ($action eq 'serverstatuses') { $output .= &print_serverstatuses($dom,$settings,\$rowtotal); + } elsif ($action eq 'requestcourses') { + $output .= &print_quotas($dom,$settings,\$rowtotal,$action); } } $output .= ' @@ -567,107 +462,6 @@ sub print_config_box { return ($output,$rowtotal); } -sub print_header { - my ($r,$phase) = @_; - my $alert = &mt('You must select at least one functionality type to display.'); - my $js = ' - -'; - my $additem; - if ($phase eq 'pickactions') { - my %loaditems = ( - 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);", - ); - $additem = {'add_entries' => \%loaditems,}; - } else { - my %loaditems = ( - 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);", - ); - $additem = {'add_entries' => \%loaditems,}; - } - $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings', - $js,$additem)); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings')); - $r->print(' - - - - - -'); - $r->print(''); - return; -} - -sub print_footer { - my ($r,$phase,$newphase,$button_text,$actions) = @_; - $button_text = &mt($button_text); - $r->print(''. - ''. - ''); - if (($phase eq 'display') || ($phase eq 'process')) { - if (ref($actions) eq 'ARRAY') { - foreach my $item (@{$actions}) { - $r->print('')."\n"; - } - } - $r->print(''); - } - my $dest='"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; - if ($phase eq 'process') { - $r->print('

'.$button_text.'

'); - } else { - my $onclick; - if ($phase eq 'display') { - $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; - } else { - $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; - } - $r->print('

'); - } - if ($phase eq 'process') { - $r->print(''.&Apache::loncommon::end_page()); - } - return; -} - sub print_login { my ($dom,$confname,$phase,$settings,$rowtotal) = @_; my %choices = &login_choices(); @@ -1189,67 +983,35 @@ sub color_pick { return $link; } -sub color_pick_js { - my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); - my $output = <<"ENDCOL"; - function pclose() { - parmwin=window.open("/adm/rat/empty.html","LONCAPAparms","height=350,width=350,scrollbars=no,menubar=no"); - parmwin.close(); - } - - $pjump_def - - function psub() { - pclose(); - if (document.parmform.pres_marker.value!='') { - if (document.parmform.pres_type.value!='') { - eval('document.display.'+ - document.parmform.pres_marker.value+ - '.value=document.parmform.pres_value.value;'); - } - } else { - document.parmform.pres_value.value=''; - document.parmform.pres_marker.value=''; - } - } - - function get_id (span_id) { - if (document.getElementById) { - return document.getElementById(span_id); - } - if (document.all) { - return document.all[span_id]; - } - return false; - } - - function colchg_span (span_id_str,new_color_item) { - var span_ref = get_id(span_id_str); - if (span_ref.style) { span_ref = span_ref.style; } - span_ref.background = new_color_item.value; - span_ref.backgroundColor = new_color_item.value; - span_ref.bgColor = new_color_item.value; - } - -ENDCOL - return $output; -} - sub print_quotas { - my ($dom,$settings,$rowtotal) = @_; - my $datatable; + my ($dom,$settings,$rowtotal,$action) = @_; + my $context; + if ($action eq 'quotas') { + $context = 'tools'; + } else { + $context = $action; + } + my ($datatable,$defaultquota,@usertools); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); my $typecount = 0; my $css_class; - my @usertools = ('aboutme','blog','portfolio'); + if ($context eq 'requestcourses') { + @usertools = ('official','unofficial'); + } else { + @usertools = ('aboutme','blog','portfolio'); + } my %titles = &tool_titles(); if (ref($types) eq 'ARRAY') { foreach my $type (@{$types}) { my $currdefquota; - if (ref($settings->{defaultquota}) eq 'HASH') { - $currdefquota = $settings->{defaultquota}->{$type}; - } else { - $currdefquota = $settings->{$type}; + unless ($context eq 'requestcourses') { + if (ref($settings) eq 'HASH') { + if (ref($settings->{defaultquota}) eq 'HASH') { + $currdefquota = $settings->{defaultquota}->{$type}; + } else { + $currdefquota = $settings->{$type}; + } + } } if (defined($usertypes->{$type})) { $typecount ++; @@ -1258,30 +1020,44 @@ sub print_quotas { ''. ''; + unless ($context eq 'requestcourses') { + $datatable .= + ''; + '" size="5" /> Mb'; + } + $datatable .= ''; } } } - my $defaultquota = '20'; - if (ref($settings) eq 'HASH') { - if (ref($settings->{'defaultquota'}) eq 'HASH') { - $defaultquota = $settings->{'defaultquota'}->{'default'}; - } elsif (defined($settings->{'default'})) { - $defaultquota = $settings->{'default'}; + unless ($context eq 'requestcourses') { + $defaultquota = '20'; + if (ref($settings) eq 'HASH') { + if (ref($settings->{'defaultquota'}) eq 'HASH') { + $defaultquota = $settings->{'defaultquota'}->{'default'}; + } elsif (defined($settings->{'default'})) { + $defaultquota = $settings->{'default'}; + } } } $typecount ++; @@ -1290,38 +1066,57 @@ sub print_quotas { ''. ''; + $datatable .= ''; + unless ($context eq 'requestcourses') { + $datatable .= ''; + } + $datatable .= ''; $typecount ++; $css_class = $typecount%2?' class="LC_odd_row"':''; $datatable .= ''. ''. ''; + $datatable .= '('.&mt('overrides affiliation'). + ')'; $$rowtotal += $typecount; return $datatable; } @@ -1504,8 +1299,8 @@ sub print_directorysrch { $$rowtotal += 2; if (ref($usertypes) eq 'HASH') { if (keys(%{$usertypes}) > 0) { - $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom, - $numinrow,$othertitle); + $datatable .= &insttypes_row($settings,$types,$usertypes,$dom, + $numinrow,$othertitle,'cansearch'); $cansrchrow = 1; } } @@ -1520,7 +1315,7 @@ sub print_directorysrch { foreach my $title (@{$titleorder}) { if (defined($searchtitles->{$title})) { my $check = ' '; - if (ref($settings) eq 'HASH') { + if (ref($settings) eq 'HASH') { if (ref($settings->{'searchby'}) eq 'ARRAY') { if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) { $check = ' checked="checked" '; @@ -1562,7 +1357,7 @@ sub print_contacts { my $datatable; my @contacts = ('adminemail','supportemail'); my (%checked,%to,%otheremails); - my @mailings = ('errormail','packagesmail','helpdeskmail'); + my @mailings = ('errormail','packagesmail','lonstatusmail','helpdeskmail'); foreach my $type (@mailings) { $otheremails{$type} = ''; } @@ -1582,6 +1377,8 @@ sub print_contacts { } $otheremails{$type} = $settings->{$type}{'others'}; } + } elsif ($type eq 'lonstatusmail') { + $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; } } } else { @@ -1589,7 +1386,8 @@ sub print_contacts { $to{'adminemail'} = $Apache::lonnet::perlvar{'lonAdmEMail'}; $checked{'errormail'}{'adminemail'} = ' checked="checked" '; $checked{'packagesmail'}{'adminemail'} = ' checked="checked" '; - $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; + $checked{'helpdeskmail'}{'supportemail'} = ' checked="checked" '; + $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" '; } my ($titles,$short_titles) = &contact_titles(); my $rownum = 0; @@ -1633,7 +1431,8 @@ sub contact_titles { 'adminemail' => 'Default Server Admin E-mail address', 'errormail' => 'Error reports to be e-mailed to', 'packagesmail' => 'Package update alerts to be e-mailed to', - 'helpdeskmail' => 'Helpdesk requests to be e-mailed to' + 'helpdeskmail' => 'Helpdesk requests to be e-mailed to', + 'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)', ); my %short_titles = &Apache::lonlocal::texthash ( adminemail => 'Admin E-mail address', @@ -1644,10 +1443,12 @@ sub contact_titles { sub tool_titles { my %titles = &Apache::lonlocal::texthash ( - aboutme => 'Personal Home Page', - blog => 'Blog', - portfolio => 'Portfolio', - ); + aboutme => 'Personal Information Page', + blog => 'Blog', + portfolio => 'Portfolio', + official => 'Official courses (with institutional codes)', + unofficial => 'Unofficial courses', + ); return %titles; } @@ -1769,6 +1570,16 @@ sub print_usercreation { } $datatable .= ''; } + my ($othertitle,$usertypes,$types) = + &Apache::loncommon::sorted_inst_types($dom); + if (ref($usertypes) eq 'HASH') { + if (keys(%{$usertypes}) > 0) { + $datatable .= &insttypes_row($settings->{cancreate},$types,$usertypes, + $dom,$numinrow,$othertitle, + 'statustocreate'); + $$rowtotal ++; + } + } } else { my @contexts = ('author','course','domain'); my @authtypes = ('int','krb4','krb5','loc'); @@ -1885,7 +1696,7 @@ sub usercreation_types { any => 'Any', official => 'Institutional only ', unofficial => 'Non-institutional only', - email => 'Email address', + email => 'E-mail address', login => 'Institutional Login', sso => 'SSO', none => 'None', @@ -2364,7 +2175,7 @@ sub print_serverstatuses { } } } - my $titles= &LONCAPA::loncgi::serverstatus_titles(); + my $titles= &LONCAPA::lonauthcgi::serverstatus_titles(); my $rownum = 0; my $css_class; foreach my $type (@pages) { @@ -2659,10 +2470,18 @@ sub modifiable_userdata_row { return $output; } -sub users_cansearch_row { - my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle) = @_; +sub insttypes_row { + my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context) = @_; + my %lt = &Apache::lonlocal::texthash ( + cansearch => 'Users allowed to search', + statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)', + ); + my $showdom; + if ($context eq 'cansearch') { + $showdom = ' ('.$dom.')'; + } my $output = ''. - ''; @@ -2874,7 +2697,7 @@ sub color_font_choices { links => "Link colors", images => "Images", font => "Font color", - pgbg => "Header", + pgbg => "Page", tabbg => "Header", sidebg => "Border", link => "Link", @@ -3482,34 +3305,37 @@ sub check_switchserver { return $switchserver; } -sub javascript_set_colnums { - return < 1100) { - document.pickactions.numcols[1].checked = true; +sub modify_quotas { + my ($dom,$action,%domconfig) = @_; + my ($context,@usertools); + if ($action eq 'quotas') { + $context = 'tools'; + } else { + $context = $action; + } + if ($context eq 'requestcourses') { + @usertools = ('official','unofficial'); } else { - document.pickactions.numcols[0].checked = true; + @usertools = ('aboutme','blog','portfolio'); } -} -END -} - -sub modify_quotas { - my ($dom,%domconfig) = @_; my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); my ($resulttext,%changes); my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); - my @usertools = ('aboutme','blog','portfolio'); my %titles = &tool_titles(); my (%confhash,%toolshash); foreach my $key (keys(%env)) { - if ($key =~ /^form\.quota_(.+)$/) { - $confhash{'defaultquota'}{$1} = $env{$key}; - } elsif ($key =~ /^form\.tools_(.+)$/) { + unless ($context eq 'requestcourses') { + if ($key =~ /^form\.quota_(.+)$/) { + $confhash{'defaultquota'}{$1} = $env{$key}; + } + } + if ($key =~ /^form\.\Q$context\E_(.+)$/) { @{$toolshash{$1}} = &Apache::loncommon::get_env_multiple($key); } } - $confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; + unless ($context eq 'requestcourses') { + $confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; + } foreach my $item (@usertools) { foreach my $type (@{$types},'default','_LC_adv') { if (grep(/^\Q$type\E$/,@{$toolshash{$item}})) { @@ -3517,60 +3343,74 @@ sub modify_quotas { } else { $confhash{$item}{$type} = 0; } - if (ref($domconfig{'quotas'}) eq 'HASH') { - if (ref($domconfig{'quotas'}{$item}) eq 'HASH') { - if ($domconfig{'quotas'}{$item}{$type} ne $confhash{$item}{$type}) { + if (ref($domconfig{$action}) eq 'HASH') { + if (ref($domconfig{$action}{$item}) eq 'HASH') { + if ($domconfig{$action}{$item}{$type} ne $confhash{$item}{$type}) { $changes{$item}{$type} = 1; } } else { - if (!$confhash{$item}{$type}) { - $changes{$item}{$type} = 1; + if ($context eq 'requestcourses') { + if ($confhash{$item}{$type}) { + $changes{$item}{$type} = 1; + } + } else { + if (!$confhash{$item}{$type}) { + $changes{$item}{$type} = 1; + } } } } else { - if (!$confhash{$item}{$type}) { - $changes{$item}{$type} = 1; + if ($context eq 'requestcourses') { + if ($confhash{$item}{$type}) { + $changes{$item}{$type} = 1; + } + } else { + if (!$confhash{$item}{$type}) { + $changes{$item}{$type} = 1; + } } } } } - if (ref($domconfig{'quotas'}) eq 'HASH') { - if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') { - foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) { - if (exists($confhash{'defaultquota'}{$key})) { - if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{'defaultquota'}{$key}) { - $changes{'defaultquota'}{$key} = 1; + unless ($context eq 'requestcourses') { + if (ref($domconfig{'quotas'}) eq 'HASH') { + if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') { + foreach my $key (keys(%{$domconfig{'quotas'}{'defaultquota'}})) { + if (exists($confhash{'defaultquota'}{$key})) { + if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{'defaultquota'}{$key}) { + $changes{'defaultquota'}{$key} = 1; + } + } else { + $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{'defaultquota'}{$key}; } - } else { - $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{'defaultquota'}{$key}; } - } - } else { - foreach my $key (keys(%{$domconfig{'quotas'}})) { - if (exists($confhash{'defaultquota'}{$key})) { - if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{$key}) { - $changes{'defaultquota'}{$key} = 1; + } else { + foreach my $key (keys(%{$domconfig{'quotas'}})) { + if (exists($confhash{'defaultquota'}{$key})) { + if ($confhash{'defaultquota'}{$key} ne $domconfig{'quotas'}{$key}) { + $changes{'defaultquota'}{$key} = 1; + } + } else { + $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{$key}; } - } else { - $confhash{'defaultquota'}{$key} = $domconfig{'quotas'}{$key}; } } } - } - if (ref($confhash{'defaultquota'}) eq 'HASH') { - foreach my $key (keys(%{$confhash{'defaultquota'}})) { - if (ref($domconfig{'quotas'}) eq 'HASH') { - if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') { - if (!exists($domconfig{'quotas'}{'defaultquota'}{$key})) { - $changes{'defaultquota'}{$key} = 1; + if (ref($confhash{'defaultquota'}) eq 'HASH') { + foreach my $key (keys(%{$confhash{'defaultquota'}})) { + if (ref($domconfig{'quotas'}) eq 'HASH') { + if (ref($domconfig{'quotas'}{'defaultquota'}) eq 'HASH') { + if (!exists($domconfig{'quotas'}{'defaultquota'}{$key})) { + $changes{'defaultquota'}{$key} = 1; + } + } else { + if (!exists($domconfig{'quotas'}{$key})) { + $changes{'defaultquota'}{$key} = 1; + } } } else { - if (!exists($domconfig{'quotas'}{$key})) { - $changes{'defaultquota'}{$key} = 1; - } + $changes{'defaultquota'}{$key} = 1; } - } else { - $changes{'defaultquota'}{$key} = 1; } } } @@ -3580,7 +3420,7 @@ sub modify_quotas { } my %quotahash = ( - quotas => { %confhash } + $action => { %confhash } ); my $putresult = &Apache::lonnet::put_dom('configuration',\%quotahash, $dom); @@ -3590,23 +3430,37 @@ sub modify_quotas { &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); $resulttext = &mt('Changes made:').''; } + } elsif ($type eq 'statustocreate') { + if (@{$cancreate{'selfcreate'}} > 0) { + if (@{$cancreate{$type}} == 0) { + if (!grep(/^email$/,@{$cancreate{'selfcreate'}})) { + $chgtext .= &mt("However, no institutional affiliations (including 'other') are currently permitted to create accounts."); + } + } elsif (ref($usertypes) eq 'HASH') { + if (grep(/^(login|sso)$/,@{$cancreate{'selfcreate'}})) { + $chgtext .= &mt('creation of a new account for an institutional user is restricted to the following institutional affiliation(s):').''; + } + } + } } else { if ($cancreate{$type} eq 'none') { $chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.'); @@ -4743,8 +4634,10 @@ sub modify_coursecategories { } else { $changes{'togglecats'} = 1; $changes{'categorize'} = 1; - $domconfig{'coursecategories'}{'togglecats'} = $env{'form.togglecats'}; - $domconfig{'coursecategories'}{'categorize'} = $env{'form.categorize'}; + $domconfig{'coursecategories'} = { + togglecats => $env{'form.togglecats'}, + categorize => $env{'form.categorize'}, + }; } if (ref($cathash) eq 'HASH') { if (($domconfig{'coursecategories'}{'cats'}{'instcode::0'} ne '') && ($env{'form.instcode'} == 0)) { @@ -4959,58 +4852,57 @@ sub modify_serverstatuses { my %serverstatushash = ( serverstatuses => \%newserverstatus, ); - my $putresult = &Apache::lonnet::put_dom('configuration',\%serverstatushash, - $dom); my %changes; foreach my $type (@pages) { - if (ref($currserverstatus{$type}) eq 'HASH') { - my @currnamed = split(/,/,$currserverstatus{$type}{'namedusers'}); - my @newusers = split(/,/,$newserverstatus{$type}{'namedusers'}); - foreach my $item (@currnamed) { - if (!grep(/^\Q$item\E$/,@newusers)) { - $changes{$type}{'namedusers'} = 1; - last; - } - } - foreach my $item (@newusers) { - if (!grep(/^\Q$item\E$/,@currnamed)) { - $changes{$type}{'namedusers'} = 1; - last; - } - } - my @currmachines = split(/,/,$currserverstatus{$type}{'machines'}); - my @newmachines = split(/,/,$newserverstatus{$type}{'machines'}); - foreach my $item (@currmachines) { - if (!grep(/^\Q$item\E$/,@newmachines)) { - $changes{$type}{'machines'} = 1; - last; - } - } - foreach my $item (@newmachines) { - if (!grep(/^\Q$item\E$/,@currmachines)) { - $changes{$type}{'machines'} = 1; - last; + foreach my $setting ('namedusers','machines') { + my (@current,@new); + if (ref($currserverstatus{$type}) eq 'HASH') { + if ($currserverstatus{$type}{$setting} ne '') { + @current = split(/,/,$currserverstatus{$type}{$setting}); } } - + if ($newserverstatus{$type}{$setting} ne '') { + @new = split(/,/,$newserverstatus{$type}{$setting}); + } + if (@current > 0) { + if (@new > 0) { + foreach my $item (@current) { + if (!grep(/^\Q$item\E$/,@new)) { + $changes{$type}{$setting} = 1; + last; + } + } + foreach my $item (@new) { + if (!grep(/^\Q$item\E$/,@current)) { + $changes{$type}{$setting} = 1; + last; + } + } + } else { + $changes{$type}{$setting} = 1; + } + } elsif (@new > 0) { + $changes{$type}{$setting} = 1; + } } } if (keys(%changes) > 0) { - my $titles= &LONCAPA::loncgi::serverstatus_titles(); + my $titles= &LONCAPA::lonauthcgi::serverstatus_titles(); my $putresult = &Apache::lonnet::put_dom('configuration', \%serverstatushash,$dom); if ($putresult eq 'ok') { $resulttext .= &mt('Changes made:').'
'.$usertypes->{$type}.''; foreach my $item (@usertools) { - my $checked = 'checked="checked" '; - if (ref($settings->{$item}) eq 'HASH') { - if ($settings->{$item}->{$type} == 0) { - $checked = ''; + my $checked; + unless ($context eq 'requestcourses') { + $checked = 'checked="checked" '; + } + if (ref($settings) eq 'HASH') { + if (ref($settings->{$item}) eq 'HASH') { + if ($settings->{$item}->{$type} == 0) { + $checked = ''; + } elsif ($settings->{$item}->{$type} == 1) { + $checked = 'checked="checked" '; + } } } $datatable .= '  '; } - $datatable .= ''. + $datatable .= ''. ' Mb
'.$othertitle.''; foreach my $item (@usertools) { - my $checked = 'checked="checked" '; - if (ref($settings->{$item}) eq 'HASH') { - if ($settings->{$item}->{'default'} == 0) { - $checked = ''; + my $checked; + unless ($context eq 'requestcourses') { + $checked = 'checked="checked" '; + } + if (ref($settings) eq 'HASH') { + if (ref($settings->{$item}) eq 'HASH') { + if ($settings->{$item}->{'default'} == 0) { + $checked = ''; + } elsif ($settings->{$item}->{'default'} == 1) { + $checked = 'checked="checked" '; + } } } $datatable .= '  '; } - $datatable .= ''. - ' Mb
'. + ' Mb

'.&mt('LON-CAPA Advanced Users').'

'; foreach my $item (@usertools) { - my $checked = 'checked="checked" '; - if (ref($settings->{$item}) eq 'HASH') { - if ($settings->{$item}->{'_LC_adv'} == 0) { - $checked = ''; + my $checked; + unless ($context eq 'requestcourses') { + $checked = 'checked="checked" '; + } + if (ref($settings) eq 'HASH') { + if (ref($settings->{$item}) eq 'HASH') { + if ($settings->{$item}->{'_LC_adv'} == 0) { + $checked = ''; + } elsif ($settings->{$item}->{'_LC_adv'} == 1) { + $checked = 'checked="checked" '; + } } } $datatable .= '  '; } - $datatable .= '('.&mt('overrides affiliation').')
'.&mt('Users allowed to search').' ('.$dom.')'. + ''.$lt{$context}.$showdom. ''; my $rem; if (ref($types) eq 'ARRAY') { @@ -2676,14 +2495,16 @@ sub users_cansearch_row { $output .= ''; } my $check = ' '; - if (ref($settings->{'cansearch'}) eq 'ARRAY') { - if (grep(/^\Q$types->[$i]\E$/,@{$settings->{'cansearch'}})) { + if (ref($settings->{$context}) eq 'ARRAY') { + if (grep(/^\Q$types->[$i]\E$/,@{$settings->{$context}})) { $check = ' checked="checked" '; } + } elsif ($context eq 'statustocreate') { + $check = ' checked="checked" '; } $output .= ''; } @@ -2698,13 +2519,15 @@ sub users_cansearch_row { $output .= ''. '
'. ''; } my $defcheck = ' '; - if (ref($settings->{'cansearch'}) eq 'ARRAY') { - if (grep(/^default$/,@{$settings->{'cansearch'}})) { + if (ref($settings->{$context}) eq 'ARRAY') { + if (grep(/^default$/,@{$settings->{$context}})) { $defcheck = ' checked="checked" '; } + } elsif ($context eq 'statustocreate') { + $defcheck = ' checked="checked" '; } $output .= '