--- loncom/interface/domainprefs.pm 2015/04/01 23:02:44 1.260
+++ loncom/interface/domainprefs.pm 2015/05/21 22:59:16 1.264
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.260 2015/04/01 23:02:44 raeburn Exp $
+# $Id: domainprefs.pm,v 1.264 2015/05/21 22:59:16 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2910,6 +2910,7 @@ sub print_coursedefaults {
uselcmath => 'Math preview uses LON-CAPA previewer (javascript) in place of DragMath (Java)',
usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)',
postsubmit => 'Disable submit button/keypress following student submission',
+ canclone => "People who may clone a course (besides course's owner and coordinators)",
);
my %staticdefaults = (
anonsurvey_threshold => 10,
@@ -2921,10 +2922,82 @@ sub print_coursedefaults {
'canuse_pdfforms' => 'off',
'uselcmath' => 'on',
'usejsme' => 'on',
+ 'canclone' => 'none',
);
@toggles = ('canuse_pdfforms','uselcmath','usejsme');
($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
\%choices,$itemcount);
+ $css_class = $itemcount%2?' class="LC_odd_row"':'';
+ $datatable .=
+ '
'.
+ ''.$choices{'canclone'}.
+ '
';
+ my $currcanclone = 'none';
+ my $onclick;
+ my @cloneoptions = ('none','domain');
+ my %clonetitles = (
+ none => 'No additional course requesters',
+ domain => "Any course requester in course's domain",
+ instcode => 'Course requests for official courses ...',
+ );
+ my (%codedefaults,@code_order,@posscodes);
+ if (&Apache::lonnet::auto_instcode_defaults($dom,\%codedefaults,
+ \@code_order) eq 'ok') {
+ if (@code_order > 0) {
+ push(@cloneoptions,'instcode');
+ $onclick = ' onclick="toggleDisplay(this.form,'."'cloneinstcode'".');"';
+ }
+ }
+ if (ref($settings) eq 'HASH') {
+ if ($settings->{'canclone'}) {
+ if (ref($settings->{'canclone'}) eq 'HASH') {
+ if (ref($settings->{'canclone'}{'instcode'}) eq 'ARRAY') {
+ if (@code_order > 0) {
+ $currcanclone = 'instcode';
+ @posscodes = @{$settings->{'canclone'}{'instcode'}};
+ }
+ }
+ } elsif ($settings->{'canclone'} eq 'domain') {
+ $currcanclone = $settings->{'canclone'};
+ }
+ }
+ }
+ foreach my $option (@cloneoptions) {
+ my ($checked,$additional);
+ if ($currcanclone eq $option) {
+ $checked = ' checked="checked"';
+ }
+ if ($option eq 'instcode') {
+ if (@code_order) {
+ my $show = 'none';
+ if ($checked) {
+ $show = 'block';
+ }
+ $additional = ''.
+ &mt('Institutional codes for new and cloned course have identical:').
+ ' ';
+ foreach my $item (@code_order) {
+ my $codechk;
+ if ($checked) {
+ if (grep(/^\Q$item\E$/,@posscodes)) {
+ $codechk = ' checked="checked"';
+ }
+ }
+ $additional .= '';
+ }
+ $additional .= (' 'x2).'('.&mt('check as many as needed').')';
+ }
+ }
+ $datatable .=
+ ' '.$additional.' ';
+ }
+ $datatable .= '
'.
+ '
';
+ $itemcount ++;
} else {
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
my ($currdefresponder,%defcredits,%curruploadquota,%deftimeout);
@@ -3299,7 +3372,13 @@ sub print_usersessions {
if ($position eq 'top') {
if (keys(%serverhomes) > 1) {
my %spareid = ¤t_offloads_to($dom,$settings,\%servers);
- $datatable .= &spares_row($dom,\%servers,\%spareid,\%serverhomes,\%altids,$rowtotal);
+ my $curroffloadnow;
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'offloadnow'}) eq 'HASH') {
+ $curroffloadnow = $settings->{'offloadnow'};
+ }
+ }
+ $datatable .= &spares_row($dom,\%servers,\%spareid,\%serverhomes,\%altids,$curroffloadnow,$rowtotal);
} else {
$datatable .= '
'.
&mt('Nothing to set here, as the cluster to which this domain belongs only contains one server.');
@@ -3549,7 +3628,7 @@ sub current_offloads_to {
}
sub spares_row {
- my ($dom,$servers,$spareid,$serverhomes,$altids,$rowtotal) = @_;
+ my ($dom,$servers,$spareid,$serverhomes,$altids,$curroffloadnow,$rowtotal) = @_;
my $css_class;
my $numinrow = 4;
my $itemcount = 1;
@@ -3569,12 +3648,21 @@ sub spares_row {
}
}
next unless (ref($spareid->{$server}) eq 'HASH');
+ my $checkednow;
+ if (ref($curroffloadnow) eq 'HASH') {
+ if ($curroffloadnow->{$server}) {
+ $checkednow = ' checked="checked"';
+ }
+ }
$css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
$datatable .= '
'.
&mt('[_1] when busy, offloads to:'
- ,''.$server.'').
+ ,''.$server.'').' '.
+ ''."\n".
+ ''.
"\n";
my (%current,%canselect);
my @choices =
@@ -4701,11 +4789,8 @@ sub print_defaults {
my $includeempty = 1;
$datatable .= &Apache::loncommon::select_datelocale($item,$defaults{$item},undef,$includeempty);
} elsif ($item eq 'lang_def') {
- my %langchoices = &get_languages_hash();
- $langchoices{''} = 'No language preference';
- %langchoices = &Apache::lonlocal::texthash(%langchoices);
- $datatable .= &Apache::loncommon::select_form($defaults{$item},$item,
- \%langchoices);
+ my $includeempty = 1;
+ $datatable .= &Apache::loncommon::select_language($item,$defaults{$item},$includeempty);
} else {
my $size;
if ($item eq 'portal_def') {
@@ -4774,7 +4859,7 @@ sub print_defaults {
$datatable .= '';
}
$datatable .= ' '.&mt('Internal ID:').
- ''.
+ ''.
' '.&mt('(new)').
'
'.
&mt('Name displayed:').
@@ -5311,7 +5396,7 @@ sub serverstatus_pages {
return ('userstatus','lonstatus','loncron','server-status','codeversions',
'checksums','clusterstatus','metadata_keywords','metadata_harvest',
'takeoffline','takeonline','showenv','toggledebug','ping','domconf',
- 'uniquecodes','diskusage');
+ 'uniquecodes','diskusage','coursecatalog');
}
sub defaults_javascript {
@@ -10305,7 +10390,42 @@ sub modify_coursedefaults {
}
}
}
-
+ my $currclone = $domconfig{'coursedefaults'}{'canclone'};
+ my @currclonecode;
+ if (ref($currclone) eq 'HASH') {
+ if (ref($currclone->{'instcode'}) eq 'ARRAY') {
+ @currclonecode = @{$currclone->{'instcode'}};
+ }
+ }
+ my $newclone;
+ if ($env{'form.canclone'} =~ /^(none|domain|instcode)$/) {
+ $newclone = $env{'form.canclone'};
+ }
+ if ($newclone eq 'instcode') {
+ my @newcodes = &Apache::loncommon::get_env_multiple('form.clonecode');
+ my (%codedefaults,@code_order,@clonecode);
+ &Apache::lonnet::auto_instcode_defaults($dom,\%codedefaults,
+ \@code_order);
+ foreach my $item (@code_order) {
+ if (grep(/^\Q$item\E$/,@newcodes)) {
+ push(@clonecode,$item);
+ }
+ }
+ if (@clonecode) {
+ $defaultshash{'coursedefaults'}{'canclone'} = { $newclone => \@clonecode };
+ my @diffs = &Apache::loncommon::compare_arrays(\@currclonecode,\@clonecode);
+ if (@diffs) {
+ $changes{'canclone'} = 1;
+ }
+ } else {
+ $newclone eq '';
+ }
+ } elsif ($newclone ne '') {
+ $defaultshash{'coursedefaults'}{'canclone'} = $newclone;
+ }
+ if ($newclone ne $currclone) {
+ $changes{'canclone'} = 1;
+ }
my %credits;
foreach my $type (@types) {
unless ($type eq 'community') {
@@ -10389,7 +10509,8 @@ sub modify_coursedefaults {
if (keys(%changes) > 0) {
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
if (($changes{'canuse_pdfforms'}) || ($changes{'uploadquota'}) || ($changes{'postsubmit'}) ||
- ($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'})) {
+ ($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'}) ||
+ ($changes{'canclone'})) {
foreach my $item ('canuse_pdfforms','uselcmath','usejsme') {
if ($changes{$item}) {
$domdefaults{$item}=$defaultshash{'coursedefaults'}{$item};
@@ -10421,6 +10542,18 @@ sub modify_coursedefaults {
}
}
}
+ if ($changes{'canclone'}) {
+ if (ref($defaultshash{'coursedefaults'}{'canclone'}) eq 'HASH') {
+ if (ref($defaultshash{'coursedefaults'}{'canclone'}{'instcode'}) eq 'ARRAY') {
+ my @clonecodes = @{$defaultshash{'coursedefaults'}{'canclone'}{'instcode'}};
+ if (@clonecodes) {
+ $domdefaults{'canclone'} = join('+',@clonecodes);
+ }
+ }
+ } else {
+ $domdefaults{'canclone'}=$defaultshash{'coursedefaults'}{'canclone'};
+ }
+ }
my $cachetime = 24*60*60;
&Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
if (ref($lastactref) eq 'HASH') {
@@ -10515,6 +10648,17 @@ sub modify_coursedefaults {
} else {
$resulttext .= '
'.&mt('Student credits not in use for courses in this domain').'