--- loncom/interface/loncoursequeueadmin.pm 2010/01/15 03:29:54 1.14 +++ loncom/interface/loncoursequeueadmin.pm 2010/02/26 23:01:20 1.22 @@ -1,7 +1,7 @@ # The LearningOnline Network -# Utilities to administer domain course requests and course self-enroll requests +# Utilities to administer domain course requests and course self-enroll requests # -# $Id: loncoursequeueadmin.pm,v 1.14 2010/01/15 03:29:54 raeburn Exp $ +# $Id: loncoursequeueadmin.pm,v 1.22 2010/02/26 23:01:20 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -69,13 +69,12 @@ described at http://www.lon-capa.org. package Apache::loncoursequeueadmin; use strict; -use Apache::Constants qw(:common :http); use Apache::lonnet; use Apache::loncommon; use Apache::lonmsg; use Apache::lonlocal; use Apache::lonuserutils; -use LONCAPA; +use LONCAPA qw(:DEFAULT :match); sub send_selfserve_notification { my ($notifylist,$textstr,$cid,$contextdesc,$timestamp,$context,$sender, @@ -376,7 +375,7 @@ sub update_request_queue { $stucounts,$idx,$classlist,%requesthash,$cid,$hostname,$protocol, $domdesc,$now,$sender,$approvedmsg,$rejectedmsg,$beneficiary, @existing,@missingreq,@invalidusers,@limitexceeded,@completed, - @processing_errors,@warn_approves,@warn_rejects,@approvals, + @processing_errors,@warn_approves,@warn_rejects,@approvals,@warn_dels, @rejections,@rejectionerrors,@nopermissions,%courseroles, %communityroles,%domdefs,%approvalmsg,%rejectionmsg,$crstype); @approvals = &Apache::loncommon::get_env_multiple('form.approvereq'); @@ -467,7 +466,6 @@ sub update_request_queue { my $uhome = &Apache::lonnet::homeserver($uname,$udom); if ($uhome ne 'no_host') { if (exists($requesthash{$uname.':'.$udom})) { - if (exists($classlist->{$uname.':'.$udom})) { if (ref($classlist->{$uname.':'.$udom}) eq 'ARRAY') { if (($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Active') || @@ -566,6 +564,10 @@ sub update_request_queue { $approvedmsg = $approvalmsg{'course'}; } push(@completed,$cnum); + + unless (&Apache::lonnet::del_dom($namespace,[$cnum.'_approval'],$cdom) eq 'ok') { + push(@warn_dels,$cnum); + } &send_selfserve_notification($ownername.':'.$ownerdom,$approvedmsg, $cid,$coursedesc,$now,$beneficiary,$sender,undef,undef,$crstype); my %reqhash = ( @@ -680,6 +682,9 @@ sub update_request_queue { } else { push(@warn_rejects,$cnum); } + unless (&Apache::lonnet::del_dom($namespace,[$cnum.'_approval'],$cdom) eq 'ok') { + push(@warn_dels,$cnum); + } } else { push(@warn_rejects,$cnum); } @@ -897,6 +902,19 @@ sub update_request_queue { $output .= '

'; } } + if (@warn_dels) { + $output .= '

'.&mt("For the following course/community requests an error occurred when removing requests for the following from the pending queue:").'

'; + } return $output; } @@ -942,8 +960,8 @@ sub course_creation { } my %reqdetails = &build_batchcreatehash($dom,$context,$details,$owneremail,$domdefs); my $cid = &LONCAPA::batchcreatecourse::build_course($dom,$cnum,'requestcourses', - \%reqdetails,$longroles,\$logmsg,\$newusermsg,\$addresult, - \$enrollcount,\$output,\$keysmsg,$ownerdom,$ownername,$cnum,$crstype); + \%reqdetails,$longroles,$logmsg,$newusermsg,$addresult, + $enrollcount,$output,$keysmsg,$ownerdom,$ownername,$cnum,$crstype); if ($cid eq "/$dom/$cnum") { $result = 'created'; } else { @@ -957,7 +975,7 @@ sub build_batchcreatehash { my %batchhash; my @items = qw{owner domain coursehome clonecrs clonedom datemode dateshift enrollstart enrollend accessstart accessend sections crosslists users}; if ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) { - my $emailenc = &Apache::lonnet::escape($owneremail); + my $emailenc = &escape($owneremail); my $owner = $details->{'owner'}.':'.$details->{'domain'}; foreach my $item (@items) { $batchhash{$item} = $details->{$item}; @@ -1040,6 +1058,11 @@ sub can_clone_course { $canclone = 1; } } + unless ($canclone) { + if (&Apache::lonnet::is_course_owner($clonedom,$clonecrs,$uname,$udom)) { + $canclone = 1; + } + } } return $canclone; } @@ -1150,7 +1173,6 @@ sub queued_selfenrollment { } } if (keys(%reqs_by_date)) { - my $rolename = &Apache::lonnet::plaintext('st'); unless ($notitle) { $output .= ''.&mt('Enrollment requests pending Course Coordinator approval').'
'; } @@ -1165,6 +1187,7 @@ sub queued_selfenrollment { foreach my $crs (@{$reqs_by_date{$item}}) { my %courseinfo = &Apache::lonnet::coursedescription($crs); my $usec = $selfenrollrequests{$crs}{'section'}; + my $rolename = &Apache::lonnet::plaintext('st',$courseinfo{'type'},$crs); if ($usec eq '') { $usec = &mt('No section'); } @@ -1181,4 +1204,40 @@ sub queued_selfenrollment { return $output; } +sub update_coursereq_status { + my ($reqhash,$dom,$cnum,$reqstatus,$context) = @_; + my ($storeresult,$statusresult,$output); + my $requestkey = $dom.'_'.$cnum; + if ($requestkey =~ /^($match_domain)_($match_courseid)$/) { + $storeresult = &Apache::lonnet::store_userdata($reqhash,$requestkey, + 'courserequests'); + if ($storeresult eq 'ok') { + my %status = ( + 'status:'.$dom.':'.$cnum => $reqstatus, + ); + $statusresult = &Apache::lonnet::put('courserequests',\%status); + } + } else { + $storeresult = 'error: invalid requestkey format'; + } + if ($storeresult ne 'ok') { + $output = &mt('An error occurred saving a record of the details of your request: [_1].',$storeresult); + if ($context eq 'domain') { + $output .= "\n"; + } else { + $output = ''.$output.'
'; + } + &Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult"); + } elsif ($statusresult ne 'ok') { + $output = &mt('An error occurred saving a record of the status of your request: [_1].',$statusresult); + if ($context eq 'domain') { + $output .= "\n"; + } else { + $output = ''.$output.'
'; + } + &Apache::lonnet::logthis("Error saving course request status for $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult"); + } + return ($storeresult,$output); +} + 1;