--- loncom/interface/lonsupportreq.pm 2012/02/10 19:22:19 1.66.6.2 +++ loncom/interface/lonsupportreq.pm 2012/04/18 17:30:24 1.67 @@ -1,5 +1,5 @@ # -# $Id: lonsupportreq.pm,v 1.66.6.2 2012/02/10 19:22:19 raeburn Exp $ +# $Id: lonsupportreq.pm,v 1.67 2012/04/18 17:30:24 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use Apache::lonhtmlcommon; use Apache::lonnet; use Apache::lonlocal; use Apache::lonacc(); +use Apache::courseclassifier; use LONCAPA qw(:DEFAULT :match); @@ -69,9 +70,11 @@ sub handler { sub print_request_form { my ($r,$origurl,$function) = @_; - my ($os,$browser,$bversion,$uhost,$uname,$udom,$uhome,$email, - $lastname,$firstname,$server,$formname,$public); + my ($os,$browser,$bversion,$uhost,$uname,$udom,$uhome,$urole,$usec,$email,$cid, + $cdom,$cnum,$ctitle,$ccode,$sectionlist,$lastname,$firstname,$server, + $formname,$public,$homeserver); $function = &Apache::loncommon::get_users_function() if (!$function); + $ccode = ''; $os = $env{'browser.os'}; $browser = $env{'browser.type'}; $bversion = $env{'browser.version'}; @@ -79,10 +82,23 @@ sub print_request_form { if (($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) { $public = 1; } else { - $uname = $env{'user.name'}; - $udom = $env{'user.domain'}; + if (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')) { + $homeserver = &Apache::lonnet::homeserver($env{'user.name'}, + $env{'user.domain'}); + if ($homeserver eq 'no_host') { + undef($homeserver); + } else { + $uname = $env{'user.name'}; + $udom = $env{'user.domain'}; + } + } + } + if ($homeserver) { + $uhome = $env{'user.home'}; + $urole = $env{'request.role'}; + $usec = $env{'request.course.sec'}; + $cid = $env{'request.course.id'}; } - $uhome = $env{'user.home'}; $formname = 'logproblem'; my $machine = &Apache::lonnet::absolute_url(); if ($origurl =~ m-^https?://-) { @@ -108,7 +124,14 @@ sub print_request_form { entr => 'Enter the username you use to log-in to LON-CAPA, and your domain.', urlp => 'URL of page', phon => 'Phone', + crsd => 'Course Details', + enin => 'Enter institutional course code', pick => 'Pick', + enct => 'Enter course title', + secn => 'Section Number', + sele => 'Select', + titl => 'Title', + lsec => 'LON-CAPA sec', subj => 'Subject', detd => 'Detailed Description', opfi => 'Optional file upload', @@ -135,21 +158,38 @@ function validate() { END $scripttag .= &Apache::lonhtmlcommon::javascript_valid_email(); - - if ($env{'environment.permanentemail'}) { - $email = $env{'environment.permanentemail'}; - } elsif ($env{'environment.critnotification'}) { - $email = $env{'environment.critnotification'}; - } elsif ($env{'environment.notification'}) { - $email = $env{'environment.notification'}; + 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'}) { + $email = $env{'environment.permanentemail'}; + } elsif ($env{'environment.critnotification'}) { + $email = $env{'environment.critnotification'}; + } elsif ($env{'environment.notification'}) { + $email = $env{'environment.notification'}; + } + if ($env{'environment.lastname'}) { + $lastname = $env{'environment.lastname'}; + } + if ($env{'environment.firstname'}) { + $firstname = $env{'environment.firstname'}; + } + } + my @sections = split(/,/,$sectionlist); + my %groupid; + foreach my $section (@sections) { + my ($sec,$grp) = split(/:/,$section); + $groupid{$sec} = $grp; } - if ($env{'environment.lastname'}) { - $lastname = $env{'environment.lastname'}; - } - if ($env{'environment.firstname'}) { - $firstname = $env{'environment.firstname'}; - } - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['codedom', 'useremail','useraccount']); if ($env{'form.origurl'} eq '/adm/createaccount') { @@ -165,14 +205,70 @@ 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 $js = ''; - my %add_entries = (topmargin => "0", - marginheight => "0", - ); + 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"; + +ENDJS + my %add_entries = ( + style => "margin-top:0px;margin-bottom:0px;", + onload => "initialize_codes();", + ); + $r->print(&Apache::loncommon::start_page('Support Request',$js, { 'function' => $function, @@ -184,20 +280,24 @@ END my @css = ('LC_evenrow_value','LC_oddrow_value'); my $num = 1; my $i = $num%2; - $r->print('
'."\n"); + my $formtype; + if ($homeserver) { + $formtype = ' enctype="multipart/form-data"'; + } + $r->print(''."\n"); my $output = &Apache::lonhtmlcommon::start_pick_box(). &Apache::lonhtmlcommon::row_title($lt{'name'},undef,$css[$num])."\n"; my $fullname = ''; if ((defined($lastname) && $lastname ne '') && (defined($firstname) && $firstname ne '')) { $fullname = "$firstname $lastname"; - $output .= $fullname.'&').'" />'; + $output .= $fullname.'&').'" />'."\n"; } else { if (defined($firstname) && $firstname ne '') { $fullname = $firstname; } elsif (defined($lastname) && $lastname ne '') { $fullname = " $lastname"; } - $output .= '&').'" />'; + $output .= '&').'" />'."\n"; } $output .= '      '. &Apache::lonhtmlcommon::row_closure()."\n"; @@ -210,17 +310,19 @@ END $num ++; $i = $num%2; if (($env{'user.name'} =~ /^$match_username$/) && (!$public)) { - $output .= &Apache::lonhtmlcommon::row_title($lt{'emac'},undef,$css[$i]). - '
'."\n". - &Apache::lonhtmlcommon::row_closure(); - $num ++; - $i = $num%2; + if ($homeserver) { + $output .= &Apache::lonhtmlcommon::row_title($lt{'emac'},undef,$css[$i]). + '
'."\n". + &Apache::lonhtmlcommon::row_closure(); + $num ++; + $i = $num%2; + } } $output .= &Apache::lonhtmlcommon::row_title("$lt{'unme'}/$lt{'doma'}",undef,$css[$i]); my $udom_input = '&').'" />'; + &HTML::Entities::encode($udom,'"<>&').'" />'."\n"; my $uname_input = '&').'" />'; + &HTML::Entities::encode($uname,'"<>&').'" />'."\n"; if (($env{'user.name'} =~ /^$match_username$/) && ($env{'user.domain'} =~ /^$match_domain$/) && (!$public)) { $output .= ''.$lt{'unme'}.': '.$uname.'  '.$lt{'doma'}.': '.$udom.$udom_input.$uname_input; @@ -234,7 +336,7 @@ END } else { $output .= $lt{'entr'}; } - $output .= '
'; + $output .= '
'."\n"; if (!$public) { if ($env{'user.domain'} =~ /^$match_domain$/) { $udomform = ''.$lt{'doma'}.': '.$udom.$udom_input; @@ -244,7 +346,7 @@ END } if ($udomform eq '') { $udomform = ''.$lt{'doma'}.': '; - $udomform .= &Apache::loncommon::select_dom_form($codedom,'udom'); + $udomform .= &Apache::loncommon::select_dom_form($codedom,'udom')."\n"; } if ($unameform eq '') { $unameform= ''.$lt{'unme'}.'  '; @@ -255,31 +357,136 @@ END $num ++; $i = $num%2; $output .= &Apache::lonhtmlcommon::row_title("$lt{'urlp'}",undef,$css[$i]). - $showserver.'&').'" />'. + $showserver."\n".'&').'" />'."\n". + &Apache::lonhtmlcommon::row_closure(). + &Apache::lonhtmlcommon::row_title("$lt{'phon'}",undef,'LC_evenrow_value'). + '
'."\n". &Apache::lonhtmlcommon::row_closure(); $num ++; - $i = $num%2; - $output .= &Apache::lonhtmlcommon::row_title("$lt{'phon'}",undef, - 'LC_evenrow_value'). - '
'. - &Apache::lonhtmlcommon::row_closure(); + $i = $num%2; + $output .= &Apache::lonhtmlcommon::row_title("$lt{'crsd'}$details_title",undef,$css[$i]); + if ($cnum) { + if ($coursecodes{$cnum}) { + foreach my $item (@codetitles) { + $output .= ''.$item.': '.$codes{$cnum}{$item}.'; '; + } + $output .= ' &').'" />'."\n"; + } else { + $output .= $lt{'enin'}.':  + '."\n"; + } + } else { + if ($totcodes > 0) { + my $numtitles = @codetitles; + if ($numtitles == 0) { + $output .= $lt{'enin'}.':  + '."\n"; + } else { + my @standardnames = &Apache::loncommon::get_standard_codeitems(); + my $lasttitle = $numtitles; + if ($numtitles > 4) { + $lasttitle = 4; + } + $output .= ''; + for (my $i=1; $i<$numtitles; $i++) { + $output .= ''."\n"; + } + $output .= '
'.$codetitles[0].'
'."\n". + '
'.$codetitles[$i].'
'."\n". + ''."\n". + '
'; + if ($numtitles > 4) { + $output .= '

