version 1.160.6.118.2.14, 2023/07/05 17:08:22
|
version 1.160.6.118.2.19, 2024/02/25 06:15:54
|
Line 595 sub handler {
|
Line 595 sub handler {
|
col2 => 'Settings'}, |
col2 => 'Settings'}, |
{col1 => 'Rules for shared secrets', |
{col1 => 'Rules for shared secrets', |
col2 => 'Settings'}, |
col2 => 'Settings'}, |
|
{col1 => 'Link Protectors in Courses', |
|
col2 => 'Values'}, |
{col1 => 'Link Protectors', |
{col1 => 'Link Protectors', |
col2 => 'Settings'}, |
col2 => 'Settings'}, |
{col1 => 'Consumers', |
{col1 => 'Consumers', |
Line 936 sub print_config_box {
|
Line 938 sub print_config_box {
|
$colspan = ' colspan="2"'; |
$colspan = ' colspan="2"'; |
} elsif ($action eq 'passwords') { |
} elsif ($action eq 'passwords') { |
$output .= $item->{'print'}->('middle',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->('middle',$dom,$confname,$settings,\$rowtotal); |
|
} elsif ($action eq 'lti') { |
|
$output .= $item->{'print'}->('upper',$dom,$settings,\$rowtotal).' |
|
</table> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td> |
|
<table class="LC_nested"> |
|
<tr class="LC_info_row"> |
|
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[2]->{'col1'}).'</td> |
|
<td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td> |
|
</tr>'."\n". |
|
$item->{'print'}->('middle',$dom,$settings,\$rowtotal); |
} else { |
} else { |
$output .= $item->{'print'}->('middle',$dom,$settings,\$rowtotal); |
$output .= $item->{'print'}->('middle',$dom,$settings,\$rowtotal); |
} |
} |
|
my $hdridx = 2; |
|
if ($action eq 'lti') { |
|
$hdridx = 3; |
|
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
</td> |
</td> |
Line 947 sub print_config_box {
|
Line 966 sub print_config_box {
|
<td> |
<td> |
<table class="LC_nested"> |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[2]->{'col1'}).'</td> |
<td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[$hdridx]->{'col1'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[2]->{'col2'}).'</td> |
<td class="LC_right_item">'.&mt($item->{'header'}->[$hdridx]->{'col2'}).'</td> |
</tr>'."\n"; |
</tr>'."\n"; |
if ($action eq 'coursecategories') { |
if ($action eq 'coursecategories') { |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
$output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal); |
Line 958 sub print_config_box {
|
Line 977 sub print_config_box {
|
} else { |
} else { |
$output .= $item->{'print'}->('lower',$dom,$settings,\$rowtotal); |
$output .= $item->{'print'}->('lower',$dom,$settings,\$rowtotal); |
} |
} |
|
$hdridx ++; |
$output .= ' |
$output .= ' |
</tr> |
</tr> |
</table> |
</table> |
Line 967 sub print_config_box {
|
Line 987 sub print_config_box {
|
<td> |
<td> |
<table class="LC_nested"> |
<table class="LC_nested"> |
<tr class="LC_info_row"> |
<tr class="LC_info_row"> |
<td class="LC_left_item'.$leftnobr.'"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col1'}).'</td> |
<td class="LC_left_item'.$leftnobr.'"'.$colspan.'>'.&mt($item->{'header'}->[$hdridx]->{'col1'}).'</td> |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col2'}).'</td></tr>'."\n"; |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[$hdridx]->{'col2'}).'</td></tr>'."\n"; |
if ($action eq 'passwords') { |
if ($action eq 'passwords') { |
$output .= $item->{'print'}->('bottom',$dom,$confname,$settings,\$rowtotal); |
$output .= $item->{'print'}->('bottom',$dom,$confname,$settings,\$rowtotal); |
} else { |
} else { |
Line 5273 sub print_lti {
|
Line 5293 sub print_lti {
|
my ($position,$dom,$settings,$rowtotal) = @_; |
my ($position,$dom,$settings,$rowtotal) = @_; |
my $itemcount = 1; |
my $itemcount = 1; |
my ($datatable,$css_class); |
my ($datatable,$css_class); |
my (%rules,%encrypt,%privkeys,%linkprot); |
my (%rules,%encrypt,%privkeys,%linkprot,%suggestions); |
if (ref($settings) eq 'HASH') { |
if (ref($settings) eq 'HASH') { |
if ($position eq 'top') { |
if ($position eq 'top') { |
if (exists($settings->{'encrypt'})) { |
if (exists($settings->{'encrypt'})) { |
Line 5296 sub print_lti {
|
Line 5316 sub print_lti {
|
} |
} |
} |
} |
} |
} |
} elsif ($position eq 'middle') { |
} elsif ($position eq 'upper') { |
if (exists($settings->{'rules'})) { |
if (exists($settings->{'rules'})) { |
if (ref($settings->{'rules'}) eq 'HASH') { |
if (ref($settings->{'rules'}) eq 'HASH') { |
%rules = %{$settings->{'rules'}}; |
%rules = %{$settings->{'rules'}}; |
} |
} |
} |
} |
|
} elsif ($position eq 'middle') { |
|
if (exists($settings->{'suggested'})) { |
|
if (ref($settings->{'suggested'}) eq 'HASH') { |
|
%suggestions = %{$settings->{'suggested'}}; |
|
} |
|
} |
} elsif ($position eq 'lower') { |
} elsif ($position eq 'lower') { |
if (exists($settings->{'linkprot'})) { |
if (exists($settings->{'linkprot'})) { |
if (ref($settings->{'linkprot'}) eq 'HASH') { |
if (ref($settings->{'linkprot'}) eq 'HASH') { |
Line 5312 sub print_lti {
|
Line 5338 sub print_lti {
|
} |
} |
} |
} |
} else { |
} else { |
foreach my $key ('encrypt','private','rules','linkprot') { |
foreach my $key ('encrypt','private','rules','linkprot','suggestions') { |
if (exists($settings->{$key})) { |
if (exists($settings->{$key})) { |
delete($settings->{$key}); |
delete($settings->{$key}); |
} |
} |
Line 5321 sub print_lti {
|
Line 5347 sub print_lti {
|
} |
} |
if ($position eq 'top') { |
if ($position eq 'top') { |
$datatable = &secrets_form($dom,'ltisec',\%encrypt,\%privkeys,$rowtotal); |
$datatable = &secrets_form($dom,'ltisec',\%encrypt,\%privkeys,$rowtotal); |
} elsif ($position eq 'middle') { |
} elsif ($position eq 'upper') { |
$datatable = &password_rules('ltisecrets',\$itemcount,\%rules); |
$datatable = &password_rules('ltisecrets',\$itemcount,\%rules); |
$$rowtotal += $itemcount; |
$$rowtotal += $itemcount; |
|
} elsif ($position eq 'middle') { |
|
$datatable = &linkprot_suggestions(\%suggestions,\$itemcount); |
|
$$rowtotal += $itemcount; |
} elsif ($position eq 'lower') { |
} elsif ($position eq 'lower') { |
$datatable .= &Apache::courseprefs::print_linkprotection($dom,'',$settings,$rowtotal,'','','domain'); |
$datatable .= &Apache::courseprefs::print_linkprotection($dom,'',$settings,$rowtotal,'','','domain'); |
} else { |
} else { |
my ($switchserver,$switchmessage); |
my ($switchserver,$switchmessage); |
$switchserver = &check_switchserver($dom); |
$switchserver = &check_switchserver($dom); |
Line 5911 sub ltimenu_titles {
|
Line 5940 sub ltimenu_titles {
|
); |
); |
} |
} |
|
|
|
sub linkprot_suggestions { |
|
my ($suggested,$itemcount) = @_; |
|
my $count = 0; |
|
my $next = 1; |
|
my %lt = &Apache::lonlocal::texthash( |
|
'name' => 'Suggested Launcher', |
|
'info' => 'Recommendations', |
|
); |
|
my ($datatable,$css_class,$dest); |
|
if (ref($suggested) eq 'HASH') { |
|
my @current = sort { $a <=> $b } keys(%{$suggested}); |
|
$next += $current[-1]; |
|
for (my $i=0; $i<@current; $i++) { |
|
my $num = $current[$i]; |
|
my %values; |
|
if (ref($suggested->{$num}) eq 'HASH') { |
|
%values = %{$suggested->{$num}}; |
|
} else { |
|
next; |
|
} |
|
$css_class = $$itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= |
|
'<tr '.$css_class.'><td><span class="LC_nobreak">'."\n". |
|
'<label><input type="checkbox" name="linkprot_suggested_del" value="'.$i.'" />'."\n". |
|
&mt('Delete?').'</label></span></td><td>'."\n". |
|
'<div class="LC_floatleft"><fieldset><legend>'.$lt{'name'}.'</legend>'."\n". |
|
'<input type="text" size="15" name="linkprot_suggested_name_'.$i.'" value="'.$values{'name'}.'" autocomplete="off" />'."\n". |
|
'</fieldset></div>'. |
|
'<div class="LC_floatleft"><fieldset><legend>'.$lt{'info'}.'</legend>'."\n". |
|
'<textarea cols="55" rows="5" name="linkprot_suggested_info_'.$i.'">'.$values{'info'}.'</textarea>'. |
|
'</fieldset></div>'. |
|
'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n". |
|
'<input type="hidden" name="linkprot_suggested_id_'.$i.'" value="'.$num.'" /></td></tr>'."\n"; |
|
$$itemcount ++; |
|
} |
|
} |
|
$css_class = $$itemcount%2?' class="LC_odd_row"':''; |
|
$datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'."\n". |
|
'<input type="hidden" name="linkprot_suggested_maxnum" value="'.$next.'" />'."\n". |
|
'<input type="checkbox" name="linkprot_suggested_add" value="1" />'.&mt('Add').'</span></td>'."\n". |
|
'<td>'."\n". |
|
'<div class="LC_floatleft"><fieldset><legend>'.$lt{'name'}.'</legend>'."\n". |
|
'<input type="text" size="15" name="linkprot_suggested_name_add" value="" autocomplete="off" />'."\n". |
|
'</fieldset></div>'. |
|
'<div class="LC_floatleft"><fieldset><legend>'.$lt{'info'}.'</legend>'."\n". |
|
'<textarea cols="55" rows="5" name="linkprot_suggested_info_add"></textarea>'. |
|
'</fieldset></div>'. |
|
'<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n". |
|
'</td></tr>'."\n"; |
|
return $datatable; |
|
} |
|
|
sub print_coursedefaults { |
sub print_coursedefaults { |
my ($position,$dom,$settings,$rowtotal) = @_; |
my ($position,$dom,$settings,$rowtotal) = @_; |
Line 5919 sub print_coursedefaults {
|
Line 5998 sub print_coursedefaults {
|
my $itemcount = 1; |
my $itemcount = 1; |
my %choices = &Apache::lonlocal::texthash ( |
my %choices = &Apache::lonlocal::texthash ( |
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 5935 sub print_coursedefaults {
|
Line 6015 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 6051 sub print_coursedefaults {
|
Line 6132 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 6088 sub print_coursedefaults {
|
Line 6170 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 6147 sub print_coursedefaults {
|
Line 6234 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 6170 sub print_coursedefaults {
|
Line 6260 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 7024 sub print_wafproxy {
|
Line 7127 sub print_wafproxy {
|
my $dom_in_effect; |
my $dom_in_effect; |
my $aliasrows = '<tr>'. |
my $aliasrows = '<tr>'. |
'<td class="LC_left_item" style="vertical-align: baseline;">'. |
'<td class="LC_left_item" style="vertical-align: baseline;">'. |
&mt('Hostname').': '. |
&mt('Hostname').': '. |
'<i>'.&Apache::lonnet::hostname($server).'</i></td><td> </td>'; |
'<span class="LC_nobreak LC_cusr_emph">'. |
|
&Apache::lonnet::hostname($server).'</span></td><td> </td>'; |
if ($othercontrol{$server}) { |
if ($othercontrol{$server}) { |
$dom_in_effect = $othercontrol{$server}; |
$dom_in_effect = $othercontrol{$server}; |
my ($current,$forsaml); |
my ($current,$forsaml); |
Line 13148 sub lti_security_results {
|
Line 13252 sub lti_security_results {
|
off => &mt('Encryption of stored external tool secrets defined in domain disabled'), |
off => &mt('Encryption of stored external tool secrets defined in domain disabled'), |
}, |
}, |
); |
); |
|
|
} |
} |
my @types= ('crs','dom'); |
my @types= ('crs','dom'); |
if ($context eq 'lti') { |
if ($context eq 'lti') { |
Line 13244 sub lti_security_results {
|
Line 13347 sub lti_security_results {
|
} |
} |
} elsif ($item eq 'linkprot') { |
} elsif ($item eq 'linkprot') { |
next; |
next; |
|
} elsif ($item eq 'suggested') { |
|
if ((ref($secchanges->{'suggested'}) eq 'HASH') && |
|
(ref($newsec->{'suggested'}) eq 'HASH')) { |
|
my $suggestions; |
|
foreach my $id (sort { $a <=> $b } keys(%{$secchanges->{'suggested'}})) { |
|
if (ref($newsec->{'suggested'}->{$id}) eq 'HASH') { |
|
my $name = $newsec->{'suggested'}->{$id}->{'name'}; |
|
my $info = $newsec->{'suggested'}->{$id}->{'info'}; |
|
$suggestions .= '<li>'.&mt('Launcher: [_1]',$name).'<br />'. |
|
&mt('Recommend: [_1]','<pre>'.$info.'</pre>'). |
|
'</li>'; |
|
} else { |
|
$suggestions .= '<li>'.&mt('Recommendations deleted for Launcher: [_1]', |
|
$newsec->{'suggested'}->{$id}).'</li>'; |
|
} |
|
} |
|
if ($suggestions) { |
|
$output .= '<li>'.&mt('Hints in Courses for Link Protector Configuration'). |
|
'<ul>'.$suggestions.'</ul>'. |
|
'</li>'; |
|
} |
|
} |
} |
} |
} |
} |
if ($needs_update) { |
if ($needs_update) { |
Line 13315 sub modify_lti {
|
Line 13440 sub modify_lti {
|
} |
} |
} |
} |
if (ref($currltisec{'linkprot'}) eq 'HASH') { |
if (ref($currltisec{'linkprot'}) eq 'HASH') { |
foreach my $id (%{$currltisec{'linkprot'}}) { |
foreach my $id (keys(%{$currltisec{'linkprot'}})) { |
next if ($id !~ /^\d+$/); |
next if ($id !~ /^\d+$/); |
unless (exists($linkprotchg{$id})) { |
unless (exists($linkprotchg{$id})) { |
if (ref($currltisec{'linkprot'}{$id}) eq 'HASH') { |
if (ref($currltisec{'linkprot'}{$id}) eq 'HASH') { |
Line 13337 sub modify_lti {
|
Line 13462 sub modify_lti {
|
if ($proterror) { |
if ($proterror) { |
$errors .= '<li>'.$proterror.'</li>'; |
$errors .= '<li>'.$proterror.'</li>'; |
} |
} |
|
|
|
my (%delsuggested,%suggids,@suggested);; |
|
if (ref($currltisec{'suggested'}) eq 'HASH') { |
|
my $maxnum = $env{'form.linkprot_suggested_maxnum'}; |
|
my @todelete = &Apache::loncommon::get_env_multiple('form.linkprot_suggested_del'); |
|
for (my $i=0; $i<$maxnum; $i++) { |
|
my $itemid = $env{'form.linkprot_suggested_id_'.$i}; |
|
$itemid =~ s/\D+//g; |
|
if ($itemid) { |
|
if (ref($currltisec{'suggested'}->{$itemid}) eq 'HASH') { |
|
push(@suggested,$i); |
|
$suggids{$i} = $itemid; |
|
if ((@todelete > 0) && (grep(/^$i$/,@todelete))) { |
|
if (ref($currltisec{'suggested'}{$itemid}) eq 'HASH') { |
|
$delsuggested{$itemid} = $currltisec{'suggested'}{$itemid}{'name'}; |
|
} |
|
} else { |
|
if ($env{'form.linkprot_suggested_name_'.$i} eq '') { |
|
$delsuggested{$itemid} = $currltisec{'suggested'}{$itemid}{'name'}; |
|
} else { |
|
$env{'form.linkprot_suggested_name_'.$i} =~ s/(`)/'/g; |
|
$env{'form.linkprot_suggested_info_'.$i} =~ s/(`)/'/g; |
|
$newltisec{'suggested'}{$itemid}{'name'} = $env{'form.linkprot_suggested_name_'.$i}; |
|
$newltisec{'suggested'}{$itemid}{'info'} = $env{'form.linkprot_suggested_info_'.$i}; |
|
if (($currltisec{'suggested'}{$itemid}{'name'} ne $newltisec{'suggested'}{$itemid}{'name'}) || |
|
($currltisec{'suggested'}{$itemid}{'info'} ne $newltisec{'suggested'}{$itemid}{'info'})) { |
|
$secchanges{'suggested'}{$itemid} = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
foreach my $key (keys(%delsuggested)) { |
|
$newltisec{'suggested'}{$key} = $delsuggested{$key}; |
|
$secchanges{'suggested'}{$key} = 1; |
|
} |
|
if (($env{'form.linkprot_suggested_add'}) && |
|
($env{'form.linkprot_suggested_name_add'} ne '')) { |
|
$env{'form.linkprot_suggested_name_add'} =~ s/(`)/'/g; |
|
$env{'form.linkprot_suggested_info_add'} =~ s/(`)/'/g; |
|
my ($newsuggid,$errormsg) = &get_lti_id($dom,$env{'form.linkprot_suggested_name_add'},'suggested'); |
|
if ($newsuggid) { |
|
$newltisec{'suggested'}{$newsuggid}{'name'} = $env{'form.linkprot_suggested_name_add'}; |
|
$newltisec{'suggested'}{$newsuggid}{'info'} = $env{'form.linkprot_suggested_info_add'}; |
|
$secchanges{'suggested'}{$newsuggid} = 1; |
|
} else { |
|
my $error = &mt('Failed to acquire unique ID for new Link Protectors in Courses Suggestion'); |
|
if ($errormsg) { |
|
$error .= ' ('.$errormsg.')'; |
|
} |
|
$errors .= '<li><span class="LC_error">'.$error.'</span></li>'; |
|
} |
|
} |
my (@items,%deletions,%itemids); |
my (@items,%deletions,%itemids); |
if ($env{'form.lti_add'}) { |
if ($env{'form.lti_add'}) { |
my $consumer = $env{'form.lti_consumer_add'}; |
my $consumer = $env{'form.lti_consumer_add'}; |
$consumer =~ s/(`)/'/g; |
$consumer =~ s/(`)/'/g; |
($newid,my $error) = &get_lti_id($dom,$consumer); |
($newid,my $errormsg) = &get_lti_id($dom,$consumer,'lti'); |
if ($newid) { |
if ($newid) { |
$itemids{'add'} = $newid; |
$itemids{'add'} = $newid; |
push(@items,'add'); |
push(@items,'add'); |
$changes{$newid} = 1; |
$changes{$newid} = 1; |
} else { |
} else { |
my $error = &mt('Failed to acquire unique ID for new LTI configuration'); |
my $error = &mt('Failed to acquire unique ID for new LTI configuration'); |
|
if ($errormsg) { |
|
$error .= ' ('.$errormsg.')'; |
|
} |
$errors .= '<li><span class="LC_error">'.$error.'</span></li>'; |
$errors .= '<li><span class="LC_error">'.$error.'</span></li>'; |
} |
} |
} |
} |
Line 13941 sub modify_lti {
|
Line 14124 sub modify_lti {
|
} |
} |
$resulttext .= '</ul>'; |
$resulttext .= '</ul>'; |
if (ref($lastactref) eq 'HASH') { |
if (ref($lastactref) eq 'HASH') { |
if (($secchanges{'encrypt'}) || ($secchanges{'private'})) { |
if (($secchanges{'encrypt'}) || ($secchanges{'private'}) || (exists($secchanges{'suggested'}))) { |
|
&Apache::lonnet::get_domain_defaults($dom,1); |
$lastactref->{'domdefaults'} = 1; |
$lastactref->{'domdefaults'} = 1; |
} |
} |
} |
} |
Line 13980 sub get_priv_creds {
|
Line 14164 sub get_priv_creds {
|
} |
} |
|
|
sub get_lti_id { |
sub get_lti_id { |
my ($domain,$consumer) = @_; |
my ($domain,$consumer,$dbname) = @_; |
# get lock on lti db |
unless (($dbname eq 'lti') || ($dbname eq 'suggested')) { |
|
return ('','invalid db'); |
|
} |
|
# get lock on db |
my $lockhash = { |
my $lockhash = { |
lock => $env{'user.name'}. |
lock => $env{'user.name'}. |
':'.$env{'user.domain'}, |
':'.$env{'user.domain'}, |
}; |
}; |
my $tries = 0; |
my $tries = 0; |
my $gotlock = &Apache::lonnet::newput_dom('lti',$lockhash,$domain); |
my $gotlock = &Apache::lonnet::newput_dom($dbname,$lockhash,$domain); |
my ($id,$error); |
my ($id,$error); |
|
|
while (($gotlock ne 'ok') && ($tries<10)) { |
while (($gotlock ne 'ok') && ($tries<10)) { |
$tries ++; |
$tries ++; |
sleep (0.1); |
sleep (0.1); |
$gotlock = &Apache::lonnet::newput_dom('lti',$lockhash,$domain); |
$gotlock = &Apache::lonnet::newput_dom($dbname,$lockhash,$domain); |
} |
} |
if ($gotlock eq 'ok') { |
if ($gotlock eq 'ok') { |
my %currids = &Apache::lonnet::dump_dom('lti',$domain); |
my %currids = &Apache::lonnet::dump_dom($dbname,$domain); |
if ($currids{'lock'}) { |
if ($currids{'lock'}) { |
delete($currids{'lock'}); |
delete($currids{'lock'}); |
if (keys(%currids)) { |
if (keys(%currids)) { |
Line 14008 sub get_lti_id {
|
Line 14195 sub get_lti_id {
|
$id = 1; |
$id = 1; |
} |
} |
if ($id) { |
if ($id) { |
unless (&Apache::lonnet::newput_dom('lti',{ $id => $consumer },$domain) eq 'ok') { |
unless (&Apache::lonnet::newput_dom($dbname,{ $id => $consumer },$domain) eq 'ok') { |
$error = 'nostore'; |
$error = 'nostore'; |
} |
} |
} else { |
} else { |
$error = 'nonumber'; |
$error = 'nonumber'; |
} |
} |
} |
} |
my $dellockoutcome = &Apache::lonnet::del_dom('lti',['lock'],$domain); |
my $dellockoutcome = &Apache::lonnet::del_dom($dbname,['lock'],$domain); |
} else { |
} else { |
$error = 'nolock'; |
$error = 'nolock'; |
} |
} |
Line 18327 sub modify_coursedefaults {
|
Line 18514 sub modify_coursedefaults {
|
); |
); |
my @toggles = ('uselcmath','usejsme','inline_chem','ltiauth'); |
my @toggles = ('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','mysqltables_official', |
'uploadquota_community','uploadquota_textbook','coursequota_official', |
'mysqltables_unofficial','mysqltables_community','mysqltables_textbook'); |
'coursequota_unofficial','coursequota_community','coursequota_textbook', |
|
'mysqltables_official','mysqltables_unofficial','mysqltables_community', |
|
'mysqltables_textbook'); |
my @types = ('official','unofficial','community','textbook'); |
my @types = ('official','unofficial','community','textbook'); |
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 18380 sub modify_coursedefaults {
|
Line 18570 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 18392 sub modify_coursedefaults {
|
Line 18582 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 18578 sub modify_coursedefaults {
|
Line 18768 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 ('uselcmath','usejsme','inline_chem','texengine','ltiauth') { |
foreach my $item ('uselcmath','usejsme','inline_chem','texengine','ltiauth') { |
if ($changes{$item}) { |
if ($changes{$item}) { |
$domdefaults{$item}=$defaultshash{'coursedefaults'}{$item}; |
$domdefaults{$item}=$defaultshash{'coursedefaults'}{$item}; |
Line 18610 sub modify_coursedefaults {
|
Line 18800 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 18681 sub modify_coursedefaults {
|
Line 18878 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('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>'. |