--- loncom/interface/courseprefs.pm 2021/08/04 19:59:10 1.93
+++ loncom/interface/courseprefs.pm 2022/02/01 23:13:19 1.99
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.93 2021/08/04 19:59:10 raeburn Exp $
+# $Id: courseprefs.pm,v 1.99 2022/02/01 23:13:19 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -365,11 +365,25 @@ sub handler {
}
my %values=&Apache::lonnet::dump('environment',$cdom,$cnum);
- my %courselti=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1);
- if ($courselti{'lock'}) {
- delete($courselti{'lock'});
+ my %lti=&Apache::lonnet::dump('lti',$cdom,$cnum,undef,undef,undef,1);
+ my %ltienc = &Apache::lonnet::dump('nohist_ltienc',$cdom,$cnum,undef,undef,undef,1);
+ foreach my $id (keys(%lti)) {
+ if (ref($lti{$id}) eq 'HASH') {
+ if (ref($ltienc{$id}) eq 'HASH') {
+ $values{'linkprotection'}{$id} = { %{$lti{$id}}, %{$ltienc{$id}} };
+ } else {
+ $values{'linkprotection'}{$id} = $lti{$id};
+ }
+ }
+ unless ($phase eq 'process') {
+ if (ref($values{'linkprotection'}{$id}) eq 'HASH') {
+ delete($values{'linkprotection'}{$id}{'secret'});
+ }
+ }
+ }
+ if ($lti{'lock'}) {
+ delete($lti{'lock'});
}
- $values{'linkprotection'} = \%courselti;
my @prefs_order = ('courseinfo','localization','feedback','discussion',
'classlists','appearance','grading','printouts',
'menuitems','linkprotection','spreadsheet','bridgetasks',
@@ -473,7 +487,7 @@ sub handler {
help => 'Course_Prefs_Display',
ordered => ['default_xml_style','pageseparators',
'disable_receipt_display','texengine',
- 'tthoptions','uselcmath','usejsme'],
+ 'tthoptions','uselcmath','usejsme','inline_chem'],
itemtext => {
default_xml_style => 'Default XML style file',
pageseparators => 'Visibly Separate Items on Pages',
@@ -482,6 +496,7 @@ sub handler {
tthoptions => 'Default set of options to pass to tth/m when converting TeX',
uselcmath => 'Student formula entry uses inline preview, not DragMath pop-up',
usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)',
+ inline_chem => 'Chemical reaction response uses inline preview, not pop-up',
},
},
'grading' =>
@@ -595,7 +610,7 @@ sub handler {
my $jscript = &get_jscript($cid,$cdom,$phase,$crstype,\%values,$noedit);
my @allitems = &get_allitems(%prefs);
&Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,
- \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype,
+ \@prefs_order,\%prefs,\%values,$cnum,$jscript,\@allitems,$crstype,
'coursepref',$parm_permission);
} else {
&Apache::lonconfigsettings::display_choices($r,$phase,$context,
@@ -648,7 +663,7 @@ sub get_allitems {
}
sub print_config_box {
- my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_;
+ my ($r,$cdom,$cnum,$phase,$action,$item,$settings,$allitems,$crstype,$parm_permission) = @_;
my $ordered = $item->{'ordered'};
my $itemtext = $item->{'itemtext'};
my $noedit;
@@ -779,7 +794,7 @@ sub print_config_box {
} elsif ($action eq 'menuitems') {
$output .= &print_menuitems('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype,$noedit);
} elsif ($action eq 'linkprotection') {
- $output .= &print_linkprotection($cdom,$settings,\$rowtotal,$crstype,$noedit);
+ $output .= &print_linkprotection($cdom,$cnum,$settings,\$rowtotal,$crstype,$noedit);
} elsif ($action eq 'other') {
$output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype,$noedit);
}
@@ -793,7 +808,7 @@ sub print_config_box {
sub process_changes {
my ($cdom,$cnum,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_;
- my (%newvalues,%courselti,$errors);
+ my (%newvalues,%lti,%ltienc,$errors);
if (ref($item) eq 'HASH') {
if (ref($changes) eq 'HASH') {
my @ordered;
@@ -811,12 +826,12 @@ sub process_changes {
}
}
} elsif ($action eq 'linkprotection') {
- if (ref($values->{'linkprotection'}) eq 'HASH') {
- foreach my $id (keys(%{$values->{'linkprotection'}})) {
+ if (ref($values->{$action}) eq 'HASH') {
+ foreach my $id (keys(%{$values->{$action}})) {
if ($id =~ /^\d+$/) {
push(@ordered,$id);
- unless (ref($values->{'linkprotection'}->{$id}) eq 'HASH') {
- $courselti{$id} = '';
+ unless (ref($values->{$action}->{$id}) eq 'HASH') {
+ $lti{$id} = '';
}
}
}
@@ -964,6 +979,7 @@ sub process_changes {
}
} elsif ($action eq 'linkprotection') {
my %menutitles = <imenu_titles();
+ my $switchserver = &check_switchserver($cdom,$cnum);
my (@items,%deletions,%itemids,%haschanges);
if ($env{'form.linkprot_add'}) {
my $name = $env{'form.linkprot_name_add'};
@@ -979,41 +995,41 @@ sub process_changes {
'';
}
}
- if (ref($values->{'linkprotection'}) eq 'HASH') {
+ if (ref($values->{$action}) eq 'HASH') {
my @todelete = &Apache::loncommon::get_env_multiple('form.linkprot_del');
my $maxnum = $env{'form.linkprot_maxnum'};
for (my $i=0; $i<=$maxnum; $i++) {
my $itemid = $env{'form.linkprot_id_'.$i};
$itemid =~ s/\D+//g;
if ($itemid) {
- if (ref($values->{'linkprotection'}->{$itemid}) eq 'HASH') {
+ if (ref($values->{$action}->{$itemid}) eq 'HASH') {
push(@items,$i);
$itemids{$i} = $itemid;
if ((@todelete > 0) && (grep(/^$i$/,@todelete))) {
- $deletions{$itemid} = $values->{'linkprotection'}->{$itemid}->{'name'};
+ $deletions{$itemid} = $values->{$action}->{$itemid}->{'name'};
}
}
}
}
-
}
+
foreach my $idx (@items) {
my $itemid = $itemids{$idx};
next unless ($itemid);
if (exists($deletions{$itemid})) {
- $courselti{$itemid} = $deletions{$itemid};
+ $lti{$itemid} = $deletions{$itemid};
$haschanges{$itemid} = 1;
next;
}
my %current;
- if (ref($values->{'linkprotection'}) eq 'HASH') {
- if (ref($values->{'linkprotection'}->{$itemid}) eq 'HASH') {
- foreach my $key (keys(%{$values->{'linkprotection'}->{$itemid}})) {
- $current{$key} = $values->{'linkprotection'}->{$itemid}->{$key};
+ if (ref($values->{$action}) eq 'HASH') {
+ if (ref($values->{$action}->{$itemid}) eq 'HASH') {
+ foreach my $key (keys(%{$values->{$action}->{$itemid}})) {
+ $current{$key} = $values->{$action}->{$itemid}->{$key};
}
}
}
- foreach my $inner ('name','key','secret','lifetime','version') {
+ foreach my $inner ('name','lifetime','version') {
my $formitem = 'form.linkprot_'.$inner.'_'.$idx;
$env{$formitem} =~ s/(`)/'/g;
if ($inner eq 'lifetime') {
@@ -1025,13 +1041,40 @@ sub process_changes {
}
}
if ($env{$formitem} ne '') {
- $courselti{$itemid}{$inner} = $env{$formitem};
+ $lti{$itemid}{$inner} = $env{$formitem};
+ }
+ }
+ unless ($switchserver) {
+ my $keyitem = 'form.linkprot_key_'.$idx;
+ $env{$keyitem} =~ s/(`)/'/g;
+ unless ($idx eq 'add') {
+ if ($current{'key'} ne $env{$keyitem}) {
+ $haschanges{$itemid} = 1;
+ }
+ }
+ if ($env{$keyitem} ne '') {
+ $lti{$itemid}{'key'} = $env{$keyitem};
+ }
+ my $secretitem = 'form.linkprot_secret_'.$idx;
+ $env{$secretitem} =~ s/(`)/'/g;
+ if ($current{'usable'}) {
+ if ($env{'form.linkprot_changesecret_'.$idx}) {
+ if ($env{$secretitem} ne '') {
+ $lti{$itemid}{'secret'} = $env{$secretitem};
+ $haschanges{$itemid} = 1;
+ }
+ } else {
+ $lti{$itemid}{'secret'} = $current{'secret'};
+ }
+ } elsif ($env{$secretitem} ne '') {
+ $lti{$itemid}{'secret'} = $env{$secretitem};
+ $haschanges{$itemid} = 1;
}
}
}
if (keys(%haschanges)) {
foreach my $entry (keys(%haschanges)) {
- $changes->{$entry} = $courselti{$entry};
+ $changes->{$entry} = $lti{$entry};
}
}
} else {
@@ -1163,7 +1206,9 @@ sub process_changes {
$autocoowner = $domconf{'autoenroll'}{'co-owners'};
}
}
- unless ($autocoowner) {
+ if ($autocoowner) {
+ $newvalues{'co-owners'} = $values->{'internal.co-owners'};
+ } else {
my @keepcoowners = &Apache::loncommon::get_env_multiple('form.coowners');
my @pendingcoowners = &Apache::loncommon::get_env_multiple('form.pendingcoowners');
my @invitecoowners = &Apache::loncommon::get_env_multiple('form.invitecoowners');
@@ -1208,6 +1253,8 @@ sub process_changes {
if ($pendingcoowners ne '') {
@newpending = @pendingcoown;
}
+ } else {
+ @newcoown = @currcoown;
}
$newvalues{'pendingco-owners'} = join(',',sort(@newpending));
$newvalues{'co-owners'} = join(',',sort(@newcoown));
@@ -1650,7 +1697,7 @@ sub store_changes {
if (grep(/^\Q$item\E$/,@{$actions})) {
$output .= '
'.&mt($prefs->{$item}{'text'}).'
';
if (ref($changes->{$item}) eq 'HASH') {
- if ((keys(%{$changes->{$item}}) > 0) || ($item eq 'linkprotection')) {
+ if (keys(%{$changes->{$item}}) > 0) {
$output .= &mt('Changes made:').'';
if ($item eq 'other') {
foreach my $key (sort(keys(%{$changes->{$item}}))) {
@@ -1664,34 +1711,96 @@ sub store_changes {
}
}
} elsif ($item eq 'linkprotection') {
- if (&Apache::lonnet::put('lti',$changes->{'linkprotection'},$cdom,$cnum,1) eq 'ok') {
- my $hashid=$cdom.'_'.$cnum;
- &Apache::lonnet::devalidate_cache_new('courselti',$hashid);
- foreach my $itemid (sort { $a <=> $b } %{$changes->{'linkprotection'}}) {
- if (ref($changes->{'linkprotection'}->{$itemid}) eq 'HASH') {
- my %values = %{$changes->{'linkprotection'}->{$itemid}};
- my %desc = &linkprot_names();
- my $display;
- foreach my $title ('name','lifetime','version','key','secret') {
- if ($title eq 'secret') {
- my $length = length($values{$title});
- $display .= $desc{$title}.': '.('*' x $length);
- } elsif ($title eq 'version') {
- if ($values{$title} eq 'LTI-1p0') {
- $display .= $desc{$title}.': 1.1, ';
+ my (%ltienc,$lti_save_error);
+ if (ref($changes->{$item}) eq 'HASH') {
+ foreach my $id (sort { $a <=> $b } keys(%{$changes->{$item}})) {
+ if (ref($changes->{$item}->{$id}) eq 'HASH') {
+ if (exists($changes->{$item}->{$id}->{'key'})) {
+ $ltienc{$id}{'key'} = $changes->{$item}->{$id}->{'key'};
+ delete($changes->{$item}->{$id}->{'key'});
+ }
+ if (exists($changes->{$item}->{$id}->{'secret'})) {
+ $ltienc{$id}{'secret'} = $changes->{$item}->{$id}->{'secret'};
+ delete($changes->{$item}->{$id}->{'secret'});
+ } elsif (ref($oldlinkprot{$id}) eq 'HASH') {
+ if (exists($oldlinkprot{$id}{'usable'})) {
+ $changes->{$item}->{$id}->{'usable'} = 1;
+ }
+ }
+ }
+ }
+ }
+ if (keys(%ltienc) > 0) {
+ if (&Apache::lonnet::put('nohist_ltienc',\%ltienc,$cdom,$cnum,1) eq 'ok') {
+ foreach my $id (keys(%ltienc)) {
+ if (exists($ltienc{$id}{'secret'})) {
+ $changes->{$item}->{$id}->{'usable'} = 1;
+ }
+ }
+ } else {
+ $lti_save_error = 1;
+ }
+ }
+ unless ($lti_save_error) {
+ if (&Apache::lonnet::put('lti',$changes->{$item},$cdom,$cnum,1) eq 'ok') {
+ my $hashid=$cdom.'_'.$cnum;
+ &Apache::lonnet::devalidate_cache_new('courselti',$hashid);
+ $chome = &Apache::lonnet::homeserver($cnum,$cdom);
+ unless (($chome eq 'no_host') || ($chome eq '')) {
+ my @ids=&Apache::lonnet::current_machine_ids();
+ unless (grep(/^\Q$chome\E$/,@ids)) {
+ &Apache::lonnet::devalidate_cache_new('courseltienc',$hashid);
+ }
+ }
+ foreach my $id (sort { $a <=> $b } %{$changes->{$item}}) {
+ if (ref($changes->{$item}->{$id}) eq 'HASH') {
+ my %values = %{$changes->{$item}->{$id}};
+ my %desc = &linkprot_names();
+ my $display;
+ foreach my $title ('name','lifetime','version','key','secret') {
+ if (($title eq 'key') || ($title eq 'secret')) {
+ if (ref($ltienc{$id}) eq 'HASH') {
+ if (exists($ltienc{$id}{$title})) {
+ if ($title eq 'secret') {
+ my $length = length($ltienc{$id}{$title});
+ $display .= $desc{$title}.': '.('*' x $length);
+ } else {
+ $display .= $desc{$title}.': '.$ltienc{$id}{$title}.', ';
+ }
+ }
+ }
+ } elsif ($title eq 'version') {
+ if ($values{$title} eq 'LTI-1p0') {
+ $display .= $desc{$title}.': 1.1, ';
+ }
+ } else {
+ $display .= $desc{$title}.': '.$values{$title}.', ';
}
- } else {
- $display .= $desc{$title}.': '.$values{$title}.', ';
}
+ $display =~ s/, $//;
+ $output .= '- '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',''.$id.'',
+ "'$display'")).'
';
+ } elsif (ref($oldlinkprot{$id}) eq 'HASH') {
+ my $oldname = $oldlinkprot{$id}{'name'};
+ $output .= '- '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',''."$id ($oldname)".'')).'
';
}
- $output .= '- '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',''.$itemid.'',
- "'$display'")).'
';
- } elsif (ref($oldlinkprot{$itemid}) eq 'HASH') {
- my $oldname = $oldlinkprot{$itemid}{'name'};
- $output .= '- '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',''."$itemid ($oldname)".'')).'
';
}
+ } else {
+ $lti_save_error = 1;
}
- } else {
+ }
+ unless ($lti_save_error) {
+ my @deletions;
+ foreach my $id (sort { $a <=> $b } keys(%{$changes->{$item}})) {
+ unless (ref($changes->{$item}->{$id}) eq 'HASH') {
+ push (@deletions,$id);
+ }
+ }
+ if (@deletions) {
+ &Apache::lonnet::del('nohist_ltienc',\@deletions,$cdom,$cnum);
+ }
+ }
+ if ($lti_save_error) {
$output .= '- '.
''.
&mt('An error occurred when saving changes to link protection settings, which remain unchanged.').
@@ -1852,7 +1961,8 @@ sub store_changes {
$displayval = &Apache::lonlocal::locallocaltime($displayval);
} elsif ($key eq 'categories') {
$displayval = $env{'form.categories_display'};
- } elsif (($key eq 'canuse_pdfforms') || ($key eq 'usejsme') || ($key eq 'uselcmath')) {
+ } elsif (($key eq 'canuse_pdfforms') || ($key eq 'usejsme') ||
+ ($key eq 'uselcmath') || ($key eq 'inline_chem')) {
if ($changes->{$item}{$key} eq '1') {
$displayval = &mt('Yes');
} elsif ($changes->{$item}{$key} eq '0') {
@@ -2369,11 +2479,45 @@ function toggleAddmenucoll() {
}
ENDSCRIPT
}
+ my $linkprotector_js = <<"ENDSCRIPT";
+function toggleLTI(form,num,item) {
+ var radioname = '';
+ var currdivid = '';
+ var newdivid = '';
+ if ((document.getElementById('linkprot_divcurr'+item+'_'+num)) &&
+ (document.getElementById('linkprot_divchg'+item+'_'+num))) {
+ currdivid = document.getElementById('linkprot_divcurr'+item+'_'+num);
+ newdivid = document.getElementById('linkprot_divchg'+item+'_'+num);
+ radioname = form.elements['linkprot_change'+item+'_'+num];
+ if (radioname) {
+ if (radioname.length > 0) {
+ var setvis;
+ for (var i=0; i'."\n".
'// '."\n".
+ $syllabus_js."\n".$menuitems_js."\n".
+ $linkprotector_js."\n".'//]]>'."\n".
''."\n".$stubrowse_js."\n";
return $jscript;
}
@@ -3804,7 +3948,7 @@ sub coowner_invitations {
@pendingcoown = split(',',$pendingcoowners);
}
if (ref($currcoownref) eq 'ARRAY') {
- @currcoown == @{$currcoownref};
+ @currcoown = @{$currcoownref};
}
my $disabled;
if ($noedit) {
@@ -3868,7 +4012,7 @@ sub manage_coownership {
@pendingcoown = split(',',$pendingcoowners);
}
if (ref($currcoownref) eq 'ARRAY') {
- @currcoown == @{$currcoownref};
+ @currcoown = @{$currcoownref};
}
my $disabled;
if ($noedit) {
@@ -4076,8 +4220,8 @@ sub print_feedback {
}
if ($position eq 'top') {
my $includeempty = 0;
- $datatable .= '
'.
- &user_table($cdom,$item,\@sections,
+ $datatable .= ' | '.
+ &user_table($cdom,$item,\@sections,
$settings->{$item},\%lt,$noedit);
} else {
$datatable .= &Apache::lonhtmlcommon::textbox($item.'.text',
@@ -4300,8 +4444,8 @@ sub print_discussion {
''.&role_checkboxes($cdom,$cnum,$item,$settings,undef,undef,$noedit).
' ';
} elsif ($item eq 'plc.users.denied') {
- $datatable .= ' | '.
- &user_table($cdom,$item,undef,
+ $datatable .= ' | '.
+ &user_table($cdom,$item,undef,
$settings->{$item},\%lt,$noedit);
} elsif ($item eq 'pch.roles.denied') {
$datatable .= ' | '.
@@ -4671,6 +4815,10 @@ sub print_appearance {
text => ''.&mt($itemtext->{'usejsme'}).'',
input => 'radio',
},
+ 'inline_chem' => {
+ text => ''.&mt($itemtext->{'inline_chem'}).'',
+ input => 'radio',
+ },
);
return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype,'appearance',$noedit);
}
@@ -5064,7 +5212,7 @@ sub print_menuitems {
my %checked;
my $on = ' checked="checked"';
foreach my $key (keys(%{$menu{$num}})) {
- if (($key eq 'top') || ($key eq 'inline') || ($key eq 'main')) {
+ if (($key eq 'top') || ($key eq 'inline') || ($key eq 'foot') || ($key eq 'main')) {
if ($menu{$num}{$key} eq 'y') {
$checked{$key} = $on;
}
@@ -5081,7 +5229,13 @@ sub print_menuitems {
foreach my $category (@order) {
if ((ref($categories{$category}) eq 'ARRAY') && (@{$categories{$category}} > 0)) {
$datatable .= ' | '.
''.$lt{'name'}.
- ': '.
+ ': '.
(' 'x2).
- ''.$lt{'version'}.': | ';
+ '
';
+ if ($values{'key'} ne '') {
+ $datatable .= ''.$lt{'key'};
+ if ($noedit) {
+ $datatable .= ': ['.&mt('not shown').']';
+ } elsif ($switchserver) {
+ $datatable .= ': ['.&mt('[_1] to view/edit',$switchserver).']';
+ } else {
+ $datatable .= ':';
+ }
+ $datatable .= ' '.(' 'x2);
+ } elsif (!$switchserver) {
+ $datatable .= ''.$lt{'key'}.':'.
+ ''.
+ ' '.(' 'x2);
+ }
+ if ($switchserver) {
+ if ($values{'usable'} ne '') {
+ $datatable .= ''.
+ $lt{'secret'}.': ['.&mt('not shown').'] '.(' 'x2).''.
+ ''.&mt('Change secret?').
+ ''.
+ (' 'x2).
+ ''.(' 'x2).
+ ''.
+ ' - '.&mt("submit from course's home server: [_1].",$switchserver).''.
+ '';
+ } elsif ($values{'key'} eq '') {
+ $datatable .= ''.&mt('Key and Secret are required').' - '.&mt("submit from course's home server: [_1].",$switchserver).''."\n";
+ } else {
+ $datatable .= ''.&mt('Secret required').' - '.&mt("submit from course's home server: [_1].",$switchserver).''."\n";
+ }
+ } else {
+ if ($values{'usable'} ne '') {
+ $datatable .= ''.
+ $lt{'secret'}.': ['.&mt('not shown').'] '.(' 'x2).''.
+ ''.&mt('Change?').
+ ''.
+ (' 'x2).
+ ' '.
+ ''.&mt('New Secret').':'.
+ ''.
+ ''.
+ '';
+ } else {
+ $datatable .=
+ ''.$lt{'secret'}.':'.
+ ''.
+ ''.
+ '';
+ }
+ }
+ $datatable .= '';
$itemcount ++;
}
}
@@ -5303,21 +5513,25 @@ sub print_linkprotection {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= ''."\n".
''."\n".
- ''.&mt('Add').' | '."\n".
+ ''.&mt('Add').''."\n".
''.
''.$lt{'name'}.
- ': '."\n".
+ ': '."\n".
(' 'x2).
- ''.$lt{'version'}.':'.
+ ''.$lt{'version'}.':'.
' '."\n".
(' 'x2).
- ''.$lt{'lifetime'}.': '."\n".
- '
'.
- ''.$lt{'key'}.': '."\n".
- (' 'x2).
- ''.$lt{'secret'}.':'.
- ' '."\n".
- ' |
';
+ ''.$lt{'lifetime'}.': '."\n".
+ '
';
+ if ($switchserver) {
+ $datatable .= ''.&mt('Key and Secret are required').' - '.&mt("submit from course's home server: [_1].",$switchserver).''."\n";
+ } else {
+ $datatable .= ''.$lt{'key'}.': '."\n".
+ (' 'x2).
+ ''.$lt{'secret'}.':'.
+ ' '."\n";
+ }
+ $datatable .= '';
$$rowtotal ++;
return $datatable;;
}
@@ -5333,6 +5547,22 @@ sub linkprot_names {
return %lt;
}
+sub check_switchserver {
+ my ($cdom,$cnum) = @_;
+ my ($allowed,$switchserver);
+ my $home = &Apache::lonnet::homeserver($cnum,$cdom);
+ unless ($home eq 'no_host') {
+ my @ids=&Apache::lonnet::current_machine_ids();
+ foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
+ if (!$allowed) {
+ $switchserver=''.&mt('Switch Server').'';
+ }
+ }
+ return $switchserver;
+}
+
sub print_other {
my ($cdom,$settings,$allitems,$rowtotal,$crstype,$noedit) = @_;
unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) {
@@ -5536,7 +5766,7 @@ sub make_item_rows {
$settings->{$item},$disabled);
} elsif ($items->{$item}{input} eq 'radio') {
my ($unsetdefault,$valueyes,$valueno);
- if (($item eq 'usejsme') || ($item eq 'uselcmath')) {
+ if (($item eq 'usejsme') || ($item eq 'uselcmath') || ($item eq 'inline_chem')) {
my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
unless ($domdefs{$item} eq '0') {
$unsetdefault = 1;