'.$codetitles[$numtitles].'
'."\n". + ''."\n"; + } + } + } else { + $output .= $lt{'enin'}.':  + '."\n"; + } + } + if ($ctitle) { + $output .= '
'.$lt{'titl'}.': '.$ctitle. + '&').'" />'."\n"; + } else { + $output .= '
'.$lt{'enct'}.':  + '."\n"; + } + $output .= &Apache::lonhtmlcommon::row_closure(); $num ++; $i = $num%2; + $output .= &Apache::lonhtmlcommon::row_title($lt{'secn'},undef,$css[$i]); + if ($sectionlist) { + $output .= ""; + } else { + $output .= ''."\n"; + } + $output .= &Apache::lonhtmlcommon::row_closure(); + $num ++; + $i = $num%2; $output .= &Apache::lonhtmlcommon::row_title($lt{'subj'},undef,'LC_oddrow_value'). ' '."\n". &Apache::lonhtmlcommon::row_closure(). &Apache::lonhtmlcommon::row_title($lt{'detd'},undef,'LC_evenrow_value'). - ' '. + ' '."\n". &Apache::lonhtmlcommon::row_closure(); $num ++; $i = $num%2; if (($env{'user.name'} =~ /^$match_username$/) && (!$public)) { - $output .= &Apache::lonhtmlcommon::row_title($lt{'opfi'},undef,$css[$i]). - '
'.$lt{'uplf'}."\n". - &Apache::lonhtmlcommon::row_closure(); - $num ++; - $i = $num%2; + if ($homeserver) { + $output .= &Apache::lonhtmlcommon::row_title($lt{'opfi'},undef,$css[$i]). + '
'. + "\n".$lt{'uplf'}."\n". + &Apache::lonhtmlcommon::row_closure(); + $num ++; + $i = $num%2; + } } $output .= &Apache::lonhtmlcommon::row_title($lt{'fini'},undef,$css[$i]); $output .= < 0) { + my $noregexps = 1; + $coursecode = + &Apache::courseclassifier::instcode_from_selectors($defdom,$noregexps); + } + if ($coursecode eq '') { + foreach my $item (@standardnames) { + if ((defined($env{'form.'.$item})) && ($env{'form.'.$item} ne '-1')) { + $coursecode .= $env{'form.'.$item}; + } + } + } + } my %lt = &Apache::lonlocal::texthash ( username => 'Name', email => 'E-mail', cc => 'Cc', user => 'Username/domain', phone => 'Phone', + crsi => 'Course Information', subject => 'Subject', description => 'Description', sourceurl => 'URL', date => 'Date/Time', + secn => 'Section', warn => 'Warning: Problem with support e-mail address', your => 'Your support request contained the following information', + sect => 'section', info => 'Information supplied', adin => 'Additional information recorded', ); - my (@ok_ccs,@bad_ccs,$badccmsg,$okcclist); - if ((defined($env{'user.name'})) && (defined($env{'form.cc'}))) { + my (@ok_ccs,@bad_ccs,$badccmsg,$okcclist,$public,$homeserver); + if (($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) { + $public = 1; + } else { + if (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')) { + $homeserver = &Apache::lonnet::homeserver($env{'user.name'}, + $env{'user.domain'}); + } + } + + if (($homeserver) && (defined($env{'form.cc'}))) { my @ccs; if ($env{'form.cc'} =~ /,/) { @ccs = split(/,/,$env{'form.cc'}); @@ -400,12 +638,14 @@ sub print_request_receipt { } } $env{'form.user'} = "'".$env{'form.uname'}.':'.$env{'form.udom'}."'"; + $env{'form.crsi'} = $env{'form.title'}.' - '.$coursecode.' - '.$lt{'sect'}.': '.$env{'form.section'}; my $supportmsg = < 131072) { $displaymsg .= '
'.&mt('The uploaded screenshot file ([_1] bytes) included with your request exceeded the maximum allowed size - 128 KB, and has therefore been discarded.',$attachmentsize); @@ -572,9 +811,11 @@ END Type =>'TEXT', Data => $supportmsg, ); - if (@ok_ccs > 0) { - my $cc_string = join(', ',@ok_ccs); - $msg->add("Cc" => $cc_string); + if ($homeserver) { + if (@ok_ccs > 0) { + my $cc_string = join(', ',@ok_ccs); + $msg->add("Cc" => $cc_string); + } } if ($bcc ne '') { $msg->add("Bcc" => $bcc); @@ -582,7 +823,7 @@ END $msg->attr("content-type" => "text/plain"); $msg->attr("content-type.charset" => "UTF-8"); - if ($attachmentpath) { + if ($homeserver && $attachmentpath) { my ($type, $encoding) = MIME::Types::by_suffix($attachmentpath); $msg->attach(Type => $type, Path => $attachmentpath, @@ -655,11 +896,14 @@ sub print_header { $helpdesk_link = ''; } my %lt = &Apache::lonlocal::texthash ( - login => 'Log-in help', - ask => 'Ask helpdesk', - getst => 'Getting started guide', - back => 'Back to last location', + login => 'Log-in help', + ask => 'Ask helpdesk', + getst => 'Getting started guide', + back => 'Back to last location', headline => 'help/support', + stud => 'Students', + ifyo => 'If your problem is still unresolved, the form below can be used to send a question to the LON-CAPA helpdesk.', + cont => 'Contact your instructor instead.', ); my ($getstartlink,$reviewtext); if (-e $Apache::lonnet::perlvar{'lonDocRoot'}.'/adm/gettingstarted.html') { @@ -671,39 +915,44 @@ sub print_header { if ($origurl eq '') { $origurl = 'javascript:history.go(-1)'; } - $r->print(<   - + $r->print(<<"END"); + + + + - + - - + + END if ($command ne 'process') { - $r->print(' + my $stuwarn = &mt('Do [_1]not[_2] use this form to ask about course content.', + '',''); + $r->print(<<"END"); - - '); + +END } $r->print('
 
- + logo LON-CAPA $lt{'headline'} - - $getstartlink - + + $getstartlink +
  
 
 
'.$reviewtext.' ' -.&mt('If your problem is still unresolved, the form below can be used to send a question to the LON-CAPA helpdesk.').'
' -.''.&mt('Students').': '.&mt('Do not use this form to ask questions about course content.').' ' -.&mt('Contact your instructor instead.') -.'

+
$reviewtext + $lt{'ifyo'}
+$lt{'stud'}: +$stuwarn $lt{'cont'} +

');