version 1.424, 2023/06/01 18:09:59
|
version 1.430, 2023/11/03 01:12:15
|
Line 95 about default quota sizes for portfolio
|
Line 95 about default quota sizes for portfolio
|
institutional affiliation in the domain (e.g., Faculty, Staff, Student etc.), |
institutional affiliation in the domain (e.g., Faculty, Staff, Student etc.), |
but is now also used to manage availability of user tools: |
but is now also used to manage availability of user tools: |
i.e., blogs, aboutme page, and portfolios, and the course request tool, |
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 |
used by course owners to request creation of a course. |
default quota sizes for Authoring Spaces. |
|
|
|
Outputs: 1 |
Outputs: 1 |
|
|
Line 105 $datatable - HTML containing form eleme
|
Line 104 $datatable - HTML containing form eleme
|
In the case of course requests, radio buttons are displayed for each institutional |
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 |
affiliate type (and also default, and _LC_adv) for each of the course types |
(official, unofficial, community, textbook, placement, and lti). |
(official, unofficial, community, textbook, placement, and lti). |
In each case the radio buttons allow the selection of one of four values: |
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). |
0, approval, validate, autolimit=N (where N is blank, or a positive integer). |
which have the following effects: |
which have the following effects: |
Line 223 sub handler {
|
Line 222 sub handler {
|
'coursedefaults','usersessions','loadbalancing', |
'coursedefaults','usersessions','loadbalancing', |
'requestauthor','selfenrollment','inststatus', |
'requestauthor','selfenrollment','inststatus', |
'ltitools','toolsec','ssl','trust','lti','ltisec', |
'ltitools','toolsec','ssl','trust','lti','ltisec', |
'privacy','passwords','proctoring','wafproxy','ipaccess'],$dom); |
'privacy','passwords','proctoring','wafproxy', |
|
'ipaccess','authordefaults'],$dom); |
my %encconfig = |
my %encconfig = |
&Apache::lonnet::get_dom('encconfig',['ltitools','lti','proctoring','linkprot'],$dom,undef,1); |
&Apache::lonnet::get_dom('encconfig',['ltitools','lti','proctoring','linkprot'],$dom,undef,1); |
my ($checked_is_home,$is_home); |
my ($checked_is_home,$is_home); |
Line 236 sub handler {
|
Line 236 sub handler {
|
$is_home = 1; |
$is_home = 1; |
} |
} |
} |
} |
$checked_is_home = 1; |
$checked_is_home = 1; |
foreach my $id (keys(%{$domconfig{'ltitools'}})) { |
foreach my $id (keys(%{$domconfig{'ltitools'}})) { |
if ((ref($domconfig{'ltitools'}{$id}) eq 'HASH') && |
if ((ref($domconfig{'ltitools'}{$id}) eq 'HASH') && |
(ref($encconfig{'ltitools'}{$id}) eq 'HASH')) { |
(ref($encconfig{'ltitools'}{$id}) eq 'HASH')) { |
Line 305 sub handler {
|
Line 305 sub handler {
|
'contacts','privacy','usercreation','selfcreation', |
'contacts','privacy','usercreation','selfcreation', |
'usermodification','scantron','requestcourses','requestauthor', |
'usermodification','scantron','requestcourses','requestauthor', |
'coursecategories','serverstatuses','helpsettings','coursedefaults', |
'coursecategories','serverstatuses','helpsettings','coursedefaults', |
'ltitools','proctoring','selfenrollment','usersessions','ssl', |
'authordefaults','ltitools','proctoring','selfenrollment', |
'trust','lti'); |
'usersessions','ssl','trust','lti'); |
my %existing; |
my %existing; |
if (ref($domconfig{'loadbalancing'}) eq 'HASH') { |
if (ref($domconfig{'loadbalancing'}) eq 'HASH') { |
%existing = %{$domconfig{'loadbalancing'}}; |
%existing = %{$domconfig{'loadbalancing'}}; |
Line 382 sub handler {
|
Line 382 sub handler {
|
modify => \&modify_passwords, |
modify => \&modify_passwords, |
}, |
}, |
'quotas' => |
'quotas' => |
{ text => 'Blogs, personal pages/timezones, webDAV/quotas, portfolio', |
{ text => 'Blogs, personal pages/timezones, portfolio/quotas', |
help => 'Domain_Configuration_Quotas', |
help => 'Domain_Configuration_Quotas', |
header => [{col1 => 'User affiliation', |
header => [{col1 => 'User affiliation', |
col2 => 'Available tools', |
col2 => 'Available tools', |
col3 => 'Quotas, MB; (Authoring requires role)',}], |
col3 => 'Portfilo quota (MB)',}], |
print => \&print_quotas, |
print => \&print_quotas, |
modify => \&modify_quotas, |
modify => \&modify_quotas, |
}, |
}, |
Line 568 sub handler {
|
Line 568 sub handler {
|
modify => \&modify_selfenrollment, |
modify => \&modify_selfenrollment, |
}, |
}, |
'privacy' => |
'privacy' => |
{text => 'Availability of User Information', |
{text => 'Role assignments and user privacy', |
help => 'Domain_Configuration_User_Privacy', |
help => 'Domain_Configuration_User_Privacy', |
header => [{col1 => 'Role assigned in different domain', |
header => [{col1 => 'Role assigned in different domain', |
col2 => 'Approval options'}, |
col2 => 'Approval options'}, |
Line 604 sub handler {
|
Line 604 sub handler {
|
print => \&print_loadbalancing, |
print => \&print_loadbalancing, |
modify => \&modify_loadbalancing, |
modify => \&modify_loadbalancing, |
}, |
}, |
'ltitools' => |
'ltitools' => |
{text => 'External Tools (LTI)', |
{text => 'External Tools (LTI)', |
help => 'Domain_Configuration_LTI_Tools', |
help => 'Domain_Configuration_LTI_Tools', |
header => [{col1 => 'Encryption of shared secrets', |
header => [{col1 => 'Encryption of shared secrets', |
Line 662 sub handler {
|
Line 662 sub handler {
|
print => \&print_trust, |
print => \&print_trust, |
modify => \&modify_trust, |
modify => \&modify_trust, |
}, |
}, |
'lti' => |
'lti' => |
{text => 'LTI Link Protection and LTI Consumers', |
{text => 'LTI Link Protection and LTI Consumers', |
help => 'Domain_Configuration_LTI_Provider', |
help => 'Domain_Configuration_LTI_Provider', |
header => [{col1 => 'Encryption of shared secrets', |
header => [{col1 => 'Encryption of shared secrets', |
col2 => 'Settings'}, |
col2 => 'Settings'}, |
{col1 => 'Rules for shared secrets', |
{col1 => 'Rules for shared secrets', |
col2 => 'Settings'}, |
col2 => 'Settings'}, |
{col1 => 'Link Protectors', |
{col1 => 'Link Protectors', |
col2 => 'Settings'}, |
col2 => 'Settings'}, |
Line 676 sub handler {
|
Line 676 sub handler {
|
print => \&print_lti, |
print => \&print_lti, |
modify => \&modify_lti, |
modify => \&modify_lti, |
}, |
}, |
'ipaccess' => |
'ipaccess' => |
{text => 'IP-based access control', |
{text => 'IP-based access control', |
help => 'Domain_Configuration_IP_Access', |
help => 'Domain_Configuration_IP_Access', |
header => [{col1 => 'Setting', |
header => [{col1 => 'Setting', |
Line 684 sub handler {
|
Line 684 sub handler {
|
print => \&print_ipaccess, |
print => \&print_ipaccess, |
modify => \&modify_ipaccess, |
modify => \&modify_ipaccess, |
}, |
}, |
|
'authordefaults' => |
|
{text => 'Authoring Space defaults', |
|
help => 'Domain_Configuration_Author_Defaults', |
|
header => [{col1 => 'Defaults which can be overridden by Author', |
|
col2 => 'Settings',}, |
|
{col1 => 'Defaults which can be overridden by a Dom. Coord.', |
|
col2 => 'Settings',},], |
|
print => \&print_authordefaults, |
|
modify => \&modify_authordefaults, |
|
}, |
); |
); |
if (keys(%servers) > 1) { |
if (keys(%servers) > 1) { |
$prefs{'login'} = { text => 'Log-in page options', |
$prefs{'login'} = { text => 'Log-in page options', |
Line 882 sub process_changes {
|
Line 892 sub process_changes {
|
} elsif ($action eq 'lti') { |
} elsif ($action eq 'lti') { |
$output = &modify_lti($r,$dom,$action,$lastactref,%domconfig); |
$output = &modify_lti($r,$dom,$action,$lastactref,%domconfig); |
} elsif ($action eq 'privacy') { |
} elsif ($action eq 'privacy') { |
$output = &modify_privacy($dom,%domconfig); |
$output = &modify_privacy($dom,$lastactref,%domconfig); |
} elsif ($action eq 'passwords') { |
} elsif ($action eq 'passwords') { |
$output = &modify_passwords($r,$dom,$confname,$lastactref,%domconfig); |
$output = &modify_passwords($r,$dom,$confname,$lastactref,%domconfig); |
} elsif ($action eq 'wafproxy') { |
} elsif ($action eq 'wafproxy') { |
$output = &modify_wafproxy($dom,$action,$lastactref,%domconfig); |
$output = &modify_wafproxy($dom,$action,$lastactref,%domconfig); |
} elsif ($action eq 'ipaccess') { |
} elsif ($action eq 'ipaccess') { |
$output = &modify_ipaccess($dom,$lastactref,%domconfig); |
$output = &modify_ipaccess($dom,$lastactref,%domconfig); |
|
} elsif ($action eq 'authordefaults') { |
|
$output = &modify_authordefaults($dom,$lastactref,%domconfig); |
} |
} |
return $output; |
return $output; |
} |
} |
Line 917 sub print_config_box {
|
Line 929 sub print_config_box {
|
&Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); |
&Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent); |
my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); |
my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype); |
$output = |
$output = |
&Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full, |
&Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full, |
\@templateroles); |
\@templateroles); |
} elsif ($action eq 'ltitools') { |
} elsif ($action eq 'ltitools') { |
$output .= &Apache::lonconfigsettings::ltitools_javascript($settings); |
$output .= &Apache::lonconfigsettings::ltitools_javascript($settings); |
Line 936 sub print_config_box {
|
Line 948 sub print_config_box {
|
$output .= &saml_javascript(); |
$output .= &saml_javascript(); |
} elsif ($action eq 'ipaccess') { |
} elsif ($action eq 'ipaccess') { |
$output .= &ipaccess_javascript($settings); |
$output .= &ipaccess_javascript($settings); |
|
} elsif ($action eq 'authordefaults') { |
|
$output .= &authordefaults_javascript(); |
} |
} |
$output .= |
$output .= |
'<table class="LC_nested_outer"> |
'<table class="LC_nested_outer"> |
Line 978 sub print_config_box {
|
Line 992 sub print_config_box {
|
($action eq 'selfenrollment') || ($action eq 'usersessions') || ($action eq 'ssl') || |
($action eq 'selfenrollment') || ($action eq 'usersessions') || ($action eq 'ssl') || |
($action eq 'directorysrch') || ($action eq 'trust') || ($action eq 'helpsettings') || |
($action eq 'directorysrch') || ($action eq 'trust') || ($action eq 'helpsettings') || |
($action eq 'contacts') || ($action eq 'privacy') || ($action eq 'wafproxy') || |
($action eq 'contacts') || ($action eq 'privacy') || ($action eq 'wafproxy') || |
($action eq 'lti') || ($action eq 'ltitools')) { |
($action eq 'lti') || ($action eq 'ltitools') || ($action eq 'authordefaults')) { |
$output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); |
$output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal); |
} elsif ($action eq 'passwords') { |
} elsif ($action eq 'passwords') { |
$output .= $item->{'print'}->('top',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->('top',$dom,$confname,$settings,\$rowtotal); |
Line 1103 sub print_config_box {
|
Line 1117 sub print_config_box {
|
$rowtotal ++; |
$rowtotal ++; |
} elsif (($action eq 'usermodification') || ($action eq 'coursedefaults') || |
} elsif (($action eq 'usermodification') || ($action eq 'coursedefaults') || |
($action eq 'directorysrch') || ($action eq 'helpsettings') || |
($action eq 'directorysrch') || ($action eq 'helpsettings') || |
($action eq 'wafproxy')) { |
($action eq 'wafproxy') || ($action eq 'authordefaults')) { |
$output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); |
$output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal); |
} elsif ($action eq 'scantron') { |
} elsif ($action eq 'scantron') { |
$output .= $item->{'print'}->($r,'bottom',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->($r,'bottom',$dom,$confname,$settings,\$rowtotal); |
Line 2397 sub print_quotas {
|
Line 2411 sub print_quotas {
|
} else { |
} else { |
$context = $action; |
$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 ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
my $typecount = 0; |
my $typecount = 0; |
my ($css_class,%titles); |
my ($css_class,%titles); |
Line 2411 sub print_quotas {
|
Line 2425 sub print_quotas {
|
@options = ('norequest','approval','automatic'); |
@options = ('norequest','approval','automatic'); |
%titles = &authorrequest_titles(); |
%titles = &authorrequest_titles(); |
} else { |
} else { |
@usertools = ('aboutme','blog','webdav','portfolio','timezone'); |
@usertools = ('aboutme','blog','portfolio','portaccess','timezone'); |
%titles = &tool_titles(); |
%titles = &tool_titles(); |
} |
} |
if (ref($types) eq 'ARRAY') { |
if (ref($types) eq 'ARRAY') { |
foreach my $type (@{$types}) { |
foreach my $type (@{$types}) { |
my ($currdefquota,$currauthorquota); |
my $currdefquota; |
unless (($context eq 'requestcourses') || |
unless (($context eq 'requestcourses') || |
($context eq 'requestauthor')) { |
($context eq 'requestauthor')) { |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
Line 2425 sub print_quotas {
|
Line 2439 sub print_quotas {
|
} else { |
} else { |
$currdefquota = $settings->{$type}; |
$currdefquota = $settings->{$type}; |
} |
} |
if (ref($settings->{authorquota}) eq 'HASH') { |
|
$currauthorquota = $settings->{authorquota}->{$type}; |
|
} |
|
} |
} |
} |
} |
if (defined($usertypes->{$type})) { |
if (defined($usertypes->{$type})) { |
Line 2545 sub print_quotas {
|
Line 2556 sub print_quotas {
|
($context eq 'requestauthor')) { |
($context eq 'requestauthor')) { |
$datatable .= |
$datatable .= |
'<td class="LC_right_item">'. |
'<td class="LC_right_item">'. |
'<span class="LC_nobreak">'.&mt('Portfolio').': '. |
'<span class="LC_nobreak">'. |
'<input type="text" name="quota_'.$type. |
'<input type="text" name="quota_'.$type. |
'" value="'.$currdefquota. |
'" value="'.$currdefquota. |
'" size="5" /></span>'.(' ' x 2). |
|
'<span class="LC_nobreak">'.&mt('Authoring').': '. |
|
'<input type="text" name="authorquota_'.$type. |
|
'" value="'.$currauthorquota. |
|
'" size="5" /></span></td>'; |
'" size="5" /></span></td>'; |
} |
} |
$datatable .= '</tr>'; |
$datatable .= '</tr>'; |
Line 2560 sub print_quotas {
|
Line 2567 sub print_quotas {
|
} |
} |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
$defaultquota = '20'; |
$defaultquota = '20'; |
$authorquota = '500'; |
|
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if (ref($settings->{'defaultquota'}) eq 'HASH') { |
if (ref($settings->{'defaultquota'}) eq 'HASH') { |
$defaultquota = $settings->{'defaultquota'}->{'default'}; |
$defaultquota = $settings->{'defaultquota'}->{'default'}; |
} elsif (defined($settings->{'default'})) { |
} elsif (defined($settings->{'default'})) { |
$defaultquota = $settings->{'default'}; |
$defaultquota = $settings->{'default'}; |
} |
} |
if (ref($settings->{'authorquota'}) eq 'HASH') { |
|
$authorquota = $settings->{'authorquota'}->{'default'}; |
|
} |
|
} |
} |
} |
} |
$typecount ++; |
$typecount ++; |
Line 2681 sub print_quotas {
|
Line 2684 sub print_quotas {
|
$datatable .= '</td>'; |
$datatable .= '</td>'; |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
unless (($context eq 'requestcourses') || ($context eq 'requestauthor')) { |
$datatable .= '<td class="LC_right_item">'. |
$datatable .= '<td class="LC_right_item">'. |
'<span class="LC_nobreak">'.&mt('Portfolio').': '. |
'<span class="LC_nobreak">'. |
'<input type="text" name="defaultquota" value="'. |
'<input type="text" name="defaultquota" value="'. |
$defaultquota.'" size="5" /></span>'.(' ' x2). |
$defaultquota.'" size="5" /></span></td>'; |
'<span class="LC_nobreak">'.&mt('Authoring').': '. |
|
'<input type="text" name="authorquota" value="'. |
|
$authorquota.'" size="5" /></span></td>'; |
|
} |
} |
$datatable .= '</tr>'; |
$datatable .= '</tr>'; |
$typecount ++; |
$typecount ++; |
Line 3553 sub lti_toggle_js {
|
Line 3553 sub lti_toggle_js {
|
my %servers = &Apache::lonnet::get_servers($dom,'library'); |
my %servers = &Apache::lonnet::get_servers($dom,'library'); |
my $primary = &Apache::lonnet::domain($dom,'primary'); |
my $primary = &Apache::lonnet::domain($dom,'primary'); |
my $course_servers = "'".join("','",keys(%servers))."'"; |
my $course_servers = "'".join("','",keys(%servers))."'"; |
|
|
return <<"ENDSCRIPT"; |
return <<"ENDSCRIPT"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
Line 3652 function toggleLTI(form,setting,item) {
|
Line 3651 function toggleLTI(form,setting,item) {
|
break; |
break; |
} |
} |
} |
} |
} |
} |
} |
} |
if (!setvis) { |
if (!setvis) { |
if (document.getElementById(divid)) { |
if (document.getElementById(divid)) { |
Line 3729 function toggleLTI(form,setting,item) {
|
Line 3728 function toggleLTI(form,setting,item) {
|
var divid = 'lti_menufield_'+item; |
var divid = 'lti_menufield_'+item; |
var setvis = ''; |
var setvis = ''; |
for (var i=0; i<menus.length; i++) { |
for (var i=0; i<menus.length; i++) { |
var radioname = menus[i]; |
var radioname = menus[i]; |
var num = form.elements[radioname].length; |
var num = form.elements[radioname].length; |
if (num) { |
if (num) { |
for (var j=0; j<num; j++) { |
for (var j=0; j<num; j++) { |
Line 3837 sub saml_javascript {
|
Line 3836 sub saml_javascript {
|
return <<"ENDSCRIPT"; |
return <<"ENDSCRIPT"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
function toggleSamlOptions(form,hostid) { |
function toggleSamlOptions(form,hostid) { |
var radioname = 'saml_'+hostid; |
var radioname = 'saml_'+hostid; |
var tablecellon = 'samloptionson_'+hostid; |
var tablecellon = 'samloptionson_'+hostid; |
var tablecelloff = 'samloptionsoff_'+hostid; |
var tablecelloff = 'samloptionsoff_'+hostid; |
var num = form.elements[radioname].length; |
var num = form.elements[radioname].length; |
if (num) { |
if (num) { |
var setvis = ''; |
var setvis = ''; |
for (var i=0; i<num; i++) { |
for (var i=0; i<num; i++) { |
if (form.elements[radioname][i].checked) { |
if (form.elements[radioname][i].checked) { |
if (form.elements[radioname][i].value == '1') { |
if (form.elements[radioname][i].value == '1') { |
if (document.getElementById(tablecellon)) { |
if (document.getElementById(tablecellon)) { |
document.getElementById(tablecellon).style.display=''; |
document.getElementById(tablecellon).style.display=''; |
} |
} |
Line 3943 $jstext
|
Line 3942 $jstext
|
ENDSCRIPT |
ENDSCRIPT |
} |
} |
|
|
|
sub authordefaults_javascript { |
|
my %alert = &Apache::lonlocal::texthash ( |
|
reqd => 'Warning: at least one editor needs to be available.', |
|
rest => 'Unchecking this editor disallowed while others unchecked.', |
|
); |
|
&js_escape(\%alert); |
|
return <<"ENDSCRIPT"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
|
|
function checkEditors(form,checkbox,current) { |
|
if (form.elements[checkbox].length != undefined) { |
|
var count = 0; |
|
for (var i=0; i<form.elements[checkbox].length; i++) { |
|
if (form.elements[checkbox][i].checked) { |
|
count ++; |
|
} |
|
} |
|
if (count == 0) { |
|
if (current.type =='radio') { |
|
current.checked = true; |
|
alert('$alert{reqd}\\n$alert{rest}'); |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
// ]]> |
|
</script> |
|
|
|
ENDSCRIPT |
|
} |
|
|
sub print_autoenroll { |
sub print_autoenroll { |
my ($dom,$settings,$rowtotal) = @_; |
my ($dom,$settings,$rowtotal) = @_; |
my $autorun = &Apache::lonnet::auto_run(undef,$dom), |
my $autorun = &Apache::lonnet::auto_run(undef,$dom), |
Line 4614 sub print_contacts {
|
Line 4646 sub print_contacts {
|
map {$excluded{$_} = 1; } @{$lonstatus{'excluded'}}; |
map {$excluded{$_} = 1; } @{$lonstatus{'excluded'}}; |
} |
} |
} |
} |
foreach my $item ('errorthreshold','errorsysmail') { |
foreach my $item ('errorthreshold','errorsysmail') { |
$css_class = $rownum%2?' class="LC_odd_row"':''; |
$css_class = $rownum%2?' class="LC_odd_row"':''; |
$datatable .= '<tr'.$css_class.'>'. |
$datatable .= '<tr'.$css_class.'>'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
'<td class="LC_left_item"><span class="LC_nobreak">'. |
Line 4696 sub print_contacts {
|
Line 4728 sub print_contacts {
|
$includeloc{'override_'.$key} = ''; |
$includeloc{'override_'.$key} = ''; |
$includestr{'override_'.$key} = ''; |
$includestr{'override_'.$key} = ''; |
if ($settings->{'overrides'}{$key}{'include'} ne '') { |
if ($settings->{'overrides'}{$key}{'include'} ne '') { |
($includeloc{'override_'.$key},$includestr{'override_'.$key}) = |
($includeloc{'override_'.$key},$includestr{'override_'.$key}) = |
split(/:/,$settings->{'overrides'}{$key}{'include'},2); |
split(/:/,$settings->{'overrides'}{$key}{'include'},2); |
$includestr{'override_'.$key} = &unescape($includestr{'override_'.$key}); |
$includestr{'override_'.$key} = &unescape($includestr{'override_'.$key}); |
} |
} |
Line 4708 sub print_contacts {
|
Line 4740 sub print_contacts {
|
my $optionsprefix = 'LC_options_helpdesk_'; |
my $optionsprefix = 'LC_options_helpdesk_'; |
|
|
my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');"; |
my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');"; |
|
|
$datatable .= &insttypes_row($settings,$types,$usertypes,$dom, |
$datatable .= &insttypes_row($settings,$types,$usertypes,$dom, |
$numinrow,$othertitle,'overrides', |
$numinrow,$othertitle,'overrides', |
\$rownum,$onclicktypes,$customclass); |
\$rownum,$onclicktypes,$customclass); |
Line 4775 sub overridden_helpdesk {
|
Line 4806 sub overridden_helpdesk {
|
} |
} |
my $title; |
my $title; |
if (ref($short_titles) eq 'HASH') { |
if (ref($short_titles) eq 'HASH') { |
$title = $short_titles->{$item}; |
$title = $short_titles->{$item}; |
} |
} |
$output .= '<label>'. |
$output .= '<label>'. |
'<input type="checkbox" name="override_'.$type.'"'.$check. |
'<input type="checkbox" name="override_'.$type.'"'.$check. |
Line 4854 function toggleHelpdeskRow(form,checkbox
|
Line 4885 function toggleHelpdeskRow(form,checkbox
|
return; |
return; |
} |
} |
|
|
|
|
// ]]> |
// ]]> |
</script> |
</script> |
|
|
Line 5365 sub ltitools_names {
|
Line 5395 sub ltitools_names {
|
'key' => 'Key', |
'key' => 'Key', |
'lifetime' => 'Nonce lifetime (s)', |
'lifetime' => 'Nonce lifetime (s)', |
'secret' => 'Secret', |
'secret' => 'Secret', |
'icon' => 'Icon', |
'icon' => 'Icon', |
'user' => 'User', |
'user' => 'User', |
'fullname' => 'Full Name', |
'fullname' => 'Full Name', |
'firstname' => 'First Name', |
'firstname' => 'First Name', |
Line 5383 sub ltitools_names {
|
Line 5413 sub ltitools_names {
|
'roster' => 'Tool can retrieve roster:', |
'roster' => 'Tool can retrieve roster:', |
'crstarget' => 'Display target', |
'crstarget' => 'Display target', |
'crslabel' => 'Course label', |
'crslabel' => 'Course label', |
'crstitle' => 'Course title', |
'crstitle' => 'Course title', |
'crslinktext' => 'Link Text', |
'crslinktext' => 'Link Text', |
'crsexplanation' => 'Explanation', |
'crsexplanation' => 'Explanation', |
'crsappend' => 'Provider URL', |
'crsappend' => 'Provider URL', |
Line 6323 sub print_lti {
|
Line 6353 sub print_lti {
|
'<label><input type="checkbox" name="lti_visible_'.$i.'" id="lti_visible_'.$i.'" onclick="if (this.checked) { this.form.lti_secret_'.$i.'.type='."'text'".' } else { this.form.lti_secret_'.$i.'.type='."'password'".' }" />'.&mt('Visible input').'</label>'; |
'<label><input type="checkbox" name="lti_visible_'.$i.'" id="lti_visible_'.$i.'" onclick="if (this.checked) { this.form.lti_secret_'.$i.'.type='."'text'".' } else { this.form.lti_secret_'.$i.'.type='."'password'".' }" />'.&mt('Visible input').'</label>'; |
} |
} |
} |
} |
$datatable .= '<br /><br />'. |
$datatable .= '<br /><br />'. |
'<span class="LC_nobreak">'.$lt{'requser'}.':'. |
'<span class="LC_nobreak">'.$lt{'requser'}.':'. |
'<label><input type="radio" name="lti_requser_'.$i.'" value="1"'.$onclickrequser.$checkedrequser{yes}.' />'.&mt('Yes').'</label> '."\n". |
'<label><input type="radio" name="lti_requser_'.$i.'" value="1"'.$onclickrequser.$checkedrequser{yes}.' />'.&mt('Yes').'</label> '."\n". |
'<label><input type="radio" name="lti_requser_'.$i.'" value="0"'.$onclickrequser.$checkedrequser{no}.' />'.&mt('No').'</label></span>'."\n". |
'<label><input type="radio" name="lti_requser_'.$i.'" value="0"'.$onclickrequser.$checkedrequser{no}.' />'.&mt('No').'</label></span>'."\n". |
Line 6449 sub lti_options {
|
Line 6479 sub lti_options {
|
if (($current->{'mapuser'} ne '') && ($current->{'mapuser'} ne 'lis_person_sourcedid')) { |
if (($current->{'mapuser'} ne '') && ($current->{'mapuser'} ne 'lis_person_sourcedid')) { |
$checked{'mapuser'}{'sourcedid'} = ''; |
$checked{'mapuser'}{'sourcedid'} = ''; |
if ($current->{'mapuser'} eq 'lis_person_contact_email_primary') { |
if ($current->{'mapuser'} eq 'lis_person_contact_email_primary') { |
$checked{'mapuser'}{'email'} = ' checked="checked"'; |
$checked{'mapuser'}{'email'} = ' checked="checked"'; |
} else { |
} else { |
$checked{'mapuser'}{'other'} = ' checked="checked"'; |
$checked{'mapuser'}{'other'} = ' checked="checked"'; |
$userfield = $current->{'mapuser'}; |
$userfield = $current->{'mapuser'}; |
Line 6459 sub lti_options {
|
Line 6489 sub lti_options {
|
if (($current->{'mapcrs'} ne '') && ($current->{'mapcrs'} ne 'course_offering_sourcedid')) { |
if (($current->{'mapcrs'} ne '') && ($current->{'mapcrs'} ne 'course_offering_sourcedid')) { |
$checked{'mapcrs'}{'course_offering_sourcedid'} = ''; |
$checked{'mapcrs'}{'course_offering_sourcedid'} = ''; |
if ($current->{'mapcrs'} eq 'context_id') { |
if ($current->{'mapcrs'} eq 'context_id') { |
$checked{'mapcrs'}{'context_id'} = ' checked="checked"'; |
$checked{'mapcrs'}{'context_id'} = ' checked="checked"'; |
} else { |
} else { |
$checked{'mapcrs'}{'other'} = ' checked="checked"'; |
$checked{'mapcrs'}{'other'} = ' checked="checked"'; |
$cidfield = $current->{'mapcrs'}; |
$cidfield = $current->{'mapcrs'}; |
Line 6487 sub lti_options {
|
Line 6517 sub lti_options {
|
$checked{'lcauth'}{$1} = ' checked="checked"'; |
$checked{'lcauth'}{$1} = ' checked="checked"'; |
unless (($current->{'lcauth'} eq 'lti') || ($current->{'lcauth'} eq 'internal')) { |
unless (($current->{'lcauth'} eq 'lti') || ($current->{'lcauth'} eq 'internal')) { |
$lcauthparm = $current->{'lcauthparm'}; |
$lcauthparm = $current->{'lcauthparm'}; |
$lcauthparmstyle = 'display:table-row'; |
$lcauthparmstyle = 'display:table-row'; |
if ($current->{'lcauth'} eq 'localauth') { |
if ($current->{'lcauth'} eq 'localauth') { |
$lcauthparmtext = &mt('Local auth argument'); |
$lcauthparmtext = &mt('Local auth argument'); |
} else { |
} else { |
Line 6504 sub lti_options {
|
Line 6534 sub lti_options {
|
%rolemaps = %{$current->{'maproles'}}; |
%rolemaps = %{$current->{'maproles'}}; |
} |
} |
if ($current->{'section'} ne '') { |
if ($current->{'section'} ne '') { |
$checked{'crssec'}{'Y'} = ' checked="checked"'; |
$checked{'crssec'}{'Y'} = ' checked="checked"'; |
$crssecfieldsty = 'inline-block'; |
$crssecfieldsty = 'inline-block'; |
if ($current->{'section'} eq 'course_section_sourcedid') { |
if ($current->{'section'} eq 'course_section_sourcedid') { |
$checked{'crssecsrc'}{'sourcedid'} = ' checked="checked"'; |
$checked{'crssecsrc'}{'sourcedid'} = ' checked="checked"'; |
Line 6550 sub lti_options {
|
Line 6580 sub lti_options {
|
$checked{'crssec'}{'N'} = ' checked="checked"'; |
$checked{'crssec'}{'N'} = ' checked="checked"'; |
$checked{'callback'}{'N'} = ' checked="checked"'; |
$checked{'callback'}{'N'} = ' checked="checked"'; |
$checked{'topmenu'}{'N'} = ' checked="checked"'; |
$checked{'topmenu'}{'N'} = ' checked="checked"'; |
$checked{'inlinemenu'}{'Y'} = ' checked="checked"'; |
$checked{'inlinemenu'}{'Y'} = ' checked="checked"'; |
$checked{'menuitem'}{'grades'} = ' checked="checked"'; |
$checked{'menuitem'}{'grades'} = ' checked="checked"'; |
$menusty = 'inline-block'; |
$menusty = 'inline-block'; |
} |
} |
my @coursetypes = ('official','unofficial','community','textbook','placement','lti'); |
my @coursetypes = ('official','unofficial','community','textbook','placement','lti'); |
my %coursetypetitles = &Apache::lonlocal::texthash ( |
my %coursetypetitles = &Apache::lonlocal::texthash ( |
Line 6605 sub lti_options {
|
Line 6635 sub lti_options {
|
'<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may create user accounts').'</legend>'; |
'<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may create user accounts').'</legend>'; |
foreach my $ltirole (@ltiroles) { |
foreach my $ltirole (@ltiroles) { |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="lti_makeuser_'.$num.'" value="'.$ltirole.'"'. |
$output .= '<span class="LC_nobreak"><label><input type="checkbox" name="lti_makeuser_'.$num.'" value="'.$ltirole.'"'. |
$checked{'makeuser'}{$ltirole}.' />'.$ltirole.'</label> </span> '; |
$checked{'makeuser'}{$ltirole}.' />'.$ltirole.'</label> </span> '; |
} |
} |
$output .= '</fieldset>'. |
$output .= '</fieldset>'. |
'<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('New user accounts created for LTI users').'</legend>'. |
'<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('New user accounts created for LTI users').'</legend>'. |
Line 6737 sub lti_options {
|
Line 6767 sub lti_options {
|
if ($extra eq 'passback') { |
if ($extra eq 'passback') { |
$pb1p1chk = ' checked="checked"'; |
$pb1p1chk = ' checked="checked"'; |
$pb1p0chk = ''; |
$pb1p0chk = ''; |
$onclickpb = ' onclick="toggleLTI(this.form,'."'passback','$num'".');"'; |
$onclickpb = ' onclick="toggleLTI(this.form,'."'passback','$num'".');"'; |
} else { |
} else { |
$onclickpb = ''; |
$onclickpb = ''; |
} |
} |
if (ref($current) eq 'HASH') { |
if (ref($current) eq 'HASH') { |
if (($current->{$extra})) { |
if (($current->{$extra})) { |
Line 6785 sub ltimenu_titles {
|
Line 6815 sub ltimenu_titles {
|
); |
); |
} |
} |
|
|
sub check_switchserver { |
|
my ($home) = @_; |
|
my $switchserver; |
|
if ($home ne '') { |
|
my $allowed; |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
|
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
|
if (!$allowed) { |
|
$switchserver='<a href="/adm/switchserver?otherserver='.$home.'&role='. |
|
&HTML::Entities::encode($env{'request.role'},'\'<>"&'). |
|
'&destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>'; |
|
} |
|
} |
|
return $switchserver; |
|
} |
|
|
|
sub print_coursedefaults { |
sub print_coursedefaults { |
my ($position,$dom,$settings,$rowtotal) = @_; |
my ($position,$dom,$settings,$rowtotal) = @_; |
my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles); |
my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles); |
Line 6808 sub print_coursedefaults {
|
Line 6822 sub print_coursedefaults {
|
my %choices = &Apache::lonlocal::texthash ( |
my %choices = &Apache::lonlocal::texthash ( |
canuse_pdfforms => 'Course/Community users can create/upload PDF forms', |
canuse_pdfforms => 'Course/Community users can create/upload PDF forms', |
uploadquota => 'Default quota for files uploaded directly to course/community using Course Editor (MB)', |
uploadquota => 'Default quota for files uploaded directly to course/community using Course Editor (MB)', |
|
coursequota => 'Default cumulative quota for all group portfolio spaces in course', |
anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', |
anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys', |
coursecredits => 'Credits can be specified for courses', |
coursecredits => 'Credits can be specified for courses', |
uselcmath => 'Math preview uses LON-CAPA previewer (javascript) in place of DragMath (Java)', |
uselcmath => 'Math preview uses LON-CAPA previewer (javascript) in place of DragMath (Java)', |
Line 6824 sub print_coursedefaults {
|
Line 6839 sub print_coursedefaults {
|
my %staticdefaults = ( |
my %staticdefaults = ( |
anonsurvey_threshold => 10, |
anonsurvey_threshold => 10, |
uploadquota => 500, |
uploadquota => 500, |
|
coursequota => 20, |
postsubmit => 60, |
postsubmit => 60, |
mysqltables => 172800, |
mysqltables => 172800, |
domexttool => 1, |
domexttool => 1, |
Line 6941 sub print_coursedefaults {
|
Line 6957 sub print_coursedefaults {
|
$itemcount ++; |
$itemcount ++; |
} else { |
} else { |
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; |
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; |
my ($currdefresponder,%defcredits,%curruploadquota,%deftimeout,%currmysql); |
my ($currdefresponder,%defcredits,%curruploadquota,%currcoursequota, |
|
%deftimeout,%currmysql); |
my $currusecredits = 0; |
my $currusecredits = 0; |
my $postsubmitclient = 1; |
my $postsubmitclient = 1; |
my $ltiauth = 0; |
my $ltiauth = 0; |
Line 6978 sub print_coursedefaults {
|
Line 6995 sub print_coursedefaults {
|
$curruploadquota{$type} = $settings->{'uploadquota'}{$type}; |
$curruploadquota{$type} = $settings->{'uploadquota'}{$type}; |
} |
} |
} |
} |
|
if (ref($settings->{'coursequota'}) eq 'HASH') { |
|
foreach my $type (keys(%{$settings->{'coursequota'}})) { |
|
$currcoursequota{$type} = $settings->{'coursequota'}{$type}; |
|
} |
|
} |
if (ref($settings->{'coursecredits'}) eq 'HASH') { |
if (ref($settings->{'coursecredits'}) eq 'HASH') { |
foreach my $type (@types) { |
foreach my $type (@types) { |
next if ($type eq 'community'); |
next if ($type eq 'community'); |
Line 7037 sub print_coursedefaults {
|
Line 7059 sub print_coursedefaults {
|
if ($curruploadquota{$type} eq '') { |
if ($curruploadquota{$type} eq '') { |
$curruploadquota{$type} = $staticdefaults{'uploadquota'}; |
$curruploadquota{$type} = $staticdefaults{'uploadquota'}; |
} |
} |
|
if ($currcoursequota{$type} eq '') { |
|
$currcoursequota{$type} = $staticdefaults{'coursequota'}; |
|
} |
} |
} |
$datatable .= |
$datatable .= |
'<tr'.$css_class.'><td><span class="LC_nobreak">'. |
'<tr'.$css_class.'><td><span class="LC_nobreak">'. |
Line 7060 sub print_coursedefaults {
|
Line 7085 sub print_coursedefaults {
|
} |
} |
$datatable .= '</tr></table></td></tr>'."\n"; |
$datatable .= '</tr></table></td></tr>'."\n"; |
$itemcount ++; |
$itemcount ++; |
|
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; |
|
$datatable .= '<tr'.$css_class.'><td><span class="LC_nobreak">'. |
|
$choices{'coursequota'}. |
|
'</span></td>'. |
|
'<td style="text-align: right" class="LC_right_item">'. |
|
'<table><tr>'; |
|
foreach my $type (@types) { |
|
$datatable .= '<td style="text-align: center">'.&mt($type).'<br />'. |
|
'<input type="text" name="coursequota_'.$type.'"'. |
|
' value="'.$currcoursequota{$type}.'" size="5" /></td>'; |
|
} |
|
$datatable .= '</tr></table></td></tr>'."\n"; |
|
$itemcount ++; |
my $onclick = "toggleDisplay(this.form,'credits');"; |
my $onclick = "toggleDisplay(this.form,'credits');"; |
my $display = 'none'; |
my $display = 'none'; |
if ($currusecredits) { |
if ($currusecredits) { |
Line 7163 sub print_coursedefaults {
|
Line 7201 sub print_coursedefaults {
|
return $datatable; |
return $datatable; |
} |
} |
|
|
|
sub print_authordefaults { |
|
my ($position,$dom,$settings,$rowtotal) = @_; |
|
my ($css_class,$datatable,%checkedon,%checkedoff); |
|
my $itemcount = 1; |
|
my %titles = &authordefaults_titles(); |
|
if ($position eq 'top') { |
|
my %defaultchecked = ( |
|
'nocodemirror' => 'off', |
|
'domcoordacc' => 'on', |
|
); |
|
my @toggles = ('nocodemirror','domcoordacc'); |
|
($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, |
|
\%titles,$itemcount); |
|
my %staticdefaults = ( |
|
'copyright' => 'default', |
|
'sourceavail' => 'closed', |
|
); |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
my %currrights; |
|
foreach my $item ('copyright','sourceavail') { |
|
$currrights{$item} = $staticdefaults{$item}; |
|
if (ref($settings) eq 'HASH') { |
|
if (exists($settings->{$item})) { |
|
$currrights{$item} = $settings->{$item}; |
|
} |
|
} |
|
} |
|
$datatable .= '<tr'.$css_class.'><td style="vertical-align: top">'. |
|
'<span class="LC_nobreak">'.$titles{'copyright'}. |
|
'</span></td><td class="LC_right_item">'. |
|
&selectbox('copyright',$currrights{'copyright'},'', |
|
\&Apache::loncommon::copyrightdescription, |
|
(grep !/^priv|custom$/,(&Apache::loncommon::copyrightids))). |
|
'</td></tr>'."\n"; |
|
$itemcount ++; |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= '<tr'.$css_class.'><td style="vertical-align: top">'. |
|
'<span class="LC_nobreak">'.$titles{'sourceavail'}. |
|
'</span></td><td class="LC_right_item">'. |
|
&selectbox('sourceavail',$currrights{'sourceavail'},'', |
|
\&Apache::loncommon::source_copyrightdescription, |
|
(&Apache::loncommon::source_copyrightids)). |
|
'</td></tr>'."\n"; |
|
} else { |
|
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : ''; |
|
my $curreditors; |
|
my %staticdefaults = ( |
|
editors => ['edit','xml'], |
|
authorquota => 500, |
|
webdav => 0, |
|
); |
|
my $curreditors = $staticdefaults{'editors'}; |
|
if ((ref($settings) eq 'HASH') && |
|
(ref($settings->{'editors'}) eq 'ARRAY')) { |
|
$curreditors = $settings->{'editors'}; |
|
} else { |
|
$curreditors = $staticdefaults{'editors'}; |
|
} |
|
my @editors = ('edit','xml','daxe'); |
|
$datatable = '<tr'.$css_class.'>'."\n". |
|
'<td>'.$titles{'editors'}.'</td>'."\n". |
|
'<td class="LC_left_item">'."\n". |
|
'<span class="LC_nobreak">'; |
|
foreach my $editor (@editors) { |
|
my $checked; |
|
if (grep(/^\Q$editor\E$/,@{$curreditors})) { |
|
$checked = ' checked="checked"'; |
|
} |
|
$datatable .= '<label>'. |
|
'<input type="checkbox" name="author_editors" '. |
|
$checked.' value="'.$editor.'" '. |
|
'onclick="javascript:checkEditors(this.form,'."'author_editors'".',this);" />'. |
|
$titles{$editor}.'</label> '; |
|
} |
|
$datatable .= '</span>'."\n".'</td>'."\n".'</tr>'."\n"; |
|
$itemcount ++; |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
|
my @insttypes; |
|
if (ref($types) eq 'ARRAY') { |
|
@insttypes = @{$types}; |
|
} |
|
my $typecount = 0; |
|
my %domconf = &Apache::lonnet::get_dom('configuration',['quotas'],$dom); |
|
my @items = ('webdav','authorquota'); |
|
my %quotas; |
|
if (ref($domconf{'quotas'}) eq 'HASH') { |
|
%quotas = %{$domconf{'quotas'}}; |
|
foreach my $item (@items) { |
|
if (ref($quotas{$item}) eq 'HASH') { |
|
foreach my $type (@insttypes,'default') { |
|
if ($item eq 'authorquota') { |
|
if ($quotas{$item}{$type} !~ /^\d+$/) { |
|
$quotas{$item}{$type} = $staticdefaults{$item}; |
|
} |
|
} elsif ($item eq 'webdav') { |
|
if ($quotas{$item}{$type} !~ /^(0|1)$/) { |
|
$quotas{$item}{$type} = $staticdefaults{$item}; |
|
} |
|
} |
|
} |
|
} else { |
|
foreach my $type (@insttypes,'default') { |
|
$quotas{$item}{$type} = $staticdefaults{$item}; |
|
} |
|
} |
|
} |
|
} else { |
|
foreach my $item (@items) { |
|
foreach my $type (@insttypes,'default') { |
|
$quotas{$item}{$type} = $staticdefaults{$item}; |
|
} |
|
} |
|
} |
|
if (ref($usertypes) eq 'HASH') { |
|
my $numinrow = 4; |
|
my $onclick = ''; |
|
$datatable .= &insttypes_row(\%quotas,$types,$usertypes,$dom, |
|
$numinrow,$othertitle,'authorquota', |
|
\$itemcount,$onclick); |
|
$itemcount ++; |
|
$datatable .= &insttypes_row(\%quotas,$types,$usertypes,$dom, |
|
$numinrow,$othertitle,'webdav', |
|
\$itemcount); |
|
$itemcount ++; |
|
} |
|
my $checkedno = ' checked="checked"'; |
|
my ($checkedon,$checkedoff); |
|
if (ref($quotas{'webdav'}) eq 'HASH') { |
|
if ($quotas{'webdav'}{'_LC_adv'} =~ /^0|1$/) { |
|
if ($quotas{'webdav'}{'_LC_adv'}) { |
|
$checkedon = $checkedno; |
|
} else { |
|
$checkedoff = $checkedno; |
|
} |
|
undef($checkedno); |
|
} |
|
} |
|
$css_class = $itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= '<tr'.$css_class.'>'. |
|
'<td>'.$titles{'webdav_LC_adv'}.'<br />'. |
|
$titles{'webdav_LC_adv_over'}. |
|
'</td>'. |
|
'<td class="LC_left_item">'; |
|
foreach my $option ('none','off','on') { |
|
my ($text,$val,$checked); |
|
if ($option eq 'none') { |
|
$text = $titles{'none'}; |
|
$val = ''; |
|
$checked = $checkedno; |
|
} elsif ($option eq 'off') { |
|
$text = $titles{'overoff'}; |
|
$val = 0; |
|
$checked = $checkedoff; |
|
} elsif ($option eq 'on') { |
|
$text = $titles{'overon'}; |
|
$val = 1; |
|
$checked = $checkedon; |
|
} |
|
$datatable .= '<span class="LC_nobreak"><label>'. |
|
'<input type="radio" name="webdav_LC_adv"'. |
|
' value="'.$val.'"'.$checked.' />'. |
|
$text.'</label></span> '; |
|
} |
|
$datatable .= '</td></tr>'; |
|
$itemcount ++; |
|
} |
|
$$rowtotal += $itemcount; |
|
return $datatable; |
|
} |
|
|
|
sub authordefaults_titles { |
|
return &Apache::lonlocal::texthash( |
|
copyright => 'Copyright/Distribution', |
|
sourceavail => ' Source Available', |
|
editors => 'Available Editors', |
|
webdav => 'WebDAV', |
|
authorquota => 'Authoring Space quotas (MB)', |
|
nocodemirror => 'Deactivate CodeMirror for EditXML editor', |
|
domcoordacc => 'Dom. Coords. can enter Authoring Spaces in domain', |
|
edit => 'Standard editor (Edit)', |
|
xml => 'Text editor (EditXML)', |
|
daxe => 'Daxe editor (Daxe)', |
|
webdav_LC_adv => 'WebDAV access for LON-CAPA "advanced" users', |
|
webdav_LC_adv_over => '(overrides access based on affiliation, if set)', |
|
none => 'No override set', |
|
overon => 'Override -- webDAV on', |
|
overoff => 'Override -- webDAV off', |
|
); |
|
} |
|
|
|
sub selectbox { |
|
my ($name,$value,$readonly,$functionref,@idlist)=@_; |
|
my $selout = '<select name="'.$name.'">'; |
|
foreach my $id (@idlist) { |
|
$selout.='<option value="'.$id.'"'; |
|
if ($id eq $value) { |
|
$selout.=' selected="selected"'; |
|
} |
|
if ($readonly) { |
|
$selout .= ' disabled="disabled"'; |
|
} |
|
$selout.='>'.&{$functionref}($id).'</option>'; |
|
} |
|
$selout.='</select>'; |
|
return $selout; |
|
} |
|
|
sub print_selfenrollment { |
sub print_selfenrollment { |
my ($position,$dom,$settings,$rowtotal) = @_; |
my ($position,$dom,$settings,$rowtotal) = @_; |
my ($css_class,$datatable); |
my ($css_class,$datatable); |
Line 7929 sub password_rules {
|
Line 8175 sub password_rules {
|
if (ref($settings->{chars}) eq 'ARRAY') { |
if (ref($settings->{chars}) eq 'ARRAY') { |
map { $chars{$_} = 1; } (@{$settings->{chars}}); |
map { $chars{$_} = 1; } (@{$settings->{chars}}); |
} |
} |
if ($prefix eq 'passwords') { |
if ($prefix eq 'passwords') { |
if ($settings->{expire}) { |
if ($settings->{expire}) { |
$expire = $settings->{expire}; |
$expire = $settings->{expire}; |
} |
} |
Line 8072 sub print_wafproxy {
|
Line 8318 sub print_wafproxy {
|
my %config = &Apache::lonnet::get_dom('configuration',['wafproxy'],$domain); |
my %config = &Apache::lonnet::get_dom('configuration',['wafproxy'],$domain); |
if (ref($config{'wafproxy'}) eq 'HASH') { |
if (ref($config{'wafproxy'}) eq 'HASH') { |
$aliases{$domain} = $config{'wafproxy'}{'alias'}; |
$aliases{$domain} = $config{'wafproxy'}{'alias'}; |
if (exists($config{'wafproxy'}{'saml'})) { |
if (exists($config{'wafproxy'}{'saml'})) { |
$saml{$domain} = $config{'wafproxy'}{'saml'}; |
$saml{$domain} = $config{'wafproxy'}{'saml'}; |
} |
} |
foreach my $item ('remoteip','ipheader','trusted','vpnint','vpnext') { |
foreach my $item ('remoteip','ipheader','trusted','vpnint','vpnext') { |
Line 8137 sub print_wafproxy {
|
Line 8383 sub print_wafproxy {
|
(' 'x2).'<span class="LC_nobreak">'. |
(' 'x2).'<span class="LC_nobreak">'. |
&mt('Alias used for SSO Auth').': <label>'. |
&mt('Alias used for SSO Auth').': <label>'. |
'<input type="radio" value="0"'.$samloff.' name="wafproxy_alias_saml_'.$server.'" />'. |
'<input type="radio" value="0"'.$samloff.' name="wafproxy_alias_saml_'.$server.'" />'. |
&mt('No').'</label> <label>'. |
&mt('No').'</label> <label>'. |
'<input type="radio" value="1"'.$samlon.' name="wafproxy_alias_saml_'.$server.'" />'. |
'<input type="radio" value="1"'.$samlon.' name="wafproxy_alias_saml_'.$server.'" />'. |
&mt('Yes').'</label></span>'. |
&mt('Yes').'</label></span>'. |
'</td>'; |
'</td>'; |
} |
} |
$aliasrows .= '</tr>'; |
$aliasrows .= '</tr>'; |
$aliasinfo{$dom_in_effect} .= $aliasrows; |
$aliasinfo{$dom_in_effect} .= $aliasrows; |
Line 9050 sub print_loadbalancing {
|
Line 9296 sub print_loadbalancing {
|
no => ' checked="checked"', |
no => ' checked="checked"', |
); |
); |
my %balcookiechecked = ( |
my %balcookiechecked = ( |
no => ' checked="checked"', |
no => ' checked="checked"', |
); |
); |
foreach my $sparetype (@sparestypes) { |
foreach my $sparetype (@sparestypes) { |
my $targettable; |
my $targettable; |
Line 9405 sub tool_titles {
|
Line 9651 sub tool_titles {
|
my %titles = &Apache::lonlocal::texthash ( |
my %titles = &Apache::lonlocal::texthash ( |
aboutme => 'Personal web page', |
aboutme => 'Personal web page', |
blog => 'Blog', |
blog => 'Blog', |
webdav => 'WebDAV', |
|
portfolio => 'Portfolio', |
portfolio => 'Portfolio', |
|
portaccess => 'Share portfolio files', |
timezone => 'Can set time zone', |
timezone => 'Can set time zone', |
official => 'Official courses (with institutional codes)', |
official => 'Official courses (with institutional codes)', |
unofficial => 'Unofficial courses', |
unofficial => 'Unofficial courses', |
Line 9637 sub print_selfcreation {
|
Line 9883 sub print_selfcreation {
|
($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked, |
($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked, |
\%choices,$itemcount,$onclick); |
\%choices,$itemcount,$onclick); |
$$rowtotal += $itemcount; |
$$rowtotal += $itemcount; |
|
|
if (ref($usertypes) eq 'HASH') { |
if (ref($usertypes) eq 'HASH') { |
if (keys(%{$usertypes}) > 0) { |
if (keys(%{$usertypes}) > 0) { |
$datatable .= &insttypes_row($createsettings,$types,$usertypes, |
$datatable .= &insttypes_row($createsettings,$types,$usertypes, |
Line 9774 sub print_selfcreation {
|
Line 10020 sub print_selfcreation {
|
my $currstyle = 'display:none'; |
my $currstyle = 'display:none'; |
if (grep(/^\Q$status\E$/,@ordered)) { |
if (grep(/^\Q$status\E$/,@ordered)) { |
$currstyle = $rowstyle; |
$currstyle = $rowstyle; |
$hidden = 0; |
$hidden = 0; |
} |
} |
$datatable .= &noninst_users($processing,$emailverified,$emailoptions,$emaildomain, |
$datatable .= &noninst_users($processing,$emailverified,$emailoptions,$emaildomain, |
$emailrules,$emailruleorder,$settings,$status,$rowid, |
$emailrules,$emailruleorder,$settings,$status,$rowid, |
Line 9801 sub print_selfcreation {
|
Line 10047 sub print_selfcreation {
|
foreach my $status (@posstypes) { |
foreach my $status (@posstypes) { |
my $rowid = $classprefix.$status; |
my $rowid = $classprefix.$status; |
my $datarowstyle = 'display:none'; |
my $datarowstyle = 'display:none'; |
if (grep(/^\Q$status\E$/,@ordered)) { |
if (grep(/^\Q$status\E$/,@ordered)) { |
$datarowstyle = $rowstyle; |
$datarowstyle = $rowstyle; |
} |
} |
$datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings, |
$datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings, |
$numinrow,$$rowtotal,\%usertypeshash,$infofields, |
$numinrow,$$rowtotal,\%usertypeshash,$infofields, |
Line 9904 function toggleEmailOptions(form,radio,p
|
Line 10150 function toggleEmailOptions(form,radio,p
|
document.getElementById(altprefix+'_inst_'+status).style.display = 'none'; |
document.getElementById(altprefix+'_inst_'+status).style.display = 'none'; |
document.getElementById(altprefix+'_noninst_'+status).style.display = 'none'; |
document.getElementById(altprefix+'_noninst_'+status).style.display = 'none'; |
if (curr == 'custom') { |
if (curr == 'custom') { |
if (prefix) { |
if (prefix) { |
document.getElementById(prefix+'_'+status).style.display = 'inline'; |
document.getElementById(prefix+'_'+status).style.display = 'inline'; |
} |
} |
} else if (curr == 'inst') { |
} else if (curr == 'inst') { |
Line 9927 ENDSCRIPT
|
Line 10173 ENDSCRIPT
|
|
|
sub noninst_users { |
sub noninst_users { |
my ($processing,$emailverified,$emailoptions,$emaildomain,$emailrules, |
my ($processing,$emailverified,$emailoptions,$emaildomain,$emailrules, |
$emailruleorder,$settings,$type,$rowid,$typetitle,$css_class,$rowstyle,$intdom) = @_; |
$emailruleorder,$settings,$type,$rowid,$typetitle,$css_class,$rowstyle,$intdom) = @_; |
my $class = 'LC_left_item'; |
my $class = 'LC_left_item'; |
if ($css_class) { |
if ($css_class) { |
$css_class = ' class="'.$css_class.'"'; |
$css_class = ' class="'.$css_class.'"'; |
} |
} |
if ($rowid) { |
if ($rowid) { |
$rowid = ' id="'.$rowid.'"'; |
$rowid = ' id="'.$rowid.'"'; |
Line 9945 sub noninst_users {
|
Line 10191 sub noninst_users {
|
$description = &mt('Requests for: [_1] (status self-reported)',$typetitle); |
$description = &mt('Requests for: [_1] (status self-reported)',$typetitle); |
} |
} |
$output = '<tr'.$css_class.$rowid.$rowstyle.'>'. |
$output = '<tr'.$css_class.$rowid.$rowstyle.'>'. |
"<td>$description</td>\n". |
"<td>$description</td>\n". |
'<td class="'.$class.'" colspan="2">'. |
'<td class="'.$class.'" colspan="2">'. |
'<table><tr>'; |
'<table><tr>'; |
my %headers = &Apache::lonlocal::texthash( |
my %headers = &Apache::lonlocal::texthash( |
approve => 'Processing', |
approve => 'Processing', |
email => 'E-mail', |
email => 'E-mail', |
username => 'Username', |
username => 'Username', |
Line 10073 sub noninst_users {
|
Line 10319 sub noninst_users {
|
my $value; |
my $value; |
if (ref($emaildomain) eq 'HASH') { |
if (ref($emaildomain) eq 'HASH') { |
if (ref($emaildomain->{$type}) eq 'HASH') { |
if (ref($emaildomain->{$type}) eq 'HASH') { |
$value = $emaildomain->{$type}->{$option}; |
$value = $emaildomain->{$type}->{$option}; |
} |
} |
} |
} |
if ($value eq '') { |
if ($value eq '') { |
Line 10391 sub print_defaults {
|
Line 10637 sub print_defaults {
|
if ($defaults{$item.'_'.$field}) { |
if ($defaults{$item.'_'.$field}) { |
$checkedon = $checkedoff; |
$checkedon = $checkedoff; |
$checkedoff = ''; |
$checkedoff = ''; |
} |
} |
$datatable .= '<div id="'.$item.'_'.$field.'_div" style="display:'.$portalsty.'">'. |
$datatable .= '<div id="'.$item.'_'.$field.'_div" style="display:'.$portalsty.'">'. |
'<span class="LC_nobreak">'.$titles->{$field}.' '. |
'<span class="LC_nobreak">'.$titles->{$field}.' '. |
'<label><input type="radio" name="'.$item.'_'.$field.'" value="1"'.$checkedon.'/>'.&mt('Yes').'</label>'. |
'<label><input type="radio" name="'.$item.'_'.$field.'" value="1"'.$checkedon.'/>'.&mt('Yes').'</label>'. |
Line 11220 sub defaults_javascript {
|
Line 11466 sub defaults_javascript {
|
function portalExtras(caller) { |
function portalExtras(caller) { |
var x = caller.value; |
var x = caller.value; |
var y = new Array('email','web'); |
var y = new Array('email','web'); |
for (var i=0; i<y.length; i++) { |
for (var i=0; i<y.length; i++) { |
if (document.getElementById('portal_def_'+y[i]+'_div')) { |
if (document.getElementById('portal_def_'+y[i]+'_div')) { |
var z = document.getElementById('portal_def_'+y[i]+'_div'); |
var z = document.getElementById('portal_def_'+y[i]+'_div'); |
if (x.length > 0) { |
if (x.length > 0) { |
Line 11324 sub passwords_javascript {
|
Line 11570 sub passwords_javascript {
|
} |
} |
&js_escape(\%intalert); |
&js_escape(\%intalert); |
my $defmin = $Apache::lonnet::passwdmin; |
my $defmin = $Apache::lonnet::passwdmin; |
my $intauthjs; |
my $intauthjs; |
if ($prefix eq 'passwords') { $intauthjs = <<"ENDSCRIPT"; |
if ($prefix eq 'passwords') { $intauthjs = <<"ENDSCRIPT"; |
|
|
function warnIntAuth(field) { |
function warnIntAuth(field) { |
Line 11718 sub modifiable_userdata_row {
|
Line 11964 sub modifiable_userdata_row {
|
'<td class="LC_left_item" colspan="2"><table>'; |
'<td class="LC_left_item" colspan="2"><table>'; |
my $rem; |
my $rem; |
my %checks; |
my %checks; |
my %current; |
|
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
my $hashref; |
my $hashref; |
if ($context eq 'lti') { |
if ($context eq 'lti') { |
Line 11744 sub modifiable_userdata_row {
|
Line 11989 sub modifiable_userdata_row {
|
} |
} |
} |
} |
} |
} |
if (ref($hashref) eq 'HASH') { |
if (ref($hashref) eq 'HASH') { |
foreach my $field (@fields) { |
foreach my $field (@fields) { |
if ($hashref->{$field}) { |
if ($hashref->{$field}) { |
if ($role eq 'emailusername') { |
if ($role eq 'emailusername') { |
Line 11756 sub modifiable_userdata_row {
|
Line 12001 sub modifiable_userdata_row {
|
} |
} |
} |
} |
} |
} |
|
|
my $total = scalar(@fields); |
my $total = scalar(@fields); |
for (my $i=0; $i<$total; $i++) { |
for (my $i=0; $i<$total; $i++) { |
$rem = $i%($numinrow); |
$rem = $i%($numinrow); |
Line 11845 sub insttypes_row {
|
Line 12089 sub insttypes_row {
|
my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rowtotal,$onclick, |
my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rowtotal,$onclick, |
$customcss,$rowstyle) = @_; |
$customcss,$rowstyle) = @_; |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
cansearch => 'Users allowed to search', |
cansearch => 'Users allowed to search', |
statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)', |
statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)', |
lockablenames => 'User preference to lock name', |
lockablenames => 'User preference to lock name', |
selfassign => 'Self-reportable affiliations', |
selfassign => 'Self-reportable affiliations', |
overrides => "Override domain's helpdesk settings based on requester's affiliation", |
overrides => "Override domain's helpdesk settings based on requester's affiliation", |
|
webdav => 'WebDAV access available', |
|
authorquota => 'Authoring Space quota (MB)', |
); |
); |
my $showdom; |
my ($showdom,$defaultquota); |
if ($context eq 'cansearch') { |
if ($context eq 'cansearch') { |
$showdom = ' ('.$dom.')'; |
$showdom = ' ('.$dom.')'; |
|
} elsif ($context eq 'authorquota') { |
|
$defaultquota = 500; |
} |
} |
my $class = 'LC_left_item'; |
my $class = 'LC_left_item'; |
if ($context eq 'statustocreate') { |
if ($context eq 'statustocreate') { |
Line 11890 sub insttypes_row {
|
Line 12138 sub insttypes_row {
|
} |
} |
$output .= '<tr>'; |
$output .= '<tr>'; |
} |
} |
my $check = ' '; |
if ($context eq 'authorquota') { |
if (ref($settings) eq 'HASH') { |
my $currquota; |
if (ref($settings->{$context}) eq 'ARRAY') { |
if ($settings->{$context}->{$types->[$i]} =~ /^\d+$/) { |
if (grep(/^\Q$types->[$i]\E$/,@{$settings->{$context}})) { |
$currquota = $settings->{$context}->{$types->[$i]}; |
$check = ' checked="checked" '; |
} else { |
} |
$currquota = $defaultquota; |
} elsif (ref($settings->{$context}) eq 'HASH') { |
} |
if (ref($settings->{$context}->{$types->[$i]}) eq 'HASH') { |
$output .= '<td class="LC_left_item">'."\n". |
|
'<label><span class="LC_nobreak">'."\n". |
|
$usertypes->{$types->[$i]}.'</span><br />'."\n". |
|
'<input type="text" name="'.$context.'_'.$types->[$i].'" '. |
|
'value="'.$currquota.'" size="5"'.$onclick.'/>'."\n". |
|
'</label></td>'; |
|
} else { |
|
my $check = ' '; |
|
if (ref($settings) eq 'HASH') { |
|
if (ref($settings->{$context}) eq 'ARRAY') { |
|
if (grep(/^\Q$types->[$i]\E$/,@{$settings->{$context}})) { |
|
$check = ' checked="checked" '; |
|
} |
|
} elsif (ref($settings->{$context}) eq 'HASH') { |
|
if (ref($settings->{$context}->{$types->[$i]}) eq 'HASH') { |
|
$check = ' checked="checked" '; |
|
} elsif ($context eq 'webdav') { |
|
if ($settings->{$context}->{$types->[$i]}) { |
|
$check = ' checked="checked" '; |
|
} |
|
} |
|
} elsif ($context eq 'statustocreate') { |
$check = ' checked="checked" '; |
$check = ' checked="checked" '; |
} |
} |
} elsif ($context eq 'statustocreate') { |
|
$check = ' checked="checked" '; |
|
} |
} |
|
$output .= '<td class="LC_left_item">'. |
|
'<span class="LC_nobreak"><label>'. |
|
'<input type="checkbox" name="'.$context.'" '. |
|
'value="'.$types->[$i].'"'.$check.$onclick.'/>'. |
|
$usertypes->{$types->[$i]}.'</label></span></td>'; |
} |
} |
$output .= '<td class="LC_left_item">'. |
|
'<span class="LC_nobreak"><label>'. |
|
'<input type="checkbox" name="'.$context.'" '. |
|
'value="'.$types->[$i].'"'.$check.$onclick.' />'. |
|
$usertypes->{$types->[$i]}.'</label></span></td>'; |
|
} |
} |
} |
} |
$rem = @{$types}%($numinrow); |
$rem = @{$types}%($numinrow); |
Line 11920 sub insttypes_row {
|
Line 12187 sub insttypes_row {
|
} else { |
} else { |
$output .= '<td class="LC_left_item">'; |
$output .= '<td class="LC_left_item">'; |
} |
} |
$output .= ' '; |
$output .= ' '; |
} else { |
} else { |
if ($rem == 0) { |
if ($rem == 0) { |
$output .= '<tr>'; |
$output .= '<tr>'; |
Line 11930 sub insttypes_row {
|
Line 12197 sub insttypes_row {
|
} else { |
} else { |
$output .= '<td class="LC_left_item">'; |
$output .= '<td class="LC_left_item">'; |
} |
} |
my $defcheck = ' '; |
if ($context eq 'authorquota') { |
if (ref($settings) eq 'HASH') { |
my $currquota = 500; |
if (ref($settings->{$context}) eq 'ARRAY') { |
if ((ref($settings) eq 'HASH') && (ref($settings->{$context}) eq 'HASH')) { |
if (grep(/^default$/,@{$settings->{$context}})) { |
if ($settings->{$context}{'default'} =~ /^\d+$/) { |
|
$currquota = $settings->{$context}{'default'}; |
|
} |
|
} |
|
$output .= '<label><span class="LC_nobreak">'.$othertitle.'</span><br />'."\n". |
|
'<input type="text" name="'.$context.'_default" '. |
|
'value="'.$currquota.'" size="5"'.$onclick.'/>'."\n". |
|
'</label>'; |
|
} else { |
|
my $defcheck = ' '; |
|
if (ref($settings) eq 'HASH') { |
|
if (ref($settings->{$context}) eq 'ARRAY') { |
|
if (grep(/^default$/,@{$settings->{$context}})) { |
|
$defcheck = ' checked="checked" '; |
|
} |
|
} elsif (ref($settings->{$context}) eq 'HASH') { |
|
if (ref($settings->{$context}->{'default'}) eq 'HASH') { |
|
$defcheck = ' checked="checked" '; |
|
} elsif ($context eq 'webdav') { |
|
if ($settings->{$context}->{'default'}) { |
|
$defcheck = ' checked="checked" '; |
|
} |
|
} |
|
} elsif ($context eq 'statustocreate') { |
$defcheck = ' checked="checked" '; |
$defcheck = ' checked="checked" '; |
} |
} |
} elsif ($context eq 'statustocreate') { |
|
$defcheck = ' checked="checked" '; |
|
} |
} |
|
$output .= '<span class="LC_nobreak"><label>'. |
|
'<input type="checkbox" name="'.$context.'" '. |
|
'value="default"'.$defcheck.$onclick.'/>'. |
|
$othertitle.'</label></span>'; |
} |
} |
$output .= '<span class="LC_nobreak"><label>'. |
|
'<input type="checkbox" name="'.$context.'" '. |
|
'value="default"'.$defcheck.$onclick.' />'. |
|
$othertitle.'</label></span>'; |
|
} |
} |
$output .= '</td></tr></table></td></tr>'; |
$output .= '</td></tr></table></td></tr>'; |
return $output; |
return $output; |
Line 12196 sub modify_login {
|
Line 12484 sub modify_login {
|
if ($lang eq $env{'form.loginhelpurl_add_lang'}) { |
if ($lang eq $env{'form.loginhelpurl_add_lang'}) { |
$formelem = 'loginhelpurl_add_file'; |
$formelem = 'loginhelpurl_add_file'; |
} |
} |
(my $result,$newurl{$lang}) = |
(my $result,$newurl{$lang}) = |
&Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname, |
&Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname, |
"help/$lang",'','',$newfile{$lang}, |
"help/$lang",'','',$newfile{$lang}, |
$modified); |
$modified); |
Line 12273 sub modify_login {
|
Line 12561 sub modify_login {
|
my $modified = []; |
my $modified = []; |
foreach my $lonhost (@newhosts) { |
foreach my $lonhost (@newhosts) { |
my $formelem = 'loginheadtag_'.$lonhost; |
my $formelem = 'loginheadtag_'.$lonhost; |
(my $result,$newheadtagurls{$lonhost}) = |
(my $result,$newheadtagurls{$lonhost}) = |
&Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname, |
&Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname, |
"login/headtag/$lonhost",'','', |
"login/headtag/$lonhost",'','', |
$env{'form.loginheadtag_'.$lonhost.'.filename'}, |
$env{'form.loginheadtag_'.$lonhost.'.filename'}, |
Line 12350 sub modify_login {
|
Line 12638 sub modify_login {
|
$currsaml{$lonhost}{$item} = $env{'form.saml_'.$item.'_'.$lonhost}; |
$currsaml{$lonhost}{$item} = $env{'form.saml_'.$item.'_'.$lonhost}; |
} |
} |
} else { |
} else { |
if ($saml{$lonhost}) { |
if ($saml{$lonhost}) { |
$changes{'saml'}{$lonhost} = 1; |
$changes{'saml'}{$lonhost} = 1; |
delete($currsaml{$lonhost}); |
delete($currsaml{$lonhost}); |
} |
} |
} |
} |
} |
} |
foreach my $posshost (keys(%currsaml)) { |
foreach my $posshost (keys(%currsaml)) { |
unless (exists($domservers{$posshost})) { |
unless (exists($domservers{$posshost})) { |
delete($currsaml{$posshost}); |
delete($currsaml{$posshost}); |
} |
} |
} |
} |
%{$loginhash{'login'}{'saml'}} = %currsaml; |
%{$loginhash{'login'}{'saml'}} = %currsaml; |
Line 12372 sub modify_login {
|
Line 12660 sub modify_login {
|
my $modified = []; |
my $modified = []; |
foreach my $lonhost (@newsamlimgs) { |
foreach my $lonhost (@newsamlimgs) { |
my $formelem = 'saml_img_'.$lonhost; |
my $formelem = 'saml_img_'.$lonhost; |
my ($result,$imgurl) = |
my ($result,$imgurl) = |
&Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname, |
&Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname, |
"login/saml/$lonhost",'','', |
"login/saml/$lonhost",'','', |
$env{'form.saml_img_'.$lonhost.'.filename'}, |
$env{'form.saml_img_'.$lonhost.'.filename'}, |
Line 12742 sub modify_ipaccess {
|
Line 13030 sub modify_ipaccess {
|
$possrange =~ s/,+/,/g; |
$possrange =~ s/,+/,/g; |
if ($possrange ne '') { |
if ($possrange ne '') { |
my (@ok,$count); |
my (@ok,$count); |
$count = 0; |
$count = 0; |
foreach my $poss (split(/\,/,$possrange)) { |
foreach my $poss (split(/\,/,$possrange)) { |
$count ++; |
$count ++; |
$poss = &validate_ip_pattern($poss); |
$poss = &validate_ip_pattern($poss); |
Line 12775 sub modify_ipaccess {
|
Line 13063 sub modify_ipaccess {
|
} |
} |
} |
} |
$confhash{$itemid}{'commblocks'} = {}; |
$confhash{$itemid}{'commblocks'} = {}; |
|
|
my %commblocks; |
my %commblocks; |
map { $commblocks{$_} = 1; } &Apache::loncommon::get_env_multiple('form.ipaccess_block_'.$idx); |
map { $commblocks{$_} = 1; } &Apache::loncommon::get_env_multiple('form.ipaccess_block_'.$idx); |
foreach my $type (@{$typeorder}) { |
foreach my $type (@{$typeorder}) { |
if ($commblocks{$type}) { |
if ($commblocks{$type}) { |
$confhash{$itemid}{'commblocks'}{$type} = 'on'; |
$confhash{$itemid}{'commblocks'}{$type} = 'on'; |
Line 12809 sub modify_ipaccess {
|
Line 13097 sub modify_ipaccess {
|
} |
} |
$env{'form.ipaccess_cnum_'.$idx} =~ s/^\s+|\s+$//g; |
$env{'form.ipaccess_cnum_'.$idx} =~ s/^\s+|\s+$//g; |
$env{'form.ipaccess_cdom_'.$idx} =~ s/^\s+|\s+$//g; |
$env{'form.ipaccess_cdom_'.$idx} =~ s/^\s+|\s+$//g; |
if (($env{'form.ipaccess_cnum_'.$idx} =~ /^$match_courseid$/) && |
if (($env{'form.ipaccess_cnum_'.$idx} =~ /^$match_courseid$/) && |
($env{'form.ipaccess_cdom_'.$idx} =~ /^$match_domain$/)) { |
($env{'form.ipaccess_cdom_'.$idx} =~ /^$match_domain$/)) { |
if (&Apache::lonnet::homeserver($env{'form.ipaccess_cnum_'.$idx}, |
if (&Apache::lonnet::homeserver($env{'form.ipaccess_cnum_'.$idx}, |
$env{'form.ipaccess_cdom_'.$idx}) eq 'no_host') { |
$env{'form.ipaccess_cdom_'.$idx}) eq 'no_host') { |
Line 12889 sub modify_ipaccess {
|
Line 13177 sub modify_ipaccess {
|
if (keys(%{$confhash{$itemid}{'courses'}})) { |
if (keys(%{$confhash{$itemid}{'courses'}})) { |
my @courses; |
my @courses; |
foreach my $cid (sort(keys(%{$confhash{$itemid}{'courses'}}))) { |
foreach my $cid (sort(keys(%{$confhash{$itemid}{'courses'}}))) { |
my %courseinfo = &Apache::lonnet::coursedescription($cid,{'one_time' => 1}); |
my %courseinfo = &Apache::lonnet::coursedescription($cid,{'one_time' => 1}); |
push(@courses,$courseinfo{'description'}.' ('.$cid.')'); |
push(@courses,$courseinfo{'description'}.' ('.$cid.')'); |
} |
} |
$resulttext .= '<li>'.&mt('Courses/Communities allowed').':<ul><li>'. |
$resulttext .= '<li>'.&mt('Courses/Communities allowed').':<ul><li>'. |
Line 12957 sub get_ipaccess_id {
|
Line 13245 sub get_ipaccess_id {
|
return ($id,$error); |
return ($id,$error); |
} |
} |
|
|
|
sub modify_authordefaults { |
|
my ($dom,$lastactref,%domconfig) = @_; |
|
# |
|
# Retrieve current domain configuration for webDAV and Authoring Space quotas from $domconfig{'quotas'}. |
|
# |
|
my (%curr_quotas,%save_quotas,%confhash,%changes,%newvalues); |
|
if (ref($domconfig{'quotas'}) eq 'HASH') { |
|
foreach my $key (keys(%{$domconfig{'quotas'}})) { |
|
if ($key =~ /^webdav|authorquota$/) { |
|
$curr_quotas{$key} = $domconfig{'quotas'}{$key}; |
|
} else { |
|
$save_quotas{$key} = $domconfig{'quotas'}{$key}; |
|
} |
|
} |
|
} |
|
my %staticdefaults = ( |
|
'copyright' => 'default', |
|
'sourceavail' => 'closed', |
|
'nocodemirror' => 'off', |
|
'domcoordacc' => 'on', |
|
'editors' => ['edit','xml']. |
|
'authorquota' => 500, |
|
'webdav' => 0, |
|
); |
|
my %titles = &authordefaults_titles(); |
|
foreach my $item ('nocodemirror','domcoordacc') { |
|
if ($env{'form.'.$item} =~ /^(0|1)$/) { |
|
$confhash{$item} = $env{'form.'.$item}; |
|
} |
|
} |
|
if ($env{'form.copyright'} =~ /^(default|domain|public)$/) { |
|
$confhash{'copyright'} = $1; |
|
} |
|
if ($env{'form.sourceavail'} =~ /^(closed|open)$/) { |
|
$confhash{'sourceavail'} = $1; |
|
} |
|
my @posseditors = &Apache::loncommon::get_env_multiple('form.author_editors'); |
|
my @okeditors = ('edit','xml','daxe'); |
|
my @editors; |
|
foreach my $item (@posseditors) { |
|
if (grep(/^\Q$item\E$/,@okeditors)) { |
|
push(@editors,$item); |
|
} |
|
} |
|
$confhash{'editors'} = \@editors; |
|
|
|
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
|
my @insttypes; |
|
if (ref($types) eq 'ARRAY') { |
|
@insttypes = @{$types}; |
|
} |
|
my @webdavon = &Apache::loncommon::get_env_multiple('form.webdav'); |
|
my %webdav; |
|
map { $webdav{$_} = 1; } @webdavon; |
|
foreach my $type (@insttypes,'default') { |
|
my $possquota = $env{'form.authorquota_'.$type}; |
|
if ($possquota =~ /^\d+$/) { |
|
$save_quotas{'authorquota'}{$type} = $possquota; |
|
} |
|
if ($webdav{$type}) { |
|
$save_quotas{'webdav'}{$type} = 1; |
|
} else { |
|
$save_quotas{'webdav'}{$type} = 0; |
|
} |
|
} |
|
if ($env{'form.webdav_LC_adv'} =~ /^(0|1)$/) { |
|
$save_quotas{'webdav'}{'_LC_adv'} = $env{'form.webdav_LC_adv'}; |
|
} |
|
if (ref($domconfig{'authordefaults'}) eq 'HASH') { |
|
foreach my $item ('nocodemirror','domcoordacc','copyright','sourceavail') { |
|
if ($domconfig{'authordefaults'}{$item} ne $confhash{$item}) { |
|
$changes{$item} = 1; |
|
} |
|
} |
|
if (ref($domconfig{'authordefaults'}{'editors'}) eq 'ARRAY') { |
|
my @diffs = |
|
&Apache::loncommon::compare_arrays($confhash{'editors'}, |
|
$domconfig{'authordefaults'}{'editors'}); |
|
unless (@diffs == 0) { |
|
$changes{'editors'} = 1; |
|
} |
|
} else { |
|
my @diffs = |
|
&Apache::loncommon::compare_arrays($confhash{'editors'}, |
|
$staticdefaults{'editors'}); |
|
unless (@diffs == 0) { |
|
$changes{'editors'} = 1; |
|
} |
|
} |
|
} else { |
|
my @offon = ('off','on'); |
|
foreach my $item ('nocodemirror','domcoordacc') { |
|
if ($offon[$confhash{$item}] ne $staticdefaults{$item}) { |
|
$changes{$item} = 1; |
|
} |
|
} |
|
foreach my $item ('copyright','sourceavail') { |
|
if ($confhash{$item} ne $staticdefaults{$item}) { |
|
$changes{$item} = 1; |
|
} |
|
} |
|
} |
|
foreach my $key ('authorquota','webdav') { |
|
if (ref($curr_quotas{$key}) eq 'HASH') { |
|
foreach my $type (@insttypes,'default') { |
|
if (exists($save_quotas{$key}{$type})) { |
|
if ($save_quotas{$key}{$type} ne $curr_quotas{$key}{$type}) { |
|
$changes{$key}{$type} = 1; |
|
} |
|
} elsif (exists($curr_quotas{$key}{$type})) { |
|
$save_quotas{$key}{$type} = $curr_quotas{$key}{$type}; |
|
} else { |
|
$save_quotas{$key}{$type} = $staticdefaults{$key}; |
|
} |
|
} |
|
} else { |
|
foreach my $type (@insttypes,'default') { |
|
if (exists($save_quotas{$key}{$type})) { |
|
unless ($save_quotas{$key}{$type} eq $staticdefaults{$key}) { |
|
$changes{$key}{$type} = 1; |
|
} |
|
} else { |
|
$save_quotas{$key}{$type} = $staticdefaults{$key}; |
|
} |
|
} |
|
} |
|
} |
|
if (ref($curr_quotas{'webdav'}) eq 'HASH') { |
|
if (exists($save_quotas{'webdav'}{'_LC_adv'})) { |
|
if ($save_quotas{'webdav'}{'_LC_adv'} ne $curr_quotas{'webdav'}{'_LC_adv'}) { |
|
$changes{'webdav_LC_adv'} = 1; |
|
} |
|
} elsif (exists($curr_quotas{'webdav'}{'_LC_adv'})) { |
|
$changes{'webdav_LC_adv'} = 1; |
|
} |
|
} elsif (exists($save_quotas{'webdav'}{'_LC_adv'})) { |
|
$changes{'webdav_LC_adv'} = 1; |
|
} |
|
my %confighash = ( |
|
quotas => \%save_quotas, |
|
authordefaults => \%confhash, |
|
); |
|
my $putresult = &Apache::lonnet::put_dom('configuration',\%confighash, |
|
$dom); |
|
my $resulttext; |
|
if ($putresult eq 'ok') { |
|
if (keys(%changes)) { |
|
if ((exists($changes{'authorquota'})) || (exists($changes{'webdav'})) || |
|
($changes{'webdav_LC_adv'})) { |
|
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); |
|
if ((exists($changes{'authorquota'})) && (ref($save_quotas{'authorquota'}) eq 'HASH')) { |
|
$domdefaults{'authorquota'} = $save_quotas{'authorquota'}; |
|
} |
|
if (((exists($changes{'webdav'})) || ($changes{'webdav_LC_adv'})) && |
|
(ref($save_quotas{'webdav'}) eq 'HASH')) { |
|
$domdefaults{'webdav'} = $save_quotas{'webdav'}; |
|
} |
|
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:').'<ul>'; |
|
my $authoroverride; |
|
foreach my $key ('nocodemirror','domcoordacc','copyright','sourceavail') { |
|
if (exists($changes{$key})) { |
|
my $shown; |
|
unless ($authoroverride) { |
|
$resulttext .= '<li>'.&mt('Defaults which can be overridden by Author').'<ul>'; |
|
$authoroverride = 1; |
|
} |
|
if (($key eq 'nocodemirror') || ($key eq 'domcoordacc')) { |
|
$shown = ($confhash{$key} ? &mt('Yes') : &mt('No')); |
|
} elsif ($key eq 'copyright') { |
|
$shown = &Apache::loncommon::copyrightdescription($confhash{$key}); |
|
} elsif ($key eq 'sourceavail') { |
|
$shown = &Apache::loncommon::source_copyrightdescription($confhash{$key}); |
|
} |
|
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{$key},$shown).'</li>'; |
|
} |
|
} |
|
if ($authoroverride) { |
|
$resulttext .= '</ul></li>'; |
|
} |
|
my $domcoordoverride; |
|
foreach my $key ('editors','authorquota','webdav','webdav_LC_adv') { |
|
if (exists($changes{$key})) { |
|
my $shown; |
|
unless ($domcoordoverride) { |
|
$resulttext .= '<li>'.&mt('Defaults which can be overridden by a Domain Coodinator').'<ul>'; |
|
$domcoordoverride = 1; |
|
} |
|
if ($key eq 'editors') { |
|
if (@{$confhash{'editors'}}) { |
|
$shown = join(', ', map { $titles{$_} } @{$confhash{'editors'}}); |
|
} else { |
|
$shown = &mt('None'); |
|
} |
|
} elsif ($key eq 'authorquota') { |
|
foreach my $type (@insttypes) { |
|
$shown .= $usertypes->{$type}.' -- '.$save_quotas{$key}{$type}.', '; |
|
} |
|
$shown .= $othertitle.' -- '.$save_quotas{$key}{'default'}; |
|
} elsif ($key eq 'webdav') { |
|
foreach my $type (@insttypes) { |
|
$shown .= $usertypes->{$type}.' -- '. ($save_quotas{$key}{$type} ? &mt('Yes') : &mt('No')).', '; |
|
} |
|
$shown .= $othertitle.' -- '. ($save_quotas{$key}{'default'} ? &mt('Yes') : &mt('No')); |
|
} elsif ($key eq 'webdav_LC_adv') { |
|
if (exists($save_quotas{'webdav'}{'_LC_adv'})) { |
|
$shown = ($save_quotas{'webdav'}{'_LC_adv'} ? $titles{'overon'} : $titles{'overoff'}); |
|
} else { |
|
$shown = $titles{'none'}; |
|
} |
|
} |
|
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{$key},$shown).'</li>'; |
|
} |
|
} |
|
if ($domcoordoverride) { |
|
$resulttext .= '</ul></li>'; |
|
} |
|
} else { |
|
$resulttext = &mt('No changes made to Authoring Space defaults'); |
|
} |
|
} |
|
return $resulttext; |
|
} |
|
|
sub modify_rolecolors { |
sub modify_rolecolors { |
my ($r,$dom,$confname,$roles,$lastactref,%domconfig) = @_; |
my ($r,$dom,$confname,$roles,$lastactref,%domconfig) = @_; |
my ($resulttext,%rolehash); |
my ($resulttext,%rolehash); |
Line 13496 sub check_switchserver {
|
Line 14013 sub check_switchserver {
|
my @ids=&Apache::lonnet::current_machine_ids(); |
my @ids=&Apache::lonnet::current_machine_ids(); |
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
if (!$allowed) { |
if (!$allowed) { |
$switchserver='<a href="/adm/switchserver?otherserver='.$home.'&role=dc./'.$dom.'/&destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>'; |
$switchserver='<a href="/adm/switchserver?otherserver='.$home.'&role='. |
|
&HTML::Entities::encode($env{'request.role'},'\'<>"&'). |
|
'&destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>'; |
} |
} |
return $switchserver; |
return $switchserver; |
} |
} |
Line 13508 sub modify_quotas {
|
Line 14027 sub modify_quotas {
|
$author_ok,$switchserver,$errors,$validationitemsref,$validationnamesref, |
$author_ok,$switchserver,$errors,$validationitemsref,$validationnamesref, |
$validationfieldsref); |
$validationfieldsref); |
if ($action eq 'quotas') { |
if ($action eq 'quotas') { |
$context = 'tools'; |
$context = 'tools'; |
} else { |
} else { |
$context = $action; |
$context = $action; |
} |
} |
Line 13528 sub modify_quotas {
|
Line 14047 sub modify_quotas {
|
@usertools = ('author'); |
@usertools = ('author'); |
%titles = &authorrequest_titles(); |
%titles = &authorrequest_titles(); |
} else { |
} else { |
@usertools = ('aboutme','blog','webdav','portfolio','timezone'); |
@usertools = ('aboutme','blog','portfolio','portaccess','timezone'); |
%titles = &tool_titles(); |
%titles = &tool_titles(); |
} |
} |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1); |
Line 13551 sub modify_quotas {
|
Line 14070 sub modify_quotas {
|
} else { |
} else { |
if ($key =~ /^form\.quota_(.+)$/) { |
if ($key =~ /^form\.quota_(.+)$/) { |
$confhash{'defaultquota'}{$1} = $env{$key}; |
$confhash{'defaultquota'}{$1} = $env{$key}; |
} elsif ($key =~ /^form\.authorquota_(.+)$/) { |
|
$confhash{'authorquota'}{$1} = $env{$key}; |
|
} elsif ($key =~ /^form\.\Q$context\E_(.+)$/) { |
} elsif ($key =~ /^form\.\Q$context\E_(.+)$/) { |
@{$toolshash{$1}} = &Apache::loncommon::get_env_multiple($key); |
@{$toolshash{$1}} = &Apache::loncommon::get_env_multiple($key); |
} |
} |
Line 13846 sub modify_quotas {
|
Line 14363 sub modify_quotas {
|
} |
} |
} else { |
} else { |
$confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; |
$confhash{'defaultquota'}{'default'} = $env{'form.defaultquota'}; |
$confhash{'authorquota'}{'default'} = $env{'form.authorquota'}; |
|
} |
} |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
foreach my $type (@{$types},'default','_LC_adv') { |
foreach my $type (@{$types},'default','_LC_adv') { |
Line 13935 sub modify_quotas {
|
Line 14451 sub modify_quotas {
|
} |
} |
} |
} |
if (ref($domconfig{'quotas'}{'authorquota'}) eq 'HASH') { |
if (ref($domconfig{'quotas'}{'authorquota'}) eq 'HASH') { |
foreach my $key (keys(%{$domconfig{'quotas'}{'authorquota'}})) { |
$confhash{'authorquota'} = $domconfig{'quotas'}{'authorquota'}; |
if (exists($confhash{'authorquota'}{$key})) { |
} |
if ($confhash{'authorquota'}{$key} ne $domconfig{'quotas'}{'authorquota'}{$key}) { |
if (ref($domconfig{'quotas'}{'webdav'}) eq 'HASH') { |
$changes{'authorquota'}{$key} = 1; |
$confhash{'webdav'} = $domconfig{'quotas'}{'webdav'}; |
} |
|
} else { |
|
$confhash{'authorquota'}{$key} = $domconfig{'quotas'}{'authorquota'}{$key}; |
|
} |
|
} |
|
} |
} |
} |
} |
if (ref($confhash{'defaultquota'}) eq 'HASH') { |
if (ref($confhash{'defaultquota'}) eq 'HASH') { |
Line 13963 sub modify_quotas {
|
Line 14474 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') { |
if ($context eq 'requestauthor') { |
Line 14018 sub modify_quotas {
|
Line 14514 sub modify_quotas {
|
} |
} |
$resulttext .= '</ul></li>'; |
$resulttext .= '</ul></li>'; |
} |
} |
if (ref($changes{'authorquota'}) eq 'HASH') { |
|
$resulttext .= '<li>'.&mt('Authoring Space default quotas').'<ul>'; |
|
foreach my $type (@{$types},'default') { |
|
if (defined($changes{'authorquota'}{$type})) { |
|
my $typetitle = $usertypes->{$type}; |
|
if ($type eq 'default') { |
|
$typetitle = $othertitle; |
|
} |
|
$resulttext .= '<li>'.&mt('[_1] set to [_2] MB',$typetitle,$confhash{'authorquota'}{$type}).'</li>'; |
|
} |
|
} |
|
$resulttext .= '</ul></li>'; |
|
} |
|
} |
} |
my %newenv; |
my %newenv; |
foreach my $item (@usertools) { |
foreach my $item (@usertools) { |
Line 16659 sub modify_contacts {
|
Line 17142 sub modify_contacts {
|
$contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type}); |
$contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type}); |
$newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'}; |
$newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'}; |
} |
} |
} |
} |
} |
} |
} |
} |
if (keys(%currsetting) > 0) { |
if (keys(%currsetting) > 0) { |
Line 16717 sub modify_contacts {
|
Line 17200 sub modify_contacts {
|
} |
} |
} |
} |
if (@statuses) { |
if (@statuses) { |
if (ref($currsetting{'overrides'}) eq 'HASH') { |
if (ref($currsetting{'overrides'}) eq 'HASH') { |
foreach my $key (keys(%{$currsetting{'overrides'}})) { |
foreach my $key (keys(%{$currsetting{'overrides'}})) { |
if (ref($currsetting{'overrides'}{$key}) eq 'HASH') { |
if (ref($currsetting{'overrides'}{$key}) eq 'HASH') { |
if (ref($newsetting{'override_'.$key}) eq 'HASH') { |
if (ref($newsetting{'override_'.$key}) eq 'HASH') { |
foreach my $item (@contacts,'bcc','others','include') { |
foreach my $item (@contacts,'bcc','others','include') { |
if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) { |
if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) { |
push(@{$changes{'overrides'}},$key); |
push(@{$changes{'overrides'}},$key); |
last; |
last; |
} |
} |
Line 16739 sub modify_contacts {
|
Line 17222 sub modify_contacts {
|
} |
} |
} else { |
} else { |
foreach my $key (@overrides) { |
foreach my $key (@overrides) { |
push(@{$changes{'overrides'}},$key); |
push(@{$changes{'overrides'}},$key); |
} |
} |
} |
} |
} |
} |
Line 16921 sub modify_contacts {
|
Line 17404 sub modify_contacts {
|
$resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$bcc{$type}.'</span>'; |
$resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$bcc{$type}.'</span>'; |
} elsif (!@text) { |
} elsif (!@text) { |
$resulttext .= &mt('No one'); |
$resulttext .= &mt('No one'); |
} |
} |
if ($includestr{$type} ne '') { |
if ($includestr{$type} ne '') { |
if ($includeloc{$type} eq 'b') { |
if ($includeloc{$type} eq 'b') { |
$resulttext .= '<br />'.&mt('Text automatically added to e-mail body:').' '.$includestr{$type}; |
$resulttext .= '<br />'.&mt('Text automatically added to e-mail body:').' '.$includestr{$type}; |
Line 16945 sub modify_contacts {
|
Line 17428 sub modify_contacts {
|
if (ref($newsetting{'override_'.$type}) eq 'HASH') { |
if (ref($newsetting{'override_'.$type}) eq 'HASH') { |
my @text; |
my @text; |
foreach my $item (@contacts) { |
foreach my $item (@contacts) { |
if ($newsetting{'override_'.$type}{$item}) { |
if ($newsetting{'override_'.$type}{$item}) { |
push(@text,$short_titles->{$item}); |
push(@text,$short_titles->{$item}); |
} |
} |
} |
} |
if ($newsetting{'override_'.$type}{'others'} ne '') { |
if ($newsetting{'override_'.$type}{'others'} ne '') { |
push(@text,$newsetting{'override_'.$type}{'others'}); |
push(@text,$newsetting{'override_'.$type}{'others'}); |
} |
} |
|
|
if (@text) { |
if (@text) { |
$resulttext .= &mt('Helpdesk e-mail sent to: [_1]', |
$resulttext .= &mt('Helpdesk e-mail sent to: [_1]', |
'<span class="LC_cusr_emph">'.join(', ',@text).'</span>'); |
'<span class="LC_cusr_emph">'.join(', ',@text).'</span>'); |
Line 17115 sub modify_contacts {
|
Line 17598 sub modify_contacts {
|
} |
} |
|
|
sub modify_privacy { |
sub modify_privacy { |
my ($dom,%domconfig) = @_; |
my ($dom,$lastactref,%domconfig) = @_; |
my ($resulttext,%current,%changes); |
my ($resulttext,%current,%changes); |
if (ref($domconfig{'privacy'}) eq 'HASH') { |
if (ref($domconfig{'privacy'}) eq 'HASH') { |
%current = %{$domconfig{'privacy'}}; |
%current = %{$domconfig{'privacy'}}; |
Line 17351 sub modify_privacy {
|
Line 17834 sub modify_privacy {
|
} |
} |
} |
} |
$resulttext .= '</ul>'; |
$resulttext .= '</ul>'; |
|
if ($changes{'approval'}) { |
|
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
|
delete($domdefaults{'userapprovals'}); |
|
if (ref($privacyhash{'approval'}) eq 'HASH') { |
|
foreach my $domtype ('instdom','extdom') { |
|
if (ref($privacyhash{'approval'}{$domtype}) eq 'HASH') { |
|
foreach my $roletype ('domain','author','course','community') { |
|
if ($privacyhash{'approval'}{$domtype}{$roletype} eq 'user') { |
|
$domdefaults{'userapprovals'} = 1; |
|
last; |
|
} |
|
} |
|
} |
|
last if ($domdefaults{'userapprovals'}); |
|
} |
|
} |
|
my $cachetime = 24*60*60; |
|
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime); |
|
if (ref($lastactref) eq 'HASH') { |
|
$lastactref->{'domdefaults'} = 1; |
|
} |
|
} |
} else { |
} else { |
$resulttext = &mt('No changes made to user information settings'); |
$resulttext = &mt('No changes made to user information settings'); |
} |
} |
Line 17793 sub modify_passwords {
|
Line 18298 sub modify_passwords {
|
); |
); |
my $needed = '<ul><li>'. |
my $needed = '<ul><li>'. |
join('</li><li>',map {$rulenames{$_} } @{$confighash{'passwords'}{'chars'}}). |
join('</li><li>',map {$rulenames{$_} } @{$confighash{'passwords'}{'chars'}}). |
'</li></ul>'; |
'</li></ul>'; |
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{'chars'},$needed).'</li>'; |
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{'chars'},$needed).'</li>'; |
} else { |
} else { |
$resulttext .= '<li>'.&mt('[_1] set to none',$titles{'chars'}).'</li>'; |
$resulttext .= '<li>'.&mt('[_1] set to none',$titles{'chars'}).'</li>'; |
Line 18276 sub modify_selfcreation {
|
Line 18781 sub modify_selfcreation {
|
if (($chosen eq 'inst') || ($chosen eq 'noninst')) { |
if (($chosen eq 'inst') || ($chosen eq 'noninst')) { |
my $emaildom; |
my $emaildom; |
if ($env{'form.cancreate_emaildomain_'.$chosen.'_'.$type} =~ /^\@[^\@]+$/) { |
if ($env{'form.cancreate_emaildomain_'.$chosen.'_'.$type} =~ /^\@[^\@]+$/) { |
$emaildom = $env{'form.cancreate_emaildomain_'.$chosen.'_'.$type}; |
$emaildom = $env{'form.cancreate_emaildomain_'.$chosen.'_'.$type}; |
$cancreate{'emaildomain'}{$type}{$chosen} = $emaildom; |
$cancreate{'emaildomain'}{$type}{$chosen} = $emaildom; |
if (ref($curremaildom{$type}) eq 'HASH') { |
if (ref($curremaildom{$type}) eq 'HASH') { |
if (exists($curremaildom{$type}{$chosen})) { |
if (exists($curremaildom{$type}{$chosen})) { |
Line 18288 sub modify_selfcreation {
|
Line 18793 sub modify_selfcreation {
|
} |
} |
} elsif ($emaildom ne '') { |
} elsif ($emaildom ne '') { |
push(@{$changes{'cancreate'}},'emaildomain'); |
push(@{$changes{'cancreate'}},'emaildomain'); |
} |
} |
} |
} |
$cancreate{'emailoptions'}{$type} = $env{'form.cancreate_emailoptions_'.$type}; |
$cancreate{'emailoptions'}{$type} = $env{'form.cancreate_emailoptions_'.$type}; |
} elsif ($chosen eq 'custom') { |
} elsif ($chosen eq 'custom') { |
Line 18715 sub modify_selfcreation {
|
Line 19220 sub modify_selfcreation {
|
); |
); |
if (@types) { |
if (@types) { |
if (@statuses) { |
if (@statuses) { |
$chgtext .= &mt('Processing of requests to create account with e-mail verification set as follows:'). |
$chgtext .= &mt('Processing of requests to create account with e-mail verification set as follows:'). |
'<ul>'; |
'<ul>'; |
foreach my $status (@statuses) { |
foreach my $status (@statuses) { |
if ($status eq 'default') { |
if ($status eq 'default') { |
Line 18923 sub modify_selfcreation {
|
Line 19428 sub modify_selfcreation {
|
$typename = $othertitle; |
$typename = $othertitle; |
} else { |
} else { |
$typename = $usertypes{$type}; |
$typename = $usertypes{$type}; |
} |
} |
$chgtext .= &mt('(Affiliation: [_1])',$typename); |
$chgtext .= &mt('(Affiliation: [_1])',$typename); |
} |
} |
if (@{$email_rule{$type}} > 0) { |
if (@{$email_rule{$type}} > 0) { |
Line 19268 sub modify_defaults {
|
Line 19773 sub modify_defaults {
|
} |
} |
if ($item eq 'portal_def') { |
if ($item eq 'portal_def') { |
unless (grep(/^\Q$item\E$/,@errors)) { |
unless (grep(/^\Q$item\E$/,@errors)) { |
if ($newvalues{$item} eq '') { |
if ($newvalues{$item} eq '') { |
foreach my $field ('email','web') { |
foreach my $field ('email','web') { |
if (exists($domdefaults{$item.'_'.$field})) { |
if (exists($domdefaults{$item.'_'.$field})) { |
delete($domdefaults{$item.'_'.$field}); |
delete($domdefaults{$item.'_'.$field}); |
Line 19453 sub modify_defaults {
|
Line 19958 sub modify_defaults {
|
$resulttext =~ s/, $//; |
$resulttext =~ s/, $//; |
$resulttext .= '</li>'; |
$resulttext .= '</li>'; |
} else { |
} else { |
$resulttext .= '<li>'.&mt('Institutional user status types deleted').'</li>'; |
$resulttext .= '<li>'.&mt('Institutional user status types deleted').'</li>'; |
} |
} |
} |
} |
} elsif ($item eq 'unamemap_rule') { |
} elsif ($item eq 'unamemap_rule') { |
Line 20488 sub modify_coursedefaults {
|
Line 20993 sub modify_coursedefaults {
|
my @toggles = ('canuse_pdfforms','uselcmath','usejsme','inline_chem','ltiauth'); |
my @toggles = ('canuse_pdfforms','uselcmath','usejsme','inline_chem','ltiauth'); |
my @numbers = ('anonsurvey_threshold','uploadquota_official','uploadquota_unofficial', |
my @numbers = ('anonsurvey_threshold','uploadquota_official','uploadquota_unofficial', |
'uploadquota_community','uploadquota_textbook','uploadquota_placement', |
'uploadquota_community','uploadquota_textbook','uploadquota_placement', |
'mysqltables_official','mysqltables_unofficial','mysqltables_community', |
'coursequota_official','coursequota_unofficial','coursequota_community', |
'mysqltables_textbook','mysqltables_placement'); |
'coursequota_textbook','coursequota_placement','mysqltables_official', |
|
'mysqltables_unofficial','mysqltables_community','mysqltables_textbook', |
|
'mysqltables_placement'); |
my @types = ('official','unofficial','community','textbook','placement'); |
my @types = ('official','unofficial','community','textbook','placement'); |
my %staticdefaults = ( |
my %staticdefaults = ( |
anonsurvey_threshold => 10, |
anonsurvey_threshold => 10, |
uploadquota => 500, |
uploadquota => 500, |
|
coursequota => 20, |
postsubmit => 60, |
postsubmit => 60, |
mysqltables => 172800, |
mysqltables => 172800, |
domexttool => 1, |
domexttool => 1, |
Line 20541 sub modify_coursedefaults {
|
Line 21049 sub modify_coursedefaults {
|
} |
} |
$defaultshash{'coursedefaults'}{$item} = $newdef; |
$defaultshash{'coursedefaults'}{$item} = $newdef; |
} else { |
} else { |
my ($setting,$type) = ($item =~ /^(uploadquota|mysqltables)_(\w+)$/); |
my ($setting,$type) = ($item =~ /^(uploadquota|coursequota|mysqltables)_(\w+)$/); |
if (ref($domconfig{'coursedefaults'}{$setting}) eq 'HASH') { |
if (ref($domconfig{'coursedefaults'}{$setting}) eq 'HASH') { |
$currdef = $domconfig{'coursedefaults'}{$setting}{$type}; |
$currdef = $domconfig{'coursedefaults'}{$setting}{$type}; |
} |
} |
Line 20553 sub modify_coursedefaults {
|
Line 21061 sub modify_coursedefaults {
|
unless (($currdef eq '') && ($newdef == $staticdefaults{$item})) { |
unless (($currdef eq '') && ($newdef == $staticdefaults{$item})) { |
$changes{$item} = 1; |
$changes{$item} = 1; |
} |
} |
} elsif ($item =~ /^(uploadquota|mysqltables)_/) { |
} elsif ($item =~ /^(uploadquota|coursequota|mysqltables)_/) { |
my $setting = $1; |
my $setting = $1; |
unless (($currdef eq '') && ($newdef == $staticdefaults{$setting})) { |
unless (($currdef eq '') && ($newdef == $staticdefaults{$setting})) { |
$changes{$setting} = 1; |
$changes{$setting} = 1; |
Line 20690 sub modify_coursedefaults {
|
Line 21198 sub modify_coursedefaults {
|
} |
} |
my (%newdomexttool,%newexttool,%olddomexttool,%oldexttool); |
my (%newdomexttool,%newexttool,%olddomexttool,%oldexttool); |
map { $newdomexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.domexttool'); |
map { $newdomexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.domexttool'); |
map { $newexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.exttool'); |
map { $newexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.exttool'); |
if (ref($domconfig{'coursedefaults'}{'domexttool'}) eq 'HASH') { |
if (ref($domconfig{'coursedefaults'}{'domexttool'}) eq 'HASH') { |
%olddomexttool = %{$domconfig{'coursedefaults'}{'domexttool'}}; |
%olddomexttool = %{$domconfig{'coursedefaults'}{'domexttool'}}; |
} else { |
} else { |
Line 20703 sub modify_coursedefaults {
|
Line 21211 sub modify_coursedefaults {
|
} |
} |
} |
} |
if (ref($domconfig{'coursedefaults'}{'exttool'}) eq 'HASH') { |
if (ref($domconfig{'coursedefaults'}{'exttool'}) eq 'HASH') { |
%oldexttool = %{$domconfig{'coursedefaults'}{'exttool'}}; |
%oldexttool = %{$domconfig{'coursedefaults'}{'exttool'}}; |
} else { |
} else { |
foreach my $type (@types) { |
foreach my $type (@types) { |
if ($staticdefaults{'exttool'}) { |
if ($staticdefaults{'exttool'}) { |
Line 20739 sub modify_coursedefaults {
|
Line 21247 sub modify_coursedefaults {
|
($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'}) || |
($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'}) || |
($changes{'canclone'}) || ($changes{'mysqltables'}) || ($changes{'texengine'}) || |
($changes{'canclone'}) || ($changes{'mysqltables'}) || ($changes{'texengine'}) || |
($changes{'inline_chem'}) || ($changes{'ltiauth'}) || ($changes{'domexttool'}) || |
($changes{'inline_chem'}) || ($changes{'ltiauth'}) || ($changes{'domexttool'}) || |
($changes{'exttool'}) ) { |
($changes{'exttool'}) || ($changes{'coursequota'})) { |
foreach my $item ('canuse_pdfforms','uselcmath','usejsme','inline_chem','texengine', |
foreach my $item ('canuse_pdfforms','uselcmath','usejsme','inline_chem','texengine', |
'ltiauth') { |
'ltiauth') { |
if ($changes{$item}) { |
if ($changes{$item}) { |
Line 20772 sub modify_coursedefaults {
|
Line 21280 sub modify_coursedefaults {
|
} |
} |
} |
} |
} |
} |
|
if ($changes{'coursequota'}) { |
|
if (ref($defaultshash{'coursedefaults'}{'coursequota'}) eq 'HASH') { |
|
foreach my $type (@types) { |
|
$domdefaults{$type.'coursequota'}=$defaultshash{'coursedefaults'}{'coursequota'}{$type}; |
|
} |
|
} |
|
} |
if ($changes{'canclone'}) { |
if ($changes{'canclone'}) { |
if (ref($defaultshash{'coursedefaults'}{'canclone'}) eq 'HASH') { |
if (ref($defaultshash{'coursedefaults'}{'canclone'}) eq 'HASH') { |
if (ref($defaultshash{'coursedefaults'}{'canclone'}{'instcode'}) eq 'ARRAY') { |
if (ref($defaultshash{'coursedefaults'}{'canclone'}{'instcode'}) eq 'ARRAY') { |
Line 20850 sub modify_coursedefaults {
|
Line 21365 sub modify_coursedefaults {
|
} else { |
} else { |
$resulttext .= '<li>'.&mt('Default quota for content uploaded via Course Editor remains default: [_1] MB',$staticdefaults{'uploadquota'}).'</li>'; |
$resulttext .= '<li>'.&mt('Default quota for content uploaded via Course Editor remains default: [_1] MB',$staticdefaults{'uploadquota'}).'</li>'; |
} |
} |
|
} elsif ($item eq 'coursequota') { |
|
if (ref($defaultshash{'coursedefaults'}{'coursequota'}) eq 'HASH') { |
|
$resulttext .= '<li>'.&mt('Default cumulative quota for all group portfolio spaces in course set as follows:').'<ul>'. |
|
'<li>'.&mt('Official courses: [_1] MB','<b>'.$defaultshash{'coursedefaults'}{'coursequota'}{'official'}.'</b>').'</li>'. |
|
'<li>'.&mt('Unofficial courses: [_1] MB','<b>'.$defaultshash{'coursedefaults'}{'coursequota'}{'unofficial'}.'</b>').'</li>'. |
|
'<li>'.&mt('Textbook courses: [_1] MB','<b>'.$defaultshash{'coursedefaults'}{'coursequota'}{'textbook'}.'</b>').'</li>'. |
|
'<li>'.&mt('Placement tests: [_1] MB','<b>'.$defaultshash{'coursedefaults'}{'coursequota'}{'placement'}.'</b>').'</li>'. |
|
'<li>'.&mt('Communities: [_1] MB','<b>'.$defaultshash{'coursedefaults'}{'coursequota'}{'community'}.'</b>').'</li>'. |
|
'</ul>'. |
|
'</li>'; |
|
} else { |
|
$resulttext .= '<li>'.&mt('Default cumulative quota for all group portfolio spaces in course remains default: [_1] MB',$staticdefaults{'coursequota'}).'</li>'; |
|
} |
} elsif ($item eq 'mysqltables') { |
} elsif ($item eq 'mysqltables') { |
if (ref($defaultshash{'coursedefaults'}{'mysqltables'}) eq 'HASH') { |
if (ref($defaultshash{'coursedefaults'}{'mysqltables'}) eq 'HASH') { |
$resulttext .= '<li>'.&mt('Lifetime of "Temporary" MySQL tables (student performance data) on homeserver').'<ul>'. |
$resulttext .= '<li>'.&mt('Lifetime of "Temporary" MySQL tables (student performance data) on homeserver').'<ul>'. |
Line 21356 sub modify_wafproxy {
|
Line 21884 sub modify_wafproxy {
|
} |
} |
} elsif ($currvalue{$item}) { |
} elsif ($currvalue{$item}) { |
$changes{$item} = 1; |
$changes{$item} = 1; |
} |
} |
} |
} |
} else { |
} else { |
if (keys(%curralias)) { |
if (keys(%curralias)) { |
Line 21364 sub modify_wafproxy {
|
Line 21892 sub modify_wafproxy {
|
} |
} |
if (keys(%currsaml)) { |
if (keys(%currsaml)) { |
$changes{'saml'} = 1; |
$changes{'saml'} = 1; |
} |
} |
if (keys(%currvalue)) { |
if (keys(%currvalue)) { |
foreach my $key (keys(%currvalue)) { |
foreach my $key (keys(%currvalue)) { |
$changes{$key} = 1; |
$changes{$key} = 1; |
Line 21374 sub modify_wafproxy {
|
Line 21902 sub modify_wafproxy {
|
if (keys(%changes)) { |
if (keys(%changes)) { |
my %defaultshash = ( |
my %defaultshash = ( |
wafproxy => \%wafproxy, |
wafproxy => \%wafproxy, |
); |
); |
my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash, |
my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash, |
$dom); |
$dom); |
if ($putresult eq 'ok') { |
if ($putresult eq 'ok') { |
Line 21390 sub modify_wafproxy {
|
Line 21918 sub modify_wafproxy {
|
$domdefaults{'waf_'.$item} = $wafproxy{$item}; |
$domdefaults{'waf_'.$item} = $wafproxy{$item}; |
} elsif (exists($domdefaults{'waf_'.$item})) { |
} elsif (exists($domdefaults{'waf_'.$item})) { |
delete($domdefaults{'waf_'.$item}); |
delete($domdefaults{'waf_'.$item}); |
} |
} |
} |
} |
} |
} |
if ($updatedomdefs) { |
if ($updatedomdefs) { |
Line 21457 sub modify_wafproxy {
|
Line 21985 sub modify_wafproxy {
|
$output .= '<li>'.&mt('Aliases deleted for hostnames').'</li>'; |
$output .= '<li>'.&mt('Aliases deleted for hostnames').'</li>'; |
} |
} |
} elsif ($item eq 'saml') { |
} elsif ($item eq 'saml') { |
my $shown; |
my $shown; |
if (ref($wafproxy{'saml'}) eq 'HASH') { |
if (ref($wafproxy{'saml'}) eq 'HASH') { |
if (keys(%{$wafproxy{'saml'}})) { |
if (keys(%{$wafproxy{'saml'}})) { |
$shown = join(', ',sort(keys(%{$wafproxy{'saml'}}))); |
$shown = join(', ',sort(keys(%{$wafproxy{'saml'}}))); |
Line 21787 sub modify_usersessions {
|
Line 22315 sub modify_usersessions {
|
if (($offload eq 'offloadoth') && (@okoffloadoth)) { |
if (($offload eq 'offloadoth') && (@okoffloadoth)) { |
$changes{'offloadoth'} = 1; |
$changes{'offloadoth'} = 1; |
} |
} |
} |
} |
} |
} |
} else { |
} else { |
if (@okoffload) { |
if (@okoffload) { |
Line 22325 sub modify_loadbalancing {
|
Line 22853 sub modify_loadbalancing {
|
} |
} |
if ($env{'form.loadbalancing_cookie_'.$i}) { |
if ($env{'form.loadbalancing_cookie_'.$i}) { |
$defaultshash{'loadbalancing'}{$balancer}{'cookie'} = 1; |
$defaultshash{'loadbalancing'}{$balancer}{'cookie'} = 1; |
if (exists($currbalancer{$balancer})) { |
if (exists($currbalancer{$balancer})) { |
unless ($currcookies{$balancer}) { |
unless ($currcookies{$balancer}) { |
$changes{'curr'}{$balancer}{'cookie'} = 1; |
$changes{'curr'}{$balancer}{'cookie'} = 1; |
} |
} |
Line 23011 function balancerChange(balnum,baltotal,
|
Line 23539 function balancerChange(balnum,baltotal,
|
END |
END |
} |
} |
|
|
|
|
sub new_spares_js { |
sub new_spares_js { |
my @sparestypes = ('primary','default'); |
my @sparestypes = ('primary','default'); |
my $types = join("','",@sparestypes); |
my $types = join("','",@sparestypes); |