--- loncom/interface/loncreatecourse.pm	2020/05/22 15:05:30	1.173
+++ loncom/interface/loncreatecourse.pm	2021/08/31 17:23:27	1.176
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.173 2020/05/22 15:05:30 raeburn Exp $
+# $Id: loncreatecourse.pm,v 1.176 2021/08/31 17:23:27 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -80,7 +80,6 @@ use Apache::loncommon;
 use Apache::londocs;
 use Apache::lonlocal;
 use Apache::lonuserutils;
-use Apache::lonclonecourse;
 use LONCAPA::batchcreatecourse;
 use LONCAPA qw(:DEFAULT :match);
 
@@ -105,7 +104,7 @@ sub print_course_creation_page {
     foreach my $server (sort(keys(%host_servers))) {
         $course_home .= qq{<option value="$server"};
         if ($server eq $Apache::lonnet::perlvar{'lonHostID'}) {
-            $course_home .= " selected ";
+            $course_home .= ' selected="selected"';
         }
         $course_home .= qq{>$server $host_servers{$server}</option>};
     }
@@ -192,6 +191,10 @@ function validate(formname) {
                     'ncd'  => "Do not clone date parameters",
                     'prd'  => 'Clone date parameters as-is',
                     'shd'  => 'Shift date parameters by number of days',
+                    'dpl'  => 'URL shortcuts (for deep linking)',
+                    'nsl'  => 'Do not clone URL shortcuts',
+                    'tsl'  => 'Transfer URL shortcuts from existing course to new course',
+                    'csl'  => 'Create new URL shortcuts in new course',
                     'assp' => "Assessment Parameters",
                     'oaas' => "Open all assessments",
                     'sta'  => "starting from:",
@@ -257,6 +260,8 @@ function validate(formname) {
         $lt{'cc'}  = &mt('(will be assigned Coordinator role)');
         $lt{'cgrs'} = &mt('Community Group Settings');
         $lt{'cgrq'} = &mt('Set a quota for the total disk space available for storage of community group portfolio files');
+        $lt{'tsl'} = &mt('Transfer URL shortcuts from existing community to new community');
+        $lt{'csl'} = &mt('Create new URL shortcuts in new community');
     } elsif ($crstype eq 'Placement') {
         $lt{'cinf'} = &mt('Placement Test Information');
         $lt{'ctit'} = &mt('Placement Test Title');
@@ -272,6 +277,8 @@ function validate(formname) {
     }
     my $js = <<END;
 <script type="text/javascript">
+// <![CDATA[
+
 var editbrowser = null;
 function openbrowser(formname,elementname) {
     var url = '/res/?';
@@ -290,6 +297,8 @@ function openbrowser(formname,elementnam
     editbrowser.focus();
 }
 $javascript_validations
+
+// ]]>
 </script>
 $coursebrowserjs
 END
@@ -309,7 +318,7 @@ END
 					    'Create_Courses');
     $r->print($start_page.$crumbs);
 
-    $r->print('<form action="/adm/createcourse" method="post" name="ccrs" action=""><div class="LC_createcourse">'
+    $r->print('<form action="/adm/createcourse" method="post" name="ccrs"><div class="LC_createcourse">'
              .&Apache::lonhtmlcommon::start_pick_box()
 
              .&Apache::lonhtmlcommon::row_headline()
@@ -379,6 +388,7 @@ END
                      .'<span class="LC_nobreak">'
                      .'<input type="radio" name="uniquecode" value="1" />'.&mt('Yes').('&nbsp;'x2)
                      .'<input type="radio" name="uniquecode" value="0" checked="checked" />'.&mt('No')
+                     .'</span>'
                      .&Apache::lonhtmlcommon::row_closure()
                  );
     }
@@ -425,11 +435,12 @@ END
                  .'<input type="radio" name="firstres" value="nav" />'.$lt{'navi'}
                  .'</label>');
     }
+    my $tinyurlhelp=&Apache::loncommon::help_open_topic('Clone_Tiny_URLs');
     $r->print('<br />('.$lt{'stco'}.')'
                  .&Apache::lonhtmlcommon::row_closure(1)
                  .&Apache::lonhtmlcommon::end_pick_box()
 
-                 .'<td>&nbsp;</td>'
+                 .'</td><td>&nbsp;</td>'
 
                  # Clone Course:
                  .'<td>'
@@ -454,7 +465,18 @@ END
                  .'<label>'
                  .'<input type="radio" name="datemode" value="shift" checked="checked" /> '.$lt{'shd'}
                  .'</label>'
-                 .' <input type="text" size="5" name="dateshift" value="365" />'
+                 .' <input type="text" size="5" name="dateshift" value="364" />'
+                 .&Apache::lonhtmlcommon::row_closure()
+                 .&Apache::lonhtmlcommon::row_title($tinyurlhelp.$lt{'dpl'})
+                 .'<label>'
+                 .'<input type="radio" name="tinyurls" value="delete" /> '.$lt{'nsl'}
+                 .'</label><br />'
+                 .'<label>'
+                 .'<input type="radio" name="tinyurls" value="transfer" /> '.$lt{'tsl'}
+                 .'</label><br />'
+                 .'<label>'
+                 .'<input type="radio" name="tinyurls" value="create" checked="checked" /> '.$lt{'csl'}
+                 .'</label>'
                  .&Apache::lonhtmlcommon::row_closure()
                  .&Apache::lonhtmlcommon::row_headline()
                  .'<span class="LC_info">'.$lt{'asov'}.'</span>'
@@ -482,7 +504,7 @@ END
                  .'<span class="LC_nobreak">'
                  .'<label><input type="radio" name="openall" value="0" checked="checked" />'.$lt{'no'}.'</label>'.('&nbsp;'x2)
                  .'<label><input type="radio" name="openall" value="1" />'.$lt{'yes'}.'</label>'.',&nbsp;'
-                 .$lt{'sta'}.' '.$openallfrom
+                 .$lt{'sta'}.'&nbsp;'.$openallfrom.'</span>'
                  .&Apache::lonhtmlcommon::row_closure()
 
                  .&Apache::lonhtmlcommon::row_headline()
@@ -596,7 +618,8 @@ END
 <p>
 <input type="hidden" name="prevphase" value="courseone" />
 <input type="hidden" name="phase" value="coursetwo" />
-<input type="button" onclick="verify_message(this.form)" value="'.$lt{'opco'}.'" />'
+<input type="button" onclick="verify_message(this.form)" value="'.$lt{'opco'}.'" />
+</p>'
         );
     } elsif ($crstype eq 'Community') {
         $r->print('
@@ -680,6 +703,7 @@ sub create_course {
                clonedomain => $env{'form.clonedomain'},
                datemode => $env{'form.datemode'},
                dateshift => $env{'form.dateshift'},
+               tinyurls  => $env{'form.tinyurls'},
                crsid => $env{'form.crsid'},
                curruser => $env{'user.name'}.':'.$env{'user.domain'},
                crssections => $env{'form.crssections'},
@@ -747,12 +771,20 @@ sub create_course {
         return;
     }
     my ($courseid,$crsudom,$crsunum,$code);
-    my ($success,$output) = 
+    my ($success,$output,$clonemsgref) = 
 	&Apache::loncommon::construct_course($args,\$logmsg,\$courseid,
 					     \$crsudom,\$crsunum,
 					     $env{'user.domain'},
 					     $env{'user.name'},'dc_create',undef,undef,\$code);
     $r->print($output);
+    if (ref($clonemsgref) eq 'ARRAY') {
+        my $user_lh = &Apache::loncommon::user_lang($env{'user.name'},$env{'user.domain'});
+        foreach my $item (@{$clonemsgref}) {
+            if (ref($item) eq 'HASH') {
+                $r->print(&mt($item->{mt},@{$item->{args}}).'<br />'."\n");
+            }
+        }
+    }
     if ($success) {
         #
 	# Make the requested user a course coordinator or group coordinator
@@ -907,7 +939,7 @@ sub process_batchfile {
     my $uname = $env{'user.name'};
     my $udom = $env{'user.domain'};
     my $dir = &LONCAPA::tempdir().'addcourse';
-    my ($result,$logmsg,$keysmsg,$codesref,$instcodesref);
+    my ($result,$logmsg,$clonemsg,$keysmsg,$codesref,$instcodesref);
     if (($defdom =~ /^$match_domain$/) && ($uname =~ /^$match_username$/) && ($udom =~/^$match_domain$/)) {
         my $batchfilepath=&Apache::lonnet::userfileupload('coursecreatorxml',undef,
                                                           'batchupload',undef,undef,
@@ -921,7 +953,7 @@ sub process_batchfile {
                     if ((defined($filename)) && (defined($batchdir))) {
                         my @requests = ($filename);
                         my %courseids = ();
-                        ($result,$logmsg,$keysmsg,$codesref,$instcodesref) =
+                        ($result,$logmsg,$clonemsg,$keysmsg,$codesref,$instcodesref) =
                             &LONCAPA::batchcreatecourse::create_courses(
                                        \@requests,\%courseids,'web',$defdom,
                                        $uname,$udom);
@@ -943,7 +975,10 @@ sub process_batchfile {
                                 &Apache::lonnet::devalidate_cache_new('instcats',$defdom);
                                 $updatecats = 1;
                             } 
-                            &register_cleanups($r,$defdom,$updatecats); 
+                            &register_cleanups($r,$defdom,$updatecats);
+                        }
+                        if ($clonemsg) {
+                            $clonemsg = '<p class="LC_info">'.$clonemsg.'</p>'."\n";
                         }
                     }
                 } else {
@@ -961,7 +996,7 @@ sub process_batchfile {
     }
     $r->print(&Apache::loncommon::start_page('Create a New Course, Community or Placement Test').
               &Apache::lonhtmlcommon::breadcrumbs('Creation Outcome','Create_Course',undef,'Create_Courses').
-              $logmsg.$result.'<br /><a href="/adm/createcourse">'.
+              $logmsg.$clonemsg.$result.'<br /><a href="/adm/createcourse">'.
               &mt('Creation options menu').'</a>'.
               &Apache::loncommon::end_page());
  
@@ -1550,7 +1585,9 @@ sub handler {
            my $start_page=&Apache::loncommon::start_page('Requests Validation Result',$js);
            my $crumbs = &Apache::lonhtmlcommon::breadcrumbs('Validation Attempted','Course_Requests',undef,'Course_Requests');
            $r->print($start_page.$crumbs."\n".'<div>'.
-                     &Apache::loncoursequeueadmin::process_official_reqs('domain',$env{'request.role.domain'}).'</div>'.
+                     &Apache::loncoursequeueadmin::process_official_reqs('domain',$env{'request.role.domain'},
+                                                                         $env{'user.name'},$env{'user.domain'}).
+                     '</div>'.
                      &Apache::loncommon::end_page());
        } elsif (($env{'form.phase'} eq 'creationlog') && ($show_all_choices)) {
            &Apache::lonhtmlcommon::add_breadcrumb