version 1.433, 2024/01/02 02:34:06
|
version 1.437, 2024/03/03 00:08:37
|
Line 386 sub handler {
|
Line 386 sub handler {
|
help => 'Domain_Configuration_Quotas', |
help => 'Domain_Configuration_Quotas', |
header => [{col1 => 'User affiliation', |
header => [{col1 => 'User affiliation', |
col2 => 'Available tools', |
col2 => 'Available tools', |
col3 => 'Portfilo quota (MB)',}], |
col3 => 'Portfolio quota (MB)',}], |
print => \&print_quotas, |
print => \&print_quotas, |
modify => \&modify_quotas, |
modify => \&modify_quotas, |
}, |
}, |
Line 669 sub handler {
|
Line 669 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 684 sub handler {
|
Line 686 sub handler {
|
print => \&print_ipaccess, |
print => \&print_ipaccess, |
modify => \&modify_ipaccess, |
modify => \&modify_ipaccess, |
}, |
}, |
'authordefaults' => |
'authordefaults' => |
{text => 'Authoring Space defaults', |
{text => 'Authoring Space defaults', |
help => 'Domain_Configuration_Author_Defaults', |
help => 'Domain_Configuration_Author_Defaults', |
header => [{col1 => 'Defaults which can be overridden by Author', |
header => [{col1 => 'Defaults which can be overridden by Author', |
Line 1037 sub print_config_box {
|
Line 1039 sub print_config_box {
|
$output .= $item->{'print'}->('shared',$dom,$settings,\$rowtotal); |
$output .= $item->{'print'}->('shared',$dom,$settings,\$rowtotal); |
} 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); |
} |
} |
Line 1069 sub print_config_box {
|
Line 1084 sub print_config_box {
|
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[8]->{'col2'}).'</td></tr>'. |
<td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[8]->{'col2'}).'</td></tr>'. |
$item->{'print'}->('bottom',$dom,$settings,\$rowtotal); |
$item->{'print'}->('bottom',$dom,$settings,\$rowtotal); |
} else { |
} else { |
|
my $hdridx = 2; |
|
if ($action eq 'lti') { |
|
$hdridx = 3; |
|
} |
$output .= ' |
$output .= ' |
</table> |
</table> |
</td> |
</td> |
Line 1077 sub print_config_box {
|
Line 1096 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 1089 sub print_config_box {
|
Line 1108 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 1098 sub print_config_box {
|
Line 1118 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 6176 sub print_lti {
|
Line 6196 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 6199 sub print_lti {
|
Line 6219 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 6215 sub print_lti {
|
Line 6241 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 6224 sub print_lti {
|
Line 6250 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 6815 sub ltimenu_titles {
|
Line 6844 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) = @_; |
my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles); |
my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles); |
Line 7243 sub print_authordefaults {
|
Line 7324 sub print_authordefaults {
|
if ($position eq 'top') { |
if ($position eq 'top') { |
my %defaultchecked = ( |
my %defaultchecked = ( |
'nocodemirror' => 'off', |
'nocodemirror' => 'off', |
|
'daxecollapse' => 'off', |
'domcoordacc' => 'on', |
'domcoordacc' => 'on', |
); |
); |
my @toggles = ('nocodemirror','domcoordacc'); |
my @toggles = ('nocodemirror','daxecollapse','domcoordacc'); |
($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, |
($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked, |
\%titles,$itemcount); |
\%titles,$itemcount); |
my %staticdefaults = ( |
my %staticdefaults = ( |
Line 7364 sub print_authordefaults {
|
Line 7446 sub print_authordefaults {
|
my $checkedno = ' checked="checked"'; |
my $checkedno = ' checked="checked"'; |
my ($checkedon,$checkedoff); |
my ($checkedon,$checkedoff); |
if (ref($quotas{'webdav'}) eq 'HASH') { |
if (ref($quotas{'webdav'}) eq 'HASH') { |
if ($quotas{'webdav'}{'_LC_adv'} =~ /^0|1$/) { |
if ($quotas{'webdav'}{'_LC_adv'} =~ /^0|1$/) { |
if ($quotas{'webdav'}{'_LC_adv'}) { |
if ($quotas{'webdav'}{'_LC_adv'}) { |
$checkedon = $checkedno; |
$checkedon = $checkedno; |
} else { |
} else { |
Line 7393 sub print_authordefaults {
|
Line 7475 sub print_authordefaults {
|
$text = $titles{'overon'}; |
$text = $titles{'overon'}; |
$val = 1; |
$val = 1; |
$checked = $checkedon; |
$checked = $checkedon; |
} |
} |
$datatable .= '<span class="LC_nobreak"><label>'. |
$datatable .= '<span class="LC_nobreak"><label>'. |
'<input type="radio" name="webdav_LC_adv"'. |
'<input type="radio" name="webdav_LC_adv"'. |
' value="'.$val.'"'.$checked.' />'. |
' value="'.$val.'"'.$checked.' />'. |
Line 7414 sub authordefaults_titles {
|
Line 7496 sub authordefaults_titles {
|
webdav => 'WebDAV', |
webdav => 'WebDAV', |
authorquota => 'Authoring Space quotas (MB)', |
authorquota => 'Authoring Space quotas (MB)', |
nocodemirror => 'Deactivate CodeMirror for EditXML editor', |
nocodemirror => 'Deactivate CodeMirror for EditXML editor', |
|
daxecollapse => 'Daxe editor: LON-CAPA standard menus start collapsed', |
domcoordacc => 'Dom. Coords. can enter Authoring Spaces in domain', |
domcoordacc => 'Dom. Coords. can enter Authoring Spaces in domain', |
edit => 'Standard editor (Edit)', |
edit => 'Standard editor (Edit)', |
xml => 'Text editor (EditXML)', |
xml => 'Text editor (EditXML)', |
Line 7422 sub authordefaults_titles {
|
Line 7505 sub authordefaults_titles {
|
webdav_LC_adv_over => '(overrides access based on affiliation, if set)', |
webdav_LC_adv_over => '(overrides access based on affiliation, if set)', |
none => 'No override set', |
none => 'No override set', |
overon => 'Override -- webDAV on', |
overon => 'Override -- webDAV on', |
overoff => 'Override -- webDAV off', |
overoff => 'Override -- webDAV off', |
); |
); |
} |
} |
|
|
Line 13300 sub modify_authordefaults {
|
Line 13383 sub modify_authordefaults {
|
'copyright' => 'default', |
'copyright' => 'default', |
'sourceavail' => 'closed', |
'sourceavail' => 'closed', |
'nocodemirror' => 'off', |
'nocodemirror' => 'off', |
|
'daxecollapse' => 'off', |
'domcoordacc' => 'on', |
'domcoordacc' => 'on', |
'editors' => ['edit','xml']. |
'editors' => ['edit','xml']. |
'authorquota' => 500, |
'authorquota' => 500, |
'webdav' => 0, |
'webdav' => 0, |
); |
); |
my %titles = &authordefaults_titles(); |
my %titles = &authordefaults_titles(); |
foreach my $item ('nocodemirror','domcoordacc') { |
foreach my $item ('nocodemirror','daxecollapse','domcoordacc') { |
if ($env{'form.'.$item} =~ /^(0|1)$/) { |
if ($env{'form.'.$item} =~ /^(0|1)$/) { |
$confhash{$item} = $env{'form.'.$item}; |
$confhash{$item} = $env{'form.'.$item}; |
} |
} |
Line 13326 sub modify_authordefaults {
|
Line 13410 sub modify_authordefaults {
|
} |
} |
} |
} |
$confhash{'editors'} = \@editors; |
$confhash{'editors'} = \@editors; |
|
|
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); |
my @insttypes; |
my @insttypes; |
if (ref($types) eq 'ARRAY') { |
if (ref($types) eq 'ARRAY') { |
Line 13350 sub modify_authordefaults {
|
Line 13434 sub modify_authordefaults {
|
$save_quotas{'webdav'}{'_LC_adv'} = $env{'form.webdav_LC_adv'}; |
$save_quotas{'webdav'}{'_LC_adv'} = $env{'form.webdav_LC_adv'}; |
} |
} |
if (ref($domconfig{'authordefaults'}) eq 'HASH') { |
if (ref($domconfig{'authordefaults'}) eq 'HASH') { |
foreach my $item ('nocodemirror','domcoordacc','copyright','sourceavail') { |
foreach my $item ('nocodemirror','daxecollapse','domcoordacc','copyright','sourceavail') { |
if ($domconfig{'authordefaults'}{$item} ne $confhash{$item}) { |
if ($domconfig{'authordefaults'}{$item} ne $confhash{$item}) { |
$changes{$item} = 1; |
$changes{$item} = 1; |
} |
} |
} |
} |
if (ref($domconfig{'authordefaults'}{'editors'}) eq 'ARRAY') { |
if (ref($domconfig{'authordefaults'}{'editors'}) eq 'ARRAY') { |
my @diffs = |
my @diffs = |
&Apache::loncommon::compare_arrays($confhash{'editors'}, |
&Apache::loncommon::compare_arrays($confhash{'editors'}, |
$domconfig{'authordefaults'}{'editors'}); |
$domconfig{'authordefaults'}{'editors'}); |
unless (@diffs == 0) { |
unless (@diffs == 0) { |
Line 13372 sub modify_authordefaults {
|
Line 13456 sub modify_authordefaults {
|
} |
} |
} else { |
} else { |
my @offon = ('off','on'); |
my @offon = ('off','on'); |
foreach my $item ('nocodemirror','domcoordacc') { |
foreach my $item ('nocodemirror','daxecollapse','domcoordacc') { |
if ($offon[$confhash{$item}] ne $staticdefaults{$item}) { |
if ($offon[$confhash{$item}] ne $staticdefaults{$item}) { |
$changes{$item} = 1; |
$changes{$item} = 1; |
} |
} |
} |
} |
Line 13410 sub modify_authordefaults {
|
Line 13494 sub modify_authordefaults {
|
} |
} |
if (ref($curr_quotas{'webdav'}) eq 'HASH') { |
if (ref($curr_quotas{'webdav'}) eq 'HASH') { |
if (exists($save_quotas{'webdav'}{'_LC_adv'})) { |
if (exists($save_quotas{'webdav'}{'_LC_adv'})) { |
if ($save_quotas{'webdav'}{'_LC_adv'} ne $curr_quotas{'webdav'}{'_LC_adv'}) { |
if ($save_quotas{'webdav'}{'_LC_adv'} ne $curr_quotas{'webdav'}{'_LC_adv'}) { |
$changes{'webdav_LC_adv'} = 1; |
$changes{'webdav_LC_adv'} = 1; |
} |
} |
} elsif (exists($curr_quotas{'webdav'}{'_LC_adv'})) { |
} elsif (exists($curr_quotas{'webdav'}{'_LC_adv'})) { |
Line 13430 sub modify_authordefaults {
|
Line 13514 sub modify_authordefaults {
|
if (keys(%changes)) { |
if (keys(%changes)) { |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom); |
if ((exists($changes{'authorquota'})) || (exists($changes{'webdav'})) || |
if ((exists($changes{'authorquota'})) || (exists($changes{'webdav'})) || |
($changes{'webdav_LC_adv'})) { |
($changes{'webdav_LC_adv'})) { |
if ((exists($changes{'authorquota'})) && (ref($save_quotas{'authorquota'}) eq 'HASH')) { |
if ((exists($changes{'authorquota'})) && (ref($save_quotas{'authorquota'}) eq 'HASH')) { |
$domdefaults{'authorquota'} = $save_quotas{'authorquota'}; |
$domdefaults{'authorquota'} = $save_quotas{'authorquota'}; |
} |
} |
Line 13441 sub modify_authordefaults {
|
Line 13525 sub modify_authordefaults {
|
} |
} |
$resulttext = &mt('Changes made:').'<ul>'; |
$resulttext = &mt('Changes made:').'<ul>'; |
my $authoroverride; |
my $authoroverride; |
foreach my $key ('nocodemirror','domcoordacc','copyright','sourceavail') { |
foreach my $key ('nocodemirror','daxecollapse','domcoordacc','copyright','sourceavail') { |
if (exists($changes{$key})) { |
if (exists($changes{$key})) { |
$domdefaults{$key} = $confhash{$key}; |
$domdefaults{$key} = $confhash{$key}; |
my $shown; |
my $shown; |
Line 13449 sub modify_authordefaults {
|
Line 13533 sub modify_authordefaults {
|
$resulttext .= '<li>'.&mt('Defaults which can be overridden by Author').'<ul>'; |
$resulttext .= '<li>'.&mt('Defaults which can be overridden by Author').'<ul>'; |
$authoroverride = 1; |
$authoroverride = 1; |
} |
} |
if (($key eq 'nocodemirror') || ($key eq 'domcoordacc')) { |
if (($key eq 'nocodemirror') || ($key eq 'daxecollapse') || ($key eq 'domcoordacc')) { |
$shown = ($confhash{$key} ? &mt('Yes') : &mt('No')); |
$shown = ($confhash{$key} ? &mt('Yes') : &mt('No')); |
} elsif ($key eq 'copyright') { |
} elsif ($key eq 'copyright') { |
$shown = &Apache::loncommon::copyrightdescription($confhash{$key}); |
$shown = &Apache::loncommon::copyrightdescription($confhash{$key}); |
} elsif ($key eq 'sourceavail') { |
} elsif ($key eq 'sourceavail') { |
$shown = &Apache::loncommon::source_copyrightdescription($confhash{$key}); |
$shown = &Apache::loncommon::source_copyrightdescription($confhash{$key}); |
} |
} |
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{$key},$shown).'</li>'; |
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{$key},$shown).'</li>'; |
} |
} |
} |
} |
if ($authoroverride) { |
if ($authoroverride) { |
Line 13497 sub modify_authordefaults {
|
Line 13581 sub modify_authordefaults {
|
} |
} |
} |
} |
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{$key},$shown).'</li>'; |
$resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{$key},$shown).'</li>'; |
} |
} |
} |
} |
if ($domcoordoverride) { |
if ($domcoordoverride) { |
$resulttext .= '</ul></li>'; |
$resulttext .= '</ul></li>'; |
Line 15016 sub lti_security_results {
|
Line 15100 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 15112 sub lti_security_results {
|
Line 15195 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 15716 sub modify_lti {
|
Line 15821 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 15738 sub modify_lti {
|
Line 15843 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 16342 sub modify_lti {
|
Line 16505 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 16381 sub get_priv_creds {
|
Line 16545 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 16409 sub get_lti_id {
|
Line 16576 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'; |
} |
} |