--- loncom/interface/lonrequestcourse.pm 2013/12/27 14:34:52 1.72 +++ loncom/interface/lonrequestcourse.pm 2014/01/03 18:39:51 1.73 @@ -1,7 +1,7 @@ # The LearningOnline Network # Request a course # -# $Id: lonrequestcourse.pm,v 1.72 2013/12/27 14:34:52 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.73 2014/01/03 18:39:51 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -128,7 +128,7 @@ sub handler { } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['action','showdom','cnum','state','crstype','queue']); + ['action','showdom','cnum','state','crstype','queue','tabs']); &Apache::lonhtmlcommon::clear_breadcrumbs(); my $dom = &get_course_dom(); my $action = $env{'form.action'}; @@ -155,16 +155,31 @@ sub handler { } if ($canreq) { - if ((scalar(keys(%can_request)) == 1) && ($can_request{'textbook'})) { + if (($env{'form.crstype'} eq 'textbook') || + (scalar(keys(%can_request)) == 1) && ($can_request{'textbook'})) { my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom); if ($action eq 'log') { + my $usetabs; + if ((scalar(keys(%can_request)) == 1) && ($can_request{'textbook'})) { + $usetabs = 1; + } elsif ($env{'form.tabs'} eq 'on') { + $usetabs = 1; + } &Apache::lonhtmlcommon::add_breadcrumb({text=>'Course Request'}); my $crumb = &Apache::lonhtmlcommon::breadcrumbs('Course Requests','Course_Requests'); - &print_request_logs($r,$dom,undef,undef,$crumb); + &print_request_logs($r,$dom,undef,undef,$crumb,$usetabs); } elsif ($action eq 'process') { - &process_textbook_request($r,$dom,$action,\%domdefs,\%domconfig); + if ($can_request{'textbook'}) { + &process_textbook_request($r,$dom,$action,\%domdefs,\%domconfig,\%can_request); + } else { + &textbook_request_disabled($r,$dom,\%can_request); + } } else { - &print_textbook_form($r,$dom,\@incdoms,\%domdefs,$domconfig{'requestcourses'}); + if ($can_request{'textbook'}) { + &print_textbook_form($r,$dom,\@incdoms,\%domdefs,$domconfig{'requestcourses'},\%can_request); + } else { + &textbook_request_disabled($r,$dom,\%can_request); + } } return OK; } @@ -195,7 +210,7 @@ sub handler { my @invalidcrosslist; my %trail = ( - crstype => 'Request Action', + crstype => 'Pick Action', codepick => 'Category', courseinfo => 'Description', enrollment => 'Access Dates', @@ -382,7 +397,7 @@ function setPage(formname) { } ENDJS - &print_request_logs($r,$dom,$jscript,$loaditems,$crumb); + &print_request_logs($r,$dom,$jscript,$loaditems,$crumb,\%can_request); } } else { &print_main_menu($r,\%can_request,\%states,$dom,$jscript,'',$crumb,\@incdoms); @@ -1483,6 +1498,15 @@ sub print_request_form { } $r->print(&print_review($dom,\@codetitles,\%cat_titles,\%cat_order,\@code_order,'','',\@disallowed,\%disallowmsg,$instcredits). ''); + my $fullname = &Apache::loncommon::plainname($env{'user.name'}, + $env{'user.domain'}); + my $postprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,'review',$env{'user.name'}, + $env{'user.domain'},$fullname,$env{'form.cdescr'}); + if (ref($postprocess) eq 'HASH') { + if ($postprocess->{'reviewweb'}) { + $r->print($postprocess->{'reviewweb'}); + } + } if ($crstype eq 'community') { $navtxt{'next'} = &mt('Submit community request'); } else { @@ -2126,6 +2150,7 @@ sub sorted_request_history { my $crstype = $history{'crstype'}; my $disposition = $history{'disposition'}; my $status = $history{'status'}; + my $uniquecode = $history{'code'}; if ($action eq 'view') { next if ((exists($history{'status'})) && ($history{'status'} eq 'created')); } else { @@ -2141,7 +2166,7 @@ sub sorted_request_history { $entry = $requestkey.':'.$crstype.':'. &escape($history{'details'}{'cdescr'}); if ($action eq 'log') { - $entry .= ':'.$lastupdate.':'; + $entry .= ':'.$uniquecode.':'.$lastupdate.':'; if ($statusinfo{$key} ne '') { $entry .= $statusinfo{$key}; } elsif ($status ne '') { @@ -2354,7 +2379,7 @@ ENDJS } sub print_request_logs { - my ($r,$dom,$jscript,$loaditems,$crumb) = @_; + my ($r,$dom,$jscript,$loaditems,$crumb,$usetabs) = @_; my $title; if ($env{'form.crstype'} eq 'community') { $title = 'Community Request Logs'; @@ -2364,6 +2389,9 @@ sub print_request_logs { $title = 'Course Request Logs'; } $r->print(&header($title,$jscript,$loaditems).$crumb); + if ($usetabs) { + &startContentScreen($r,'textbooklogs'); + } my $formname = 'requestcrs'; $r->print('
'. - &Apache::loncommon::end_page()); + if ($usetabs) { + $r->print(''); + } + $r->print(''); + if ($usetabs) { + &endContentScreen($r); + } + $r->print(&Apache::loncommon::end_page()); return; } @@ -3274,16 +3337,17 @@ sub print_request_outcome { $output = &mt('Invalid LON-CAPA course number for the new course')."\n"; return $output; } - - %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom); + $crstype = $env{'form.crstype'}; + my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom); if (ref($domconfig{'requestcourses'}) eq 'HASH') { if (ref($domconfig{'requestcourses'}{'notify'}) eq 'HASH') { $req_notifylist = $domconfig{'requestcourses'}{'notify'}{'approval'}; } - $uniquecode = $domconfig{'requestcourses'}{'uniquecode'}; + if (ref($domconfig{'requestcourses'}{'uniquecode'}) eq 'HASH') { + $uniquecode = $domconfig{'requestcourses'}{'uniquecode'}{$crstype}; + } } $now = time; - $crstype = $env{'form.crstype'}; my $ccrole = 'cc'; if ($crstype eq 'community') { $ccrole = 'co'; @@ -3578,7 +3642,32 @@ sub process_request { } $reqhash{'disposition'} = $disposition; $reqstatus = $disposition; - my ($modified,$queued); + my ($modified,$queued,$coursedesc,%customitems); + unless ($disposition eq 'rejected') { + if (ref($details) eq 'HASH') { + $coursedesc = $details->{'cdescr'}; + } + my $fullname = &Apache::loncommon::plainname($env{'user.name'}, + $env{'user.domain'}); + my $inprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,'process',$env{'user.name'}, + $env{'user.domain'},$fullname,$coursedesc); + if (ref($inprocess) eq 'HASH') { + if (ref($inprocess->{'formitems'}) eq 'HASH') { + foreach my $key (keys(%{$inprocess->{'formitems'}})) { + if ($inprocess->{'formitems'}->{$key} eq 'multiple') { + if (exists($env{'form.'.$key})) { + @{$customitems{$key}} = &Apache::loncommon::get_env_multiple($env{'form.'.$key}); + } + } else { + if (exists($env{'form.'.$key})) { + $customitems{$key} = $env{'form.'.$key}; + $reqhash{'custom'}{$key} = $customitems{$key}; + } + } + } + } + } + } if ($disposition eq 'rejected') { if ($crstype eq 'community') { $output = &mt('Your community request was rejected.'); @@ -3600,9 +3689,10 @@ sub process_request { foreach my $role (@roles) { $longroles{$role}=&Apache::lonnet::plaintext($role,$type); } - my $result = &Apache::loncoursequeueadmin::course_creation($dom,$cnum, - 'autocreate',$details,\$logmsg,\$newusermsg,\$addresult, - \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,\$code); + my ($result,$postprocess) = &Apache::loncoursequeueadmin::course_creation($dom,$cnum, + 'autocreate',$details,\$logmsg,\$newusermsg,\$addresult, + \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles, + \$code,\%customitems); if ($result eq 'created') { $disposition = 'created'; $reqstatus = 'created'; @@ -3613,9 +3703,13 @@ sub process_request { } else { $output = ''.&mt('Your course request has been processed and the course has been created.');
}
- if ($code) {
+ if (($code) || ((ref($postprocess) eq 'HASH') &&
+ (($postprocess->{'createdweb'}) || ($postprocess->{'createdmsg'})))) {
$output .= ¬ification_information($disposition,$env{'user.name'}.':'.$env{'user.domain'},
- $cnum,$now,$code);
+ $cnum,$now,$code,$postprocess);
+ }
+ if ($code) {
+ $reqhash{'code'} = $code;
}
$output .= '
'.$role_result.'
'.&mt('Your course request has been updated').'
'; } $output .= ¬ification_information($disposition,$req_notifylist,$cnum,$now); + if ($disposition eq 'approval') { + my $fullname = &Apache::loncommon::plainname($env{'user.name'}, + $env{'user.domain'}); + my $postprocess = + &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,'queued',$env{'user.name'}, + $env{'user.domain'},$fullname,$env{'form.cdescr'}); + if ((ref($postprocess) eq 'HASH') && + ((ref($postprocess->{'queuedmsg'}) eq 'HASH') || ($postprocess->{'queuedweb'}))) { + my $recipient = $env{'user.name'}.':'.$env{'user.domain'}; + $output .= ¬ification_information($disposition,$recipient,$cnum,$now,undef,$postprocess); + } + } } if ($validationerror ne '') { $output .= ''.&mt('An error occurred validating your request with institutional data sources: [_1].',$validationerror).'
'; @@ -3840,7 +3946,7 @@ sub update_requestors_roles { } sub notification_information { - my ($disposition,$req_notifylist,$cnum,$now,$code) = @_; + my ($disposition,$req_notifylist,$cnum,$now,$code,$postprocess) = @_; my %emails = &Apache::loncommon::getemails(); my $address; if (($emails{'permanentemail'} ne '') || ($emails{'notification'} ne '')) { @@ -3858,33 +3964,82 @@ sub notification_information { } if ($req_notifylist) { my $fullname = &Apache::loncommon::plainname($env{'user.name'}, - $env{'user.domain'}); + $env{'user.domain'}); my $sender = $env{'user.name'}.':'.$env{'user.domain'}; &Apache::loncoursequeueadmin::send_selfserve_notification($req_notifylist,"$fullname ($env{'user.name'}:$env{'user.domain'})",$cnum,$env{'form.cdescr'},$now,'coursereq',$sender); } + if (ref($postprocess) eq 'HASH') { + if (ref($postprocess->{'queuedmsg'}) eq 'ARRAY') { + if (scalar(@{$postprocess->{'queuedmsg'}}) > 0) { + my $recipient = $env{'user.name'}.':'.$env{'user.domain'}; + my $sender = $recipient; + my $addmsg = []; + foreach my $item (@{$postprocess->{'queuedmsg'}}) { + if (ref($item) eq 'HASH') { + if ($item->{'mt'} ne '') { + push(@{$addmsg},$item); + } + } + } + if (scalar(@{$addmsg}) > 0) { + &Apache::loncoursequeueadmin::send_selfserve_notification($recipient,$addmsg,$cnum, + $env{'form.cdescr'},$now, + 'queuedreq',$sender); + } + } + } + if ($postprocess->{'queuedweb'}) { + $output .= $postprocess->{'queuedweb'}; + } + } } elsif ($disposition eq 'pending') { $output .= ''.
- &mt('Students can automatically select your course by entering this code: [_1].',''.$code.'').
- '
'.
- &mt('A message has been sent to your LON-CAPA account with this information.');
- if ($address ne '') {
- $output.= '
'.&mt('And an e-mail has also been sent to: [_1] with this code.',$address);
- }
- $output .= '
'.
+ &mt('Students can automatically select your course by entering this code: [_1].',''.$code.'').
+ '
'.
+ &mt('A message has been sent to your LON-CAPA account with this information.');
+ if ($address ne '') {
+ $output.= '
'.&mt('An e-mail has also been sent to: [_1] with this code.',$address);
+ }
+ $output .= '
'.&mt('Create another course').'
'); } + &endContentScreen($r); $r->print(&Apache::loncommon::end_page()); } @@ -4600,6 +4790,20 @@ function validTextbookReq() { ENDSCRIPT } + +sub startContentScreen { + my ($r,$mode)=@_; + $r->print("\n".'