--- loncom/interface/lonrequestcourse.pm 2014/04/09 10:50:07 1.77
+++ loncom/interface/lonrequestcourse.pm 2014/04/16 14:40:17 1.78
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Request a course
#
-# $Id: lonrequestcourse.pm,v 1.77 2014/04/09 10:50:07 raeburn Exp $
+# $Id: lonrequestcourse.pm,v 1.78 2014/04/16 14:40:17 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1526,7 +1526,8 @@ sub print_request_form {
&Apache::lonnet::auto_possible_instcodes($dom,\@codetitles,\%cat_titles,
\%cat_order,\@code_order);
}
- my ($storeresult,$result) = &print_request_outcome($dom,\@codetitles,
+ my $lonhost = $r->dir_config('lonHostID');
+ my ($storeresult,$result) = &print_request_outcome($lonhost,$dom,\@codetitles,
\@code_order,$instcredits);
$r->print($result);
if (($storeresult eq 'ok') || ($storeresult eq 'created')) {
@@ -3335,7 +3336,7 @@ sub display_navbuttons {
}
sub print_request_outcome {
- my ($dom,$codetitles,$code_order,$instcredits) = @_;
+ my ($lonhost,$dom,$codetitles,$code_order,$instcredits) = @_;
my ($output,$cnum,$now,$req_notifylist,$crstype,$enrollstart,$enrollend,
%sections,%crosslistings,%personnel,@baduname,@missingdom,%domconfig,
$uniquecode);
@@ -3580,13 +3581,14 @@ sub print_request_outcome {
accessend => $accessend,
personnel => \%personnel,
};
- my ($result,$output) = &process_request($dom,$cnum,$crstype,$now,$details,$instcode,
+ my ($result,$output) = &process_request($lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,
$req_notifylist,\@instsections,\%domconfig);
return ($result,$output);
}
sub process_request {
- my ($dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,$domconfig) = @_;
+ my ($lonhost,$dom,$cnum,$crstype,$now,$details,$instcode,$req_notifylist,$instsections,
+ $domconfig) = @_;
my (@inststatuses,$storeresult,$creationresult,$output);
my $val =
&Apache::loncoursequeueadmin::get_processtype('course',$env{'user.name'},
@@ -3606,7 +3608,7 @@ sub process_request {
}
$storeresult = 'notpermitted';
} else {
- my ($disposition,$message,$reqstatus);
+ my ($disposition,$message,$reqstatus,$coursedesc);
my %reqhash = (
reqtime => $now,
crstype => $crstype,
@@ -3614,6 +3616,11 @@ sub process_request {
);
my $requestkey = $dom.'_'.$cnum;
my $validationerror;
+ my $fullname = &Apache::loncommon::plainname($env{'user.name'},
+ $env{'user.domain'});
+ if (ref($details) eq 'HASH') {
+ $coursedesc = $details->{'cdescr'};
+ }
if ($val eq 'autolimit=') {
$disposition = 'process';
} elsif ($val =~ /^autolimit=(\d+)$/) {
@@ -3621,7 +3628,7 @@ sub process_request {
$disposition = &check_autolimit($env{'user.name'},$env{'user.domain'},
$dom,$crstype,$limit,\$message);
} elsif ($val eq 'validate') {
- my ($inststatuslist,$validationchk,$validation);
+ my ($inststatuslist,$validationchk,$validation,%custominfo);
if (@inststatuses > 0) {
$inststatuslist = join(',',@inststatuses);
}
@@ -3631,10 +3638,27 @@ sub process_request {
$instseclist = join(',',@{$instsections});
}
}
+ my $preprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,'prevalidate',$env{'user.name'},
+ $env{'user.domain'},$fullname,$coursedesc);
+ if (ref($preprocess) eq 'HASH') {
+ if (ref($preprocess->{'formitems'}) eq 'HASH') {
+ foreach my $key (keys(%{$preprocess->{'formitems'}})) {
+ if ($preprocess->{'formitems'}->{$key} eq 'multiple') {
+ if (exists($env{'form.'.$key})) {
+ @{$custominfo{$key}} = &Apache::loncommon::get_env_multiple($env{'form.'.$key});
+ }
+ } else {
+ if (exists($env{'form.'.$key})) {
+ $custominfo{$key} = $env{'form.'.$key};
+ }
+ }
+ }
+ }
+ }
$validationchk =
&Apache::lonnet::auto_courserequest_validation($dom,
$env{'user.name'}.':'.$env{'user.domain'},$crstype,
- $inststatuslist,$instcode,$instseclist);
+ $inststatuslist,$instcode,$instseclist,\%custominfo);
if ($validationchk =~ /:/) {
($validation,$message) = split(':',$validationchk);
} else {
@@ -3651,13 +3675,8 @@ sub process_request {
}
$reqhash{'disposition'} = $disposition;
$reqstatus = $disposition;
- my ($modified,$queued,$coursedesc,%customitems);
+ my ($modified,$queued,$coursedesc,$token,%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') {
@@ -3742,7 +3761,8 @@ sub process_request {
crstype => $crstype,
ownername => $env{'user.name'},
ownerdom => $env{'user.domain'},
- description => $env{'form.cdescr'},
+ description => $env{'form.cdescr'},
+ lonhost => $lonhost,
},
};
if ($crstype eq 'official') {
@@ -3760,9 +3780,19 @@ sub process_request {
if (($queuehash{$cnum.'_approval'} ne '') ||
($queuehash{$cnum.'_pending'} ne '')) {
$queued = 1;
+ if (ref($queuehash{$cnum.'_pending'}) eq 'HASH') {
+ $token = $queuehash{$cnum.'_pending'}{'token'};
+ }
}
}
unless ($queued) {
+ if (($disposition eq 'pending') && ($crstype ne 'official')) {
+ my %reqinfo = (
+ $cnum.':'.$dom => $now.':'.$env{'user.name'}.':'.$env{'user.domain'},
+ );
+ $token = &Apache::lonnet::tmpput(\%reqinfo,$lonhost);
+ $request->{$requestid}->{'token'} = $token;
+ }
my $putresult = &Apache::lonnet::newput_dom('courserequestqueue',$request,
$dom);
if ($putresult eq 'ok') {
@@ -3771,9 +3801,11 @@ sub process_request {
} else {
$output .= &mt('Your course request has been recorded.')
}
- $output .= '
'.
- ¬ification_information($disposition,$req_notifylist,
- $dom,$cnum,$now);
+ unless ($disposition eq 'pending') {
+ $output .= '
'.
+ ¬ification_information($disposition,$req_notifylist,
+ $dom,$cnum,$now);
+ }
} else {
$reqstatus = 'domainerror';
$reqhash{'disposition'} = $disposition;
@@ -3785,23 +3817,45 @@ sub process_request {
($storeresult,my $updateresult) =
&Apache::loncoursequeueadmin::update_coursereq_status(\%reqhash,$dom,
$cnum,$reqstatus,'request',$env{'user.domain'},$env{'user.name'});
- if ($modified && $queued && $storeresult eq 'ok') {
- if ($crstype eq 'community') {
- $output .= '
'.&mt('Your community request has been updated').'
'; - } else { - $output .= ''.&mt('Your course request has been updated').'
'; - } - $output .= ¬ification_information($disposition,$req_notifylist,$dom,$cnum,$now); - if ($disposition eq 'approval') { + if ($storeresult eq 'ok') { + my $postprocess; + if (($disposition eq 'approval') || ($disposition eq 'pending')) { + my $updateaction = $disposition; + if ($disposition eq 'approval') { + $updateaction = 'queued'; + } 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'}, + $postprocess = + &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,$updateaction,$env{'user.name'}, $env{'user.domain'},$fullname,$env{'form.cdescr'}); + } + if ($modified && $queued) { + if ($crstype eq 'community') { + $output .= ''.&mt('Your community request has been updated').'
'; + } else { + $output .= ''.&mt('Your course request has been updated').'
'; + } + if ($disposition eq 'approval') { + $output .= ¬ification_information($disposition,$req_notifylist,$dom,$cnum,$now); + } + } + if ($disposition eq 'approval') { if ((ref($postprocess) eq 'HASH') && ((ref($postprocess->{'queuedmsg'}) eq 'HASH') || ($postprocess->{'queuedweb'}))) { ¬ification_information($disposition,undef,$dom,$cnum,$now,undef,$postprocess); } + } elsif ($disposition eq 'pending') { + my $pendingform; + if ($crstype ne 'official') { + $pendingform = &pending_validation_form($dom,$cnum,$crstype,$now,$token, + $lonhost,$env{'form.cdescr'}); + } + if ($pendingform) { + $output .= $pendingform; + } else { + $output .= ¬ification_information($disposition,undef,$dom,$cnum,$now,undef,$postprocess); + } } } if ($validationerror ne '') { @@ -4002,11 +4056,20 @@ sub notification_information { } } } elsif ($disposition eq 'pending') { - $output .= '