package Apache::lonsupportreq; use strict; use lib qw(/home/httpd/lib/perl); use MIME::Types; use MIME::Lite; use Apache::Constants qw(:common); use Apache::loncommon(); use Apache::lonnet(); use Apache::lonlocal; sub handler { my ($r) = @_; &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; if ($r->header_only) { return OK; } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['origurl','function']); if ($r->uri eq '/adm/helpdesk') { &Apache::loncommon::get_posted_cgi($r); } my $function = $ENV{'form.function'}; my $origurl = &Apache::lonnet::unescape($ENV{'form.origurl'}); my $action = $ENV{'form.action'}; if ($action eq 'process') { &print_request_receipt($r,$origurl,$function); } else { &print_request_form($r,$origurl,$function); } return OK; } sub print_request_form { my ($r,$origurl,$function) = @_; my ($os,$browser,$bversion,$uhost,$uname,$udom,$uhome,$urole,$usec,$email,$cid,$cdom,$cnum,$ctitle,$ccode,$sectionlist,$lastname,$firstname,$server); my $bodytag = &Apache::loncommon::bodytag('',$function,'topmargin="0" marginheight="0" onLoad="initialize_codes()"',1); my $tablecolor = &Apache::loncommon::designparm($function.'.tabbg'); if (($tablecolor eq '') || ($tablecolor eq '#FFFFFF')) { $tablecolor = '#EEEE99'; } $ccode = ''; $os = $ENV{'browser.os'}; $browser = $ENV{'browser.type'}; $bversion = $ENV{'browser.version'}; $uhost = $ENV{'request.host'}; $uname = $ENV{'user.name'}; $udom = $ENV{'user.domain'}; $uhome = $ENV{'user.home'}; $urole = $ENV{'request.role'}; $usec = $ENV{'request.course.sec'}; $cid = $ENV{'request.course.id'}; if ($origurl =~ m-^http://-) { $server = $origurl; } else { $server = 'http://'.$ENV{'SERVER_NAME'}.$origurl; } my $scripttag = (<<'END'); function validate() { if (validmail(document.logproblem.email) == false) { alert("The e-mail address you entered: "+document.logproblem.email.value+" is not a valid e-mail address."); return; } document.logproblem.submit(); } function validmail(field) { var str = field.value; if (window.RegExp) { var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)"; var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; var reg1 = new RegExp(reg1str); var reg2 = new RegExp(reg2str); if (!reg1.test(str) && reg2.test(str)) { return true; } return false; } else { if(str.indexOf("@") >= 0) { return true; } return false; } } END if ($cid =~ m/_/) { ($cdom,$cnum) = split/_/,$cid; } 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 ($ENV{'environment.critnotification'}) { $email = $ENV{'environment.critnotification'}; } if (!$email && $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 (@sections) { my ($sec,$grp) = split/:/,$_; $groupid{$sec} = $grp; } my $codedom = $Apache::lonnet::perlvar{'lonDefDomain'}; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['codedom']); if (exists($ENV{'form.codedom'})) { $codedom = $ENV{'form.codedom'}; } 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 ($cdom) { $codedom = $cdom; } if ($cnum) { $coursecodes{$cnum} = $ccode; if ($ccode eq '') { $totcodes = &retrieve_instcodes(\%coursecodes,$codedom,$totcodes); } else { $coursecodes{$cnum} = $ccode; $caller = $cnum; $totcodes ++; } } else { $totcodes = &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; &build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); &javascript_code_selections($numtypes,\%cat_titles,\$jscript,\%idlist,\%idnums,\%idlist_titles,\@codetitles); $loaditems = ''; } } } my $html=&Apache::lonxml::xmlbegin(); $r->print(< LON-CAPA support request $bodytag ENDHEAD if ($r->uri eq '/adm/helpdesk') { &print_header($r,$origurl); } $r->print(<<"END"); Name: END my $fullname = ''; if ((defined($lastname) && $lastname ne '') && (defined($firstname) && $firstname ne '')) { $fullname = "$firstname $lastname"; $r->print("$fullname"); } else { if (defined($firstname) && $firstname ne '') { $fullname = $firstname; } elsif (defined($lastname) && $lastname ne '') { $fullname= " $lastname"; } $r->print(''); } $r->print(< E-mail address: username/domain: END my $udom_input = ''; my $uname_input = ''; if (defined($uname) && defined($udom)) { $r->print('username: '.$uname.' domain: '.$udom.$udom_input.$uname_input); } else { my $udomform = ''; my $unameform = ''; if (defined($udom)) { $udomform = 'domain: '.$udom.$udom_input; } elsif (defined($uname)) { $unameform = 'username: '.$uname.' '.$uname_input; } if ($udomform eq '') { $udomform = 'domain: '; $udomform .= &Apache::loncommon::select_dom_form($codedom,'udom'); } if ($unameform eq '') { $unameform= 'username: '; } $r->print($unameform.$udomform.'Enter the username you use to log-in to your LON-CAPA system, and choose your domain.'); } $r->print(< URL of page: $server Phone #: Course Details:$details_title END if ($cnum) { if ($coursecodes{$cnum}) { foreach (@codetitles) { $r->print(''.$_.': '.$codes{$cnum}{$_}.'; '); } $r->print(' '); } else { $r->print('Enter institutional course code: '); } } else { if ($totcodes > 0) { my $numtitles = @codetitles; if ($numtitles == 0) { $r->print('Enter institutional course code: '); } else { my $lasttitle = $numtitles; if ($numtitles > 4) { $lasttitle = 4; } $r->print(''.$codetitles[0].''."\n". ''."\n". ' Select'."\n"); my @items = (); my @longitems = (); if ($idlist{$codetitles[0]} =~ /","/) { @items = split/","/,$idlist{$codetitles[0]}; } else { $items[0] = $idlist{$codetitles[0]}; } if (defined($idlist_titles{$codetitles[0]})) { if ($idlist_titles{$codetitles[0]} =~ /","/) { @longitems = split/","/,$idlist_titles{$codetitles[0]}; } else { $longitems[0] = $idlist_titles{$codetitles[0]}; } for (my $i=0; $i<@longitems; $i++) { if ($longitems[$i] eq '') { $longitems[$i] = $items[$i]; } } } else { @longitems = @items; } for (my $i=0; $i<@items; $i++) { $r->print(' '.$longitems[$i].''); } $r->print(''); for (my $i=1; $i<$numtitles; $i++) { $r->print(''.$codetitles[$i].''."\n". ''."\n". '<-Pick '.$codetitles[$i-1].''."\n". ''."\n". '' ); } $r->print(''); if ($numtitles > 4) { $r->print(''.$codetitles[$numtitles].''."\n". ''."\n". '<-Pick '.$codetitles[$numtitles-1].''."\n". ''."\n"); } } } else { $r->print('Enter institutional course code: '); } } if ($ctitle) { $r->print('Title: '.$ctitle.''); } else { $r->print('Enter course title: '); } $r->print(< Section Number: END if ($sectionlist) { $r->print("". " Select\n"); foreach (sort keys %groupid) { if ($_ eq $groupid{$_} || $groupid{$_} eq '') { $r->print(" $_\n"); } else { $r->print(" $_ - (LON-CAPA sec: $groupid{$_})\n"); } } $r->print(""); } else { $r->print(""); } $r->print(< Subject Detailed description: END if (defined($ENV{'user.name'})) { $r->print(< Optional file upload: Upload a file (e.g., a screenshot) relevant to your support request (128 KB max. size). END } $r->print(< Finish: