--- loncom/interface/domainprefs.pm 2008/12/26 16:34:01 1.82
+++ loncom/interface/domainprefs.pm 2009/05/07 19:36:49 1.95
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.82 2008/12/26 16:34:01 raeburn Exp $
+# $Id: domainprefs.pm,v 1.95 2009/05/07 19:36:49 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,6 +37,7 @@ 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::lonauthcgi();
@@ -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,7 +108,7 @@ 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 affiliation',
col2 => 'Available tools',
@@ -159,12 +162,18 @@ sub handler {
col2 => 'Information settable when self-creating account (if directory data blank)'}],
},
'scantron' =>
- { text => 'Scantron format file',
+ { text => 'Bubblesheet format file',
help => 'Domain_Configuration_Scantron_Format',
header => [ {col1 => 'Item',
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',
@@ -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'}).
- ' '.&mt($prefs{$item}->{'text'}).' ');
- $count ++;
- if ((!$seconddiv) && ($count >= $midpoint)) {
- $r->print(''."\n".''."\n");
- $seconddiv = 1;
- }
- }
- $r->print('
'.
- &mt('Display options').' '."\n".
- ''.&mt('Display using: ')."\n".
- ' '.
- &mt('one column').' '.
- ' '.
- &mt('two columns').'
');
- $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(''.&Apache::loncommon::end_page());
- }
- return;
-}
-
sub print_login {
my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
my %choices = &login_choices();
@@ -1189,68 +983,34 @@ 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) eq 'HASH') {
- 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})) {
@@ -1260,32 +1020,44 @@ sub print_quotas {
''.$usertypes->{$type}.' '.
'';
foreach my $item (@usertools) {
- my $checked = 'checked="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 .= ''.
- ' '.$titles{$item}.
' ';
}
- $datatable .= ' '.
+ $datatable .= ' ';
+ unless ($context eq 'requestcourses') {
+ $datatable .=
+ ''.
' Mb ';
+ '" 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 ++;
@@ -1294,43 +1066,57 @@ sub print_quotas {
''.$othertitle.' '.
'';
foreach my $item (@usertools) {
- my $checked = 'checked="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 .= ''.
- ' '.$titles{$item}.
' ';
}
- $datatable .= ' '.
- ' Mb ';
+ $datatable .= '';
+ unless ($context eq 'requestcourses') {
+ $datatable .= ''.
+ ' Mb ';
+ }
+ $datatable .= '';
$typecount ++;
$css_class = $typecount%2?' class="LC_odd_row"':'';
$datatable .= ''.
' '.&mt('LON-CAPA Advanced Users').' '.
' ';
foreach my $item (@usertools) {
- my $checked = 'checked="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 .= ''.
- ' '.$titles{$item}.
' ';
}
$datatable .= '('.&mt('overrides affiliation').
- ') ';
+ ')';
$$rowtotal += $typecount;
return $datatable;
}
@@ -1513,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;
}
}
@@ -1529,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" ';
@@ -1571,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} = '';
}
@@ -1591,6 +1377,8 @@ sub print_contacts {
}
$otheremails{$type} = $settings->{$type}{'others'};
}
+ } elsif ($type eq 'lonstatusmail') {
+ $checked{'lonstatusmail'}{'adminemail'} = ' checked="checked" ';
}
}
} else {
@@ -1598,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;
@@ -1642,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',
@@ -1653,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;
}
@@ -1778,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');
@@ -1894,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',
@@ -2031,8 +1833,8 @@ sub print_scantronformat {
%confhash);
my $switchserver = &check_switchserver($dom,$confname);
my %lt = &Apache::lonlocal::texthash (
- default => 'Default scantron format file error',
- custom => 'Custom scantron format file error',
+ default => 'Default bubblesheet format file error',
+ custom => 'Custom bubblesheet format file error',
);
my %scantronfiles = (
default => 'default.tab',
@@ -2105,7 +1907,7 @@ sub print_scantronformat {
}
}
} else {
- $error{'default'} = &mt("Unable to copy default scantron formatfile to domain's RES space: [_1]",$switchserver);
+ $error{'default'} = &mt("Unable to copy default bubblesheet formatfile to domain's RES space: [_1]",$switchserver);
}
}
if (ref($settings) eq 'HASH') {
@@ -2668,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 = ''.
- ''.&mt('Users allowed to search').' ('.$dom.')'.
+ ' '.$lt{$context}.$showdom.
' ';
@@ -3491,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}})) {
@@ -3526,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;
}
}
}
@@ -3589,7 +3420,7 @@ sub modify_quotas {
}
my %quotahash = (
- quotas => { %confhash }
+ $action => { %confhash }
);
my $putresult = &Apache::lonnet::put_dom('configuration',\%quotahash,
$dom);
@@ -3599,18 +3430,20 @@ sub modify_quotas {
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
$resulttext = &mt('Changes made:').'';
- if (ref($changes{'defaultquota'}) eq 'HASH') {
- $resulttext .= ''.&mt('Portfolio default quotas').'';
- foreach my $type (@{$types},'default') {
- if (defined($changes{'defaultquota'}{$type})) {
- my $typetitle = $usertypes->{$type};
- if ($type eq 'default') {
- $typetitle = $othertitle;
+ unless ($context eq 'requestcourses') {
+ if (ref($changes{'defaultquota'}) eq 'HASH') {
+ $resulttext .= ''.&mt('Portfolio default quotas').'';
+ foreach my $type (@{$types},'default') {
+ if (defined($changes{'defaultquota'}{$type})) {
+ my $typetitle = $usertypes->{$type};
+ if ($type eq 'default') {
+ $typetitle = $othertitle;
+ }
+ $resulttext .= ''.&mt('[_1] set to [_2] Mb',$typetitle,$confhash{'defaultquota'}{$type}).' ';
}
- $resulttext .= ''.&mt('[_1] set to [_2] Mb',$typetitle,$confhash{'defaultquota'}{$type}).' ';
}
+ $resulttext .= ' ';
}
- $resulttext .= ' ';
}
my %newenv;
foreach my $item (@usertools) {
@@ -3618,9 +3451,15 @@ sub modify_quotas {
my $newacc =
&Apache::lonnet::usertools_access($env{'user.name'},
$env{'user.domain'},
- $item,'reload');
- if ($env{'environment.availabletools.'.$item} ne $newacc) {
- $newenv{'environment.availabletools.'.$item} = $newacc;
+ $item,'reload',$context);
+ if ($context eq 'requestcourses') {
+ if ($env{'environment.canrequest.'.$item} ne $newacc) {
+ $newenv{'environment.canrequest.'.$item} = $newacc;
+ }
+ } else {
+ if ($env{'environment.availabletools.'.$item} ne $newacc) {
+ $newenv{'environment.availabletools.'.$item} = $newacc;
+ }
}
$resulttext .= ''.$titles{$item}.'';
foreach my $type (@{$types},'default','_LC_adv') {
@@ -3646,7 +3485,11 @@ sub modify_quotas {
&Apache::lonnet::appenv(\%newenv);
}
} else {
- $resulttext = &mt('No changes made to availability of home pages, blogs, portfolios or default quotas');
+ if ($context eq 'requestcourses') {
+ $resulttext = &mt('No changes made to rights to request creation of courses.');
+ } else {
+ $resulttext = &mt('No changes made to availability of personal information pages, blogs, portfolios or default quotas');
+ }
}
} else {
$resulttext = ''.
@@ -4029,7 +3872,7 @@ sub modify_contacts {
}
my (%others,%to);
my @contacts = ('supportemail','adminemail');
- my @mailings = ('errormail','packagesmail','helpdeskmail');
+ my @mailings = ('errormail','packagesmail','helpdeskmail','lonstatusmail');
foreach my $type (@mailings) {
@{$newsetting{$type}} =
&Apache::loncommon::get_env_multiple('form.'.$type);
@@ -4074,6 +3917,7 @@ sub modify_contacts {
$default{'errormail'} = 'adminemail';
$default{'packagesmail'} = 'adminemail';
$default{'helpdeskmail'} = 'supportemail';
+ $default{'lonstatusmail'} = 'adminemail';
foreach my $item (@contacts) {
if ($to{$item} ne $default{$item}) {
$changes{$item} = 1;
@@ -4156,10 +4000,19 @@ sub modify_usercreation {
$cancreate{$item} = $env{'form.can_createuser_'.$item};
}
}
+ my ($othertitle,$usertypes,$types) =
+ &Apache::loncommon::sorted_inst_types($dom);
+ if (ref($types) eq 'ARRAY') {
+ if (@{$types} > 0) {
+ @{$cancreate{'statustocreate'}} =
+ &Apache::loncommon::get_env_multiple('form.statustocreate');
+ }
+ push(@contexts,'statustocreate');
+ }
if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
foreach my $item (@contexts) {
- if ($item eq 'selfcreate') {
- if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
+ if (($item eq 'selfcreate') || ($item eq 'statustocreate')) {
+ if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) {
if (!grep(/^$curr$/,@{$cancreate{$item}})) {
if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
@@ -4346,6 +4199,26 @@ sub modify_usercreation {
}
$chgtext .= ' ';
}
+ } 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):').'';
+ foreach my $case (@{$cancreate{$type}}) {
+ if ($case eq 'default') {
+ $chgtext .= ''.$othertitle.' ';
+ } else {
+ $chgtext .= ''.$usertypes->{$case}.' ';
+ }
+ }
+ $chgtext .= ' ';
+ }
+ }
+ }
} else {
if ($cancreate{$type} eq 'none') {
$chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.');
@@ -4761,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)) {
@@ -4977,46 +4852,37 @@ 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'});
- if (@currmachines > 0) {
- if (@newmachines > 0) {
- foreach my $item (@currmachines) {
- if (!grep(/^\Q$item\E$/,@newmachines)) {
- $changes{$type}{'machines'} = 1;
+ 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 (@newmachines) {
- if (!grep(/^\Q$item\E$/,@currmachines)) {
- $changes{$type}{'machines'} = 1;
+ foreach my $item (@new) {
+ if (!grep(/^\Q$item\E$/,@current)) {
+ $changes{$type}{$setting} = 1;
last;
}
}
} else {
- $changes{$type}{'machines'} = 1;
+ $changes{$type}{$setting} = 1;
}
- } elsif (@newmachines > 0) {
- $changes{$type}{'machines'} = 1;
+ } elsif (@new > 0) {
+ $changes{$type}{$setting} = 1;
}
}
}
@@ -5027,15 +4893,16 @@ sub modify_serverstatuses {
if ($putresult eq 'ok') {
$resulttext .= &mt('Changes made:').'';
foreach my $type (@pages) {
- if (defined($changes{$type})) {
+ if (ref($changes{$type}) eq 'HASH') {
$resulttext .= ''.$titles->{$type}.'';
- if (defined($changes{$type}{'namedusers'})) {
+ if ($changes{$type}{'namedusers'}) {
if ($newserverstatus{$type}{'namedusers'} eq '') {
$resulttext .= ''.&mt("Access terminated for all specific (named) users").' '."\n";
} else {
$resulttext .= ''.&mt("Access available for the following specified users: ").$newserverstatus{$type}{'namedusers'}.' '."\n";
}
- } elsif (defined($changes{$type}{'machines'})) {
+ }
+ if ($changes{$type}{'machines'}) {
if ($newserverstatus{$type}{'machines'} eq '') {
$resulttext .= ''.&mt("Access terminated for all specific IP addresses").' '."\n";
} else {
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.