--- loncom/interface/lonsupportreq.pm 2017/01/18 21:07:31 1.85
+++ loncom/interface/lonsupportreq.pm 2017/01/23 17:23:03 1.87
@@ -1,5 +1,7 @@
+# The LearningOnline Network with CAPA
+# Helpdesk request form
#
-# $Id: lonsupportreq.pm,v 1.85 2017/01/18 21:07:31 raeburn Exp $
+# $Id: lonsupportreq.pm,v 1.87 2017/01/23 17:23:03 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -83,7 +85,7 @@ sub print_request_form {
my ($os,$browser,$bversion,$uname,$udom,$uhome,$urole,$usec,$email,$cid,
$cdom,$cnum,$ctitle,$ccode,$sectionlist,$lastname,$firstname,$server,
$formname,$public,$homeserver,$knownuser,$captcha_form,$captcha_error,
- $captcha,$recaptcha_version);
+ $captcha,$recaptcha_version,$extra_validations,%groupid);
$function = &Apache::loncommon::get_users_function() if (!$function);
$ccode = '';
$os = $env{'browser.os'};
@@ -111,13 +113,106 @@ sub print_request_form {
($captcha_form,$captcha_error,$captcha,$recaptcha_version) =
&Apache::loncommon::captcha_display('login',$lonhost);
}
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['codedom',
+ 'useremail','useraccount']);
+
if ($homeserver) {
$uhome = $env{'user.home'};
$urole = $env{'request.role'};
$usec = $env{'request.course.sec'};
$cid = $env{'request.course.id'};
}
+ if ($cid) {
+ $cdom = $env{'course.'.$cid.'.domain'};
+ $cnum = $env{'course.'.$cid.'.num'};
+ }
+ if ($cdom && $cnum) {
+ my %csettings = &Apache::lonnet::get('environment',['description','internal.coursecode','internal.sectionnums'],$cdom,$cnum);
+ $ctitle = $csettings{'description'};
+ $ccode = $csettings{'internal.coursecode'};
+ $sectionlist = $csettings{'internal.sectionnums'};
+ my @sections = split(/,/,$sectionlist);
+ foreach my $section (@sections) {
+ my ($sec,$grp) = split(/:/,$section);
+ $groupid{$sec} = $grp;
+ }
+ }
+
$formname = 'logproblem';
+ my $codedom = &get_domain();
+ my %helpform;
+ my %domconfig =
+ &Apache::lonnet::get_dom('configuration',['contacts'],$codedom);
+ if (ref($domconfig{'contacts'}) eq 'HASH') {
+ if (ref($domconfig{'contacts'}{'helpform'}) eq 'HASH') {
+ %helpform = %{$domconfig{'contacts'}{'helpform'}};
+ }
+ }
+
+ my %coursecodes;
+ my %codes;
+ my @codetitles;
+ my %cat_titles;
+ my %cat_order;
+ my %idlist;
+ my %idnums;
+ my %idlist_titles;
+ my $caller = 'global';
+ my $totcodes = 0;
+ my $format_reply;
+ my $jscript = '';
+ my $loaditems = qq|
+function initialize_codes() {
+ return;
+}
+ |;
+ unless ($helpform{'course'} eq 'no') {
+ $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom);
+ if ($totcodes > 0) {
+ $format_reply = &Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order);
+ if ($format_reply eq 'ok') {
+ my $numtypes = @codetitles;
+ &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);
+ my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);
+ my $longtitles_str = join('","',@{$longtitles});
+ my $allidlist = $idlist{$codetitles[0]};
+ my $knowncodes;
+ if (($ccode ne '') && ($cnum ne '')) {
+ my (%singlecodes,@singlecodetitles,%singlecat_titles,%singlecat_order);
+ my $crscode_reply = &Apache::lonnet::auto_instcode_format($cnum,$codedom,{ $cnum => $ccode },\%singlecodes,
+ \@singlecodetitles,\%singlecat_titles,\%singlecat_order);
+ if (ref($singlecodes{$cnum}) eq 'HASH') {
+ $knowncodes = $singlecodes{$cnum};
+ }
+ }
+ $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist);
+ $jscript .= $scripttext;
+ $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,\@codetitles,$knowncodes,$sectionlist);
+ $loaditems = '';
+ }
+ }
+ }
+ my %missing = &Apache::lonlocal::texthash(
+ username => 'You must include a name.',
+ phone => 'You must include a phone.',
+ );
+ &js_escape(\%missing);
+ if (keys(%helpform)) {
+ foreach my $key (keys(%helpform)) {
+ if (($helpform{$key} eq 'req') && ($missing{$key} ne '')) {
+ next if (($key eq 'username') && (($knownuser) ||
+ (($env{'user.name'} =~ /^$match_username$/) && (!$public))));
+ $extra_validations .= <<"END";
+
+ if (document.$formname.$key.value == '') {
+ alert("$missing{$key}");
+ return;
+ }
+
+END
+ }
+ }
+ }
my $machine = &Apache::lonnet::absolute_url();
my $sourceurl = $machine.$origurl;
$server = $machine.&Apache::loncommon::cleanup_html($origurl);
@@ -132,7 +227,7 @@ sub print_request_form {
name => 'Name',
subm => 'Submit Request',
emad => 'Your e-mail address',
- emac => 'Cc',
+ emac => 'Cc',
unme => 'username',
doma => 'domain',
entu => 'Enter the username you use to log-in to LON-CAPA',
@@ -151,7 +246,7 @@ sub print_request_form {
subj => 'Subject',
detd => 'Detailed Description',
opfi => 'Optional file upload',
- uplf => 'Upload a file (e.g., a screenshot) relevant to your help request (1 MB max.)',
+ uplf => 'Upload a file (e.g., a screenshot) relevant to your help request',
fini => 'Finish',
clfm => 'Clear Form',
);
@@ -171,21 +266,12 @@ function validate() {
alert("$js_lt{'rdes'}.");
return;
}
+ $extra_validations
document.logproblem.submit();
}
END
$scripttag .= &Apache::lonhtmlcommon::javascript_valid_email();
- if ($cid) {
- $cdom = $env{'course.'.$cid.'.domain'};
- $cnum = $env{'course.'.$cid.'.num'};
- }
- if ($cdom && $cnum) {
- my %csettings = &Apache::lonnet::get('environment',['description','internal.coursecode','internal.sectionnums'],$cdom,$cnum);
- $ctitle = $csettings{'description'};
- $ccode = $csettings{'internal.coursecode'};
- $sectionlist = $csettings{'internal.sectionnums'};
- }
if ($homeserver) {
if ($env{'environment.permanentemail'}) {
@@ -202,14 +288,6 @@ END
$firstname = $env{'environment.firstname'};
}
}
- my @sections = split(/,/,$sectionlist);
- my %groupid;
- foreach my $section (@sections) {
- my ($sec,$grp) = split(/:/,$section);
- $groupid{$sec} = $grp;
- }
- &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['codedom',
- 'useremail','useraccount']);
if ($env{'form.origurl'} eq '/adm/createaccount') {
if ($email eq '') {
if ($env{'form.useremail'} =~ /^[^\@]+\@[^\@]+$/) {
@@ -222,57 +300,11 @@ END
}
}
}
- my $codedom = &get_domain();
my $details_title;
if ($codedom) {
$details_title = '
('.$codedom.')';
}
- my %coursecodes;
- my %codes;
- my @codetitles;
- my %cat_titles;
- my %cat_order;
- my %idlist;
- my %idnums;
- my %idlist_titles;
- my $caller = 'global';
- my $totcodes = 0;
- my $format_reply;
- my $jscript = '';
- my $loaditems = qq|
-function initialize_codes() {
- return;
-}
- |;
- if ($cnum) {
- $coursecodes{$cnum} = $ccode;
- if ($ccode eq '') {
- $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom,$totcodes);
- } else {
- $coursecodes{$cnum} = $ccode;
- $caller = $cnum;
- $totcodes ++;
- }
- } else {
- $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$codedom,$totcodes);
- }
- if ($totcodes > 0) {
- if ($ccode eq '') {
- $format_reply = &Apache::lonnet::auto_instcode_format($caller,$codedom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order);
- if ($format_reply eq 'ok') {
- my $numtypes = @codetitles;
- &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);
- my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles);
- my $longtitles_str = join('","',@{$longtitles});
- my $allidlist = $idlist{$codetitles[0]};
- $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist);
- $jscript .= $scripttext;
- $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,\@codetitles);
- $loaditems = '';
- }
- }
- }
-
+
my $js = <<"ENDJS";