--- loncom/interface/loncoursequeueadmin.pm	2021/12/09 18:14:44	1.52.2.5
+++ loncom/interface/loncoursequeueadmin.pm	2023/07/09 17:35:52	1.52.2.5.2.2
@@ -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.5 2021/12/09 18:14:44 raeburn Exp $
+# $Id: loncoursequeueadmin.pm,v 1.52.2.5.2.2 2023/07/09 17:35:52 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,
@@ -656,7 +656,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 +685,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 +710,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 +981,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 +997,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 +1006,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 +1593,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,8 +1612,9 @@ 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');
@@ -1658,8 +1648,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';
@@ -1679,7 +1670,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'};
@@ -1719,6 +1710,8 @@ sub build_batchcreatehash {
                     my %clonedfrom = &Apache::lonnet::coursedescription($details->{'clonedom'}.'_'.$details->{'clonecrs'});
                     $batchhash{'textbook'} = $clonedfrom{'description'};
                 }
+            } elsif ($details->{'crstype'} eq 'lti') {
+                $batchhash{'lti'} = 1;
             }
             $batchhash{'crstype'} = 'Course';
         }
@@ -2045,9 +2038,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 = '<br />'."\n";
     }
@@ -2109,6 +2103,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,
@@ -2124,15 +2119,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;
@@ -2140,14 +2136,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') {