--- loncom/interface/domainprefs.pm 2017/08/15 23:40:33 1.160.6.84.4.1
+++ loncom/interface/domainprefs.pm 2019/07/30 11:14:53 1.160.6.93
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.84.4.1 2017/08/15 23:40:33 raeburn Exp $
+# $Id: domainprefs.pm,v 1.160.6.93 2019/07/30 11:14:53 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1281,7 +1281,7 @@ sub print_login {
} else {
$datatable .= ' ';
}
- $datatable .= '
'.
''.&mt('Mapping of Shibboleth environment variable names to user data fields (SSO auth)').' '.
''."\n".
- ''."\n";
+ ''."\n";
for (my $i=0; $i<@fields; $i++) {
$rem = $i%($numperrow);
if ($rem == 0) {
@@ -5510,6 +5542,7 @@ sub noninst_users {
}
$output .= ''."\n";
}
+ }
$output .= "
\n";
return $output;
}
@@ -5856,7 +5889,7 @@ sub print_defaults {
1 => 'Yes, allow login then update passwd file using default cost (if higher)',
2 => 'Yes, disallow login if stored cost is less than domain default',
);
- $datatable .= '';
+ $datatable .= '';
foreach my $option (@options) {
my $checked = ' ';
my $onclick;
@@ -5903,7 +5936,7 @@ sub print_defaults {
$datatable .= ' '.&mt('Internal ID:').' '.$item.' '.
' '.
&mt('delete').''.
- ''.&mt('Name displayed:').
+ ' '.&mt('Name displayed:').
' '.
' ';
}
@@ -5922,7 +5955,7 @@ sub print_defaults {
$datatable .= ' '.&mt('Internal ID:').
' '.
' '.&mt('(new)').
- ''.
+ ' '.
&mt('Name displayed:').
' '.
''."\n";
@@ -6186,7 +6219,7 @@ sub print_coursecategories {
' '.$lt{$type}.' ';
}
- $datatable .= '';
+ $datatable .= '';
$itemcount ++;
}
$$rowtotal += $itemcount;
@@ -6397,7 +6430,7 @@ sub print_coursecategories {
$datatable .= &initialize_categories($itemcount);
}
} else {
- $datatable .= ''.$hdritem->{'header'}->[1]->{'col2'}.' '
+ $datatable .= ''.$hdritem->{'header'}->[1]->{'col2'}.' '
.&initialize_categories($itemcount);
}
$$rowtotal += $itemcount;
@@ -6445,7 +6478,7 @@ sub print_serverstatuses {
''.
' '.
- ''."\n";
+ ' '."\n";
}
$$rowtotal += $rownum;
return $datatable;
@@ -6670,7 +6703,7 @@ sub initialize_categories {
my $select1 = '';
foreach my $default ('instcode','communities') {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
- $chgstr = ' onchange="javascript:reorderCats(this.form,'."'',$default"."_pos','0'".');"';
+ $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','$default"."_pos','0'".');"';
if ($default eq 'communities') {
$select1 = $select0;
$select0 = '';
@@ -6695,8 +6728,9 @@ sub initialize_categories {
.'1 '
.'2 '
.'3 '
- .&mt('Add category').''.&mt('Name:')
- .' ';
+ .&mt('Add category').'>'.&mt('Name:')
+ .' '
+ .'';
return $datatable;
}
@@ -6751,7 +6785,7 @@ sub build_category_rows {
pop(@{$path});
}
} else {
- $text .= &mt('Add subcategory:').' '.&mt('Add subcategory:').' ';
+ $text .= ''.&mt('Add subcategory:').' ';
}
}
}
@@ -6999,14 +7033,14 @@ sub insttypes_row {
$output .= ''.
''.
' [$i].'"'.$check.$onclick.' />'.
+ 'value="'.$types->[$i].'"'.$check.$onclick.'/>'.
$usertypes->{$types->[$i]}.' ';
}
}
$rem = @{$types}%($numinrow);
}
my $colsleft = $numinrow - $rem;
- if (($rem == 0) && (@{$types} > 0)) {
+ if ($rem == 0) {
$output .= '';
}
if ($colsleft > 1) {
@@ -7026,7 +7060,7 @@ sub insttypes_row {
}
$output .= ''.
' '.
+ 'value="default"'.$defcheck.$onclick.'/>'.
$othertitle.' '.
'
';
return $output;
@@ -8062,14 +8096,14 @@ sub publishlogo {
} else {
my $source = $filepath.'/'.$file;
my $logfile;
- if (!open($logfile,">>$source".'.log')) {
+ if (!open($logfile,">>",$source.'.log')) {
return (&mt('No write permission to Authoring Space'));
}
print $logfile
"\n================= Publish ".localtime()." ================\n".
$env{'user.name'}.':'.$env{'user.domain'}."\n";
# Save the file
- if (!open(FH,'>'.$source)) {
+ if (!open(FH,">",$source)) {
&Apache::lonnet::logthis('Failed to create '.$source);
return (&mt('Failed to create file'));
}
@@ -8130,7 +8164,8 @@ $env{'user.name'}.':'.$env{'user.domain'
if ($fullwidth ne '' && $fullheight ne '') {
if ($fullwidth > $thumbwidth && $fullheight > $thumbheight) {
my $thumbsize = $thumbwidth.'x'.$thumbheight;
- system("convert -sample $thumbsize $inputfile $outfile");
+ my @args = ('convert','-sample',$thumbsize,$inputfile,$outfile);
+ system({$args[0]} @args);
chmod(0660, $filepath.'/tn-'.$file);
if (-e $outfile) {
my $copyfile=$targetdir.'/tn-'.$file;
@@ -8209,7 +8244,7 @@ sub write_metadata {
{
print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file;
my $mfh;
- if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) {
+ if (open($mfh,">",$targetdir.'/'.$file.'.meta')) {
foreach (sort(keys(%metadatafields))) {
unless ($_=~/\./) {
my $unikey=$_;
@@ -8243,7 +8278,7 @@ sub notifysubscribed {
next unless (ref($targetsource) eq 'ARRAY');
my ($target,$source)=@{$targetsource};
if ($source ne '') {
- if (open(my $logfh,'>>'.$source.'.log')) {
+ if (open(my $logfh,">>",$source.'.log')) {
print $logfh "\nCleanup phase: Notifications\n";
my @subscribed=&subscribed_hosts($target);
foreach my $subhost (@subscribed) {
@@ -8269,7 +8304,7 @@ sub notifysubscribed {
sub subscribed_hosts {
my ($target) = @_;
my @subscribed;
- if (open(my $fh,"<$target.subscription")) {
+ if (open(my $fh,"<","$target.subscription")) {
while (my $subline=<$fh>) {
if ($subline =~ /^($match_lonid):/) {
my $host = $1;
@@ -8468,16 +8503,20 @@ sub modify_quotas {
#FIXME need to obsolete item in RES space
} elsif ($env{'form.'.$type.'_image_'.$i.'.filename'}) {
my ($cdom,$cnum) = split(/_/,$key);
- my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,$type.'_image_'.$i,
- $cdom,$cnum,$type,$configuserok,
- $switchserver,$author_ok);
- if ($imgurl) {
- $confhash{$type}{$key}{'image'} = $imgurl;
- $changes{$type}{$key} = 1;
- }
- if ($error) {
- &Apache::lonnet::logthis($error);
- $errors .= ''.$error.' ';
+ if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
+ $errors .= ''.&mt('Image not saved: could not find textbook course').' ';
+ } else {
+ my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,$type.'_image_'.$i,
+ $cdom,$cnum,$type,$configuserok,
+ $switchserver,$author_ok);
+ if ($imgurl) {
+ $confhash{$type}{$key}{'image'} = $imgurl;
+ $changes{$type}{$key} = 1;
+ }
+ if ($error) {
+ &Apache::lonnet::logthis($error);
+ $errors .= ''.$error.' ';
+ }
}
} elsif ($domconfig{$action}{$type}{$key}{'image'}) {
$confhash{$type}{$key}{'image'} =
@@ -8511,15 +8550,19 @@ sub modify_quotas {
if ($type eq 'textbooks') {
if ($env{'form.'.$type.'_addbook_image.filename'} ne '') {
my ($cdom,$cnum) = split(/_/,$newbook{$type});
- my ($imageurl,$error) =
- &process_textbook_image($r,$dom,$confname,$type.'_addbook_image',$cdom,$cnum,$type,
- $configuserok,$switchserver,$author_ok);
- if ($imageurl) {
- $confhash{$type}{$newbook{$type}}{'image'} = $imageurl;
- }
- if ($error) {
- &Apache::lonnet::logthis($error);
- $errors .= ''.$error.' ';
+ if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
+ $errors .= ''.&mt('Image not saved: could not find textbook course').' ';
+ } else {
+ my ($imageurl,$error) =
+ &process_textbook_image($r,$dom,$confname,$type.'_addbook_image',$cdom,$cnum,$type,
+ $configuserok,$switchserver,$author_ok);
+ if ($imageurl) {
+ $confhash{$type}{$newbook{$type}}{'image'} = $imageurl;
+ }
+ if ($error) {
+ &Apache::lonnet::logthis($error);
+ $errors .= ''.$error.' ';
+ }
}
}
}
@@ -9011,7 +9054,7 @@ sub process_textbook_image {
} elsif ($author_ok eq 'ok') {
my ($result,$imageurl) =
&publishlogo($r,'upload',$caller,$dom,$confname,
- "$type/$dom/$cnum/cover",$width,$height);
+ "$type/$cdom/$cnum/cover",$width,$height);
if ($result eq 'ok') {
$url = $imageurl;
} else {
@@ -9611,7 +9654,7 @@ sub modify_contacts {
my (%others,%to,%bcc,%includestr,%includeloc);
my @contacts = ('supportemail','adminemail');
my @mailings = ('errormail','packagesmail','helpdeskmail','otherdomsmail',
- 'lonstatusmail','requestsmail','updatesmail','idconflictsmail');
+ 'lonstatusmail','requestsmail','updatesmail','idconflictsmail',hostipmail');
my @toggles = ('reporterrors','reportupdates');
my ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields();
foreach my $type (@mailings) {
@@ -9727,6 +9770,7 @@ sub modify_contacts {
$default{'lonstatusmail'} = 'adminemail';
$default{'requestsmail'} = 'adminemail';
$default{'updatesmail'} = 'adminemail';
+ $default{'hostipmail'} = 'adminemail';
foreach my $item (@contacts) {
if ($to{$item} ne $default{$item}) {
$changes{$item} = 1;
@@ -10687,13 +10731,13 @@ sub modify_selfcreation {
);
if (@types) {
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:').
+ '';
foreach my $status (@statuses) {
if ($status eq 'default') {
$chgtext .= ''.$othertitle.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$status}}.' ';
} else {
- $chgtext .= ''.$usertypes{$status}.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$status}.' ';
+ $chgtext .= ''.$usertypes{$status}.' -- '.$choices{$cancreate{'selfcreateprocessing'}{$status}}.' ';
}
}
$chgtext .= ' ';
@@ -10713,7 +10757,7 @@ sub modify_selfcreation {
$chgtext .= &mt('For self-created accounts verified by e-mail address, username is set as follows:').
'';
foreach my $status (@statuses) {
- if ($type eq 'default') {
+ if ($status eq 'default') {
$chgtext .= ''.$othertitle.' -- '.$options{$cancreate{'emailverified'}{$status}}.' ';
} else {
$chgtext .= ''.$usertypes{$status}.' -- '.$options{$cancreate{'emailverified'}{$status}}.' ';
@@ -10853,13 +10897,13 @@ sub modify_selfcreation {
$chgtext .= &mt('When self creating account with e-mail verification, no information besides e-mail address will be provided by [_1].',"'$usertypes{$type}'").' ';
}
} else {
- $chgtext .= &mt('When self creating account with e-mail verficiation, no information besides e-mail address will be provided by [_1].',"'$usertypes{$type}'").' ';
+ $chgtext .= &mt('When self creating account with e-mail verification, no information besides e-mail address will be provided by [_1].',"'$usertypes{$type}'").' ';
}
}
}
}
} elsif ($type eq 'notify') {
- my $numapprove = 0;
+ my $numapprove = 0;
if (ref($changes{'cancreate'}) eq 'ARRAY') {
if ((grep(/^notify$/,@{$changes{'cancreate'}})) && (ref($cancreate{'notify'}) eq 'HASH')) {
if ($cancreate{'notify'}{'approval'}) {
@@ -11748,6 +11792,10 @@ sub modify_coursecategories {
}
$resulttext .= ' ';
}
+ &Apache::lonnet::do_cache_new('cats',$dom,$cathash,3600);
+ if (ref($lastactref) eq 'HASH') {
+ $lastactref->{'cats'} = 1;
+ }
}
$resulttext .= ' ';
if ($changes{'unauth'} || $changes{'auth'}) {
@@ -12241,7 +12289,11 @@ sub modify_coursedefaults {
postsubmit => 60,
mysqltables => 172800,
);
-
+ my %texoptions = (
+ MathJax => 'MathJax',
+ mimetex => &mt('Convert to Images'),
+ tth => &mt('TeX to HTML'),
+ );
$defaultshash{'coursedefaults'} = {};
if (ref($domconfig{'coursedefaults'}) ne 'HASH') {
@@ -12288,7 +12340,6 @@ sub modify_coursedefaults {
$defaultshash{'coursedefaults'}{$setting}{$type} = $newdef;
}
if ($currdef ne $newdef) {
- my $staticdef;
if ($item eq 'anonsurvey_threshold') {
unless (($currdef eq '') && ($newdef == $staticdefaults{$item})) {
$changes{$item} = 1;
@@ -12301,6 +12352,21 @@ sub modify_coursedefaults {
}
}
}
+ my $texengine;
+ if ($env{'form.texengine'} =~ /^(MathJax|mimetex|tth)$/) {
+ $texengine = $env{'form.texengine'};
+ my $currdef = $domconfig{'coursedefaults'}{'texengine'};
+ if ($currdef eq '') {
+ unless ($texengine eq $Apache::lonnet::deftex) {
+ $changes{'texengine'} = 1;
+ }
+ } elsif ($currdef ne $texengine) {
+ $changes{'texengine'} = 1;
+ }
+ }
+ if ($texengine ne '') {
+ $defaultshash{'coursedefaults'}{'texengine'} = $texengine;
+ }
my $currclone = $domconfig{'coursedefaults'}{'canclone'};
my @currclonecode;
if (ref($currclone) eq 'HASH') {
@@ -12421,8 +12487,8 @@ sub modify_coursedefaults {
my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
if (($changes{'uploadquota'}) || ($changes{'postsubmit'}) ||
($changes{'coursecredits'}) || ($changes{'uselcmath'}) || ($changes{'usejsme'}) ||
- ($changes{'canclone'}) || ($changes{'mysqltables'})) {
- foreach my $item ('uselcmath','usejsme') {
+ ($changes{'canclone'}) || ($changes{'mysqltables'}) || ($changes{'texengine'})) {
+ foreach my $item ('uselcmath','usejsme','texengine') {
if ($changes{$item}) {
$domdefaults{$item}=$defaultshash{'coursedefaults'}{$item};
}
@@ -12485,6 +12551,11 @@ sub modify_coursedefaults {
} else {
$resulttext .= ''.&mt('Molecule editor uses JME (Java), if supported by client OS.').' ';
}
+ } elsif ($item eq 'texengine') {
+ if ($defaultshash{'coursedefaults'}{'texengine'} ne '') {
+ $resulttext .= ''.&mt('Default method to display mathematics set to: "[_1]"',
+ $texoptions{$defaultshash{'coursedefaults'}{'texengine'}}).' ';
+ }
} elsif ($item eq 'anonsurvey_threshold') {
$resulttext .= ''.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).' ';
} elsif ($item eq 'uploadquota') {
@@ -14153,7 +14224,7 @@ sub devalidate_remote_domconfs {
my %servers = &Apache::lonnet::internet_dom_servers($dom);
my %thismachine;
map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
- my @posscached = ('domainconfig','domdefaults','usersessions','directorysrch');
+ my @posscached = ('domainconfig','domdefaults','usersessions','directorysrch','cats');
if (keys(%servers)) {
foreach my $server (keys(%servers)) {
next if ($thismachine{$server});