--- loncom/interface/loncoursequeueadmin.pm 2009/08/16 23:04:42 1.3
+++ loncom/interface/loncoursequeueadmin.pm 2009/09/11 02:27:50 1.9
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Utilities to administer domain course requests and course self-enroll requests
#
-# $Id: loncoursequeueadmin.pm,v 1.3 2009/08/16 23:04:42 raeburn Exp $
+# $Id: loncoursequeueadmin.pm,v 1.9 2009/09/11 02:27:50 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -220,7 +220,7 @@ sub display_queued_requests {
} else {
$formaction = '/adm/createcourse';
$namespace = 'courserequestqueue';
- %requesthash = &Apache::lonnet::dump_dom($namespace,$dom,undef,'_approval');
+ %requesthash = &Apache::lonnet::dump_dom($namespace,$dom,'_approval');
$nextelement = '';
}
my ($output,%queue_by_date,%crstypes);
@@ -293,8 +293,8 @@ sub display_queued_requests {
} else {
my ($cnum,$ownername,$ownerdom,$type,$cdesc)=split(/:/,$request,5);
- $detailslink=''.$cdesc.'';
+ $detailslink=''.$cdesc.'';
$crstype = $type;
if (defined($crstypes{$type})) {
$crstype = $crstypes{$type};
@@ -345,7 +345,8 @@ sub update_request_queue {
$domdesc,$now,$sender,$approvedmsg,$rejectedmsg,$beneficiary,
@existing,@missingreq,@invalidusers,@limitexceeded,@completed,
@processing_errors,@warn_approves,@warn_rejects,@approvals,
- @rejections,@rejectionerrors,%courseroles,%communityroles,%domdefs);
+ @rejections,@rejectionerrors,@nopermissions,%courseroles,
+ %communityroles,%domdefs);
@approvals = &Apache::loncommon::get_env_multiple('form.approvereq');
@rejections = &Apache::loncommon::get_env_multiple('form.rejectreq');
$now = time;
@@ -379,7 +380,7 @@ sub update_request_queue {
$domdesc = &Apache::lonnet::domain($cdom);
$namespace = 'courserequestqueue';
$beneficiary = 'courserequestor';
- %requesthash = &Apache::lonnet::dump_dom($namespace,$cdom,undef,'_approval');
+ %requesthash = &Apache::lonnet::dump_dom($namespace,$cdom,'_approval');
my $chome = &Apache::lonnet::domain($cdom,'primary');
$hostname = &Apache::lonnet::hostname($chome);
$protocol = $Apache::lonnet::protocol{$chome};
@@ -482,8 +483,22 @@ sub update_request_queue {
if ($crstype eq 'community') {
$longroles = \%communityroles;
}
- if (&Apache::lonnet::usertools_access($ownername,$ownerdom,$crstype,
- undef,'requestcourses')) {
+ my $cancreate;
+ if ($cdom eq $ownerdom) {
+ if (&Apache::lonnet::usertools_access($ownername,$ownerdom,$crstype,
+ undef,'requestcourses')) {
+ $cancreate = 1;
+ }
+ } else {
+ my %userenv = &Apache::lonnet::userenvironment($ownerdom,$ownername,'reqcrsotherdom.'.$crstype);
+ if ($userenv{'reqcrsotherdom.'.$crstype}) {
+ my @doms = split(',',$userenv{'reqcrsotherdom.'.$crstype});
+ if (grep(/^\Q$cdom\E:/,@doms)) {
+ $cancreate = 1;
+ }
+ }
+ }
+ if ($cancreate) {
my $requestkey = $cdom.'_'.$cnum;
my %history =
&Apache::lonnet::restore($requestkey,'courserequests',
@@ -531,7 +546,7 @@ sub update_request_queue {
push(@processing_errors,$cnum);
}
} else {
- push(@processing_errors,$cnum);
+ push(@nopermissions,$cnum);
}
} else {
push(@existing,$cnum);
@@ -749,6 +764,19 @@ sub update_request_queue {
$output .= '
';
}
}
+ if (@nopermissions) {
+ $output .= ''.&mt('The following course creation requests could not be processed because the course owner does hot have rights to create this type of course:').'
';
+ foreach my $cnum (@nopermissions) {
+ my $showcourse;
+ if (ref($requesthash{$cnum.'_approval'})) {
+ $showcourse = $requesthash{$cnum.'_approval'}{'description'};
+ } else {
+ $showcourse = $cnum;
+ }
+ $output .= '- '.$showcourse.'
';
+ }
+ $output .= '
';
+ }
if (@processing_errors) {
if ($context eq 'course') {
$output .= ''.&mt('The following enrollment requests could not be processed because an error occurred:').'
';
@@ -851,7 +879,7 @@ sub course_creation {
$owneremail = $emails{$email};
last if ($owneremail ne '');
}
- my %reqdetails = &build_batchcreatehash($dom,$details,$owneremail,$domdefs);
+ 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);
@@ -864,7 +892,7 @@ sub course_creation {
}
sub build_batchcreatehash {
- my ($dom,$details,$owneremail,$domdefs) = @_;
+ my ($dom,$context,$details,$owneremail,$domdefs) = @_;
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')) {
@@ -885,14 +913,70 @@ sub build_batchcreatehash {
} else {
$batchhash{'crstype'} = 'Course';
}
- $batchhash{'users'}{$details->{$owner}} = {
- firstname => $env{'environment.first'},
- lastname => $env{'environment.last'},
- emailenc => $emailenc,
- email => $owneremail,
- };
+ my ($owner_firstname,$owner_lastname);
+ if ($context eq 'domain') {
+ my %userenv = &Apache::lonnet::userenvironment($details->{'domain'},
+ $details->{'owner'},
+ 'firstname','lastname');
+ $owner_firstname = $userenv{'firstname'};
+ $owner_lastname = $userenv{'lastname'};
+ } else {
+ $owner_firstname = $env{'environment.firstname'};
+ $owner_lastname = $env{'environment.lastname'};
+ }
+ if (ref($details->{'personnel'}) eq 'HASH') {
+ %{$batchhash{'users'}} = %{$details->{'personnel'}};
+ if (ref($batchhash{'users'}) eq 'HASH') {
+ foreach my $userkey (keys(%{$batchhash{'users'}})) {
+ if (ref($batchhash{'users'}{$userkey}) eq 'HASH') {
+ if (ref($batchhash{'users'}{$userkey}{'roles'}) eq 'ARRAY') {
+ foreach my $role (@{$batchhash{'users'}{$userkey}{'roles'}}) {
+ my $start = '';
+ my $end = '';
+ if ($role eq 'st') {
+ $start = $details->{'accessstart'};
+ $end = $details->{'accessend'};
+ }
+ $batchhash{'users'}{$userkey}{$role}{'start'} = $start;
+ $batchhash{'users'}{$userkey}{$role}{'end'} = $end;
+ }
+ }
+ }
+ }
+ }
+ }
+ $batchhash{'users'}{$owner}{firstname} = $owner_firstname;
+ $batchhash{'users'}{$owner}{lastname} = $owner_lastname;
+ $batchhash{'users'}{$owner}{emailenc} = $emailenc;
+ $batchhash{'users'}{$owner}{owneremail} = $owneremail;
}
return %batchhash;
}
+sub can_clone_course {
+ my ($uname,$udom,$clonecrs,$clonedom) = @_;
+ my $canclone;
+ my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles',['active'],
+ ['cc'],[$clonedom]);
+ if (exists($roleshash{$clonecrs.':'.$clonedom.':cc'})) {
+ $canclone = 1;
+ } else {
+ my %courseenv = &Apache::lonnet::userenvironment($clonedom,$clonecrs,('cloners'));
+ my $cloners = $courseenv{'cloners'};
+ if ($cloners ne '') {
+ my @cloneable = split(',',$cloners);
+ if (grep(/^\*$/,@cloneable)) {
+ $canclone = 1;
+ }
+ if (grep(/^\*:\Q$udom\E$/,@cloneable)) {
+ $canclone = 1;
+ }
+ if (grep(/^\Q$uname\E:\Q$udom\E$/,@cloneable)) {
+ $canclone = 1;
+ }
+ }
+ }
+ return $canclone;
+}
+
1;