--- loncom/interface/lonsupportreq.pm 2017/01/18 21:07:31 1.85 +++ loncom/interface/lonsupportreq.pm 2017/01/18 21:24:40 1.86 @@ -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.86 2017/01/18 21:24:40 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', @@ -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";