[prev in list] [next in list] [prev in thread] [next in thread]
List: lon-capa-cvs
Subject: [LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface domainprefs.pm
From: raeburn <raeburn () source ! lon-capa ! org>
Date: 2019-08-27 23:27:11
Message-ID: cvsraeburn1566948431 () cvsserver
[Download RAW message or body]
This is a MIME encoded message
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
["raeburn-20190827232711.txt" (text/plain)]
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$/,@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,@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$/,@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$/,@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/,@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(', ',@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(', ',@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>';
_______________________________________________
LON-CAPA-cvs mailing list
LON-CAPA-cvs@mail.lon-capa.org
http://mail.lon-capa.org/mailman/listinfo/lon-capa-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic