[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface domainprefs.pm
raeburn
raeburn at source.lon-capa.org
Tue Aug 27 19:27:11 EDT 2019
raeburn Tue Aug 27 23:27:11 2019 EDT
Modified files: (Branch: version_2_11_X)
/loncom/interface domainprefs.pm
Log:
- For 2.11
Backport 1.315
-------------- next part --------------
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.160.6.100 loncom/interface/domainprefs.pm:1.160.6.101
--- loncom/interface/domainprefs.pm:1.160.6.100 Tue Aug 27 18:37:01 2019
+++ loncom/interface/domainprefs.pm Tue Aug 27 23:27:07 2019
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.100 2019/08/27 18:37:01 raeburn Exp $
+# $Id: domainprefs.pm,v 1.160.6.101 2019/08/27 23:27:07 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2968,7 +2968,54 @@
$to{$item}.'" /></td></tr>';
$rownum ++;
}
- } else {
+ } elsif ($position eq 'bottom') {
+ $css_class = $rownum%2?' class="LC_odd_row"':'';
+ $datatable .= '<tr'.$css_class.'>'.
+ '<td>'.&mt('Extra helpdesk form fields:').'<br />'.
+ &mt('(e-mail, subject, and description always shown)').
+ '</td><td class="LC_left_item">';
+ if ((ref($fields) eq 'ARRAY') && (ref($fieldtitles) eq 'HASH') &&
+ (ref($fieldoptions) eq 'HASH') && (ref($possoptions) eq 'HASH')) {
+ $datatable .= '<table><tr><th>'.&mt('Field').'</th><th>'.&mt('Status').'</th></tr>';
+ foreach my $field (@{$fields}) {
+ $datatable .= '<tr><td>'.$fieldtitles->{$field};
+ if (($field eq 'screenshot') || ($field eq 'cc')) {
+ $datatable .= ' '.&mt('(logged-in users)');
+ }
+ $datatable .='</td><td>';
+ my $clickaction;
+ if ($field eq 'screenshot') {
+ $clickaction = ' onclick="screenshotSize(this);"';
+ }
+ if (ref($possoptions->{$field}) eq 'ARRAY') {
+ foreach my $option (@{$possoptions->{$field}}) {
+ my $checked;
+ if ($currfield{$field} eq $option) {
+ $checked = ' checked="checked"';
+ }
+ $datatable .= '<span class="LC_nobreak"><label>'.
+ '<input type="radio" name="helpform_'.$field.'" '.
+ 'value="'.$option.'"'.$checked.$clickaction.' />'.$fieldoptions->{$option}.
+ '</label></span>'.(' 'x2);
+ }
+ }
+ if ($field eq 'screenshot') {
+ my $display;
+ if ($currfield{$field} eq 'no') {
+ $display = ' style="display:none"';
+ }
+ $datatable .= '</td></tr><tr id="help_screenshotsize"'.$display.'>'.
+ '<td>'.&mt('Maximum size for upload (MB)').'</td><td>'.
+ '<input type="text" size="5" name="helpform_maxsize" value="'.$maxsize.'" />';
+ }
+ $datatable .= '</td></tr>';
+ }
+ $datatable .= '</table>';
+ }
+ $datatable .= '</td></tr>'."\n";
+ $rownum ++;
+ }
+ unless ($position eq 'top') {
foreach my $type (@mailings) {
$css_class = $rownum%2?' class="LC_odd_row"':'';
$datatable .= '<tr'.$css_class.'>'.
@@ -3028,56 +3075,138 @@
\%choices,$rownum);
$datatable .= $reports;
} elsif ($position eq 'bottom') {
- $css_class = $rownum%2?' class="LC_odd_row"':'';
- $datatable .= '<tr'.$css_class.'>'.
- '<td>'.&mt('Extra helpdesk form fields:').'<br />'.
- &mt('(e-mail, subject, and description always shown)').
- '</td><td class="LC_left_item">';
- if ((ref($fields) eq 'ARRAY') && (ref($fieldtitles) eq 'HASH') &&
- (ref($fieldoptions) eq 'HASH') && (ref($possoptions) eq 'HASH')) {
- $datatable .= '<table><tr><th>'.&mt('Field').'</th><th>'.&mt('Status').'</th></tr>';
- foreach my $field (@{$fields}) {
- $datatable .= '<tr><td>'.$fieldtitles->{$field};
- if (($field eq 'screenshot') || ($field eq 'cc')) {
- $datatable .= ' '.&mt('(logged-in users)');
- }
- $datatable .='</td><td>';
- my $clickaction;
- if ($field eq 'screenshot') {
- $clickaction = ' onclick="screenshotSize(this);"';
- }
- if (ref($possoptions->{$field}) eq 'ARRAY') {
- foreach my $option (@{$possoptions->{$field}}) {
- my $checked;
- if ($currfield{$field} eq $option) {
- $checked = ' checked="checked"';
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ my (@posstypes,%usertypeshash);
+ if (ref($types) eq 'ARRAY') {
+ @posstypes = @{$types};
+ }
+ if (@posstypes) {
+ if (ref($usertypes) eq 'HASH') {
+ %usertypeshash = %{$usertypes};
+ }
+ my @overridden;
+ my $numinrow = 4;
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{'overrides'}) eq 'HASH') {
+ foreach my $key (sort(keys(%{$settings->{'overrides'}}))) {
+ if (ref($settings->{'overrides'}{$key}) eq 'HASH') {
+ push(@overridden,$key);
+ foreach my $item (@contacts) {
+ if ($settings->{'overrides'}{$key}{$item}) {
+ $checked{'override_'.$key}{$item} = ' checked="checked" ';
+ }
+ }
+ $otheremails{'override_'.$key} = $settings->{'overrides'}{$key}{'others'};
+ $bccemails{'override_'.$key} = $settings->{'overrides'}{$key}{'bcc'};
+ $includeloc{'override_'.$key} = '';
+ $includestr{'override_'.$key} = '';
+ if ($settings->{'overrides'}{$key}{'include'} ne '') {
+ ($includeloc{'override_'.$key},$includestr{'override_'.$key}) =
+ split(/:/,$settings->{'overrides'}{$key}{'include'},2);
+ $includestr{'override_'.$key} = &unescape($includestr{'override_'.$key});
+ }
}
- $datatable .= '<span class="LC_nobreak"><label>'.
- '<input type="radio" name="helpform_'.$field.'" '.
- 'value="'.$option.'"'.$checked.$clickaction.' />'.$fieldoptions->{$option}.
- '</label></span>'.(' 'x2);
}
}
- if ($field eq 'screenshot') {
- my $display;
- if ($currfield{$field} eq 'no') {
- $display = ' style="display:none"';
- }
- $datatable .= '</td></tr><tr id="help_screenshotsize"'.$display.'>'.
- '<td>'.&mt('Maximum size for upload (MB)').'</td><td>'.
- '<input type="text" size="5" name="helpform_maxsize" value="'.$maxsize.'" />';
+ }
+ my $customclass = 'LC_helpdesk_override';
+ my $optionsprefix = 'LC_options_helpdesk_';
+
+ my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');";
+
+ $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
+ $numinrow,$othertitle,'overrides',
+ \$rownum,$onclicktypes,$customclass);
+ $rownum ++;
+ $usertypeshash{'default'} = $othertitle;
+ foreach my $status (@posstypes) {
+ my $css_class;
+ if ($rownum%2) {
+ $css_class = 'LC_odd_row ';
+ }
+ $css_class .= $customclass;
+ my $rowid = $optionsprefix.$status;
+ my $hidden = 1;
+ my $currstyle = 'display:none';
+ if (grep(/^\Q$status\E$/, at overridden)) {
+ $currstyle = 'display:table-row';
+ $hidden = 0;
+ }
+ my $key = 'override_'.$status;
+ $datatable .= &overridden_helpdesk($checked{$key},$otheremails{$key},$bccemails{$key},
+ $includeloc{$key},$includestr{$key},$status,$rowid,
+ $usertypeshash{$status},$css_class,$currstyle,
+ \@contacts,$short_titles);
+ unless ($hidden) {
+ $rownum ++;
}
- $datatable .= '</td></tr>';
}
- $datatable .= '</table>';
}
- $datatable .= '</td></tr>'."\n";
- $rownum ++;
}
$$rowtotal += $rownum;
return $datatable;
}
+sub overridden_helpdesk {
+ my ($checked,$otheremails,$bccemails,$includeloc,$includestr,$type,$rowid,
+ $typetitle,$css_class,$rowstyle,$contacts,$short_titles) = @_;
+ my $class = 'LC_left_item';
+ if ($css_class) {
+ $css_class = ' class="'.$css_class.'"';
+ }
+ if ($rowid) {
+ $rowid = ' id="'.$rowid.'"';
+ }
+ if ($rowstyle) {
+ $rowstyle = ' style="'.$rowstyle.'"';
+ }
+ my ($output,$description);
+ $description = &mt('Helpdesk requests from: [_1] in this domain (overrides default)',"<b>$typetitle</b>");
+ $output = '<tr'.$css_class.$rowid.$rowstyle.'>'.
+ "<td>$description</td>\n".
+ '<td class="'.$class.'" colspan="2">'.
+ '<fieldset><legend>'.&mt('E-mail recipient(s)').'</legend>'.
+ '<span class="LC_nobreak">';
+ if (ref($contacts) eq 'ARRAY') {
+ foreach my $item (@{$contacts}) {
+ my $check;
+ if (ref($checked) eq 'HASH') {
+ $check = $checked->{$item};
+ }
+ my $title;
+ if (ref($short_titles) eq 'HASH') {
+ $title = $short_titles->{$item};
+ }
+ $output .= '<label>'.
+ '<input type="checkbox" name="override_'.$type.'"'.$check.
+ ' value="'.$item.'" />'.$title.'</label> ';
+ }
+ }
+ $output .= '</span><br />'.&mt('Others').': '.
+ '<input type="text" name="override_'.$type.'_others" '.
+ 'value="'.$otheremails.'" />';
+ my %locchecked;
+ foreach my $loc ('s','b') {
+ if ($includeloc eq $loc) {
+ $locchecked{$loc} = ' checked="checked"';
+ last;
+ }
+ }
+ $output .= '<br />'.&mt('Bcc:').(' 'x6).
+ '<input type="text" name="override_'.$type.'_bcc" '.
+ 'value="'.$bccemails.'" /></fieldset>'.
+ '<fieldset><legend>'.&mt('Optional added text').'</legend>'.
+ &mt('Text automatically added to e-mail:').' '.
+ '<input type="text" name="override_'.$type.'_includestr" value="'.$includestr.'" /><br />'.
+ '<span class="LC_nobreak">'.&mt('Location:').' '.
+ '<label><input type="radio" name="override_'.$type.'_includeloc" value="s"'.$locchecked{'s'}.' />'.&mt('in subject').'</label>'.
+ (' 'x2).
+ '<label><input type="radio" name="override_'.$type.'_includeloc" value="b"'.$locchecked{'b'}.' />'.&mt('in body').'</label>'.
+ '</span></fieldset>'.
+ '</td></tr>'."\n";
+ return $output;
+}
+
sub contacts_javascript {
return <<"ENDSCRIPT";
@@ -3095,6 +3224,36 @@
return;
}
+function toggleHelpdeskRow(form,checkbox,target,prefix,docount) {
+ if (form.elements[checkbox].length != undefined) {
+ var count = 0;
+ if (docount) {
+ for (var i=0; i<form.elements[checkbox].length; i++) {
+ if (form.elements[checkbox][i].checked) {
+ count ++;
+ }
+ }
+ }
+ for (var i=0; i<form.elements[checkbox].length; i++) {
+ var type = form.elements[checkbox][i].value;
+ if (document.getElementById(prefix+type)) {
+ if (form.elements[checkbox][i].checked) {
+ document.getElementById(prefix+type).style.display = 'table-row';
+ if (count % 2 == 1) {
+ document.getElementById(prefix+type).className = target+' LC_odd_row';
+ } else {
+ document.getElementById(prefix+type).className = target;
+ }
+ count ++;
+ } else {
+ document.getElementById(prefix+type).style.display = 'none';
+ }
+ }
+ }
+ }
+ return;
+}
+
// ]]>
</script>
@@ -5293,8 +5452,8 @@
'adminemail' => 'Default Server Admin E-mail address',
'errormail' => 'Error reports to be e-mailed to',
'packagesmail' => 'Package update alerts to be e-mailed to',
- 'helpdeskmail' => "Helpdesk requests for this domain's users",
- 'otherdomsmail' => 'Helpdesk requests for other (unconfigured) domains',
+ 'helpdeskmail' => "Helpdesk requests from all users in this domain",
+ 'otherdomsmail' => 'Helpdesk requests from users in other (unconfigured) domains',
'lonstatusmail' => 'E-mail from nightly status check (warnings/errors)',
'requestsmail' => 'E-mail from course requests requiring approval',
'updatesmail' => 'E-mail from nightly check of LON-CAPA module integrity/updates',
@@ -7617,6 +7776,7 @@
statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)',
lockablenames => 'User preference to lock name',
selfassign => 'Self-reportable affiliations',
+ overrides => "Override domain's helpdesk settings based on requester's affiliation",
);
my $showdom;
if ($context eq 'cansearch') {
@@ -7663,6 +7823,10 @@
if (grep(/^\Q$types->[$i]\E$/,@{$settings->{$context}})) {
$check = ' checked="checked" ';
}
+ } elsif (ref($settings->{$context}) eq 'HASH') {
+ if (ref($settings->{$context}->{$types->[$i]}) eq 'HASH') {
+ $check = ' checked="checked" ';
+ }
} elsif ($context eq 'statustocreate') {
$check = ' checked="checked" ';
}
@@ -7677,29 +7841,38 @@
$rem = @{$types}%($numinrow);
}
my $colsleft = $numinrow - $rem;
- if ($rem == 0) {
- $output .= '<tr>';
- }
- if ($colsleft > 1) {
- $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
+ if ($context eq 'overrides') {
+ if ($colsleft > 1) {
+ $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
+ } else {
+ $output .= '<td class="LC_left_item">';
+ }
+ $output .= ' ';
} else {
- $output .= '<td class="LC_left_item">';
- }
- my $defcheck = ' ';
- if (ref($settings) eq 'HASH') {
- if (ref($settings->{$context}) eq 'ARRAY') {
- if (grep(/^default$/,@{$settings->{$context}})) {
+ if ($rem == 0) {
+ $output .= '<tr>';
+ }
+ if ($colsleft > 1) {
+ $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
+ } else {
+ $output .= '<td class="LC_left_item">';
+ }
+ my $defcheck = ' ';
+ if (ref($settings) eq 'HASH') {
+ if (ref($settings->{$context}) eq 'ARRAY') {
+ if (grep(/^default$/,@{$settings->{$context}})) {
+ $defcheck = ' checked="checked" ';
+ }
+ } elsif ($context eq 'statustocreate') {
$defcheck = ' checked="checked" ';
}
- } elsif ($context eq 'statustocreate') {
- $defcheck = ' checked="checked" ';
}
+ $output .= '<span class="LC_nobreak"><label>'.
+ '<input type="checkbox" name="'.$context.'" '.
+ 'value="default"'.$defcheck.$onclick.' />'.
+ $othertitle.'</label></span>';
}
- $output .= '<span class="LC_nobreak"><label>'.
- '<input type="checkbox" name="'.$context.'" '.
- 'value="default"'.$defcheck.$onclick.'/>'.
- $othertitle.'</label></span></td>'.
- '</tr></table></td></tr>';
+ $output .= '</td></tr></table></td></tr>';
return $output;
}
@@ -10331,17 +10504,57 @@
my $value = $env{'form.helpform_'.$field};
$value =~ s/^\s+|\s+$//g;
if (grep(/^\Q$value\E$/,@{$possoptions->{$field}})) {
- $contacts_hash{contacts}{'helpform'}{$field} = $value;
+ $contacts_hash{'contacts'}{'helpform'}{$field} = $value;
if ($field eq 'screenshot') {
$env{'form.helpform_maxsize'} =~ s/^\s+|\s+$//g;
if ($env{'form.helpform_maxsize'} =~ /^\d+\.?\d*$/) {
- $contacts_hash{contacts}{'helpform'}{'maxsize'} = $env{'form.helpform_maxsize'};
+ $contacts_hash{'contacts'}{'helpform'}{'maxsize'} = $env{'form.helpform_maxsize'};
}
}
}
}
}
}
+ my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+ my (@statuses,%usertypeshash, at overrides);
+ if ((ref($types) eq 'ARRAY') && (@{$types} > 0)) {
+ @statuses = @{$types};
+ if (ref($usertypes) eq 'HASH') {
+ %usertypeshash = %{$usertypes};
+ }
+ }
+ if (@statuses) {
+ my @possoverrides = &Apache::loncommon::get_env_multiple('form.overrides');
+ foreach my $type (@possoverrides) {
+ if (($type ne '') && (grep(/^\Q$type\E$/, at statuses))) {
+ push(@overrides,$type);
+ }
+ }
+ if (@overrides) {
+ foreach my $type (@overrides) {
+ my @standard = &Apache::loncommon::get_env_multiple('form.override_'.$type);
+ foreach my $item (@contacts) {
+ if (grep(/^\Q$item\E$/, at standard)) {
+ $contacts_hash{'contacts'}{'overrides'}{$type}{$item} = 1;
+ $newsetting{'override_'.$type}{$item} = 1;
+ } else {
+ $contacts_hash{'contacts'}{'overrides'}{$type}{$item} = 0;
+ $newsetting{'override_'.$type}{$item} = 0;
+ }
+ }
+ $contacts_hash{'contacts'}{'overrides'}{$type}{'others'} = $env{'form.override_'.$type.'_others'};
+ $contacts_hash{'contacts'}{'overrides'}{$type}{'bcc'} = $env{'form.override_'.$type.'_bcc'};
+ $newsetting{'override_'.$type}{'others'} = $env{'form.override_'.$type.'_others'};
+ $newsetting{'override_'.$type}{'bcc'} = $env{'form.override_'.$type.'_bcc'};
+ if (($env{'form.override_'.$type.'_includestr'} ne '') && ($env{'form.override_'.$type.'_includeloc'} =~ /^s|b$/)) {
+ $includestr{$type} = $env{'form.override_'.$type.'_includestr'};
+ $includeloc{$type} = $env{'form.override_'.$type.'_includeloc'};
+ $contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type});
+ $newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'};
+ }
+ }
+ }
+ }
if (keys(%currsetting) > 0) {
foreach my $item (@contacts) {
if ($to{$item} ne $currsetting{$item}) {
@@ -10396,6 +10609,33 @@
}
}
}
+ if (@statuses) {
+ if (ref($currsetting{'overrides'}) eq 'HASH') {
+ foreach my $key (keys(%{$currsetting{'overrides'}})) {
+ if (ref($currsetting{'overrides'}{$key}) eq 'HASH') {
+ if (ref($newsetting{'override_'.$key}) eq 'HASH') {
+ foreach my $item (@contacts,'bcc','others','include') {
+ if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) {
+ push(@{$changes{'overrides'}},$key);
+ last;
+ }
+ }
+ } else {
+ push(@{$changes{'overrides'}},$key);
+ }
+ }
+ }
+ foreach my $key (@overrides) {
+ unless (exists($currsetting{'overrides'}{$key})) {
+ push(@{$changes{'overrides'}},$key);
+ }
+ }
+ } else {
+ foreach my $key (@overrides) {
+ push(@{$changes{'overrides'}},$key);
+ }
+ }
+ }
} else {
my %default;
$default{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
@@ -10511,6 +10751,60 @@
$resulttext .= '</li>';
}
}
+ if (ref($changes{'overrides'}) eq 'ARRAY') {
+ my @deletions;
+ foreach my $type (@{$changes{'overrides'}}) {
+ if ($usertypeshash{$type}) {
+ if (grep(/^\Q$type\E/, at overrides)) {
+ $resulttext .= '<li>'.&mt("Overrides based on requester's affiliation set for [_1]",
+ $usertypeshash{$type}).'<ul><li>';
+ if (ref($newsetting{'override_'.$type}) eq 'HASH') {
+ my @text;
+ foreach my $item (@contacts) {
+ if ($newsetting{'override_'.$type}{$item}) {
+ push(@text,$short_titles->{$item});
+ }
+ }
+ if ($newsetting{'override_'.$type}{'others'} ne '') {
+ push(@text,$newsetting{'override_'.$type}{'others'});
+ }
+
+ if (@text) {
+ $resulttext .= &mt('Helpdesk e-mail sent to: [_1]',
+ '<span class="LC_cusr_emph">'.join(', ', at text).'</span>');
+ }
+ if ($newsetting{'override_'.$type}{'bcc'} ne '') {
+ my $bcctext;
+ if (@text) {
+ $bcctext = ' '.&mt('with Bcc to');
+ } else {
+ $bcctext = '(Bcc)';
+ }
+ $resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$newsetting{'override_'.$type}{'bcc'}.'</span>';
+ } elsif (!@text) {
+ $resulttext .= &mt('Helpdesk e-mail sent to no one');
+ }
+ $resulttext .= '</li>';
+ if ($newsetting{'override_'.$type}{'include'} ne '') {
+ my ($loc,$str) = split(/:/,$newsetting{'override_'.$type}{'include'});
+ if ($loc eq 'b') {
+ $resulttext .= '<li>'.&mt('Text automatically added to e-mail body:').' '.&unescape($str).'</li>';
+ } elsif ($loc eq 's') {
+ $resulttext .= '<li>'.&mt('Text automatically added to e-mail subject:').' '.&unescape($str).'</li>';
+ }
+ }
+ }
+ $resulttext .= '</li></ul></li>';
+ } else {
+ push(@deletions,$usertypeshash{$type});
+ }
+ }
+ }
+ if (@deletions) {
+ $resulttext .= '<li>'.&mt("Overrides based on requester's affiliation discontinued for: [_1]",
+ join(', ', at deletions)).'</li>';
+ }
+ }
my @offon = ('off','on');
if ($changes{'reporterrors'}) {
$resulttext .= '<li>'.
@@ -10566,7 +10860,6 @@
&mt('Max size for file uploaded to help form by logged-in user set to [_1] MB.',
$contacts_hash{'contacts'}{'helpform'}{'maxsize'}).
'</li>';
-
}
}
$resulttext .= '</ul>';
More information about the LON-CAPA-cvs
mailing list