--- loncom/interface/loncoursequeueadmin.pm 2024/07/02 13:55:53 1.52.2.6
+++ loncom/interface/loncoursequeueadmin.pm 2021/11/24 04:25:02 1.62
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Utilities to administer domain course requests and course self-enroll requests
#
-# $Id: loncoursequeueadmin.pm,v 1.52.2.6 2024/07/02 13:55:53 raeburn Exp $
+# $Id: loncoursequeueadmin.pm,v 1.62 2021/11/24 04:25:02 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -304,11 +304,11 @@ sub send_selfserve_notification {
my $stamp = time;
my $msgcount = &Apache::lonmsg::get_uniq();
my $sender_lh = &Apache::loncommon::user_lang($uname,$udom,$cid);
- $subject = &Apache::lonlocal::mt_user($sender_lh,$rawsubj);
+ $subject = &mt_user($sender_lh,$rawsubj);
$message = '';
foreach my $item (@rawmsg) {
if (ref($item) eq 'HASH') {
- $message .= &Apache::lonlocal::mt_user($sender_lh,$item->{mt},@{$item->{args}})."\n";
+ $message .= &mt_user($sender_lh,$item->{mt},@{$item->{args}})."\n";
}
}
&Apache::lonmsg::process_sent_mail($subject,'',$numsent,$stamp,$uname,$udom,$msgcount,$cid,$$,$message,
@@ -322,41 +322,41 @@ sub send_selfserve_notification {
foreach my $recip (sort(keys(%{$msgcc}))) {
my ($ccname,$ccdom) = split(/:/,$recip);
my $recip_lh = &Apache::loncommon::user_lang($ccname,$ccdom,$cid);
- my $subject = &Apache::lonlocal::mt_user($sender_lh,$rawsubj);
+ my $subject = &mt_user($sender_lh,$rawsubj);
my $message = '';
foreach my $item (@rawmsg) {
if (ref($item) eq 'HASH') {
- $message .= &Apache::lonlocal::mt_user($sender_lh,$item->{mt},
- @{$item->{args}})."\n";
+ $message .= &mt_user($sender_lh,$item->{mt},
+ @{$item->{args}})."\n";
}
}
if ($context eq 'coursemanagers') {
if ($approvedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved enrollments:')."\n".$approvedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Approved enrollments:')."\n".$approvedlist;
}
if ($rejectedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Rejected enrollments:')."\n".$rejectedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Rejected enrollments:')."\n".$rejectedlist;
}
} elsif ($context eq 'domainmanagers') {
if ($approvedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved course requests:')."\n".$approvedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Approved course requests:')."\n".$approvedlist;
}
if ($rejectedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Rejected course requests:')."\n".$rejectedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Rejected course requests:')."\n".$rejectedlist;
}
} elsif ($context eq 'authormanagers') {
if ($approvedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved author role requests:')."\n".$approvedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Approved author role requests:')."\n".$approvedlist;
}
if ($rejectedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Rejected author role requests:')."\n".$rejectedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Rejected author role requests:')."\n".$rejectedlist;
}
} elsif ($context eq 'usernamemanagers') {
if ($approvedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved LON-CAPA account requests:')."\n".$approvedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Approved LON-CAPA account requests:')."\n".$approvedlist;
}
if ($rejectedlist) {
- $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Rejected LON-CAPA account requests:')."\n".$rejectedlist;
+ $message .= "\n\n".&mt_user($sender_lh,'Rejected LON-CAPA account requests:')."\n".$rejectedlist;
}
}
$status .= &Apache::lonmsg::user_normal_msg($ccname,$ccdom,$subject,$message,undef,undef,undef,1,
@@ -506,7 +506,7 @@ sub build_queue_display {
my %crstypes;
my $output = &Apache::loncommon::start_data_table().
&Apache::loncommon::start_data_table_header_row();
- unless (($context eq 'pending') || ($context eq 'displaypending') || ($context eq 'helpdesk')) {
+ unless (($context eq 'pending') || ($context eq 'displaypending') || ($context eq 'helpdesk')) {
$output .= '
'.&mt('Action').' | ';
}
$output .= ''.&mt('Requestor').' | ';
@@ -528,6 +528,7 @@ sub build_queue_display {
unofficial => 'Unofficial course',
community => 'Community',
textbook => 'Textbook course',
+ placement => 'Placement test',
);
$output .= ''.&mt('Type').' | '.
''.&mt('Date requested').' | '.
@@ -609,7 +610,7 @@ sub build_queue_display {
} elsif ($context eq 'requestusername') {
$row .= ''.$showtime.' | '."\n".
''.$detailslink.' | '."\n";
- } else {
+ } else {
if ($context eq 'pending' || $context eq 'displaypending' || $context eq 'stillpending') {
$row .= ''.$instcode.' | '."\n";
} else {
@@ -656,7 +657,7 @@ sub update_request_queue {
$beneficiary = 'enroller';
$cid = $env{'request.course.id'};
$crstype = lc(&Apache::loncommon::course_type());
- $firsturl = &course_portal_url($cnum,$cdom);
+ $firsturl = &Apache::lonnet::course_portal_url($cnum,$cdom);
%requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);
$access_start = $env{'course.'.$cid.'.internal.selfenroll_start_access'};
$access_end = $env{'course.'.$cid.'.internal.selfenroll_end_access'};
@@ -685,7 +686,7 @@ sub update_request_queue {
}
}
my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom);
- $firsturl = &course_portal_url($domconfiguser,$cdom);
+ $firsturl = &Apache::lonnet::course_portal_url($domconfiguser,$cdom);
$approvedmsg = [{
mt => 'Your request for Authoring Space has been approved.',
},
@@ -710,7 +711,7 @@ sub update_request_queue {
}
}
my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom);
- $firsturl = &course_portal_url($domconfiguser,$cdom);
+ $firsturl = &Apache::lonnet::course_portal_url($domconfiguser,$cdom);
$approvedmsg = [{
mt => 'Your request for a LON-CAPA account has been approved.',
},
@@ -981,7 +982,9 @@ sub update_request_queue {
$ownerdom,$ownername);
if ((ref($history{'details'}) eq 'HASH') &&
($history{'disposition'} eq $queue)) {
- my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,$code,%customitems);
+ my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,
+ $keysmsg,$code,%customitems);
+ my $clonemsg = [];
my $fullname = '';
my $inprocess = &Apache::lonnet::auto_crsreq_update($cdom,$cnum,$crstype,'process',$ownername,
$ownerdom,$fullname,$coursedesc);
@@ -995,8 +998,8 @@ sub update_request_queue {
if ($history{'details'}{'clonecrs'}) {
$customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'};
}
- my ($result,$postprocess) = &course_creation($cdom,$cnum,$context,$history{'details'},\$logmsg,
- \$newusermsg,\$addresult,\$enrollcount,
+ my ($result,$postprocess) = &course_creation($cdom,$cnum,$context,$history{'details'},
+ \$logmsg,$clonemsg,\$newusermsg,\$addresult,\$enrollcount,
\$response,\$keysmsg,\%domdefs,$longroles,\$code,\%customitems);
if ($result eq 'created') {
if ($crstype eq 'community') {
@@ -1004,11 +1007,14 @@ sub update_request_queue {
} else {
$approvedmsg = $approvalmsg{'course'};
}
- my $firsturl = &course_portal_url($cnum,$cdom);
+ my $firsturl = &Apache::lonnet::course_portal_url($cnum,$cdom);
if (ref($approvedmsg) eq 'ARRAY') {
if (ref($approvedmsg->[1]) eq 'HASH') {
$approvedmsg->[1]->{'args'} = [$firsturl];
}
+ if ((ref($clonemsg) eq 'ARRAY') && (@{$clonemsg})) {
+ push(@{$approvedmsg},@{$clonemsg});
+ }
if ($code) {
push(@{$approvedmsg},
{
@@ -1588,22 +1594,6 @@ sub update_request_queue {
return $output;
}
-sub course_portal_url {
- my ($cnum,$cdom) = @_;
- my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
- my $hostname = &Apache::lonnet::hostname($chome);
- my $protocol = $Apache::lonnet::protocol{$chome};
- $protocol = 'http' if ($protocol ne 'https');
- my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);
- my $firsturl;
- if ($domdefaults{'portal_def'}) {
- $firsturl = $domdefaults{'portal_def'};
- } else {
- $firsturl = $protocol.'://'.$hostname;
- }
- return $firsturl;
-}
-
sub get_student_counts {
my ($cdom,$cnum) = @_;
my (%idx,%stucounts);
@@ -1623,18 +1613,19 @@ sub get_student_counts {
}
sub course_creation {
- my ($dom,$cnum,$context,$details,$logmsg,$newusermsg,$addresult,$enrollcount,$output,
- $keysmsg,$domdefs,$longroles,$coderef,$customhash) = @_;
+ my ($dom,$cnum,$context,$details,$logmsg,$clonemsg,$newusermsg,$addresult,
+ $enrollcount,$output,$keysmsg,$domdefs,$longroles,$coderef,$customhash,
+ $callercontext,$user_lh) = @_;
unless ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH') &&
(ref($longroles) eq 'HASH')) {
return ('error: Invalid request');
}
- my ($result,$ownername,$ownerdom,$autocoowner);
+ my ($result,$ownername,$ownerdom);
my $crstype = $details->{'crstype'};
my $coursedesc = $details->{'cdescr'};
my $accessstart = $details->{'accessstart'};
my $accessend = $details->{'accessend'};
- my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses','autoenroll'],$dom);
+ my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom);
if (ref($domconfig{'requestcourses'}) eq 'HASH') {
if (ref($domconfig{'requestcourses'}{'uniquecode'}) eq 'HASH') {
if ($domconfig{'requestcourses'}{'uniquecode'}{$crstype}) {
@@ -1642,9 +1633,6 @@ sub course_creation {
}
}
}
- if (ref($domconfig{'autoenroll'}) eq 'HASH') {
- $autocoowner = $domconfig{'autoenroll'}{'co-owners'};
- }
if ($context eq 'domain') {
$ownername = $details->{'owner'};
$ownerdom = $details->{'domain'};
@@ -1661,8 +1649,9 @@ sub course_creation {
}
my %reqdetails = &build_batchcreatehash($dom,$cnum,$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,$coderef);
+ \%reqdetails,$longroles,$logmsg,$clonemsg,$newusermsg,$addresult,
+ $enrollcount,$output,$keysmsg,$ownerdom,$ownername,$cnum,$crstype,
+ $coderef,$callercontext,$user_lh);
my $postprocess;
if ($cid eq "/$dom/$cnum") {
$result = 'created';
@@ -1673,66 +1662,6 @@ sub course_creation {
$postprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,$result,$ownername,
$ownerdom,$fullname,$coursedesc,$code,
$accessstart,$accessend,$customhash);
- if ($autocoowner) {
- my $instcode = $details->{'instcode'};
- if (($instcode ne '') && (ref($reqdetails{'users'}) eq 'HASH')) {
- my @posscoowners;
- my $now = time;
- foreach my $person (keys(%{$reqdetails{'users'}})) {
- my ($uname,$udom) = split(/:/,$person);
- next if (($udom ne $dom) || (($uname eq $ownername) && ($udom eq $ownerdom)));
- if ((&Apache::lonnet::homeserver($uname,$udom,1) ne 'no_host') &&
- (ref($reqdetails{'users'}{$person}) eq 'HASH')) {
- if ((grep(/^cc$/,keys(%{$reqdetails{'users'}{$person}}))) &&
- (ref($reqdetails{'users'}{$person}{'cc'}) eq 'HASH')) {
- my $start = $reqdetails{'users'}{$person}{'cc'}{'start'};
- my $end = $reqdetails{'users'}{$person}{'cc'}{'end'};
- if ((($start eq '') || ($start <= $now)) &&
- (($end eq '') || ($end >= $now))) {
- push(@posscoowners,$person);
- }
- }
- }
- }
- my @coowners;
- if (@posscoowners) {
- foreach my $user (@posscoowners) {
- my ($checkcc,$desc) =
- &Apache::lonnet::auto_validate_instcode($cnum,$dom,$instcode,$user);
- unless ($checkcc eq 'valid') {
- if (ref($reqdetails{'crosslists'}) eq 'HASH') {
- foreach my $key (keys(%{$reqdetails{'crosslists'}})) {
- if (ref($reqdetails{'crosslists'}{$key}) eq 'HASH') {
- my $inst_crosslist = $reqdetails{'crosslists'}{$key}{'inst'};
- if ($inst_crosslist ne '') {
- $checkcc =
- &Apache::lonnet::auto_validate_inst_crosslist($cnum,$dom,$instcode,
- $inst_crosslist,$user);
- last if ($checkcc eq 'valid');
- }
- }
- }
- }
- }
- if ($checkcc eq 'valid') {
- if (@coowners > 0) {
- unless (grep(/^\Q$user\E$/,@coowners)) {
- push(@coowners,$user);
- }
- } else {
- push(@coowners,$user);
- }
- }
- }
- }
- if (@coowners > 0) {
- my $chome = &Apache::lonnet::homeserver($cnum,$dom);
- unless ($chome eq 'no_host') {
- &Apache::lonnet::store_coowners($dom,$cnum,$chome,'',@coowners);
- }
- }
- }
- }
} else {
$result = 'error: '.$cid;
}
@@ -1742,7 +1671,7 @@ sub course_creation {
sub build_batchcreatehash {
my ($dom,$cnum,$context,$details,$owneremail,$domdefs) = @_;
my %batchhash;
- my @items = qw{owner domain coursehome clonecrs clonedom datemode dateshift enrollstart enrollend accessstart accessend sections users uniquecode};
+ my @items = qw{owner domain coursehome clonecrs clonedom datemode dateshift tinyurls enrollstart enrollend accessstart accessend sections users uniquecode};
if ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) {
my $emailenc = &escape($owneremail);
my $owner = $details->{'owner'}.':'.$details->{'domain'};
@@ -1776,12 +1705,16 @@ sub build_batchcreatehash {
$batchhash{'authparam'} = $domdefs->{'auth_arg_def'};
if ($details->{'crstype'} eq 'community') {
$batchhash{'crstype'} = 'Community';
+ } elsif ($details->{'crstype'} eq 'placement') {
+ $batchhash{'crstype'} = 'Placement';
} else {
if ($details->{'crstype'} eq 'textbook') {
if ($details->{'clonecrs'} && $details->{'clonedom'}) {
my %clonedfrom = &Apache::lonnet::coursedescription($details->{'clonedom'}.'_'.$details->{'clonecrs'});
$batchhash{'textbook'} = $clonedfrom{'description'};
}
+ } elsif ($details->{'crstype'} eq 'lti') {
+ $batchhash{'lti'} = 1;
}
$batchhash{'crstype'} = 'Course';
}
@@ -2108,9 +2041,10 @@ sub process_official_reqs {
$longroles{$role}=&Apache::lonnet::plaintext($role);
}
my %domdefs = &Apache::lonnet::get_domain_defaults($dom);
- my ($output,$linefeed);
+ my ($output,$linefeed,$user_lh);
if ($context eq 'auto') {
$linefeed = "\n";
+ $user_lh = &Apache::loncommon::user_lang($dcname,$dcdom);
} else {
$linefeed = '
'."\n";
}
@@ -2172,6 +2106,7 @@ sub process_official_reqs {
$reqstatus = $disposition;
if ($disposition eq 'process') {
my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,$code);
+ my $clonemsg = [];
my %customitems;
my $fullname = &Apache::loncommon::plainname($ownername,$ownerdom);
my $inprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,'process',$ownername,
@@ -2187,15 +2122,16 @@ sub process_official_reqs {
$customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'};
}
my ($result,$postprocess) =
- &course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,\$newusermsg,\$addresult,
- \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,\$code,\%customitems);
+ &course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,$clonemsg,\$newusermsg,
+ \$addresult,\$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,
+ \$code,\%customitems,$context,$user_lh);
if ($result eq 'created') {
$disposition = 'created';
$reqstatus = 'created';
my $cid = $dom.'_'.$cnum;
push(@{$newcids{$instcode}},$cid);
if ($dcname && $dcdom) {
- my $firsturl = &course_portal_url($cnum,$dom);
+ my $firsturl = &Apache::lonnet::course_portal_url($cnum,$dom);
my $beneficiary = 'pendingrequestor';
my $now = time;
my $owner = $ownername.':'.$ownerdom;
@@ -2203,14 +2139,20 @@ sub process_official_reqs {
[{
mt => 'Your requested course: [_1], (queued pending validation) has now been created.',
args => [$cdescr],
- },
+ }];
+ if ((ref($clonemsg) eq 'ARRAY') && (@{$clonemsg})) {
+ push(@{$approvedmsg},@{$clonemsg});
+ }
+ push(@{$approvedmsg},
{
mt => 'Visit [_1] to log-in and access the course.',
args => [$firsturl],
},
{
- mt => 'If currently logged-in to LON-CAPA, log-out and log-in again to select your new course role.'
- }];
+ mt => 'If currently logged-in to LON-CAPA, log-out and log-in again to select your new course role.',
+ args => [],
+ }
+ );
my $sender = $dcname.':'.$dcdom;
if (ref($postprocess) eq 'HASH') {
if (ref($postprocess->{'createdmsg'}) eq 'ARRAY') {
@@ -2316,7 +2258,7 @@ sub postprocess_crsenv {
my %needcrsidput = (
'internal.selfenroll_types' => 1,
'internal.selfenroll_start_date' => 1,
- 'internal.selfenroll_end_date' => 1,
+ 'internal. selfenroll_end_date' => 1,
);
my (@needupdate,%newcrsenv);
foreach my $key (keys(%{$postprocessenv})) {